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/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);
+ }
+ }
+
}