[ONOS-4894][ONOS-4890][ONOS-4887][ONOS-4923]extension and argument
datamodel and listener + defect fix
Change-Id: Icefe046d9848935bb6c40a6d7688feb084edd65d
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
index bb3c3cc..6677a8c 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
@@ -354,7 +354,7 @@
@Override
public void detectCollidingChild(String identifierName, YangConstructType dataType)
throws DataModelException {
- if (!(getParent() instanceof YangChoice)) {
+ if (!(getParent() instanceof YangChoice || getParent() instanceof YangAugment)) {
throw new DataModelException("Internal Data Model Tree Error: Invalid/Missing holder in case " +
getName());
}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangExtension.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangExtension.java
new file mode 100644
index 0000000..b22f6d1
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangExtension.java
@@ -0,0 +1,219 @@
+/*
+ * Copyright 2016-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.
+ */
+
+package org.onosproject.yangutils.datamodel;
+
+import java.io.Serializable;
+import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
+import org.onosproject.yangutils.datamodel.utils.Parsable;
+import org.onosproject.yangutils.datamodel.utils.YangConstructType;
+
+/*-
+ * Reference RFC 6020.
+ *
+ * The "extension" statement allows the definition of new statements
+ * within the YANG language. This new statement definition can be
+ * imported and used by other modules.
+ *
+ * The statement's argument is an identifier that is the new keyword for
+ * the extension and must be followed by a block of sub-statements that
+ * holds detailed extension information. The purpose of the "extension"
+ * statement is to define a keyword, so that it can be imported and used
+ * by other modules.
+ *
+ * The extension can be used like a normal YANG statement, with the
+ * statement name followed by an argument if one is defined by the
+ * extension, and an optional block of sub-statements. The statement's
+ * name is created by combining the prefix of the module in which the
+ * extension was defined, a colon (":"), and the extension's keyword,
+ * with no interleaving whitespace. The sub-statements of an extension
+ * are defined by the extension, using some mechanism outside the scope
+ * of this specification. Syntactically, the sub-statements MUST be YANG
+ * statements, or also defined using "extension" statements.
+ *
+ * The extension's Sub-statements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | description | 7.19.3 | 0..1 | -string |
+ * | reference | 7.19.4 | 0..1 | -string |
+ * | status | 7.19.2 | 0..1 | -YangStatus |
+ * | argument | 7.17.2 | 0..1 | -string |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG extension.
+ */
+public class YangExtension
+ implements YangCommonInfo, Serializable, Parsable {
+
+ private static final long serialVersionUID = 806201605L;
+
+ /**
+ * Name of the extension.
+ */
+ private String name;
+
+ /**
+ * Name of the argument.
+ */
+ private String argumentName;
+
+ /**
+ * Description of extension.
+ */
+ private String description;
+
+ /**
+ * Reference of the extension.
+ */
+ private String reference;
+
+ /**
+ * Status of the extension.
+ */
+ private YangStatusType status = YangStatusType.CURRENT;
+
+ /**
+ * Returns the YANG name of extension.
+ *
+ * @return the name of extension as defined in YANG file
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Sets the YANG name of extension.
+ *
+ * @param name the name of extension as defined in YANG file
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * Returns the YANG argument name of extension.
+ *
+ * @return the name of argument as defined in YANG file
+ */
+ public String getArgumentName() {
+ return argumentName;
+ }
+
+ /**
+ * Sets the YANG argument name of extension.
+ *
+ * @param argumentName the name of argument as defined in YANG file
+ */
+ public void setArgumentName(String argumentName) {
+ this.argumentName = argumentName;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the status.
+ *
+ * @return the status
+ */
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ /**
+ * Sets the status.
+ *
+ * @param status the status to set
+ */
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ /**
+ * Returns the type of the data.
+ *
+ * @return returns EXTENSION_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.EXTENSION_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ // TODO : to be implemented
+ }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
index 81bbd41..f9b1e87 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
@@ -231,6 +231,11 @@
private List<YangResolutionInfo> augmentResolutionList;
/**
+ * extension list.
+ */
+ private List<YangExtension> extensionList;
+
+ /**
* Creates a YANG node of module type.
*/
public YangModule() {
@@ -247,6 +252,7 @@
includeList = new LinkedList<YangInclude>();
listOfLeaf = new LinkedList<YangLeaf>();
listOfLeafList = new LinkedList<YangLeafList>();
+ extensionList = new LinkedList<YangExtension>();
}
/**
@@ -557,6 +563,33 @@
}
/**
+ * Adds extension in extension list.
+ *
+ * @param extension the extension to be added
+ */
+ public void addExtension(YangExtension extension) {
+ getExtensionList().add(extension);
+ }
+
+ /**
+ * Returns the extension list.
+ *
+ * @return the extension list
+ */
+ public List<YangExtension> getExtensionList() {
+ return extensionList;
+ }
+
+ /**
+ * Sets the extension list.
+ *
+ * @param extensionList the list of extension
+ */
+ public void setExtensionList(List<YangExtension> extensionList) {
+ this.extensionList = extensionList;
+ }
+
+ /**
* Returns the type of the parsed data.
*
* @return returns MODULE_DATA
@@ -639,7 +672,7 @@
leafrefResolutionList.add(resolutionInfo);
} else if (type == ResolvableType.YANG_BASE) {
baseResolutionList.add(resolutionInfo);
- } else if (type == ResolvableType.YANG_AUGMENT) {
+ } else if (type == ResolvableType.YANG_AUGMENT) {
augmentResolutionList.add(resolutionInfo);
} else if (type == ResolvableType.YANG_IDENTITYREF) {
identityrefResolutionList.add(resolutionInfo);
@@ -659,7 +692,7 @@
leafrefResolutionList = resolutionList;
} else if (type == ResolvableType.YANG_BASE) {
baseResolutionList = resolutionList;
- } else if (type == ResolvableType.YANG_AUGMENT) {
+ } else if (type == ResolvableType.YANG_AUGMENT) {
augmentResolutionList = resolutionList;
} else if (type == ResolvableType.YANG_IDENTITYREF) {
identityrefResolutionList = resolutionList;
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java
index 438dc1f..f8bec7c 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java
@@ -224,6 +224,11 @@
private List<YangResolutionInfo> identityrefResolutionList;
/**
+ * extension list.
+ */
+ private List<YangExtension> extensionList;
+
+ /**
* Augment resolution list.
*/
private List<YangResolutionInfo> augmentResolutionList;
@@ -244,6 +249,7 @@
includeList = new LinkedList<YangInclude>();
listOfLeaf = new LinkedList<YangLeaf>();
listOfLeafList = new LinkedList<YangLeafList>();
+ extensionList = new LinkedList<YangExtension>();
}
/**
@@ -601,7 +607,7 @@
leafrefResolutionList.add(resolutionInfo);
} else if (type == ResolvableType.YANG_BASE) {
baseResolutionList.add(resolutionInfo);
- } else if (type == ResolvableType.YANG_AUGMENT) {
+ } else if (type == ResolvableType.YANG_AUGMENT) {
augmentResolutionList.add(resolutionInfo);
} else if (type == ResolvableType.YANG_IDENTITYREF) {
identityrefResolutionList.add(resolutionInfo);
@@ -621,7 +627,7 @@
leafrefResolutionList = resolutionList;
} else if (type == ResolvableType.YANG_BASE) {
baseResolutionList = resolutionList;
- } else if (type == ResolvableType.YANG_AUGMENT) {
+ } else if (type == ResolvableType.YANG_AUGMENT) {
augmentResolutionList = resolutionList;
} else if (type == ResolvableType.YANG_IDENTITYREF) {
identityrefResolutionList = resolutionList;
@@ -684,4 +690,31 @@
public void setListOfFeature(List<YangFeature> listOfFeature) {
this.listOfFeature = listOfFeature;
}
+
+ /**
+ * Adds extension in extension list.
+ *
+ * @param extension the extension to be added
+ */
+ public void addExtension(YangExtension extension) {
+ getExtensionList().add(extension);
+ }
+
+ /**
+ * Returns the extension list.
+ *
+ * @return the extension list
+ */
+ public List<YangExtension> getExtensionList() {
+ return extensionList;
+ }
+
+ /**
+ * Sets the extension list.
+ *
+ * @param extensionList the list of extension
+ */
+ public void setExtensionList(List<YangExtension> extensionList) {
+ this.extensionList = extensionList;
+ }
}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/YangConstructType.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/YangConstructType.java
index efe5620..e0dd8e3 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/YangConstructType.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/YangConstructType.java
@@ -382,7 +382,12 @@
/**
* Identifies the YANG anyxml element parsed data.
*/
- ANYXML_DATA;
+ ANYXML_DATA,
+
+ /**
+ * Identifies the YANG argument element parsed data.
+ */
+ ARGUMENT_DATA;
/**
* Returns the YANG construct keyword corresponding to enum values.
@@ -539,6 +544,8 @@
return "deviation";
case ANYXML_DATA:
return "anyxml";
+ case ARGUMENT_DATA:
+ return "argument";
default:
return "yang";
}