[ONOS-4991][ONOS-4994] Leafref and translator issue fixes
Change-Id: I583ff24e987a680706025f43979469edeb523b50
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaAttributeInfo.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaAttributeInfo.java
index 0f64e2f..1ffbc6e 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaAttributeInfo.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaAttributeInfo.java
@@ -19,6 +19,9 @@
import org.onosproject.yangutils.datamodel.YangType;
import org.onosproject.yangutils.translator.exception.TranslatorException;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.isTypeLeafref;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.isTypeNameLeafref;
+
/**
* Represents the attribute info corresponding to class/interface generated.
*/
@@ -235,6 +238,10 @@
YangType<?> attributeType, boolean isQualifiedAccess,
boolean isListAttribute) {
+ if (attributeType != null) {
+ attributeType = isTypeLeafref(attributeType);
+ }
+ attributeName = isTypeNameLeafref(attributeName, attributeType);
JavaAttributeInfo newAttr = new JavaAttributeInfo();
newAttr.setImportInfo(importInfo);
newAttr.setAttributeName(attributeName);
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java
index 2534756..afcb61a 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java
@@ -17,16 +17,16 @@
package org.onosproject.yangutils.translator.tojava;
import java.io.IOException;
-
import org.onosproject.yangutils.datamodel.TraversalType;
import org.onosproject.yangutils.datamodel.YangInput;
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangNodeType;
import org.onosproject.yangutils.datamodel.YangOutput;
+import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
+import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
import org.onosproject.yangutils.translator.exception.InvalidNodeForTranslatorException;
import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
-import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
+
import static org.onosproject.yangutils.datamodel.TraversalType.CHILD;
import static org.onosproject.yangutils.datamodel.TraversalType.PARENT;
import static org.onosproject.yangutils.datamodel.TraversalType.ROOT;
@@ -279,14 +279,15 @@
((TempJavaCodeFragmentFilesContainer) node).getTempJavaCodeFragmentFiles().freeTemporaryResources(true);
} else {
- JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) getRootNode()).getJavaFileInfo();
- if (javaFileInfo != null) {
- searchAndDeleteTempDir(javaFileInfo.getBaseCodeGenPath() +
- javaFileInfo.getPackageFilePath());
- } else {
- searchAndDeleteTempDir(yangPlugin.getManagerCodeGenDir());
+ if (getRootNode() != null) {
+ JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) getRootNode()).getJavaFileInfo();
+ if (javaFileInfo != null) {
+ searchAndDeleteTempDir(javaFileInfo.getBaseCodeGenPath() +
+ javaFileInfo.getPackageFilePath());
+ } else {
+ searchAndDeleteTempDir(yangPlugin.getManagerCodeGenDir());
+ }
}
-
}
}
@@ -320,7 +321,7 @@
YangNode child = parentNode.getChild();
TraversalType curTraversal = ROOT;
if (child == null) {
- throw new IllegalArgumentException("given parent node does not contain any child nodes");
+ throw new IllegalArgumentException("Given parent node does not contain any child nodes");
}
while (child != null) {
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaEventFragmentFiles.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaEventFragmentFiles.java
index 9ca6b4e..cf8e73e 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaEventFragmentFiles.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaEventFragmentFiles.java
@@ -20,12 +20,10 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaGroupingTranslator;
-import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
+import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
@@ -490,15 +488,8 @@
throws IOException {
JavaFileInfo parentInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
- YangNode childNode = curNode.getChild();
-
- // Skip grouping, as it wont have the package name.
- while (childNode instanceof YangJavaGroupingTranslator) {
- childNode = childNode.getNextSibling();
- }
- JavaFileInfo childInfo = ((JavaFileInfoContainer) childNode).getJavaFileInfo();
return getFileObject(getDirPath(parentInfo), name, JAVA_FILE_EXTENSION,
- childInfo.getBaseCodeGenPath());
+ parentInfo.getPluginConfig().getCodeGenDir());
}
/**
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 7cec2df..998cc0f 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
@@ -16,10 +16,13 @@
package org.onosproject.yangutils.translator.tojava.javamodel;
import java.io.IOException;
-
+import org.onosproject.yangutils.datamodel.YangDerivedInfo;
+import org.onosproject.yangutils.datamodel.YangType;
import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaTypeDef;
import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yangutils.translator.exception.InvalidNodeForTranslatorException;
import org.onosproject.yangutils.translator.exception.TranslatorException;
import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
@@ -105,6 +108,15 @@
*/
@Override
public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
+ YangType typeInTypeDef = this.getTypeDefBaseType();
+ if (typeInTypeDef.getDataType() == YangDataTypes.DERIVED) {
+ YangDerivedInfo derivedInfo = (YangDerivedInfo) typeInTypeDef.getDataTypeExtendedInfo();
+ if (derivedInfo.getEffectiveBuiltInType() == YangDataTypes.LEAFREF) {
+ throw new InvalidNodeForTranslatorException();
+ }
+ } else if (typeInTypeDef.getDataType() == YangDataTypes.LEAFREF) {
+ throw new InvalidNodeForTranslatorException();
+ }
try {
generateCodeOfNode(this, yangPlugin);
} catch (IOException e) {
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
index 55c64e4..2c00cc2 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
@@ -20,13 +20,15 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-
import org.onosproject.yangutils.datamodel.YangAtomicPath;
import org.onosproject.yangutils.datamodel.YangAugment;
+import org.onosproject.yangutils.datamodel.YangLeafRef;
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
+import org.onosproject.yangutils.datamodel.YangType;
import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
import org.onosproject.yangutils.translator.exception.TranslatorException;
import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
@@ -80,6 +82,7 @@
import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getAugmentedNodesPackage;
import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
+import static org.onosproject.yangutils.utils.UtilConstants.LEAFREF;
import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
@@ -705,4 +708,31 @@
}
+ /**
+ * Checks if the type name is leafref and returns the effective type name.
+ *
+ * @param attributeName name of the current type
+ * @param attributeType effective type
+ * @return name of the effective type
+ */
+ public static String isTypeNameLeafref(String attributeName, YangType<?> attributeType) {
+ if (attributeName.equalsIgnoreCase(LEAFREF)) {
+ return attributeType.getDataTypeName();
+ }
+ return attributeName;
+ }
+
+ /**
+ * Checks if the type is leafref and returns the effective type.
+ *
+ * @param attributeType current type
+ * @return effective type
+ */
+ public static YangType isTypeLeafref(YangType<?> attributeType) {
+ if (attributeType.getDataType() == YangDataTypes.LEAFREF) {
+ YangLeafRef leafRef = (YangLeafRef) attributeType.getDataTypeExtendedInfo();
+ return leafRef.getEffectiveDataType();
+ }
+ return attributeType;
+ }
}
diff --git a/plugin/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java b/plugin/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
index 0d76d7b..2312ba7 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
@@ -1022,11 +1022,11 @@
* List of keywords in java, this is used for checking if the input does not contain these keywords.
*/
public static final List<String> JAVA_KEY_WORDS = Arrays.asList(
- "abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue",
- "default", "do", "double", "else", "extends", "false", "final", "finally", "float", "for", "goto", "if",
- "implements", "import", "instanceof", "int", "interface", "long", "native", "new", "null", "package",
- "private", "protected", "public", "return", "short", "static", "strictfp", "super", "switch",
- "synchronized", "this", "throw", "throws", "transient", "true", "try", "void", "volatile", "while");
+ "abstract", "continue", "for", "new", "switch", "assert", "default", "goto", "package", "synchronized",
+ "boolean", "do", "if", "private", "this", "break", "double", "implements", "protected", "throw", "byte",
+ "else", "import", "public", "throws", "case", "enum", "instanceof", "return", "transient", "catch",
+ "extends", "int", "short", "try", "char", "final", "interface", "static", "void", "class", "finally",
+ "long", "strictfp", "volatile", "const", "float", "native", "super", "while");
/**
* Static attribute for regex for all the special characters.