Introducing the new YANG model for ietf-te-topology and modifying the converter utility
for TE-NBI app to match the latest YANG model.

Change-Id: I8b3a2c4204f9b91a402a8fdfeeb6ba74d7316a7a
diff --git a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java
index 1557d7d..436a9d0 100644
--- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java
+++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java
@@ -21,6 +21,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
 import org.onlab.packet.Ip4Address;
 import org.onosproject.tetopology.management.api.EncodingType;
@@ -30,10 +31,7 @@
 import org.onosproject.tetopology.management.api.TeTopologyKey;
 import org.onosproject.tetopology.management.api.TeTopologyService;
 import org.onosproject.tetopology.management.api.link.ElementType;
-import org.onosproject.tetopology.management.api.link.NetworkLink;
-import org.onosproject.tetopology.management.api.link.NetworkLinkKey;
 import org.onosproject.tetopology.management.api.link.TeLinkId;
-import org.onosproject.tetopology.management.api.link.TeLinkTpGlobalKey;
 import org.onosproject.tetopology.management.api.link.TePathAttributes;
 import org.onosproject.tetopology.management.api.link.UnderlayAbstractPath;
 import org.onosproject.tetopology.management.api.node.CommonNodeData;
@@ -49,6 +47,7 @@
 import org.onosproject.tetopology.management.api.node.TerminationPoint;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev20130715.ietfinettypes.DomainName;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NetworkId;
+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.NodeId;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.Network;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208
@@ -59,47 +58,48 @@
                .ietfnetwork.networks.network.node.DefaultSupportingNode;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208
                .ietfnetwork.networks.network.node.SupportingNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology.TpId;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
                .ietfnetworktopology.networks.network.node.AugmentedNdNode;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
                .ietfnetworktopology.networks.network.node.DefaultAugmentedNdNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.DefaultTeNodeEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.TeNodeEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.DefaultInformationSourceState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.InformationSourceState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.informationsourcestate.DefaultTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.informationsourcestate.Topology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.DefaultTeNodeEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.TeNodeEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.informationsourcepernodeattributes.DefaultInformationSourceState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.informationsourcepernodeattributes.InformationSourceState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.informationsourcepernodeattributes.informationsourcestate.DefaultTopology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.informationsourcepernodeattributes.informationsourcestate.Topology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
                .ietftetopology.networks.network.node.AugmentedNwNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
                .ietftetopology.networks.network.node.DefaultAugmentedNwNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.node.terminationpoint.AugmentedNtTerminationPoint;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.DefaultTe;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.DefaultTe.TeBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.Te;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.Config;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.DefaultConfig;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.DefaultState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.DefaultTunnelTerminationPoint;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.State;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.TunnelTerminationPoint;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconfigattributes.DefaultTeNodeAttributes;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconfigattributes.TeNodeAttributes;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconfigattributes.TeNodeAttributes.TeNodeAttributesBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.DefaultConnectivityMatrix;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.DefaultConnectivityMatrix.ConnectivityMatrixBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.connectivitymatrix.DefaultFrom;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.connectivitymatrix.DefaultTo;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeinfoattributes.DefaultUnderlayTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeinfoattributes.UnderlayTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodetunnelterminationcapability.DefaultTerminationCapability;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodetunnelterminationcapability.TerminationCapability;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.networks.network.node.terminationpoint.AugmentedNtTerminationPoint;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.DefaultTe;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.DefaultTe.TeBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.Te;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.te.Config;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.te.DefaultConfig;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.te.DefaultState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.te.DefaultTunnelTerminationPoint;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.te.State;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeaugment.te.TunnelTerminationPoint;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconfigattributes.DefaultTeNodeAttributes;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconfigattributes.TeNodeAttributes;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconfigattributes.TeNodeAttributes.TeNodeAttributesBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconnectivitymatrix.ConnectivityMatrices;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconnectivitymatrix.DefaultConnectivityMatrices;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconnectivitymatrix.DefaultConnectivityMatrices.ConnectivityMatricesBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconnectivitymatrix.connectivitymatrices.DefaultConnectivityMatrix;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconnectivitymatrix.connectivitymatrices.DefaultConnectivityMatrix.ConnectivityMatrixBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconnectivitymatrix.connectivitymatrices.connectivitymatrix.DefaultFrom;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconnectivitymatrix.connectivitymatrices.connectivitymatrix.DefaultTo;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeinfoattributes.DefaultUnderlayTopology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeinfoattributes.UnderlayTopology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodetunnelterminationattributes.DefaultLocalLinkConnectivities;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodetunnelterminationattributes.LocalLinkConnectivities;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.Srlg;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeAdminStatus;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeNodeId;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTopologyEventType;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTopologyId;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.tetopologyeventtype.TeTopologyEventTypeEnum;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev20130715.ietfyangtypes.DottedQuad;
 
