[ONOS-5876] YANG serializer helper utilits API
Change-Id: I0d04320fb16b1acd7bfef6dc76bb1f37bca2ce0c
diff --git a/model/src/main/java/org/onosproject/yang/model/DataNode.java b/model/src/main/java/org/onosproject/yang/model/DataNode.java
index 71ca3fd..cb56d51 100644
--- a/model/src/main/java/org/onosproject/yang/model/DataNode.java
+++ b/model/src/main/java/org/onosproject/yang/model/DataNode.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2017-present Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -48,18 +48,26 @@
*/
MULTI_INSTANCE_LEAF_VALUE_NODE
}
-
/**
* Type of node in data store.
*/
protected Type type;
-
/**
* Identifies a node uniquely among its siblings.
*/
protected NodeKey key;
/**
+ * Creates an instance of data node.
+ *
+ * @param builder data node builder
+ */
+ protected DataNode(Builder builder) {
+ type = builder.type;
+ key = builder.key;
+ }
+
+ /**
* Returns the type of node.
*
* @return node type
@@ -78,16 +86,6 @@
}
/**
- * Creates an instance of data node.
- *
- * @param builder data node builder
- */
- protected DataNode(Builder builder) {
- type = builder.type;
- key = builder.key;
- }
-
- /**
* Returns data node builder for a given data node.
* It contains all the attributes from the data node. It is to provide
* mutability of data node using builder pattern.
@@ -119,6 +117,12 @@
protected NodeKey.NodeKeyBuilder keyBuilder;
/**
+ * Application related information, this enables application to use
+ * this builder as there work bench.
+ */
+ protected Object AppInfo;
+
+ /**
* Parent data node
*/
protected InnerNode.Builder parent;
@@ -279,5 +283,25 @@
}
return parent;
}
+
+ /**
+ * Returns application information. This enables application to use
+ * this builder as there work bench.
+ *
+ * @return application information
+ */
+ public Object appInfo() {
+ return AppInfo;
+ }
+
+ /**
+ * Sets application information. This enables application to use
+ * this builder as there work bench.
+ *
+ * @param appInfo application related information
+ */
+ public void appInfo(Object appInfo) {
+ AppInfo = appInfo;
+ }
}
}
diff --git a/model/src/main/java/org/onosproject/yang/model/ResourceId.java b/model/src/main/java/org/onosproject/yang/model/ResourceId.java
index 1e75b54..ffedb13 100644
--- a/model/src/main/java/org/onosproject/yang/model/ResourceId.java
+++ b/model/src/main/java/org/onosproject/yang/model/ResourceId.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2017-present Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -49,6 +49,15 @@
}
/**
+ * Retrieves a new resource builder.
+ *
+ * @return resource builder
+ */
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ /**
* Returns the list of node key used to uniquely identify the branch in the
* logical tree starting from root.
*
@@ -58,15 +67,6 @@
return nodeKeyList;
}
- /**
- * Retrieves a new resource builder.
- *
- * @return resource builder
- */
- public static Builder builder() {
- return new Builder();
- }
-
@Override
public int hashCode() {
return hash(nodeKeyList);
@@ -95,6 +95,12 @@
*/
public static class Builder {
+ /**
+ * Application related information, this enables application to use
+ * this builder as there work bench.
+ */
+ protected Object AppInfo;
+
private List<NodeKey> nodeKeyList = new LinkedList<>();
private NodeKey.NodeKeyBuilder curKeyBuilder = null;
@@ -178,5 +184,25 @@
nodeKeyList.add(curKeyBuilder.build());
return new ResourceId(this);
}
+
+ /**
+ * Returns application information. This enables application to use
+ * this builder as there work bench.
+ *
+ * @return application information
+ */
+ public Object appInfo() {
+ return AppInfo;
+ }
+
+ /**
+ * Sets application information. This enables application to use
+ * this builder as there work bench.
+ *
+ * @param appInfo application related information
+ */
+ public void appInfo(Object appInfo) {
+ AppInfo = appInfo;
+ }
}
}
diff --git a/runtime/pom.xml b/runtime/pom.xml
index 09d4b8b..b287993 100644
--- a/runtime/pom.xml
+++ b/runtime/pom.xml
@@ -29,6 +29,7 @@
<modules>
<module>api</module>
+ <module>utils</module>
</modules>
<dependencies>
diff --git a/runtime/utils/pom.xml b/runtime/utils/pom.xml
new file mode 100644
index 0000000..80ff720
--- /dev/null
+++ b/runtime/utils/pom.xml
@@ -0,0 +1,55 @@
+<!--
+ ~ Copyright (c) 2017. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ ~ Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
+ ~ Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
+ ~ Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
+ ~ Vestibulum commodo. Ut rhoncus gravida arcu.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <dependencies>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-model</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-runtime-api</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-runtime</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>onos-yang-runtime-utils</artifactId>
+ <packaging>jar</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>3.0.2</version>
+ <configuration>
+ <skipIfEmpty>true</skipIfEmpty>
+ </configuration>
+ <executions>
+ <execution>
+ <id>default</id>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/SerializerHelper.java b/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/SerializerHelper.java
new file mode 100644
index 0000000..a717942
--- /dev/null
+++ b/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/SerializerHelper.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2017. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
+ * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
+ * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
+ * Vestibulum commodo. Ut rhoncus gravida arcu.
+ */
+
+package org.onosproject.yang.runtime.utils;
+
+import org.onosproject.yang.model.DataNode;
+import org.onosproject.yang.model.ResourceId;
+import org.onosproject.yang.runtime.api.YangSerializerContext;
+
+import java.util.List;
+
+import static org.onosproject.yang.model.DataNode.Builder;
+
+/**
+ * Representation of serializer helper utilities, serializer can use them to
+ * build the data node and resource identifier without obtaining the schema
+ * context.
+ */
+public final class SerializerHelper {
+
+ /**
+ * Initializes resource identifier builder with YANG serializer context
+ * information.
+ *
+ * @param context YANG serializer context
+ * @return resource identifier builder
+ */
+ public static ResourceId.Builder initializeResourceId(
+ YangSerializerContext context) {
+ // TODO implementation
+ return null;
+ }
+
+ /**
+ * Adds to resource identifier builder. To add a top level logical
+ * resource identifier ("/"), name as "/" should be provided.
+ * <p>
+ * Builder and name are mandatory inputs, In case namespace is null,
+ * namespace of last key in the keylist of resource identifier builder will
+ * be used. Value should only be provided for leaf-list/list.
+ * <p>
+ * This API will also carry out necessary schema related validations.
+ *
+ * @param builder resource identifier builder
+ * @param name name of node
+ * @param namespace namespace of node
+ * @param value value of node
+ * @return resource identifier builder
+ * @throws IllegalArgumentException when given input is not as per the
+ * schema context
+ * @throws IllegalStateException when a key is added under a atomic child
+ */
+ public static ResourceId.Builder addToResourceId(
+ ResourceId.Builder builder, String name, String namespace,
+ String value) {
+ // TODO implementation
+ return null;
+ }
+
+ /**
+ * Adds to resource identifier builder, this API will be used by
+ * applications which are not aware about the schema name association
+ * with key's value.
+ * <p>
+ * Builder and name are mandatory inputs, In case namespace is null,
+ * namespace of last key in the keylist of resource identifier builder will
+ * be used. Value should only be provided for leaf-list/list.
+ * <p>
+ * This API will also carry out necessary schema related validations.
+ *
+ * @param builder resource identifier builder
+ * @param name name of node
+ * @param namespace namespace of node
+ * @param value ordered list of values
+ * @return resource identifier builder
+ * @throws IllegalArgumentException when given input is not as per the
+ * schema context
+ * @throws IllegalStateException when a key is added under a atomic child
+ */
+ public static ResourceId.Builder addToResourceId(
+ ResourceId.Builder builder, String name, String namespace,
+ List<String> value) {
+ // TODO implementation
+ return null;
+ }
+
+ /**
+ * Initializes a new data node builder.
+ *
+ * @param builder resource identifier builder
+ * @return data node builder
+ */
+ public static Builder initializeDataNode(ResourceId.Builder builder) {
+ // TODO implementation
+ return null;
+ }
+
+ /**
+ * Adds a data node to a given data node builder.
+ * <p>
+ * Name and builder is mandatory inputs. If namespace is not provided
+ * parents namespace will be added for data node. Value should be
+ * provided for leaf/leaf-list. In case of leaf-list it's expected that this
+ * API is called for each leaf-list instance. Callers aware about the node
+ * type can opt to provide data node type, implementation will carry out
+ * validations based on input type and obtained type.
+ * <p>
+ * This API will also carry out necessary schema related validations.
+ *
+ * @param builder data node builder
+ * @param name name of data node
+ * @param namespace namespace of data node
+ * @param value value of data node
+ * @param type type of data node
+ * @return data node builder with added information
+ * @throws IllegalArgumentException when given input is not as per the
+ * schema context
+ * @throws IllegalStateException when a key is added under a atomic child
+ */
+ public static Builder addDataNode(Builder builder,
+ String name, String namespace,
+ String value, DataNode type) {
+ // TODO implementation
+ return null;
+ }
+
+ /**
+ * Exits a given data node builder. It builds current data node,
+ * adds it to parent's data node builder and returns parent builder.
+ * <p>
+ * In case current data node is topmost node (which was created using
+ * last key of resource identifier), current data node will not be
+ * built and null will be returned, in such case caller is expected to
+ * build data node from builder.
+ * <p>
+ * This API will also carry out necessary exit time validations, for
+ * an example validation about all key leafs presence for a list.
+ *
+ * @param builder data node builder
+ * @return parent builder
+ */
+ public static Builder exitDataNode(Builder builder) {
+ // TODO implementation
+ return null;
+ }
+
+ /**
+ * Returns resource identifier for a given data node. This API will
+ * be used by serializer to obtain the resource identifier in the
+ * scenario when an annotation is associated with a given data node.
+ *
+ * @param builder data node builder
+ * @return resource identifier of the data node
+ */
+ public static ResourceId getResourceId(Builder builder) {
+ // TODO implementation
+ return null;
+ }
+}
diff --git a/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/package-info.java b/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/package-info.java
new file mode 100644
index 0000000..145ee65
--- /dev/null
+++ b/runtime/utils/src/main/java/org/onosproject/yang/runtime/utils/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Representation of YANG runtime utilities.
+ */
+package org.onosproject.yang.runtime.utils;
\ No newline at end of file