[GoldenEye] [ONOS-4163] Add provider service API

Change-Id: I363471d3a69a1c67d57d853fb84d42551eb27b7a
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProviderService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProviderService.java
index bb158bf..dc5ef6e 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProviderService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProviderService.java
@@ -17,6 +17,8 @@
 package org.onosproject.incubator.net.tunnel;
 
 import com.google.common.annotations.Beta;
+
+import org.onosproject.incubator.net.tunnel.Tunnel.State;
 import org.onosproject.net.provider.ProviderService;
 
 /**
@@ -34,6 +36,16 @@
     TunnelId tunnelAdded(TunnelDescription tunnel);
 
     /**
+     * Signals that the provider has added a tunnel with a status which may not
+     * be default, hence is provided as an input.
+     *
+     * @param tunnel tunnel information
+     * @param state tunnel working status
+     * @return tunnel identity
+     */
+    TunnelId tunnelAdded(TunnelDescription tunnel, State state);
+
+    /**
      * Signals that the provider has removed a tunnel.
      *
      * @param tunnel tunnel information
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/tunnel/impl/TunnelManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/tunnel/impl/TunnelManager.java
index d316388..00e6f14 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/tunnel/impl/TunnelManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/tunnel/impl/TunnelManager.java
@@ -25,6 +25,7 @@
 import org.onosproject.core.ApplicationId;
 import org.onosproject.incubator.net.tunnel.DefaultTunnel;
 import org.onosproject.incubator.net.tunnel.Tunnel;
+import org.onosproject.incubator.net.tunnel.Tunnel.State;
 import org.onosproject.incubator.net.tunnel.Tunnel.Type;
 import org.onosproject.incubator.net.tunnel.TunnelAdminService;
 import org.onosproject.incubator.net.tunnel.TunnelDescription;
@@ -309,6 +310,20 @@
         }
 
         @Override
+        public TunnelId tunnelAdded(TunnelDescription tunnel, State state) {
+            Tunnel storedTunnel = new DefaultTunnel(provider().id(),
+                                                    tunnel.src(), tunnel.dst(),
+                                                    tunnel.type(),
+                                                    state,
+                                                    tunnel.groupId(),
+                                                    tunnel.id(),
+                                                    tunnel.tunnelName(),
+                                                    tunnel.path(),
+                                                    tunnel.annotations());
+            return store.createOrUpdateTunnel(storedTunnel);
+        }
+
+        @Override
         public void tunnelUpdated(TunnelDescription tunnel) {
             Tunnel storedTunnel = new DefaultTunnel(provider().id(),
                                                     tunnel.src(), tunnel.dst(),
diff --git a/providers/ovsdb/tunnel/src/test/java/org/onosproject/ovsdb/provider/tunnel/OvsdbTunnelProviderTest.java b/providers/ovsdb/tunnel/src/test/java/org/onosproject/ovsdb/provider/tunnel/OvsdbTunnelProviderTest.java
index 03642f4..e2825b0 100644
--- a/providers/ovsdb/tunnel/src/test/java/org/onosproject/ovsdb/provider/tunnel/OvsdbTunnelProviderTest.java
+++ b/providers/ovsdb/tunnel/src/test/java/org/onosproject/ovsdb/provider/tunnel/OvsdbTunnelProviderTest.java
@@ -38,6 +38,7 @@
 import org.onosproject.incubator.net.tunnel.TunnelProvider;
 import org.onosproject.incubator.net.tunnel.TunnelProviderRegistry;
 import org.onosproject.incubator.net.tunnel.TunnelProviderService;
+import org.onosproject.incubator.net.tunnel.Tunnel.State;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.DefaultLink;
@@ -166,6 +167,11 @@
         }
 
         @Override
+        public TunnelId tunnelAdded(TunnelDescription tunnel, State state) {
+            return null;
+        }
+
+        @Override
         public void tunnelRemoved(TunnelDescription tunnel) {
             tunnelSet.remove(tunnel);
         }
diff --git a/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java b/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java
index 0de914c..9f15117 100644
--- a/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java
+++ b/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java
@@ -23,6 +23,7 @@
 import org.onosproject.incubator.net.tunnel.TunnelProvider;
 import org.onosproject.incubator.net.tunnel.TunnelProviderRegistry;
 import org.onosproject.incubator.net.tunnel.TunnelProviderService;
+import org.onosproject.incubator.net.tunnel.Tunnel.State;
 import org.onosproject.net.provider.ProviderId;
 
 public class TunnelProviderRegistryAdapter implements TunnelProviderRegistry {
@@ -56,6 +57,11 @@
         }
 
         @Override
+        public TunnelId tunnelAdded(TunnelDescription tunnel, State state) {
+            return null;
+        }
+
+        @Override
         public void tunnelRemoved(TunnelDescription tunnel) {
         }