@@ -176,6 +176,7 @@
                     te2YangConnectivityMatrix(TeNodeAttributesBuilder teNodeAttributesConfigBuilder,
                                               Map<Long, ConnectivityMatrix> connectivityMatrices) {
         ConnectivityMatrixBuilder connectivityMatrixConfigBuilder = DefaultConnectivityMatrix.builder();
+        ConnectivityMatricesBuilder yangConnectivityMatricesBuilder = DefaultConnectivityMatrices.builder();
         for (Map.Entry<Long, ConnectivityMatrix> teCmEntry :
             connectivityMatrices.entrySet()) {
             connectivityMatrixConfigBuilder = connectivityMatrixConfigBuilder
@@ -190,23 +191,21 @@
                                                   // one item in constrainingElements list
                           .tpRef(((TeLinkId) teCmEntry.getValue().constrainingElements().get(0)).value())
                                          .build());
-            teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
-                    .addToConnectivityMatrix(connectivityMatrixConfigBuilder
-                            .build());
+            // TODO: add more attributes to connectivityMatrixConfigBuilder--
+
+            yangConnectivityMatricesBuilder = yangConnectivityMatricesBuilder
+                    .addToConnectivityMatrix(connectivityMatrixConfigBuilder.build());
         }
+        teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
+                .connectivityMatrices(yangConnectivityMatricesBuilder.build());
         return teNodeAttributesConfigBuilder;
     }
 
     private static UnderlayTopology teNode2YangUnderlay(TeTopologyKey underlayTopology,
                                                         TeTopologyService teTopologyService) {
-        UnderlayTopology.UnderlayTopologyBuilder underlayBuilder = DefaultUnderlayTopology
-                .builder()
-                .teTopologyIdRef(TeTopologyId
-                        .fromString(String.valueOf(underlayTopology.topologyId())))
-                .clientIdRef(underlayTopology.clientId())
-                .providerIdRef(underlayTopology.providerId());
+        UnderlayTopology.UnderlayTopologyBuilder underlayBuilder = DefaultUnderlayTopology.builder();
 
-        underlayBuilder = underlayBuilder.networkIdRef(teTopologyService.networkId(underlayTopology));
+        underlayBuilder = underlayBuilder.networkRef(teTopologyService.networkId(underlayTopology));
 
         return underlayBuilder.build();
     }
@@ -264,12 +263,12 @@
             InformationSourceState.InformationSourceStateBuilder issBuilder = DefaultInformationSourceState.builder();
 
             Topology.TopologyBuilder topologyBuilder = DefaultTopology.builder();
-            topologyBuilder =
-                    topologyBuilder.clientIdRef(teSubsystemTeNode.sourceTeNodeId().clientId())
-                                   .providerIdRef(teSubsystemTeNode.sourceTeNodeId().providerId())
-                                   // is this correct? Why not sourceTeNodeId().teTopologyKey()?
-                                   .teTopologyIdRef(teSubsystemTeNode
-                                                    .sourceTeNodeId().topologyId());
+            topologyBuilder = topologyBuilder.nodeRef(teTopologyService
+                    .nodeKey(teSubsystemTeNode.sourceTeNodeId()).nodeId())
+                    .networkRef(teTopologyService
+                            .nodeKey(teSubsystemTeNode.sourceTeNodeId())
+                            .networkId());
+
             issBuilder = issBuilder.topology(topologyBuilder.build());
             yangStateBuilder.informationSourceState(issBuilder.build());
         }
@@ -319,13 +318,13 @@
         TunnelTerminationPoint.TunnelTerminationPointBuilder tunnelTpBuilder =
                 DefaultTunnelTerminationPoint.builder().tunnelTpId(ByteUtils.longToBytes(teTpId.longValue()));
 
