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/LinkConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java
index 1234f7c..6a9cb94 100644
--- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java
+++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java
@@ -18,7 +18,6 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.onosproject.tetopology.management.api.TeConstants.MAX_PRIORITY;
 
-import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.BitSet;
 import java.util.List;
@@ -84,51 +83,51 @@
                .ietfnetworktopology.networks.network.augmentedndnetwork.link.SupportingLink
                .SupportingLinkBuilder;
 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.te.topology.rev20160708.ietftetopology.DefaultTeLinkEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.TeLinkEvent;
-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.ietftetopology.networks.network.AugmentedNwNetwork;
-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.DefaultTeLinkEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.TeBandwidth;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.TeLinkEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.informationsourceperlinkattributes.DefaultInformationSourceState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.informationsourceperlinkattributes.InformationSourceState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.informationsourceperlinkattributes.informationsourcestate.DefaultTopology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.informationsourceperlinkattributes.informationsourcestate.Topology;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.networks.network.AugmentedNwNetwork;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
                .ietftetopology.networks.network.link.AugmentedNtLink;
-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.link.DefaultAugmentedNtLink;
-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.link.DefaultAugmentedNtLink.AugmentedNtLinkBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.node.AugmentedNwNode;
-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.telinkaugment.DefaultTe;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.DefaultTe.TeBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.Config;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultConfig;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultConfig.ConfigBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultState;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultState.StateBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.State;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.DefaultTeLinkAttributes;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.DefaultTeLinkAttributes.TeLinkAttributesBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.TeLinkAttributes;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultExternalDomain;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultExternalDomain.ExternalDomainBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultUnderlay;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultUnderlay.UnderlayBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.ExternalDomain;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultTeSrlgs;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultTeSrlgs.TeSrlgsBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultUnreservedBandwidth;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultUnreservedBandwidth.UnreservedBandwidthBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.TeSrlgs;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.UnreservedBandwidth;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkinfoattributes.LinkProtectionTypeEnum;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayBackupPath;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayBackupPath.UnderlayBackupPathBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayPrimaryPath;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayPrimaryPath.UnderlayPrimaryPathBuilder;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.UnderlayPrimaryPath;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.underlayprimarypath.DefaultPathElement;
-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.rev20170110.ietftetopology.networks.network.node.AugmentedNwNode;
+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.telinkaugment.DefaultTe;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkaugment.DefaultTe.TeBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkaugment.te.Config;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkaugment.te.DefaultConfig;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkaugment.te.DefaultConfig.ConfigBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkaugment.te.DefaultState;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkaugment.te.DefaultState.StateBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkaugment.te.State;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconfigattributes.DefaultTeLinkAttributes;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconfigattributes.DefaultTeLinkAttributes.TeLinkAttributesBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconfigattributes.TeLinkAttributes;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconfigattributes.telinkattributes.DefaultExternalDomain;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconfigattributes.telinkattributes.DefaultExternalDomain.ExternalDomainBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconfigattributes.telinkattributes.DefaultUnderlay;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconfigattributes.telinkattributes.DefaultUnderlay.UnderlayBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconfigattributes.telinkattributes.ExternalDomain;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconnectivityattributes.DefaultTeSrlgs;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconnectivityattributes.DefaultTeSrlgs.TeSrlgsBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconnectivityattributes.DefaultUnreservedBandwidth;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconnectivityattributes.DefaultUnreservedBandwidth.UnreservedBandwidthBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconnectivityattributes.TeSrlgs;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkconnectivityattributes.UnreservedBandwidth;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkinfoattributes.LinkProtectionTypeEnum;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkunderlayattributes.DefaultBackupPath;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkunderlayattributes.DefaultBackupPath.BackupPathBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkunderlayattributes.DefaultPrimaryPath;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkunderlayattributes.DefaultPrimaryPath.PrimaryPathBuilder;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkunderlayattributes.PrimaryPath;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology.telinkunderlayattributes.primarypath.DefaultPathElement;
 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.TeNodeId;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeOperStatus;
