[ONOS-5597] TE Topology NBI app YANG notificatin support

Change-Id: Ia5c7fe9d54f9d0104d05351cd0837c28117f3ccd
diff --git a/apps/tenbi/topology/src/main/java/org/onosproject/tenbi/topology/impl/TeTopologyNbiManager.java b/apps/tenbi/topology/src/main/java/org/onosproject/tenbi/topology/impl/TeTopologyNbiManager.java
index a014a48..1cd53ad 100644
--- a/apps/tenbi/topology/src/main/java/org/onosproject/tenbi/topology/impl/TeTopologyNbiManager.java
+++ b/apps/tenbi/topology/src/main/java/org/onosproject/tenbi/topology/impl/TeTopologyNbiManager.java
@@ -15,8 +15,6 @@
  */
 package org.onosproject.tenbi.topology.impl;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -24,6 +22,8 @@
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
 import org.onosproject.event.AbstractListenerManager;
+import org.onosproject.tetopology.management.api.TeTopologyEvent;
+import org.onosproject.tetopology.management.api.TeTopologyListener;
 import org.onosproject.tetopology.management.api.TeTopologyService;
 import org.onosproject.teyang.api.OperationType;
 import org.onosproject.teyang.utils.topology.NetworkConverter;
@@ -34,30 +34,31 @@
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.Networks;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NetworksState;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.IetfNetworkTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
-               .IetfNetworkTopologyOpParam;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
-               .IetfNetworkTopologyService;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
+        .rev20151208.IetfNetworkTopologyOpParam;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
+        .rev20151208.IetfNetworkTopologyService;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.IetfTeTopology;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.IetfTeTopologyOpParam;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-               .IetfTeTopologyService;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-               .ietftetopology.IetfTeTopologyEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-               .ietftetopology.IetfTeTopologyEventListener;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.IetfTeTopologyService;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
+        .IetfTeTopologyEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
+        .IetfTeTopologyEventListener;
 import org.onosproject.yms.ymsm.YmsService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 /**
  * The IETF TE Topology NBI Manager implementation.
  */
 @Component(immediate = true)
 @Service
 public class TeTopologyNbiManager
-    extends  AbstractListenerManager<IetfTeTopologyEvent, IetfTeTopologyEventListener>
-    implements IetfNetworkService, IetfNetworkTopologyService, IetfTeTopologyService {
+        extends AbstractListenerManager<IetfTeTopologyEvent, IetfTeTopologyEventListener>
+        implements IetfNetworkService, IetfNetworkTopologyService, IetfTeTopologyService {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
@@ -67,18 +68,40 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected YmsService ymsService;
 
+
+    /**
+     * Activation helper function.
+     */
+    private void activateBasics() {
+        eventDispatcher.addSink(IetfTeTopologyEvent.class, listenerRegistry);
+    }
+
+    /**
+     * Deactivation helper function.
+     */
+    private void deactivateBasics() {
+        eventDispatcher.removeSink(IetfTeTopologyEvent.class);
+    }
+
     @Activate
     protected void activate() {
+        activateBasics();
+
         // Register 3 services with YMS.
         ymsService.registerService(this, IetfNetworkService.class, null);
         ymsService.registerService(this, IetfNetworkTopologyService.class, null);
         ymsService.registerService(this, IetfTeTopologyService.class, null);
 
+        // Listens to TE Topology events
+        teTopologyService.addListener(new InternalTeTopologyListener());
+
         log.info("Started");
     }
 
     @Deactivate
     protected void deactivate() {
+        deactivateBasics();
+
         // Unregister 3 services.
         ymsService.unRegisterService(this, IetfNetworkService.class);
         ymsService.unRegisterService(this, IetfNetworkTopologyService.class);
@@ -89,8 +112,6 @@
 
     @Override
     public IetfNetwork getIetfNetwork(IetfNetworkOpParam ietfNetwork) {
-        log.info("getIetfNetwork: input {}", ietfNetwork);
-
         checkNotNull(ietfNetwork, "getIetfNetwork: ietfNetwork cannot be null");
 
         // Get the entire data tree from TE Subsystem core.
@@ -100,17 +121,18 @@
         Networks networks = NetworkConverter.teSubsystem2YangNetworks(teNetworks, OperationType.QUERY);
         NetworksState networkStates = NetworkConverter.teSubsystem2YangNetworkStates(teNetworks, OperationType.QUERY);
 
-        IetfNetworkOpParam.IetfNetworkBuilder builder =  new IetfNetworkOpParam.IetfNetworkBuilder();
+        IetfNetworkOpParam.IetfNetworkBuilder builder = new IetfNetworkOpParam.IetfNetworkBuilder();
         IetfNetwork newNetwork = builder.networks(networks)
-                                        .networksState(networkStates)
-                                        .yangIetfNetworkOpType(OnosYangOpType.NONE)
-                                        .build();
+                .networksState(networkStates)
+                .yangIetfNetworkOpType(OnosYangOpType.NONE)
+                .build();
 
         // processSubtreeFiltering() filters the entire data tree based on the
         // user's query and returns the filtered data.
-        return ietfNetwork.processSubtreeFiltering(
-                                                   (IetfNetworkOpParam) newNetwork,
-                                                   false);
+        IetfNetwork result = ietfNetwork.processSubtreeFiltering(
+                (IetfNetworkOpParam) newNetwork,
+                false);
+        return result;
     }
 
     @Override
@@ -143,7 +165,7 @@
     @Override
     public IetfNetworkTopology getIetfNetworkTopology(IetfNetworkTopologyOpParam ietfNetworkTopology) {
         // unused methods.
-       return ietfNetworkTopology;
+        return ietfNetworkTopology;
     }
 
     @Override
@@ -162,4 +184,11 @@
         // unused methods.
     }
 
+    private class InternalTeTopologyListener implements TeTopologyListener {
+        @Override
+        public void event(TeTopologyEvent event) {
+            IetfTeTopologyEvent yangEvent = NetworkConverter.teTopoEvent2YangIetfTeTopoEvent(event);
+            post(yangEvent);
+        }
+    }
 }