[ONOS-5679],[ONOS-5663] union invalid derived type defect fixed.
Change-Id: I2efb74c871103953044e62ed468b00dc1ca60b29
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java
index a0ea239..eb38fb7 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java
@@ -16,14 +16,18 @@
package org.onosproject.yangutils.datamodel;
-import java.util.LinkedList;
-import java.util.List;
-
import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
import org.onosproject.yangutils.datamodel.utils.Parsable;
import org.onosproject.yangutils.datamodel.utils.YangConstructType;
import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
+import java.util.LinkedList;
+import java.util.List;
+
+import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_NON_DATA_NODE;
+import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsg;
+import static org.onosproject.yangutils.datamodel.utils.YangConstructType.UNION_DATA;
+
/*
* Reference RFC 6020.
*
@@ -91,7 +95,7 @@
@Override
public YangSchemaNodeType getYangSchemaNodeType() {
- return YangSchemaNodeType.YANG_NON_DATA_NODE;
+ return YANG_NON_DATA_NODE;
}
@Override
@@ -99,14 +103,6 @@
return typeList;
}
- /**
- * Sets the list of YANG type.
- *
- * @param typeList list of YANG type.
- */
- public void setTypeList(List<YangType<?>> typeList) {
- this.typeList = typeList;
- }
/**
* Returns running child union number.
@@ -135,19 +131,24 @@
*/
public void addType(YangType<?> yangType)
throws DataModelException {
- if (yangType.getDataType() == YangDataTypes.EMPTY || yangType.getDataType() == YangDataTypes.LEAFREF) {
- throw new DataModelException("Union member type must not be one of the built-in types \"empty\" or " +
- "\"leafref\"" + getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + "\"");
+ YangDataTypes type = yangType.getDataType();
+ String msg = "Union member type must not be one of the built-in types" +
+ " \"empty\" or \"leafref\"";
+ switch (type) {
+ case EMPTY:
+ case LEAFREF:
+ throw new DataModelException(getErrorMsg(
+ msg, getName(), getLineNumber(), getCharPosition(),
+ getFileName()));
+
+ default:
+ typeList.add(yangType);
}
- getTypeList().add(yangType);
}
@Override
public YangConstructType getYangConstructType() {
- return YangConstructType.UNION_DATA;
+ return UNION_DATA;
}
/**
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
index 548dbac..913220b 100644
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
+++ b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
@@ -690,7 +690,7 @@
qualified = parentImportData.addImportInfo(typeInfo, className,
fileInfo.getPackage());
if (!qualified && !(curNode instanceof YangChoice) &&
- curNode.isOpTypeReq()) {
+ targetNode.isOpTypeReq()) {
String name = DEFAULT_CAPS + typeInfo.getClassInfo();
JavaQualifiedTypeInfoTranslator qInfo =
new JavaQualifiedTypeInfoTranslator();
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaTypeFragmentFiles.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaTypeFragmentFiles.java
index cb44ca3..7c9dfa5 100644
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaTypeFragmentFiles.java
+++ b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaTypeFragmentFiles.java
@@ -20,6 +20,7 @@
import org.onosproject.yangutils.datamodel.YangType;
import org.onosproject.yangutils.datamodel.YangTypeDef;
import org.onosproject.yangutils.datamodel.YangTypeHolder;
+import org.onosproject.yangutils.datamodel.YangUnion;
import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
import org.onosproject.yangutils.translator.exception.TranslatorException;
import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaTypeTranslator;
@@ -30,6 +31,7 @@
import java.util.ArrayList;
import java.util.List;
+import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsg;
import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BITS;
import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT16;
@@ -245,6 +247,32 @@
return ofStringImplTempFileHandle;
}
+ private void verifyUnionTypes(List<YangType<?>> typeList,
+ YangTypeHolder yangTypeHolder) {
+ String msg;
+ YangUnion union = (YangUnion) yangTypeHolder;
+ for (YangType<?> yangType : typeList) {
+ YangDataTypes type = yangType.getDataType();
+ switch (type) {
+ case EMPTY:
+ msg = "Union member derived type must not be one of the " +
+ "type whose built-in types is \"empty\"";
+ break;
+ case LEAFREF:
+ msg = "Union member derived type must not be one of the " +
+ "type whose built-in types is \"leafref\"";
+ break;
+ default:
+ msg = null;
+ }
+ if (msg != null) {
+ throw new TranslatorException(getErrorMsg(
+ msg, union.getName(), union.getLineNumber(), union
+ .getCharPosition(), union.getFileName()));
+ }
+ }
+ }
+
/**
* Adds all the type in the current data model node as part of the generated temporary file.
*
@@ -254,8 +282,10 @@
*/
void addTypeInfoToTempFiles(YangTypeHolder yangTypeHolder, YangPluginConfig config)
throws IOException {
-
List<YangType<?>> typeList = yangTypeHolder.getTypeList();
+ if (yangTypeHolder instanceof YangUnion) {
+ verifyUnionTypes(typeList, yangTypeHolder);
+ }
if (typeList != null) {
List<YangType<?>> types = validateTypes(typeList);
for (YangType<?> type : types) {
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
index b7928ce..116c905 100644
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
+++ b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
@@ -760,7 +760,7 @@
imports, path);
List<String> methods = new ArrayList<>();
-
+ insertDataIntoJavaFile(file, NEW_LINE);
//Add attribute strings.
try {
insertDataIntoJavaFile(file, getDataFromTempFileHandle(
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
index 66950b5..fe6a40b 100644
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
+++ b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
@@ -459,7 +459,8 @@
break;
case DEFAULT_CLASS_MASK:
appendHeaderContents(file, pkgString, importsList);
- write(file, genType, DEFAULT_CLASS, curNode, className, true);
+ write(file, genType, DEFAULT_CLASS, curNode, className,
+ curNode.isOpTypeReq());
break;
case BUILDER_CLASS_MASK:
write(file, genType, BUILDER_CLASS, curNode, className, false);
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
index 0b11fda..edf0216 100644
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
+++ b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
@@ -2028,6 +2028,7 @@
*/
public static String getToStringMethodForIdentity(String name) {
StringBuilder builder = new StringBuilder(NEW_LINE);
+ builder.append(getJavaDoc(GETTER_METHOD, name, false, null));
String returnVal = getQuotedString(name);
String methodName = getCamelCase(name, null) + TO_CAPS + STRING_DATA_TYPE;
builder.append(methodSignature(methodName, null, PUBLIC + SPACE + STATIC,
@@ -2047,6 +2048,7 @@
public static String getFromStringMethodForIdentity(String name,
String schemaName) {
StringBuilder builder = new StringBuilder(NEW_LINE);
+ builder.append(getJavaDoc(FROM_METHOD, name, false, null));
String caps = getCapitalCase(name);
String returnVal = caps + PERIOD + CLASS;
String cond = getTwoParaEqualsString(FROM_STRING_PARAM_NAME,
diff --git a/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java b/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
index 2b2a203..5c499db 100644
--- a/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
+++ b/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
@@ -406,7 +406,7 @@
private static String generateForFromString(String attribute) {
return getJavaDocStartLine(attribute, JAVA_DOC_OF
+ attribute + SPACE + FROM_STRING_METHOD_NAME + SPACE + INPUT +
- SPACE + STRING_DATA_TYPE) +
+ SPACE + STRING_DATA_TYPE + SPACE) +
getJavaDocEmptyAsteriskLine() +
getJavaDocParamLine(INPUT + SPACE + STRING_DATA_TYPE,
FROM_STRING_PARAM_NAME) +
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/TypeDefTranslatorTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/TypeDefTranslatorTest.java
index a7320de..1c5c56c 100644
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/TypeDefTranslatorTest.java
+++ b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/TypeDefTranslatorTest.java
@@ -105,6 +105,6 @@
yangPluginConfig.setCodeGenDir(DIR);
utilManager.translateToJava(yangPluginConfig);
compileCode(DIR1);
- //deleteDirectory(DIR);
+ deleteDirectory(DIR);
}
}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangXpathLinkerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangXpathLinkerTest.java
index 3cf52b5..d4bea49 100644
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangXpathLinkerTest.java
+++ b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangXpathLinkerTest.java
@@ -758,7 +758,5 @@
compileCode(dir);
deleteDirectory("target/xpath/");
assertThat(true, is(targetNode.getName().equals(targetNodeName)));
-
- deleteDirectory("target/xpath/");
}
}
diff --git a/plugin/maven/src/test/resources/typedefTranslator/union/typedefs.yang b/plugin/maven/src/test/resources/typedefTranslator/union/typedefs.yang
index 4a3d150..276efa2 100644
--- a/plugin/maven/src/test/resources/typedefTranslator/union/typedefs.yang
+++ b/plugin/maven/src/test/resources/typedefTranslator/union/typedefs.yang
@@ -9,7 +9,6 @@
type union {
type ipv4-address;
type ipv6-address;
- type leaf;
}
}