Inter-File grouping defect fix
Change-Id: Ic77bab1ccb4a770ad09666127ec2ed7c35b7bbad
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIdentityRef.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIdentityRef.java
index dd20d07..c1f4b84 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIdentityRef.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIdentityRef.java
@@ -287,4 +287,9 @@
public void setInGrouping(boolean inGrouping) {
this.inGrouping = inGrouping;
}
+
+ @Override
+ public YangNode clone(YangUses yangUses) throws CloneNotSupportedException {
+ return (YangNode) super.clone();
+ }
}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
index 2070669..4cfd430 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
@@ -341,7 +341,9 @@
@Override
public YangLeaf clone()
throws CloneNotSupportedException {
- return (YangLeaf) super.clone();
+ YangLeaf cl = (YangLeaf) super.clone();
+ cl.yangSchemaNodeIdentifier = yangSchemaNodeIdentifier.clone();
+ return cl;
}
/**
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
index 9398249..b7f6931 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
@@ -359,7 +359,9 @@
@Override
public YangLeafList clone()
throws CloneNotSupportedException {
- return (YangLeafList) super.clone();
+ YangLeafList cll = (YangLeafList) super.clone();
+ cll.yangSchemaNodeIdentifier = yangSchemaNodeIdentifier.clone();
+ return cll;
}
/**
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNameSpace.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNameSpace.java
deleted file mode 100644
index 72da0fa..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNameSpace.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * 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 "namespace" statement defines the XML namespace that all
- * identifiers defined by the module are qualified by, with the
- * exception of data node identifiers defined inside a grouping.
- * The argument to the "namespace" statement is the URI of the
- * namespace.
- */
-
-/**
- * Represents name space to be used for the XML data tree.
- */
-public class YangNameSpace extends DefaultLocationInfo
- implements Parsable, Serializable {
-
- private static final long serialVersionUID = 806201647L;
-
- private String uri;
-
- /**
- * Creats a YANG name space object.
- */
- public YangNameSpace() {
- }
-
- /**
- * Returns the name space URI.
- *
- * @return the URI
- */
- public String getUri() {
- return uri;
- }
-
- /**
- * Sets the name space URI.
- *
- * @param uri the URI to set
- */
- public void setUri(String uri) {
- this.uri = uri;
- }
-
- /**
- * Returns the type of the parsed data.
- *
- * @return returns NAMESPACE_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.NAMESPACE_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 auto-generated method stub, to be implemented by parser
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
index 92af172..e57cc82 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
@@ -19,6 +19,7 @@
import org.onosproject.yangutils.datamodel.utils.Parsable;
import java.io.Serializable;
+import java.util.HashMap;
import java.util.Map;
import static org.onosproject.yangutils.datamodel.TraversalType.CHILD;
@@ -413,6 +414,9 @@
clonedNode.setChild(null);
clonedNode.setNextSibling(null);
clonedNode.setPreviousSibling(null);
+ clonedNode.yangSchemaNodeIdentifier =
+ clonedNode.yangSchemaNodeIdentifier.clone();
+ clonedNode.ysnContextInfoMap = new HashMap<>();
return clonedNode;
}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeIdentifier.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeIdentifier.java
index 558e3a0..13ac938 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeIdentifier.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeIdentifier.java
@@ -24,7 +24,7 @@
* Namespace will be present only if node is module/sub-module or augmented node.
*/
public class YangSchemaNodeIdentifier extends DefaultLocationInfo
- implements Serializable {
+ implements Serializable, Cloneable {
private static final long serialVersionUID = 806201648L;
@@ -104,6 +104,11 @@
}
@Override
+ public YangSchemaNodeIdentifier clone() throws CloneNotSupportedException {
+ return (YangSchemaNodeIdentifier) super.clone();
+ }
+
+ @Override
public int hashCode() {
return Objects.hash(name, namespace);
}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java
index 6143483..04f579f 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java
@@ -549,4 +549,14 @@
public void setName(String name) {
nodeIdentifier.setName(name);
}
+
+ @Override
+ public YangNode clone(YangUses node) throws CloneNotSupportedException {
+ YangNode clnNode = (YangNode) super.clone();
+ clnNode.setParent(null);
+ clnNode.setChild(null);
+ clnNode.setNextSibling(null);
+ clnNode.setPreviousSibling(null);
+ return clnNode;
+ }
}
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/YangJavaModelUtils.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/YangJavaModelUtils.java
index 2a1c8b4..2c019f6 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/YangJavaModelUtils.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/YangJavaModelUtils.java
@@ -334,11 +334,28 @@
info));
}
- YangSchemaNode node = getRefSchema(info);
- if (node != null) {
+ /*
+ * For second level and below cloned nodes code shouldn't be
+ * generated also they needn't be added in parent, since
+ * generated code will be under grouping, cloned node is only
+ * used for YANG namespace.
+ */
+ YangNode n = (YangNode) info;
+ if (n.getReferredSchema() != null &&
+ !(((YangNode) n.getReferredSchema()).getParent() instanceof
+ YangGrouping)) {
+ return;
+ }
+ /*
+ * If first level cloned node, then it needs to be imported in the
+ * generated code. In case uses under grouping, it would further have
+ * second level uses, hence needn't add in parent grouping.
+ */
+ YangSchemaNode rn = getRefSchema(info);
+ if (rn != null) {
YangNode parent = ((YangNode) info).getParent();
if (!(parent instanceof YangGrouping)) {
- addCurNodeInfoInParentTempFile((YangNode) node, isMultiInstance,
+ addCurNodeInfoInParentTempFile((YangNode) rn, isMultiInstance,
config, parent);
}
return;
@@ -647,4 +664,22 @@
}
return AUGMENTED + name;
}
+
+ /**
+ * Generated java code during exit.
+ *
+ * @param type generated file type
+ * @param node current YANG node
+ * @throws IOException when fails to generate java files
+ */
+ public static void generateJava(int type, YangNode node)
+ throws IOException {
+ /*
+ * Call for file generation if node is not under uses.
+ */
+ if(node.getReferredSchema() == null) {
+ ((TempJavaCodeFragmentFilesContainer) node)
+ .getTempJavaCodeFragmentFiles().generateJavaFile(type, node);
+ }
+ }
}
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCaseTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCaseTranslator.java
index b1d8a1c..eccbf1c 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCaseTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCaseTranslator.java
@@ -27,6 +27,7 @@
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateJava;
/**
* Represents case information extended to support java code generation.
@@ -109,6 +110,9 @@
@Override
public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
try {
+ if (getReferredSchema() != null) {
+ return;
+ }
generateCodeOfAugmentableNode(this, yangPlugin);
} catch (IOException e) {
throw new TranslatorException(
@@ -126,7 +130,7 @@
@Override
public void generateCodeExit() throws TranslatorException {
try {
- getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
+ generateJava(GENERATE_INTERFACE_WITH_BUILDER, this);
} catch (IOException e) {
throw new TranslatorException("Failed to generate code for case node " +
getName() + " in " +
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoiceTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoiceTranslator.java
index d37b59f..0caf8cc 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoiceTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoiceTranslator.java
@@ -28,6 +28,7 @@
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeAndUpdateInParent;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateJava;
/**
* Represents choice information extended to support java code generation.
@@ -111,9 +112,6 @@
public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
try {
generateCodeAndUpdateInParent(this, yangPlugin, false);
- if (getReferredSchema() != null) {
- throw new InvalidNodeForTranslatorException();
- }
} catch (IOException e) {
throw new TranslatorException(
"Failed to prepare generate code entry for choice node " +
@@ -130,7 +128,7 @@
@Override
public void generateCodeExit() throws TranslatorException {
try {
- getTempJavaCodeFragmentFiles().generateJavaFile(INTERFACE_MASK, this);
+ generateJava(INTERFACE_MASK, this);
} catch (IOException e) {
throw new TranslatorException("Failed to generate code for choice node " +
getName() + " in " +
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaContainerTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaContainerTranslator.java
index 4efaf2c..6f9fd51 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaContainerTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaContainerTranslator.java
@@ -28,6 +28,7 @@
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeAndUpdateInParent;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateJava;
/**
* Represents container information extended to support java code generation.
@@ -111,9 +112,6 @@
public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
try {
generateCodeAndUpdateInParent(this, yangPlugin, false);
- if (getReferredSchema() != null) {
- throw new InvalidNodeForTranslatorException();
- }
} catch (IOException e) {
throw new TranslatorException(
"Failed to prepare generate code entry for container node " +
@@ -132,7 +130,7 @@
@Override
public void generateCodeExit() throws TranslatorException {
try {
- getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
+ generateJava(GENERATE_INTERFACE_WITH_BUILDER, this);
} catch (IOException e) {
throw new TranslatorException("Failed to generate code for container node " +
getName() + " in " +
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumerationTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumerationTranslator.java
index f4273b5..ac00154 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumerationTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumerationTranslator.java
@@ -29,6 +29,7 @@
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfNode;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateJava;
import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.FAIL_AT_ENTRY;
import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.FAIL_AT_EXIT;
import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getErrorMsg;
@@ -130,7 +131,7 @@
@Override
public void generateCodeExit() throws TranslatorException {
try {
- getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_ENUM_CLASS, this);
+ generateJava(GENERATE_ENUM_CLASS, this);
} catch (IOException e) {
throw new TranslatorException(getErrorMsg(FAIL_AT_EXIT, this,
e.getLocalizedMessage()));
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaListTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaListTranslator.java
index 6ab5a03..d8f26bd 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaListTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaListTranslator.java
@@ -28,6 +28,7 @@
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeAndUpdateInParent;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateJava;
/**
* Represents YANG list information extended to support java code generation.
@@ -111,9 +112,6 @@
public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
try {
generateCodeAndUpdateInParent(this, yangPlugin, true);
- if (getReferredSchema() != null) {
- throw new InvalidNodeForTranslatorException();
- }
} catch (IOException e) {
throw new TranslatorException(
"Failed to prepare generate code entry for list node " +
@@ -132,7 +130,7 @@
@Override
public void generateCodeExit() throws TranslatorException {
try {
- getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
+ generateJava(GENERATE_INTERFACE_WITH_BUILDER, this);
} catch (IOException e) {
throw new TranslatorException("Failed to generate code for list node " +
getName() + " in " +
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDefTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDefTranslator.java
index 8f2c300..4605c52 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDefTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDefTranslator.java
@@ -32,6 +32,7 @@
import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfNode;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateJava;
/**
* Represents type define information extended to support java code generation.
@@ -150,7 +151,7 @@
@Override
public void generateCodeExit() throws TranslatorException {
try {
- getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_TYPEDEF_CLASS, this);
+ generateJava(GENERATE_TYPEDEF_CLASS, this);
} catch (IOException e) {
throw new TranslatorException(
"Failed to prepare generate code for typedef node " + getName()
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnionTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnionTranslator.java
index 3ca66f9..ce04f68 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnionTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnionTranslator.java
@@ -28,6 +28,7 @@
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfNode;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateJava;
/**
* Represents union information extended to support java code generation.
@@ -131,7 +132,7 @@
@Override
public void generateCodeExit() throws TranslatorException {
try {
- getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_UNION_CLASS, this);
+ generateJava(GENERATE_UNION_CLASS, this);
} catch (IOException e) {
throw new TranslatorException("Failed to generate code for union node " + getName() + " in " +
getLineNumber() + " at " +