@@ -223,13 +222,11 @@
             }
             if (teLink.externalLink().externalLinkKey() != null) {
                 edBuilder = edBuilder
-                        .remoteTeLinkTpId(TeTpId.fromString(
-                                                                String.valueOf(teLink
+                        .remoteTeLinkTpId(TeTpId.fromString(String.valueOf(teLink
                                                                         .externalLink()
                                                                         .externalLinkKey()
                                                                         .teLinkTpId())))
-                        .remoteTeNodeId(TeNodeId.fromString(
-                                                                String.valueOf(teLink
+                        .remoteTeNodeId(TeNodeId.fromString(String.valueOf(teLink
                                                                         .externalLink()
                                                                         .externalLinkKey()
                                                                         .teNodeId())));
@@ -241,7 +238,8 @@
             for (short i = 0; i < teLink.availBandwidth().length; i++) {
                 UnreservedBandwidthBuilder urBuilder =
                         DefaultUnreservedBandwidth.builder()
-                                                  .bandwidth(BigDecimal.valueOf(teLink.availBandwidth()[i]))
+                                .bandwidth(TeBandwidth.fromString(String
+                                        .valueOf(teLink.availBandwidth()[i])))
                                                   .priority(i);
                 attrBuilder = attrBuilder.addToUnreservedBandwidth(urBuilder.build());
             }
@@ -249,7 +247,8 @@
 
         if (teLink.maxBandwidth() != null) {
             // maxBandwidth is an array of float[], but in yang is just a big decimal
-            attrBuilder = attrBuilder.maxLinkBandwidth(BigDecimal.valueOf(teLink.maxBandwidth()[0]));
+            attrBuilder = attrBuilder.maxLinkBandwidth(TeBandwidth
+                    .fromString(String.valueOf(teLink.maxBandwidth()[0])));
         }
         // FIXME: how to retrieve maxResvLinkBandwidth from teLink
 //        if (teLink.maxResvLinkBandwidth() != null) {
@@ -308,7 +307,8 @@
         }
         if (teLink.maxBandwidth() != null) {
             // maxBandwidth is an array of float[], but in yang is just a big decimal
-            attrBuilder = attrBuilder.maxLinkBandwidth(BigDecimal.valueOf(teLink.maxBandwidth()[0]));
+            attrBuilder = attrBuilder.maxLinkBandwidth(TeBandwidth
+                    .fromString(String.valueOf(teLink.maxBandwidth()[0])));
         }
 //        if (teLink.maxResvLinkBandwidth() != null) {
 //            attrBuilder = attrBuilder.maxResvLinkBandwidth(teLink.maxResvLinkBandwidth());
@@ -346,7 +346,9 @@
             short i = 0;
             for (float f : teLink.availBandwidth()) {
                 UnreservedBandwidth.UnreservedBandwidthBuilder urBuilder = DefaultUnreservedBandwidth
-                        .builder().bandwidth(BigDecimal.valueOf(f)).priority(i);
+                        .builder()
+                        .bandwidth(TeBandwidth.fromString(String.valueOf(f)))
+                        .priority(i);
                 i++;
                 attrBuilder = attrBuilder.addToUnreservedBandwidth(urBuilder.build());
             }
@@ -363,9 +365,8 @@
             InformationSourceState.InformationSourceStateBuilder issBuilder = DefaultInformationSourceState.builder();
 
             Topology.TopologyBuilder topologyBuilder = DefaultTopology.builder();
-            topologyBuilder = topologyBuilder.clientIdRef(teLink.sourceTeLinkId().clientId())
-                                             .providerIdRef(teLink.sourceTeLinkId().providerId())
-                                             .teTopologyIdRef(teLink.sourceTeLinkId().topologyId());
+            // TODO: pass teTopologyService and retrieve linkRef and NetworkRef from there
+
             issBuilder = issBuilder.topology(topologyBuilder.build());
             yangStateBuilder.informationSourceState(issBuilder.build());
         }
@@ -373,7 +374,7 @@
         // Once stateDerived underlay is available in yang and core TE Topology
         // object model, set the value properly
         // stateDerivedUnderlay = org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
-        // .rev20160708.ietftetopology.telinkstatederived.Underlay
+        // .rev20170110.ietftetopology.telinkstatederived.Underlay
         //yangStateBuilder = yangStateBuilder.underlay(stateDerivedUnderlay);
 
         return yangStateBuilder.build();
@@ -383,7 +384,7 @@
      * Link object conversion from TE Topology subsystem to YANG.
      *
      * @param teSubsNetworkLink TE subsystem link object
-     * @param teTopologyService teTopology core service
+     * @param teTopologyService TE Topology Service object
      * @return YANG link object
      */
     public static Link teSubsystem2YangLink(
@@ -447,12 +448,11 @@
 
         org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath tePath = teLink.primaryPath();
 
-        UnderlayPrimaryPathBuilder pathBuilder =
-                                       DefaultUnderlayPrimaryPath.builder();
+        PrimaryPathBuilder pathBuilder = DefaultPrimaryPath.builder();
         if (tePath.pathElements() != null) {
             for (PathElement pathElementTe : tePath.pathElements()) {
-                org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-                .ietftetopology.telinkunderlayattributes.underlayprimarypath.PathElement
+                org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
+                .ietftetopology.telinkunderlayattributes.primarypath.PathElement
                    .PathElementBuilder pathElementYangBuilder = DefaultPathElement.builder();
 
                 pathElementYangBuilder = pathElementYangBuilder.pathElementId(pathElementTe.pathElementId());
@@ -469,13 +469,10 @@
             }
         }
 
-        pathBuilder = pathBuilder.clientIdRef(teLink.underlayTeTopologyId().clientId())
-                                 .providerIdRef(teLink.underlayTeTopologyId().providerId())
-                                 .teTopologyIdRef(teLink.underlayTeTopologyId().topologyId());
+        pathBuilder = pathBuilder.networkRef(teTopologyService
+                .networkId(teLink.underlayTeTopologyId()));
 
-        pathBuilder = pathBuilder.networkIdRef(teTopologyService.networkId(teLink.underlayTeTopologyId()));
-
-        return yangBuilder.underlayPrimaryPath(pathBuilder.build());
+        return yangBuilder.primaryPath(pathBuilder.build());
     }
 
     private static UnderlayBuilder te2YangConfigUnderlayBackupPaths(UnderlayBuilder yangBuilder,
@@ -484,21 +481,19 @@
         List<UnderlayBackupPath> tePaths = teLink.backupPaths();
 
         for (UnderlayBackupPath tePath : tePaths) {
-            UnderlayBackupPathBuilder pathBuilder = DefaultUnderlayBackupPath
+            BackupPathBuilder pathBuilder = DefaultBackupPath
                     .builder();
             pathBuilder = pathBuilder.index(tePath.index());
-            pathBuilder = pathBuilder.clientIdRef(teLink.underlayTeTopologyId().clientId())
-                                     .providerIdRef(teLink.underlayTeTopologyId().providerId())
-                                     .teTopologyIdRef(teLink.underlayTeTopologyId().topologyId());
 
-            pathBuilder = pathBuilder.networkIdRef(teTopologyService.networkId(teLink.underlayTeTopologyId()));
+            pathBuilder = pathBuilder.networkRef(teTopologyService
+                    .networkId(teLink.underlayTeTopologyId()));
 
             for (PathElement backupPathElementTe : tePath.pathElements()) {
-                org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-                .ietftetopology.telinkunderlayattributes.underlaybackuppath.PathElement
+                org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
+                .ietftetopology.telinkunderlayattributes.backuppath.PathElement
                 .PathElementBuilder elementBuilder =
-                org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-                .ietftetopology.telinkunderlayattributes.underlaybackuppath.DefaultPathElement
+                                org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
+                .ietftetopology.telinkunderlayattributes.backuppath.DefaultPathElement
                         .builder();
 
                 elementBuilder = elementBuilder.pathElementId(backupPathElementTe.pathElementId());
@@ -511,11 +506,9 @@
                     elementBuilder = elementBuilder.type(unmBuilder.build());
                 }
 
-                pathBuilder = pathBuilder
-                        .addToPathElement(elementBuilder.build());
+                pathBuilder = pathBuilder.addToPathElement(elementBuilder.build());
             }
-            yangBuilder = yangBuilder
-                    .addToUnderlayBackupPath(pathBuilder.build());
+            yangBuilder = yangBuilder.addToBackupPath(pathBuilder.build());
         }
 
         return yangBuilder;
@@ -563,33 +556,47 @@
             opStatus = EnumConverter.yang2TeSubsystemOpStatus(opState.operStatus());
         }
 
+        TeTopologyKey underlayTopologyId = null;
+        if (yangLinkAttr != null && yangLinkAttr.underlay() != null && yangLinkAttr.underlay().primaryPath() != null) {
+            underlayTopologyId = findTopologyId(yangNetworks, yangLinkAttr.underlay().primaryPath().networkRef());
+        }
 
-        TeLink teLink = yangLinkAttr2TeLinkAttributes(yangLinkAttr, opStatus, teNodeIdLong, teNodeIdDestLong, teLinkKey,
-                                                      peerTeLinkKey, supportTeLinkId);
+        TeLink teLink = yangLinkAttr2TeLinkAttributes(yangLinkAttr, opStatus,
+                                                      teNodeIdLong,
+                                                      teNodeIdDestLong,
+                                                      teLinkKey,
+                                                      peerTeLinkKey,
+                                                      supportTeLinkId,
+                                                      underlayTopologyId);
 
         return teLink;
     }
 
+    /**
+     * Finds the TE TopologyKey from yangNetworks and a networkRef.
+     *
+     * @param yangNetworks YANG networks object
+     * @param networkRef YANG network reference
+     * @return TeTopologyKey the TE TopologyKey
+     */
+    public static TeTopologyKey findTopologyId(Networks yangNetworks, Object networkRef) {
+        // TODO: add implementation
+        return null;
+    }
+
     private static TeLink yangLinkAttr2TeLinkAttributes(TeLinkAttributes yangLinkAtrr,
                                                         org.onosproject.tetopology.management.api.TeStatus opStatus,
                                                         long teNodeIdLong,
                                                         long teNodeIdDestLong,
                                                         TeLinkTpKey teLinkKey,
                                                         TeLinkTpKey peerTeLinkKey,
-                                                        TeLinkTpGlobalKey supportTeLinkId) {
+                                                        TeLinkTpGlobalKey supportTeLinkId,
+                                                        TeTopologyKey underlayTopologyId) {
         org.onosproject.tetopology.management.api.TeStatus adminStatus = null;
 
         TeLinkTpGlobalKey sourceTeLinkId = null; // from yang to core, we can ignore sourceTeLinkId
-        TeTopologyKey underlayTopologyId = null;
-        CommonLinkData teData = null;
 
-        if (yangLinkAtrr != null && yangLinkAtrr.underlay() != null &&
-                yangLinkAtrr.underlay().underlayPrimaryPath() != null) {
-            underlayTopologyId = new
-                    TeTopologyKey((long) yangLinkAtrr.underlay().underlayPrimaryPath().providerIdRef(),
-                                  (long) yangLinkAtrr.underlay().underlayPrimaryPath().clientIdRef(),
-                                  (long) yangLinkAtrr.underlay().underlayPrimaryPath().teTopologyIdRef());
-        }
+        CommonLinkData teData = null;
 
         if (yangLinkAtrr.adminStatus() != null) {
             adminStatus = EnumConverter.yang2TeSubsystemAdminStatus(yangLinkAtrr.adminStatus());
@@ -617,14 +624,14 @@
         List<UnreservedBandwidth> listOfUnreservedBandwidth = yangLinkAtrr.unreservedBandwidth();
         float[] availBandwidth = new float[MAX_PRIORITY + 1];
         for (UnreservedBandwidth urbw : listOfUnreservedBandwidth) {
-            availBandwidth[urbw.priority()] = urbw.bandwidth().floatValue();
+            availBandwidth[urbw.priority()] = Float.valueOf(urbw.bandwidth().string());
         }
 
         float[] maxBandwidth = new float[MAX_PRIORITY + 1];
         if (yangLinkAtrr.maxLinkBandwidth() != null) {
             // Core TE has an array, but YANG is an integer
             for (short p = 0; p <= MAX_PRIORITY; p++) {
-                maxBandwidth[p] = yangLinkAtrr.maxLinkBandwidth().floatValue();
+                maxBandwidth[p] = Float.valueOf(yangLinkAtrr.maxLinkBandwidth().string());
             }
         }
 
@@ -645,10 +652,7 @@
             }
         }
         TePathAttributes teAttributes =
-                new TePathAttributes(yangLinkAtrr.teDefaultMetric(),
-                                     yangLinkAtrr.performanceMetric() == null ? null :
-                                           (yangLinkAtrr.performanceMetric().measurement() == null ? null :
-                                               yangLinkAtrr.performanceMetric().measurement().unidirectionalDelay()),
+                new TePathAttributes(yangLinkAtrr.teDefaultMetric(), yangLinkAtrr.teDelayMetric(),
                                      srlgs);
         teData = new CommonLinkData(adminStatus,
                                     opStatus,
@@ -714,9 +718,9 @@
                         (AugmentedNwNetwork) teNetworkFound.yangAugmentedInfo(AugmentedNwNetwork.class);
                 teTopologyId =
                         new org.onosproject.tetopology.management.api.TeTopologyId(
-                                augmentTeIds.te().clientId().uint32(),
-                                augmentTeIds.te().providerId().uint32(),
-                                augmentTeIds.te().teTopologyId().string());
+                                augmentTeIds.clientId().uint32(),
+                                augmentTeIds.providerId().uint32(),
+                                augmentTeIds.teTopologyId().string());
             }
 
             supportTeLinkId = new TeLinkTpGlobalKey(teTopologyId.providerId(),
@@ -729,7 +733,14 @@
         return supportTeLinkId;
     }
 
-    private static TeNodeId findTeNodeId(Network yangNetwork, NodeId yangNodeId) {
+    /**
+     * Finds TeNodeId from a yangNetwork and yangNodeId.
+     *
+     * @param yangNetwork YANG network object
+     * @param yangNodeId YANG node Id
+     * @return teNodeId teNodeId
+     */
+    public static TeNodeId findTeNodeId(Network yangNetwork, NodeId yangNodeId) {
         TeNodeId teNodeId = null;
         for (Node node : yangNetwork.node()) {
             if (node.nodeId().equals(yangNodeId)) {
@@ -737,10 +748,9 @@
                         && !node.yangAugmentedInfoMap().isEmpty()) {
                     AugmentedNwNode yangNodeAugment = (AugmentedNwNode) node
                             .yangAugmentedInfo(AugmentedNwNode.class);
-                    if (yangNodeAugment != null && yangNodeAugment.te() != null
-                            && yangNodeAugment.te().teNodeId() != null) {
-                        Te yangNodeAugTe = yangNodeAugment.te();
-                        teNodeId = yangNodeAugTe.teNodeId();
+                    if (yangNodeAugment != null
+                            && yangNodeAugment.teNodeId() != null) {
+                        teNodeId = yangNodeAugment.teNodeId();
                     }
                 }
             }
@@ -768,8 +778,8 @@
                                     AugmentedNtTerminationPoint yangTpAugment =
                                             (AugmentedNtTerminationPoint) yangTpnode
                                                     .yangAugmentedInfo(AugmentedNtTerminationPoint.class);
-                                    if (yangTpAugment.te() != null && yangTpAugment.te().teTpId() != null) {
-                                        teTpId = Long.valueOf(yangTpAugment.te().teTpId().toString());
+                                    if (yangTpAugment.teTpId() != null) {
+                                        teTpId = Long.valueOf(yangTpAugment.teTpId().toString());
                                     }
                                 }
                             }
@@ -853,13 +863,13 @@
     }
 
     private static org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath
-                    yang2TeSubsystemUnderlayPrimaryPath(UnderlayPrimaryPath yangpath,
+                    yang2TeSubsystemUnderlayPrimaryPath(PrimaryPath yangpath,
                                                         long teNodeId) {
         org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath teUnderlayPrimaryPath = null;
 
         List<PathElement> pathElementList = Lists.newArrayList();
-        for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-                .telinkunderlayattributes.underlayprimarypath.
+        for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
+                .telinkunderlayattributes.primarypath.
                 PathElement pathElementYang : yangpath.pathElement()) {
 
             long nodeId = 0;
@@ -885,20 +895,20 @@
     private static List<UnderlayBackupPath>
        yang2TeSubsystemUnderlayBackupPaths(
                 List<org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
-                    rev20160708.ietftetopology.telinkunderlayattributes.
-                    UnderlayBackupPath> yangpaths,
+                                                        rev20170110.ietftetopology.telinkunderlayattributes.
+                    BackupPath> yangpaths,
                 long teNodeId) {
 
         List<UnderlayBackupPath> underlayBackupPathsList = Lists.newArrayList();
-        for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+        for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110
                 .ietftetopology.telinkunderlayattributes.
-                UnderlayBackupPath yangConfig : yangpaths) {
+                BackupPath yangConfig : yangpaths) {
             UnderlayBackupPath ubp = null;
             List<PathElement> backupPathElementList = Lists.newArrayList();
             long nodeId = 0;
             ElementType type = null;
-            for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
-                    .telinkunderlayattributes.underlaybackuppath.
+            for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20170110.ietftetopology
+                    .telinkunderlayattributes.backuppath.
                     PathElement backupYang : yangConfig.pathElement()) {
                 // TODO: check more types
                 if (backupYang.type() instanceof UnnumberedLink) {
@@ -935,14 +945,14 @@
         List<UnderlayBackupPath> underlayBackupPathsList = null;
         TeTunnelId teTunnelId = new TeTunnelId(srcTeNodeId, dstTeNodeId, 0); // FIXME: how to find teTunnelId?
 
-        if (yangLinkAtrr.underlay() != null && yangLinkAtrr.underlay().underlayPrimaryPath() != null) {
+        if (yangLinkAtrr.underlay() != null && yangLinkAtrr.underlay().primaryPath() != null) {
             underlayPrimaryPath =
-                    yang2TeSubsystemUnderlayPrimaryPath(yangLinkAtrr.underlay().underlayPrimaryPath(), srcTeNodeId);
+                    yang2TeSubsystemUnderlayPrimaryPath(yangLinkAtrr.underlay().primaryPath(), srcTeNodeId);
         }
 
-        if (yangLinkAtrr.underlay() != null && yangLinkAtrr.underlay().underlayBackupPath() != null) {
+        if (yangLinkAtrr.underlay() != null && yangLinkAtrr.underlay().backupPath() != null) {
             underlayBackupPathsList =
-                    yang2TeSubsystemUnderlayBackupPaths(yangLinkAtrr.underlay().underlayBackupPath(), srcTeNodeId);
+                    yang2TeSubsystemUnderlayBackupPaths(yangLinkAtrr.underlay().backupPath(), srcTeNodeId);
         }
 
         org.onosproject.tetopology.management.api.link.UnderlayPath teUnderlay = null;
@@ -950,9 +960,9 @@
             teUnderlay = new org.onosproject.tetopology.management.api.link.
                         UnderlayPath(underlayPrimaryPath,
                                      underlayBackupPathsList,
-                                     TunnelProtectionType.of(yangLinkAtrr.underlay().underlayProtectionType()),
-                                     (long) yangLinkAtrr.underlay().underlayTrailSrc().tpRef(), // Is this correct?
-                                     (long) yangLinkAtrr.underlay().underlayTrailDes().tpRef(), // Is this correct?
+                                     TunnelProtectionType.of(yangLinkAtrr.underlay().protectionType()),
+                                     (Long) yangLinkAtrr.underlay().tunnelSrc().tunnelTpRef(), // null safe?
+                                     (Long) yangLinkAtrr.underlay().tunnelDes().tunnelTpRef(), // null safe?
                                      teTunnelId);
         }
 
@@ -1011,6 +1021,7 @@
         NetworkLinkKey networkLinkKey = new NetworkLinkKey(networkId, linkId);
 
         return networkLinkKey;
+
     }
 
     /**
@@ -1022,6 +1033,7 @@
      */
     public static NetworkLink yangLinkEvent2NetworkLink(TeLinkEvent yangLinkEvent,
                                                         TeTopologyService teTopologyService) {
+
         KeyId linkId = yangLinkEvent2NetworkLinkKey(yangLinkEvent).linkId();
 
         org.onosproject.tetopology.management.api.
@@ -1052,7 +1064,8 @@
         org.onosproject.tetopology.management.api.
         TeStatus opStatus = EnumConverter.yang2TeSubsystemOpStatus(opState);
 
-        TeLink updatedTeLink = yangLinkEvent2TeLinkAttributes(yangLinkEvent, teLink, opStatus);
+        TeLink updatedTeLink = yangLinkEvent2TeLinkAttributes(yangLinkEvent,
+                                                              teLink, opStatus, teTopologyService);
 
 
         NetworkLink updatedNetworkLink = new DefaultNetworkLink(linkId, sourceTp, destTp, supportingLinkIds,
@@ -1062,23 +1075,26 @@
     }
 
     private static TeLink yangLinkEvent2TeLinkAttributes(TeLinkEvent yangLinkEvent, TeLink oldTeLink, TeStatus
-            opStatus) {
+                                                         opStatus, TeTopologyService teTopologyService) {
 
         TeLinkAttributes yangTeLinkAttrs = yangLinkEvent.teLinkAttributes();
 
         TeLinkTpKey teLinkKey = oldTeLink.teLinkKey();
 
-
-        //long teNodeIdDest = oldTeLink.peerTeLinkKey().teNodeId();
-        //long teNodeIdSrc = oldTeLink.teLinkKey().teNodeId();
         long teNodeIdDest = 0;
         long teNodeIdSrc = 0;
 
         TeLinkTpGlobalKey supportTeLinkId = oldTeLink.supportingTeLinkId();
         TeLinkTpKey peerTeLinkKey = oldTeLink.peerTeLinkKey();
 
+        TeTopologyKey underlayTopologyId = null;
+        // TODO: add code to retrieve underlayTopologyId
+
         TeLink updatedTeLink = yangLinkAttr2TeLinkAttributes(yangTeLinkAttrs, opStatus, teNodeIdSrc, teNodeIdDest,
-                                                             teLinkKey, peerTeLinkKey, supportTeLinkId);
+                                                             teLinkKey,
+                                                             peerTeLinkKey,
+                                                             supportTeLinkId,
+                                                             underlayTopologyId);
 
         return updatedTeLink;
     }