-        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
             .ietftetopology.tenodeaugment.te.tunnelterminationpoint.Config.ConfigBuilder ttpConfigBuilder =
-        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+                        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
             .ietftetopology.tenodeaugment.te.tunnelterminationpoint.DefaultConfig.builder();
-        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
             .ietftetopology.tenodeaugment.te.tunnelterminationpoint.State.StateBuilder ttpStateBuilder =
-        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+                        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
             .ietftetopology.tenodeaugment.te.tunnelterminationpoint.DefaultState.builder();
 
         // Assuming teTunnelTp only has one interLayerLock
@@ -334,46 +333,22 @@
             ttpStateBuilder  = ttpStateBuilder.interLayerLockId(teTunnelTp.interLayerLockList().get(0));
         }
 
-        TerminationCapability.TerminationCapabilityBuilder
-                            tcapConfigBuilder = DefaultTerminationCapability.builder();
-        // TODO: retrieve more attributes from teTunnelTp and assign to tcapConfigBuilder.
+        // TODO: retrieve teTunnelTp.switchingLayer() and set it to  ttpConfigBuilder and ttpStateBuilder
+        // TODO: retrieve more attributes from teTunnelTp and assign to ttpConfigBuilder and ttpStateBuilder
         // For which ones we can do the conversion?
-        // FIXME: once new yang model is used, we can make llc from teTunnelTp.localLinkConnectivityList()
+
+        LocalLinkConnectivities.LocalLinkConnectivitiesBuilder
+            localLinkConnectivitiesBuilder = DefaultLocalLinkConnectivities.builder();
         if (teTunnelTp.localLinkConnectivityList() != null && !teTunnelTp.localLinkConnectivityList().isEmpty()) {
-            for (LocalLinkConnectivity llcn : teTunnelTp.localLinkConnectivityList()) {
-                TeLinkId telinkId = (TeLinkId) llcn.constrainingElements().get(0);
-                TeLinkTpGlobalKey globalKey = new TeLinkTpGlobalKey(teNodeKey, telinkId.value());
-                NetworkLinkKey netLinkKey = teTopologyService.linkKey(globalKey);
-                NetworkLink networkLink = teTopologyService
-                        .network(netLinkKey.networkId()).links().get(netLinkKey.linkId());
-                tcapConfigBuilder = tcapConfigBuilder
-                        .linkTp(TpId.fromString(networkLink.source().tpId()
-                                .toString()));
-                // convert teLinkId to networkLinkKey
-                ttpConfigBuilder = ttpConfigBuilder.addToTerminationCapability(tcapConfigBuilder.build());
-            }
+            // TODO: add more attributes to localLinkConnectivitiesBuilder (add connectivity matrices.--
 
-            // TODO: retrieve teTunnelTp.switchingLayer() and set it to  ttpConfigBuilder
-
-            TerminationCapability.TerminationCapabilityBuilder tcapStateBuilder =
-                    DefaultTerminationCapability.builder();
-            // TODO: retrieve more attributes from teTunnelTp and assign to tcapStateBuilder
-            // For which ones we can do the conversion?
-            for (LocalLinkConnectivity llcn : teTunnelTp.localLinkConnectivityList()) {
-                TeLinkId telinkId = (TeLinkId) llcn.constrainingElements().get(0);
-                TeLinkTpGlobalKey globalKey = new TeLinkTpGlobalKey(teNodeKey, telinkId.value());
-                NetworkLinkKey netLinkKey = teTopologyService.linkKey(globalKey);
-                NetworkLink networkLink = teTopologyService
-                        .network(netLinkKey.networkId()).links().get(netLinkKey.linkId());
-                tcapStateBuilder = tcapStateBuilder
-                        .linkTp(TpId.fromString(networkLink.source().tpId()
-                                .toString()));
-                ttpStateBuilder = ttpStateBuilder.addToTerminationCapability(tcapStateBuilder.build());
-            }
+            ttpConfigBuilder = ttpConfigBuilder.localLinkConnectivities(localLinkConnectivitiesBuilder.build());
+            ttpStateBuilder = ttpStateBuilder.localLinkConnectivities(localLinkConnectivitiesBuilder.build());
         }
 
         tunnelTpBuilder = tunnelTpBuilder.config(ttpConfigBuilder.build())
                                          .state(ttpStateBuilder.build());
