Add TAPI object resolver and DCS-dependent data provider ( to update cache )

- refactor TapiInstanceBuilder and add some util method
- add skeleton code for tapi-common get RPCs

Change-Id: I548623ad29f9b72b425713720c5081d790b42bd2
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/DcsBasedTapiNepRef.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/DcsBasedTapiNepRef.java
index aa8e553..12df8cb 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/DcsBasedTapiNepRef.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/DcsBasedTapiNepRef.java
@@ -16,12 +16,18 @@
 
 package org.onosproject.odtn.utils.tapi;
 
-import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.Uuid;
+import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.node.OwnedNodeEdgePoint;
+import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topology.Node;
+import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topologycontext.Topology;
 
-public class DcsBasedTapiNepRef extends TapiNepRef {
+public final class DcsBasedTapiNepRef extends TapiNepRef {
 
-    public DcsBasedTapiNepRef(Uuid topologyId, Uuid nodeId, Uuid nepId) {
-        super(topologyId.toString(), nodeId.toString(), nepId.toString());
+    private DcsBasedTapiNepRef(Topology topology, Node node, OwnedNodeEdgePoint nep) {
+        super(topology.uuid().toString(), node.uuid().toString(), nep.uuid().toString());
+    }
+
+    public static DcsBasedTapiNepRef create(Topology topology, Node node, OwnedNodeEdgePoint nep) {
+        return new DcsBasedTapiNepRef(topology, node, nep);
     }
 
 }
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/DcsBasedTapiNodeRef.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/DcsBasedTapiNodeRef.java
index 5e3c79b..cfc38e2 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/DcsBasedTapiNodeRef.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/DcsBasedTapiNodeRef.java
@@ -16,11 +16,16 @@
 
 package org.onosproject.odtn.utils.tapi;
 
-import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.Uuid;
+import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topology.Node;
+import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topologycontext.Topology;
 
-public class DcsBasedTapiNodeRef extends TapiNodeRef {
+public final class DcsBasedTapiNodeRef extends TapiNodeRef {
 
-    public DcsBasedTapiNodeRef(Uuid topologyId, Uuid nodeId) {
-        super(topologyId.toString(), nodeId.toString());
+    private DcsBasedTapiNodeRef(Topology topology, Node node) {
+        super(topology.uuid().toString(), node.uuid().toString());
+    }
+
+    public static DcsBasedTapiNodeRef create(Topology topology, Node node) {
+        return new DcsBasedTapiNodeRef(topology, node);
     }
 }
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiContextBuilder.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiContextBuilder.java
index 2d24dc4..720d436 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiContextBuilder.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiContextBuilder.java
@@ -18,8 +18,6 @@
 
 import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.DefaultContext;
 import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.Uuid;
-import org.onosproject.yang.model.ModelObject;
-import org.onosproject.yang.model.ModelObjectData;
 import org.onosproject.yang.model.ModelObjectId;
 
 /**
@@ -38,13 +36,13 @@
     }
 
     @Override
-    public ModelObjectData build() {
-        ModelObjectId objId = ModelObjectId.builder().build();
-        return getModelObjectData(context, objId);
+    public ModelObjectId getModelObjectId() {
+        return ModelObjectId.builder().build();
     }
 
     @Override
-    public ModelObject getModelObject() {
+    @SuppressWarnings("unchecked")
+    public DefaultContext getModelObject() {
         return context;
     }
 
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiGlobalClassUtil.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiGlobalClassUtil.java
index 834c927..2af7fed 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiGlobalClassUtil.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiGlobalClassUtil.java
@@ -91,7 +91,7 @@
      * @param kvs key-value map
      * @param <T> type of ModelObject
      */
-    public static <T extends ModelObject> void setNameList(T obj, Map<String, String> kvs) {
+    public static <T extends ModelObject> void addNameList(T obj, Map<String, String> kvs) {
 
         @SuppressWarnings("unchecked")
         Class<T> cls = (Class<T>) obj.getClass();
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiInstanceBuilder.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiInstanceBuilder.java
index fa4a903..dc4fd10 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiInstanceBuilder.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiInstanceBuilder.java
@@ -16,11 +16,26 @@
 
 package org.onosproject.odtn.utils.tapi;
 
+import java.util.List;
+import org.onlab.util.XmlString;
+import org.onosproject.config.DynamicConfigService;
 import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.Uuid;
+import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.DefaultModelObjectData;
+import org.onosproject.yang.model.ModelConverter;
 import org.onosproject.yang.model.ModelObject;
 import org.onosproject.yang.model.ModelObjectData;
 import org.onosproject.yang.model.ModelObjectId;
+import org.onosproject.yang.model.ResourceData;
+
+import static org.onlab.osgi.DefaultServiceDirectory.getService;
+import static org.onosproject.odtn.utils.YangToolUtil.toCharSequence;
+import static org.onosproject.odtn.utils.YangToolUtil.toCompositeData;
+import static org.onosproject.odtn.utils.YangToolUtil.toXmlCompositeStream;
+
+import org.onosproject.yang.model.ResourceId;
+import org.slf4j.Logger;
+import static org.slf4j.LoggerFactory.getLogger;
 
 /**
  * Utility builder class for TAPI modelobject creation with DCS.
@@ -33,29 +48,80 @@
 
     public static final String ODTN_PORT_TYPE = "odtn-port-type";
 
+    private final Logger log = getLogger(getClass());
+
+    private ModelConverter modelConverter;
+    private DynamicConfigService dcs;
+
     /**
      * Generate DCS modelObjectData.
-     * @return ModelObjectData to be built
+     *
+     * @return ModelObjectId of build target
      */
-    public abstract ModelObjectData build();
+    public abstract ModelObjectId getModelObjectId();
 
     /**
      * Get modelObject instance.
+     *
+     * @param <T> build target class
      * @return ModelObject of build target
      */
-    public abstract ModelObject getModelObject();
+    public abstract <T extends ModelObject> T getModelObject();
 
     /**
      * Get modelObject uuid.
+     *
      * @return Uuid of build target
      */
     public abstract Uuid getUuid();
 
+    /**
+     * Get modelObjectData instance.
+     *
+     * @return ModelObjectData of build target
+     */
+    public ModelObjectData getModelObjectData() {
+        ModelObject obj = getModelObject();
+        ModelObjectId objId = getModelObjectId();
 
-    ModelObjectData getModelObjectData(ModelObject obj, ModelObjectId objId) {
         return DefaultModelObjectData.builder()
                 .addModelObject(obj)
                 .identifier(objId)
                 .build();
     }
+
+    /**
+     * Add built modelObject to Dcs store.
+     */
+    public void build() {
+        dcs = getService(DynamicConfigService.class);
+        modelConverter = getService(ModelConverter.class);
+        addModelObjectDataToDcs(getModelObjectData());
+    }
+
+    private void addModelObjectDataToDcs(ModelObjectData input) {
+
+        ResourceData rnode = modelConverter.createDataNode(input);
+
+        // for debug
+        CharSequence strNode = toCharSequence(toXmlCompositeStream(toCompositeData(rnode)));
+        log.info("XML:\n{}", XmlString.prettifyXml(strNode));
+
+        addResourceDataToDcs(rnode);
+    }
+
+    private void addResourceDataToDcs(ResourceData input) {
+        addResourceDataToDcs(input, input.resourceId());
+    }
+
+    private void addResourceDataToDcs(ResourceData input, ResourceId rid) {
+        if (input == null || input.dataNodes() == null) {
+            return;
+        }
+        List<DataNode> dataNodes = input.dataNodes();
+        for (DataNode node : dataNodes) {
+            dcs.createNode(rid, node);
+        }
+    }
+
 }
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiLinkBuilder.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiLinkBuilder.java
index 93fbe5b..31107ae 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiLinkBuilder.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiLinkBuilder.java
@@ -22,8 +22,6 @@
 import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topology.DefaultLink;
 import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topologycontext.DefaultTopology;
 import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topologycontext.TopologyKeys;
-import org.onosproject.yang.model.ModelObject;
-import org.onosproject.yang.model.ModelObjectData;
 import org.onosproject.yang.model.ModelObjectId;
 
 import static org.onosproject.odtn.utils.tapi.TapiGlobalClassUtil.setUuid;
@@ -49,7 +47,7 @@
         return this;
     }
 
-    public TapiLinkBuilder setNep(TapiNepRef nepRef) {
+    public TapiLinkBuilder addNep(TapiNepRef nepRef) {
         DefaultNodeEdgePoint nep = new DefaultNodeEdgePoint();
         nep.topologyId(nepRef.getTopologyId());
         nep.nodeId(nepRef.getNodeId());
@@ -59,19 +57,19 @@
     }
 
     @Override
-    public ModelObjectData build() {
+    public ModelObjectId getModelObjectId() {
 
         TopologyKeys topologyKey = new TopologyKeys();
         topologyKey.uuid(topologyUuid);
-        ModelObjectId objId = ModelObjectId.builder()
+        return ModelObjectId.builder()
                 .addChild(DefaultContext.class)
                 .addChild(DefaultTopology.class, topologyKey)
                 .build();
-        return getModelObjectData(link, objId);
     }
 
     @Override
-    public ModelObject getModelObject() {
+    @SuppressWarnings("unchecked")
+    public DefaultLink getModelObject() {
         return link;
     }
 
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiNepBuilder.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiNepBuilder.java
index 3524d63..1148511 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiNepBuilder.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiNepBuilder.java
@@ -19,9 +19,8 @@
 import java.util.HashMap;
 import java.util.Map;
 import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Port;
 
-import static org.onosproject.odtn.utils.tapi.TapiGlobalClassUtil.setNameList;
+import static org.onosproject.odtn.utils.tapi.TapiGlobalClassUtil.addNameList;
 import static org.onosproject.odtn.utils.tapi.TapiGlobalClassUtil.setUuid;
 
 import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.DefaultContext;
@@ -32,8 +31,6 @@
 import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topology.NodeKeys;
 import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topologycontext.DefaultTopology;
 import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topologycontext.TopologyKeys;
-import org.onosproject.yang.model.ModelObject;
-import org.onosproject.yang.model.ModelObjectData;
 import org.onosproject.yang.model.ModelObjectId;
 
 /**
@@ -65,18 +62,13 @@
         return this;
     }
 
-    public TapiNepBuilder setPort(Port port) {
-        cp = new ConnectPoint(port.element().id(), port.number());
-        kvs.put(ONOS_CP, cp.toString());
-        return this;
-    }
-
     public TapiNepBuilder setConnectPoint(ConnectPoint cp) {
         kvs.put(ONOS_CP, cp.toString());
+        addNameList(nep, kvs);
         return this;
     }
 
-    public TapiNepBuilder setSip(Uuid sipUuid) {
+    public TapiNepBuilder addSip(Uuid sipUuid) {
         DefaultMappedServiceInterfacePoint mappedSip = new DefaultMappedServiceInterfacePoint();
         mappedSip.serviceInterfacePointId(sipUuid);
         nep.addToMappedServiceInterfacePoint(mappedSip);
@@ -88,7 +80,8 @@
     }
 
     @Override
-    public ModelObject getModelObject() {
+    @SuppressWarnings("unchecked")
+    public DefaultOwnedNodeEdgePoint getModelObject() {
         return nep;
     }
 
@@ -98,21 +91,18 @@
     }
 
     @Override
-    public ModelObjectData build() {
-        setNameList(nep, kvs);
-
+    public ModelObjectId getModelObjectId() {
         TopologyKeys topologyKey = new TopologyKeys();
         topologyKey.uuid(topologyUuid);
 
         NodeKeys nodeKey = new NodeKeys();
         nodeKey.uuid(nodeUuid);
 
-        ModelObjectId objId = ModelObjectId.builder()
+        return ModelObjectId.builder()
                 .addChild(DefaultContext.class)
                 .addChild(DefaultTopology.class, topologyKey)
                 .addChild(DefaultNode.class, nodeKey)
                 .build();
-        return getModelObjectData(nep, objId);
     }
 
 }
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiNepRef.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiNepRef.java
index a28d53d..d837362 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiNepRef.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiNepRef.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.odtn.utils.tapi;
 
+import java.util.Optional;
 import java.util.UUID;
 import org.onosproject.net.ConnectPoint;
 
@@ -28,8 +29,18 @@
     private final UUID topologyId;
     private final UUID nodeId;
     private final UUID nepId;
-    private UUID sipId;
-    private ConnectPoint cp;
+    private UUID sipId = null;
+    private ConnectPoint cp = null;
+
+    TapiNepRef(String topologyId, String nodeId, String nepId) {
+        this.topologyId = UUID.fromString(topologyId);
+        this.nodeId = UUID.fromString(nodeId);
+        this.nepId = UUID.fromString(nepId);
+    }
+
+    public static TapiNepRef create(String topologyId, String nodeId, String nepId) {
+        return new TapiNepRef(topologyId, nodeId, nepId);
+    }
 
     public String getTopologyId() {
         return topologyId.toString();
@@ -44,7 +55,9 @@
     }
 
     public String getSipId() {
-        return sipId.toString();
+        return Optional.ofNullable(sipId)
+                .map(UUID::toString)
+                .orElse(null);
     }
 
     public ConnectPoint getConnectPoint() {
@@ -61,12 +74,6 @@
         return this;
     }
 
-    public TapiNepRef(String topologyId, String nodeId, String nepId) {
-        this.topologyId = UUID.fromString(topologyId);
-        this.nodeId = UUID.fromString(nodeId);
-        this.nepId = UUID.fromString(nepId);
-    }
-
     public String toString() {
         return toStringHelper(getClass())
 //                .add("topologyId", topologyId)
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiNodeBuilder.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiNodeBuilder.java
index 868df72..21e812c 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiNodeBuilder.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiNodeBuilder.java
@@ -18,7 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
-import static org.onosproject.odtn.utils.tapi.TapiGlobalClassUtil.setNameList;
+import static org.onosproject.odtn.utils.tapi.TapiGlobalClassUtil.addNameList;
 import static org.onosproject.odtn.utils.tapi.TapiGlobalClassUtil.setUuid;
 
 import org.onosproject.net.DeviceId;
@@ -28,8 +28,6 @@
 import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topology.DefaultNode;
 import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topologycontext.DefaultTopology;
 import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topologycontext.TopologyKeys;
-import org.onosproject.yang.model.ModelObject;
-import org.onosproject.yang.model.ModelObjectData;
 import org.onosproject.yang.model.ModelObjectId;
 
 /**
@@ -39,7 +37,6 @@
 
     private Uuid topologyUuid;
     private DefaultNode node = new DefaultNode();
-    private Map<String, String> kvs = new HashMap<>();
 
     private TapiNodeBuilder() {
         setUuid(node);
@@ -54,18 +51,21 @@
         return this;
     }
 
-    public TapiNodeBuilder setNep(OwnedNodeEdgePoint nep) {
+    public TapiNodeBuilder addNep(OwnedNodeEdgePoint nep) {
         node.addToOwnedNodeEdgePoint(nep);
         return this;
     }
 
     public TapiNodeBuilder setDeviceId(DeviceId deviceId) {
+        Map<String, String> kvs = new HashMap<>();
         kvs.put(DEVICE_ID, deviceId.toString());
+        addNameList(node, kvs);
         return this;
     }
 
     @Override
-    public ModelObject getModelObject() {
+    @SuppressWarnings("unchecked")
+    public DefaultNode getModelObject() {
         return node;
     }
 
@@ -75,16 +75,13 @@
     }
 
     @Override
-    public ModelObjectData build() {
-        setNameList(node, kvs);
-
+    public ModelObjectId getModelObjectId() {
         TopologyKeys topologyKey = new TopologyKeys();
         topologyKey.uuid(topologyUuid);
-        ModelObjectId objId = ModelObjectId.builder()
+        return ModelObjectId.builder()
                 .addChild(DefaultContext.class)
                 .addChild(DefaultTopology.class, topologyKey)
                 .build();
-        return getModelObjectData(node, objId);
     }
 
 }
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiNodeRef.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiNodeRef.java
index 0fd762b..ae2a968 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiNodeRef.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiNodeRef.java
@@ -29,6 +29,15 @@
     private final UUID nodeId;
     private DeviceId deviceId;
 
+    TapiNodeRef(String topologyId, String nodeId) {
+        this.topologyId = UUID.fromString(topologyId);
+        this.nodeId = UUID.fromString(nodeId);
+    }
+
+    public static TapiNodeRef create(String topologyId, String nodeId) {
+        return new TapiNodeRef(topologyId, nodeId);
+    }
+
     public String getNodeId() {
         return nodeId.toString();
     }
@@ -37,13 +46,9 @@
         return deviceId;
     }
 
-    public void setDeviceId(DeviceId deviceId) {
+    public TapiNodeRef setDeviceId(DeviceId deviceId) {
         this.deviceId = deviceId;
-    }
-
-    public TapiNodeRef(String topologyId, String nodeId) {
-        this.topologyId = UUID.fromString(topologyId);
-        this.nodeId = UUID.fromString(nodeId);
+        return this;
     }
 
     public String toString() {
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiResolver.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiResolver.java
deleted file mode 100644
index 6ec62ff..0000000
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiResolver.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright 2018-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.odtn.utils.tapi;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.NoSuchElementException;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.ElementId;
-import org.slf4j.Logger;
-import static org.slf4j.LoggerFactory.getLogger;
-
-
-/**
- * TAPI instance resolver.
- * FIXME: This resolver should provide DCS read cache
- */
-public class TapiResolver {
-
-    private final Logger log = getLogger(getClass());
-
-    private List<TapiNodeRef> tapiNodeRefList = new ArrayList<>();
-    private List<TapiNepRef> tapiNepRefList = new ArrayList<>();
-
-
-    /**
-     * Check existence of TAPI node associated with deviceId.
-     * @param deviceId search key
-     * @return boolean
-     */
-    public boolean hasNodeRef(ElementId deviceId) {
-        return tapiNodeRefList.stream()
-                .anyMatch(node -> node.getDeviceId().equals(deviceId));
-    }
-
-    /**
-     * Check existence of TAPI nep associated with ConnectPoint.
-     * @param cp search key
-     * @return TapiNepRef
-     */
-    public boolean hasNepRef(ConnectPoint cp) {
-        return tapiNepRefList.stream()
-                .anyMatch(nep -> nep.getConnectPoint().equals(cp));
-    }
-
-    /**
-     * Check existence of TAPI nep associated with TAPI sipId.
-     * @param sipId search key
-     * @return TapiNepRef
-     */
-    public boolean hasNepRef(String sipId) {
-        return tapiNepRefList.stream()
-                .anyMatch(nep -> nep.getSipId().equals(sipId));
-    }
-
-    /**
-     * Resolve TAPI node associated with deviceId.
-     * @param deviceId search key
-     * @return TapiNodeRef
-     */
-    public TapiNodeRef getNodeRef(ElementId deviceId) {
-        TapiNodeRef ret = null;
-        try {
-            ret = tapiNodeRefList.stream()
-                    .filter(node -> node.getDeviceId().equals(deviceId))
-                    .findFirst().get();
-        } catch (NoSuchElementException e) {
-            log.error("Node not found associated with {}", deviceId);
-            throw e;
-        }
-        return ret;
-    }
-
-    /**
-     * Resolve TAPI nep associated with ConnectPoint.
-     * @param cp search key
-     * @return TapiNepRef
-     */
-    public TapiNepRef getNepRef(ConnectPoint cp) {
-        TapiNepRef ret = null;
-        try {
-            ret = tapiNepRefList.stream()
-                    .filter(nep -> nep.getConnectPoint().equals(cp))
-                    .findFirst().get();
-        } catch (NoSuchElementException e) {
-            log.error("Nep not found associated with {}", cp);
-            throw e;
-        }
-        return ret;
-    }
-
-    /**
-     * Resolve TAPI nep associated with TAPI sipId.
-     * @param sipId search key
-     * @return TapiNepRef
-     */
-    public TapiNepRef getNepRef(String sipId) {
-        TapiNepRef ret = null;
-        try {
-            ret = tapiNepRefList.stream()
-                    .filter(nep -> nep.getSipId().equals(sipId))
-                    .findFirst().get();
-        } catch (NoSuchElementException e) {
-            log.error("Nep not found associated with {}", sipId);
-            throw e;
-        }
-        return ret;
-    }
-
-    public TapiResolver addNodeRef(TapiNodeRef nodeRef) {
-        tapiNodeRefList.add(nodeRef);
-        log.info("Nodes: {}", tapiNodeRefList);
-        return this;
-    }
-
-    public TapiResolver addNepRef(TapiNepRef nepRef) {
-        tapiNepRefList.add(nepRef);
-        log.info("Neps: {}", tapiNepRefList);
-        return this;
-    }
-
-}
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiSipBuilder.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiSipBuilder.java
index a12a425..5e24b33 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiSipBuilder.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiSipBuilder.java
@@ -19,18 +19,15 @@
 import java.util.HashMap;
 import java.util.Map;
 import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Port;
 
 import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.DefaultContext;
 import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.LayerProtocolName;
 import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.Uuid;
 
-import static org.onosproject.odtn.utils.tapi.TapiGlobalClassUtil.setNameList;
+import static org.onosproject.odtn.utils.tapi.TapiGlobalClassUtil.addNameList;
 import static org.onosproject.odtn.utils.tapi.TapiGlobalClassUtil.setUuid;
 import static org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.layerprotocolname.LayerProtocolNameEnum.DSR;
 import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.tapicontext.DefaultServiceInterfacePoint;
-import org.onosproject.yang.model.ModelObject;
-import org.onosproject.yang.model.ModelObjectData;
 import org.onosproject.yang.model.ModelObjectId;
 
 /**
@@ -39,7 +36,6 @@
 public final class TapiSipBuilder extends TapiInstanceBuilder {
 
     private DefaultServiceInterfacePoint sip = new DefaultServiceInterfacePoint();
-    private Map<String, String> kvs = new HashMap<>();
 
     private TapiSipBuilder() {
         setUuid(sip);
@@ -51,36 +47,35 @@
 
     /**
      * Check this builder dealing with port for SIP or not.
-     * @param port onos port
+     * @param cp onos connectPoint
      * @return Is this builder for SIP or not
      */
-    public static boolean isSip(Port port) {
+    public static boolean isSip(ConnectPoint cp) {
         // FIXME modify this method to appropriate way
-        ConnectPoint cp = new ConnectPoint(port.element().id(), port.number());
         return cp.toString().contains("TRANSCEIVER");
     }
 
-    public TapiSipBuilder setPort(Port port) {
-        if (!isSip(port)) {
+    public TapiSipBuilder setConnectPoint(ConnectPoint cp) {
+        if (!isSip(cp)) {
             throw new IllegalStateException("Not allowed to use this port as SIP.");
         }
-        ConnectPoint cp = new ConnectPoint(port.element().id(), port.number());
+        Map<String, String> kvs = new HashMap<>();
         kvs.put(ONOS_CP, cp.toString());
+        addNameList(sip, kvs);
         sip.addToLayerProtocolName(LayerProtocolName.of(DSR));
         return this;
     }
 
     @Override
-    public ModelObjectData build() {
-        setNameList(sip, kvs);
-        ModelObjectId objId = ModelObjectId.builder()
+    public ModelObjectId getModelObjectId() {
+        return ModelObjectId.builder()
                 .addChild(DefaultContext.class)
                 .build();
-        return getModelObjectData(sip, objId);
     }
 
     @Override
-    public ModelObject getModelObject() {
+    @SuppressWarnings("unchecked")
+    public DefaultServiceInterfacePoint getModelObject() {
         return sip;
     }
 
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiTopologyBuilder.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiTopologyBuilder.java
index 82e83d7..4c96133 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiTopologyBuilder.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiTopologyBuilder.java
@@ -22,8 +22,6 @@
 import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.Uuid;
 import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.context.DefaultAugmentedTapiCommonContext;
 import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topologycontext.DefaultTopology;
-import org.onosproject.yang.model.ModelObject;
-import org.onosproject.yang.model.ModelObjectData;
 import org.onosproject.yang.model.ModelObjectId;
 
 /**
@@ -44,17 +42,17 @@
 
 
     @Override
-    public ModelObjectData build() {
+    public ModelObjectId getModelObjectId() {
 
         DefaultAugmentedTapiCommonContext topologyContext = new DefaultAugmentedTapiCommonContext();
         topologyContext.addToTopology(topology);
 
-        ModelObjectId objId = ModelObjectId.builder().addChild(DefaultContext.class).build();
-        return getModelObjectData(topologyContext, objId);
+        return ModelObjectId.builder().addChild(DefaultContext.class).build();
     }
 
     @Override
-    public ModelObject getModelObject() {
+    @SuppressWarnings("unchecked")
+    public DefaultTopology getModelObject() {
         return topology;
     }