+        // TODO: add supporting ttp.--
 
         return tunnelTpBuilder.build();
     }
@@ -431,8 +406,9 @@
 
             TeBuilder yangTeBuilder = DefaultTe.builder();
 
-            yangTeBuilder = yangTeBuilder.teNodeId(TeNodeId.of(DottedQuad
-                    .of(Ip4Address.valueOf((int) teSubsystemTeNode.teNodeId())
+            nodeAugmentBuilder = nodeAugmentBuilder
+                    .teNodeId(TeNodeId.of(DottedQuad.of(Ip4Address
+                            .valueOf((int) teSubsystemTeNode.teNodeId())
                             .toString())));
 
             // Set configuration data
@@ -462,10 +438,12 @@
      *
      * @param yangNode Node in YANG model
      * @param yangNetwork YANG network
+     * @param yangNetworks YANG networks
      * @return TE subsystem node
      */
     public static org.onosproject.tetopology.management.api.node.NetworkNode
-                    yang2TeSubsystemNode(Node yangNode, Network yangNetwork) {
+            yang2TeSubsystemNode(Node yangNode, Network yangNetwork,
+                                 Networks yangNetworks) {
         checkNotNull(yangNode, E_NULL_YANG_NODE);
 
         org.onosproject.tetopology.management.api.node.DefaultNetworkNode node;
@@ -493,10 +471,12 @@
 
             AugmentedNwNode yangNodeAugment = (AugmentedNwNode) yangNode
                     .yangAugmentedInfo(AugmentedNwNode.class);
-            if (yangNodeAugment != null && yangNodeAugment.te() != null && yangNodeAugment.te().teNodeId() != null) {
+            if (yangNodeAugment != null && yangNodeAugment.te() != null && yangNodeAugment.teNodeId() != null) {
+                TeNodeId teNodeId = yangNodeAugment.teNodeId();
                 Te yangNodeAugTe = yangNodeAugment.te();
-                teNode = yang2TeSubsystemNodeAugment(yangNodeAugTe,
+                teNode = yang2TeSubsystemNodeAugment(yangNodeAugTe, teNodeId,
                                                      yangNetwork,
+                                                     yangNetworks,
                                                      yangNode,
                                                      tps);
             }
@@ -511,21 +491,21 @@
     private static Map<Long, ConnectivityMatrix>
                     yang2TeSubsystemNodeConnectivityMatrix(String networkId,
                                                            String nodeId,
-                                                           List<org.onosproject.yang.gen.v1.urn.ietf
-                                                           .params.xml.ns.yang.ietf.te.topology.rev20160708
-                                                           .ietftetopology.tenodeconnectivitymatrix.
-                                                           ConnectivityMatrix> yangMatrix) {
+                                                           ConnectivityMatrices yangMatrices) {
 
         Map<Long, ConnectivityMatrix> teCmList = Maps.newHashMap();
 
-
+        List<org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
+            .tenodeconnectivitymatrix.connectivitymatrices.ConnectivityMatrix>
+                yangMatrix = yangMatrices.connectivityMatrix();
         for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te
-                .topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.
+                .topology.rev20170110.ietftetopology.tenodeconnectivitymatrix.connectivitymatrices.
                 ConnectivityMatrix cmYang : yangMatrix) {
 
             ElementType from = new TeLinkId(Long.valueOf(((String) cmYang.from().tpRef()))); // is this correct?
 
             UnderlayAbstractPath underlayPath = null; // ignore
+            // TODO: add pathElements and underlayPath.--
 
             List<ElementType> mergingList = Lists.newArrayList(); // empty merging list for now
 
@@ -543,9 +523,7 @@
             }
             TePathAttributes teAttributes = new
                     TePathAttributes(cmYang.teDefaultMetric(),
-                                     cmYang.performanceMetric() == null ? null :
-                                         (cmYang.performanceMetric().measurement() == null ? null :
-                                             cmYang.performanceMetric().measurement().unidirectionalDelay()),
+                                     cmYang.teDelayMetric(),
                                      srlgs);
             ConnectivityMatrix coreCm = new ConnectivityMatrix(cmYang.id(),
                                                                from,
@@ -561,16 +539,16 @@
         return teCmList;
     }
 
-    private static TeTopologyKey yang2TeSubsystemNodeUnderlayTopology(UnderlayTopology ut) {
-        TeTopologyKey tetopokey = new TeTopologyKey((Long) ut.providerIdRef(),
-                                                    (Long) ut.clientIdRef(),
-                                                    Long.valueOf((String) ut.teTopologyIdRef()));
+    private static TeTopologyKey yang2TeSubsystemNodeUnderlayTopology(UnderlayTopology ut, Networks yangNetworks) {
+        TeTopologyKey tetopokey = LinkConverter.findTopologyId(yangNetworks,
+                                                               ut.networkRef());
         return tetopokey;
     }
 
     // TODO: retrieve the details of tunnel termiantion points from yang to te
     private static Map<Long, org.onosproject.tetopology.management.api.node.
-                      TunnelTerminationPoint> yang2TeSubsystemTtp(List<TunnelTerminationPoint> ttps, Node yangNode) {
+                      TunnelTerminationPoint> yang2TeSubsystemTtp(List<TunnelTerminationPoint> ttps, Node yangNode,
+                                                                  Networks yangNetworks) {
         Map<Long, org.onosproject.tetopology.management.api.node.TunnelTerminationPoint> ttpsMap = Maps
                 .newHashMap();
         for (TunnelTerminationPoint ttpYang : ttps) {
@@ -588,30 +566,28 @@
             // FIXME: once new yang model is used, we can make llc
             ElementType elt = null;
             List<ElementType> eltList = Lists.newArrayList();
-
-            if (ttpYang.config() != null
-                    && ttpYang.config().terminationCapability() != null
-                    && !ttpYang.config().terminationCapability().isEmpty()) {
-                for (TerminationCapability tercap : ttpYang.config()
-                        .terminationCapability()) {
-
-                    if (yangNode.yangAugmentedInfoMap() != null
-                            && !yangNode.yangAugmentedInfoMap().isEmpty()) {
-
+            if (ttpYang.config() != null &&
+                    ttpYang.config().localLinkConnectivities() != null &&
+                    CollectionUtils.isNotEmpty(ttpYang.config().localLinkConnectivities().localLinkConnectivity())) {
+                for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
+                        .ietftetopology.tenodetunnelterminationattributes.locallinkconnectivities
+                        .LocalLinkConnectivity yangLlc : ttpYang.config()
+                                                            .localLinkConnectivities().localLinkConnectivity()) {
+                    if (MapUtils.isNotEmpty(yangNode.yangAugmentedInfoMap())) {
                         AugmentedNdNode yangTpNodeAugment = (AugmentedNdNode) yangNode
                                 .yangAugmentedInfo(AugmentedNdNode.class);
                         for (org.onosproject.yang.gen.v1.urn.ietf.params.xml
                                 .ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology
                                 .networks.network.node.augmentedndnode
                                 .TerminationPoint tpItem : yangTpNodeAugment.terminationPoint()) {
-                            if (tpItem.tpId().uri().string().equals(tercap.linkTp().toString())) {
+                            if (tpItem.tpId().uri().string().equals(yangLlc.linkTpRef().toString())) {
                                 if (tpItem.yangAugmentedInfoMap() != null
                                         && !tpItem.yangAugmentedInfoMap().isEmpty()) {
                                     AugmentedNtTerminationPoint yangTpAugment =
                                             (AugmentedNtTerminationPoint) tpItem
                                             .yangAugmentedInfo(AugmentedNtTerminationPoint.class);
-                                    if (yangTpAugment.te() != null && yangTpAugment.te().teTpId() != null) {
-                                        elt = new TeLinkId(Long.valueOf(yangTpAugment.te().teTpId().toString()));
+                                    if (yangTpAugment.teTpId() != null) {
+                                        elt = new TeLinkId(Long.valueOf(yangTpAugment.teTpId().toString()));
                                         break;
                                     }
                                 }
@@ -622,6 +598,7 @@
 //                    tercap.linkTp().toString() //tpId -> tp -> te-tp-id (long)
                 }
             }
+
             TePathAttributes teAttributes = null; // how to find these
                                                   // attributes from ttpYang?
             UnderlayAbstractPath underlayPath = null; // how to find underlayAbstractPath from ttpYang?
@@ -633,6 +610,8 @@
 
             float[] availAdaptBandwidth = null; // how to find availableBandwidth?
 
+            // TODO: add supportTtp and pass it below instead of null.--
+
             org.onosproject.tetopology.management.api.node.
                 TunnelTerminationPoint ttpTe = new
                 org.onosproject.tetopology.management.api.node.
@@ -652,17 +631,18 @@
     }
 
     private static TeNode yang2TeSubsystemNodeAugment(Te yangNodeAugTe,
+                                                      TeNodeId teNodeId,
                                                       Network yangNetwork,
+                                                      Networks yangNetworks,
                                                       Node yangNode,
                                                       Map<KeyId, TerminationPoint> teTps) {
 
 
         NodeId yangNodeId = yangNode.nodeId();
-        List<SupportingNode> yangSupportNodes = yangNode.supportingNode();
 
         NetworkId yangNetworkId = yangNetwork.networkId();
 
-        long teNodeId = Ip4Address.valueOf(yangNodeAugTe.teNodeId().dottedQuad().string()).toInt();
+        long teNodeIdLong = Ip4Address.valueOf(teNodeId.dottedQuad().string()).toInt();
 
         TeTopologyKey underlayTopologyIdId = null;
 
@@ -716,7 +696,7 @@
                 if (teNodeAttr.underlayTopology() != null) {
 
                     underlayTopologyIdId = yang2TeSubsystemNodeUnderlayTopology(teNodeAttr
-                            .underlayTopology());
+                            .underlayTopology(), yangNetworks);
                 }
                 BitSet flags = new BitSet();
                 if (teNodeAttr.isAbstract()) {
@@ -728,20 +708,23 @@
                                             EnumConverter.yang2TeSubsystemOpStatus(yangNodeAugTe.state().operStatus()),
                                             flags);
 
-                if (teNodeAttr.connectivityMatrix() != null) {
+//                if (teNodeAttr.connectivityMatrix() != null) {
+                if (teNodeAttr.connectivityMatrices() != null) {
                     connMatrices = yang2TeSubsystemNodeConnectivityMatrix(yangNetworkId.uri().toString(),
                                                                     yangNodeId.uri().toString(),
-                                                                    teNodeAttr.connectivityMatrix());
+                                                                    teNodeAttr.connectivityMatrices());
                 }
 
             }
         }
 
         if (yangNodeAugTe.tunnelTerminationPoint() != null) {
-            ttps = yang2TeSubsystemTtp(yangNodeAugTe.tunnelTerminationPoint(), yangNode);
+            ttps = yang2TeSubsystemTtp(yangNodeAugTe.tunnelTerminationPoint(),
+                                       yangNode,
+                                       yangNetworks);
         }
 
-        TeNode teNode = new DefaultTeNode(teNodeId,
+        TeNode teNode = new DefaultTeNode(teNodeIdLong,
                                           underlayTopologyIdId,
                                           supportTeNodeId,
                                           sourceTeNodeId,
@@ -790,7 +773,7 @@
 
         NetworkNode node = eventData.neworkNode();
         org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
-                rev20160708.ietftetopology.tenodeconfigattributesnotification.
+                rev20170110.ietftetopology.tenodeconfigattributesnotification.
                 TeNodeAttributes teNodeAttributes = node == null ? null
                                                                  : teNode2YangTeNodeAttributes(node.teNode());
         builder.teNodeAttributes(teNodeAttributes);
@@ -799,23 +782,23 @@
     }
 
     private static org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.
-            ietf.te.topology.rev20160708.ietftetopology.
+            ietf.te.topology.rev20170110.ietftetopology.
             tenodeconfigattributesnotification.
             TeNodeAttributes teNode2YangTeNodeAttributes(TeNode teNode) {
 
         org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
-                rev20160708.ietftetopology.tenodeconfigattributesnotification.
+                rev20170110.ietftetopology.tenodeconfigattributesnotification.
                 TeNodeAttributes.TeNodeAttributesBuilder attrBuilder =
                 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
-                        rev20160708.ietftetopology.tenodeconfigattributesnotification.
+                                rev20170110.ietftetopology.tenodeconfigattributesnotification.
                         DefaultTeNodeAttributes.builder();
 
         if (teNode.connectivityMatrices() != null) {
 
-            org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
+            org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
             .tenodeconnectivitymatrixabs.DefaultConnectivityMatrix
             .ConnectivityMatrixBuilder connectivityMatrixConfigBuilder = org.onosproject.yang.gen.v1.urn.ietf.
-            params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrixabs.
+                            params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.tenodeconnectivitymatrixabs.
             DefaultConnectivityMatrix.builder();
             for (Map.Entry<Long, ConnectivityMatrix> teCmEntry :
                 teNode.connectivityMatrices().entrySet()) {
@@ -823,13 +806,13 @@
                         .id(teCmEntry.getKey())
                         .isAllowed(!teCmEntry.getValue().flags()
                                    .get(ConnectivityMatrix.BIT_DISALLOWED))
-                        .from(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+                        .from(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
                               .ietftetopology.tenodeconnectivitymatrixabs.connectivitymatrix.DefaultFrom
                               .FromBuilder() // TODO: for now, assuming that there is
                                                             // only one 'from', and mergingList is empty
                               .tpRef(teCmEntry.getValue().from())
                                              .build())
-                        .to(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+                        .to(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
                             .ietftetopology.tenodeconnectivitymatrixabs.connectivitymatrix
                             .DefaultTo.ToBuilder() // TODO: for now, assuming that there is only
                                                       // one item in constrainingElements list
@@ -842,19 +825,12 @@
         }
 
         org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
-                rev20160708.ietftetopology.tenodeconfigattributesnotification.
+                rev20170110.ietftetopology.tenodeconfigattributesnotification.
                 TeNodeAttributes teNodeAttributes = attrBuilder.build();
 
         return teNodeAttributes;
     }
 
-    /**
-     * Retrieves the TE network node key from a YANG network node notification
-     * event.
-     *
-     * @param yangNodeEvent YANG network node notification event
-     * @return TE network node key
-     */
     public static NetworkNodeKey yangNodeEvent2NetworkNodeKey(TeNodeEvent yangNodeEvent) {
         NetworkId networkRef = NetworkId.fromString(yangNodeEvent.networkRef().toString());
         NodeId nodeRef = NodeId.fromString(yangNodeEvent.nodeRef().toString());
@@ -919,7 +895,7 @@
         TeStatus opStatus = oldTeNode.opStatus();
         BitSet flags = oldTeNode.flags();
 
-        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
+        org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
                 .tenodeconfigattributesnotification
                 .TeNodeAttributes yangTeNodeAttrs = yangNodeEvent.teNodeAttributes();
 
@@ -935,14 +911,14 @@
             }
 
             List<org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.
-                    ietf.te.topology.rev20160708.ietftetopology
+                    ietf.te.topology.rev20170110.ietftetopology
                     .tenodeconnectivitymatrixabs.ConnectivityMatrix> yangConnMatrices = yangTeNodeAttrs
                     .connectivityMatrix();
             if (yangConnMatrices != null) {
                 for (org.onosproject.yang.gen.v1.
                         urn.ietf.params.xml.ns.yang.
                         ietf.te.topology
-                        .rev20160708.ietftetopology
+                        .rev20170110.ietftetopology
                         .tenodeconnectivitymatrixabs
                         .ConnectivityMatrix yangConnMatrix : yangConnMatrices) {
                     Long cmId = new Long(yangConnMatrix.id());
@@ -967,7 +943,7 @@
     private static ConnectivityMatrix yangNodeEvent2TeConnectivityMatrix(org.onosproject.yang.gen.v1.
                                                                          urn.ietf.params.xml.ns.yang.
                                                                          ietf.te.topology
-                                                                         .rev20160708.ietftetopology
+            .rev20170110.ietftetopology
                                                                          .tenodeconnectivitymatrixabs
                                                                          .ConnectivityMatrix yangConnMatrix,
                                                                  ConnectivityMatrix oldTeConnMatrix) {