[ONOS-4286],[ONOS-3911] YANG typedef and YANG augment
translator implementation.
Change-Id: I3e21d1cb52bcb90b935b672eee42b836c21f448b
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
index 3dffc96..077e39f 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
@@ -16,35 +16,19 @@
package org.onosproject.yangutils.translator.tojava.utils;
-import java.util.Set;
-import java.util.TreeSet;
-
import org.onosproject.yangutils.datamodel.YangDataTypes;
+import org.onosproject.yangutils.datamodel.YangDerivedInfo;
+import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo;
+import org.onosproject.yangutils.datamodel.YangTypeDef;
+import org.onosproject.yangutils.translator.exception.TranslatorException;
+import org.onosproject.yangutils.translator.tojava.HasJavaFileInfo;
+import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
+import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaTypeDef;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.BINARY;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.BITS;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.BOOLEAN;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.DECIMAL64;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.EMPTY;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.ENUMERATION;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.IDENTITYREF;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.INSTANCE_IDENTIFIER;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.INT16;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.INT32;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.INT64;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.INT8;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.LEAFREF;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.UINT16;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.UINT32;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.UINT64;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.UINT8;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.UNION;
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase;
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
+import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER;
import static org.onosproject.yangutils.utils.UtilConstants.BYTE;
@@ -52,8 +36,10 @@
import static org.onosproject.yangutils.utils.UtilConstants.INT;
import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
+import static org.onosproject.yangutils.utils.UtilConstants.JAVA_MATH;
import static org.onosproject.yangutils.utils.UtilConstants.LONG;
import static org.onosproject.yangutils.utils.UtilConstants.LONG_WRAPPER;
+import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
@@ -63,8 +49,6 @@
*/
public final class AttributesJavaDataType {
- private static Set<JavaQualifiedTypeInfo> importInfo = new TreeSet<>();
-
/**
* Creates an instance of attribute java data type.
*/
@@ -72,26 +56,6 @@
}
/**
- * Returns import info.
- *
- * @return import info
- */
- public static Set<JavaQualifiedTypeInfo> getImportInfo() {
-
- return importInfo;
- }
-
- /**
- * Adds import info to the import info set.
- *
- * @param importData import info
- */
- public static void addImportInfo(JavaQualifiedTypeInfo importData) {
-
- getImportInfo().add(importData);
- }
-
- /**
* Returns java type.
*
* @param yangType YANG type
@@ -101,48 +65,32 @@
YangDataTypes type = yangType.getDataType();
- if (type.equals(INT8)) {
- return BYTE;
- } else if (type.equals(INT16)) {
- return SHORT;
- } else if (type.equals(INT32)) {
- return INT;
- } else if (type.equals(INT64)) {
- return LONG;
- } else if (type.equals(UINT8)) {
- return SHORT;
- } else if (type.equals(UINT16)) {
- return INT;
- } else if (type.equals(UINT32)) {
- return LONG;
- } else if (type.equals(UINT64)) {
- //TODO: BIGINTEGER.
- } else if (type.equals(DECIMAL64)) {
- //TODO: DECIMAL64.
- } else if (type.equals(STRING)) {
- return STRING_DATA_TYPE;
- } else if (type.equals(BOOLEAN)) {
- return BOOLEAN_DATA_TYPE;
- } else if (type.equals(ENUMERATION)) {
- //TODO: ENUMERATION.
- } else if (type.equals(BITS)) {
- //TODO:BITS
- } else if (type.equals(BINARY)) {
- //TODO:BINARY
- } else if (type.equals(LEAFREF)) {
- //TODO:LEAFREF
- } else if (type.equals(IDENTITYREF)) {
- //TODO:IDENTITYREF
- } else if (type.equals(EMPTY)) {
- //TODO:EMPTY
- } else if (type.equals(UNION)) {
- //TODO:UNION
- } else if (type.equals(INSTANCE_IDENTIFIER)) {
- //TODO:INSTANCE_IDENTIFIER
- } else if (type.equals(DERIVED)) {
- return yangType.getDataTypeName();
+ switch (type) {
+ case INT8:
+ return BYTE;
+ case INT16:
+ return SHORT;
+ case INT32:
+ return INT;
+ case INT64:
+ return LONG;
+ case UINT8:
+ return SHORT;
+ case UINT16:
+ return INT;
+ case UINT32:
+ return LONG;
+ case UINT64:
+ return BIG_INTEGER;
+ case DECIMAL64:
+ //TODO: DECIMAL64.
+ case STRING:
+ return STRING_DATA_TYPE;
+ case BOOLEAN:
+ return BOOLEAN_DATA_TYPE;
+ default:
+ throw new TranslatorException("given data type is not supported.");
}
- return null;
}
/**
@@ -157,75 +105,80 @@
YangDataTypes type = yangType.getDataType();
if (isListAttr) {
- if (type.equals(INT8)) {
- return BYTE_WRAPPER;
- } else if (type.equals(INT16)) {
- return SHORT_WRAPPER;
- } else if (type.equals(INT32)) {
- return INTEGER_WRAPPER;
- } else if (type.equals(INT64)) {
- return LONG_WRAPPER;
- } else if (type.equals(UINT8)) {
- return SHORT_WRAPPER;
- } else if (type.equals(UINT16)) {
- return INTEGER_WRAPPER;
- } else if (type.equals(UINT32)) {
- return LONG_WRAPPER;
- } else if (type.equals(UINT64)) {
- //TODO: BIGINTEGER.
- } else if (type.equals(DECIMAL64)) {
- //TODO: DECIMAL64.
- } else if (type.equals(STRING)) {
- return STRING_DATA_TYPE;
- } else if (type.equals(BOOLEAN)) {
- return BOOLEAN_WRAPPER;
- } else if (type.equals(ENUMERATION)) {
- //TODO: ENUMERATION.
- } else if (type.equals(BITS)) {
- //TODO:BITS
- } else if (type.equals(BINARY)) {
- //TODO:BINARY
- } else if (type.equals(LEAFREF)) {
- //TODO:LEAFREF
- } else if (type.equals(IDENTITYREF)) {
- //TODO:IDENTITYREF
- } else if (type.equals(EMPTY)) {
- //TODO:EMPTY
- } else if (type.equals(UNION)) {
- //TODO:UNION
- } else if (type.equals(INSTANCE_IDENTIFIER)) {
- //TODO:INSTANCE_IDENTIFIER
- } else if (type.equals(DERIVED)) {
- return getCaptialCase(getCamelCase(yangType.getDataTypeName(), null));
+ switch (type) {
+ case INT8:
+ return BYTE_WRAPPER;
+ case INT16:
+ return SHORT_WRAPPER;
+ case INT32:
+ return INTEGER_WRAPPER;
+ case INT64:
+ return LONG_WRAPPER;
+ case UINT8:
+ return SHORT_WRAPPER;
+ case UINT16:
+ return INTEGER_WRAPPER;
+ case UINT32:
+ return LONG_WRAPPER;
+ case UINT64:
+ return BIG_INTEGER;
+ case DECIMAL64:
+ //TODO: DECIMAL64.
+ case STRING:
+ return STRING_DATA_TYPE;
+ case BOOLEAN:
+ return BOOLEAN_WRAPPER;
+ case ENUMERATION:
+ //TODO: ENUMERATION.
+ case BITS:
+ //TODO:BITS
+ case BINARY:
+ //TODO:BINARY
+ case LEAFREF:
+ //TODO:LEAFREF
+ case IDENTITYREF:
+ //TODO:IDENTITYREF
+ case EMPTY:
+ return BOOLEAN_WRAPPER;
+ case UNION:
+ //TODO:UNION
+ case INSTANCE_IDENTIFIER:
+ //TODO:INSTANCE_IDENTIFIER
+ case DERIVED:
+ return getCaptialCase(getCamelCase(yangType.getDataTypeName(), null));
+ default:
+ throw new TranslatorException("given data type is not supported.");
}
} else {
- if (type.equals(UINT64)) {
- //TODO: BIGINTEGER.
- } else if (type.equals(DECIMAL64)) {
- //TODO: DECIMAL64.
- } else if (type.equals(STRING)) {
- return STRING_DATA_TYPE;
- } else if (type.equals(ENUMERATION)) {
- //TODO: ENUMERATION.
- } else if (type.equals(BITS)) {
- //TODO:BITS
- } else if (type.equals(BINARY)) {
- //TODO:BINARY
- } else if (type.equals(LEAFREF)) {
- //TODO:LEAFREF
- } else if (type.equals(IDENTITYREF)) {
- //TODO:IDENTITYREF
- } else if (type.equals(EMPTY)) {
- //TODO:EMPTY
- } else if (type.equals(UNION)) {
- //TODO:UNION
- } else if (type.equals(INSTANCE_IDENTIFIER)) {
- //TODO:INSTANCE_IDENTIFIER
- } else if (type.equals(DERIVED)) {
- return getCaptialCase(getCamelCase(yangType.getDataTypeName(), null));
+ switch (type) {
+ case UINT64:
+ return BIG_INTEGER;
+ case DECIMAL64:
+ //TODO: DECIMAL64.
+ case STRING:
+ return STRING_DATA_TYPE;
+ case ENUMERATION:
+ //TODO: ENUMERATION.
+ case BITS:
+ //TODO:BITS
+ case BINARY:
+ //TODO:BINARY
+ case LEAFREF:
+ //TODO:LEAFREF
+ case IDENTITYREF:
+ //TODO:IDENTITYREF
+ case EMPTY:
+ //TODO:EMPTY
+ case UNION:
+ //TODO:UNION
+ case INSTANCE_IDENTIFIER:
+ //TODO:INSTANCE_IDENTIFIER
+ case DERIVED:
+ return getCaptialCase(getCamelCase(yangType.getDataTypeName(), null));
+ default:
+ return null;
}
}
- return null;
}
/**
@@ -241,75 +194,108 @@
YangDataTypes type = yangType.getDataType();
if (isListAttr) {
- if (type.equals(INT8)
- || type.equals(INT16)
- || type.equals(INT32)
- || type.equals(INT64)
- || type.equals(UINT8)
- || type.equals(UINT16)
- || type.equals(UINT32)
- || type.equals(STRING)
- || type.equals(BOOLEAN)) {
- return JAVA_LANG;
- } else if (type.equals(UINT64)) {
- //TODO: BIGINTEGER.
- } else if (type.equals(DECIMAL64)) {
- //TODO: DECIMAL64.
- } else if (type.equals(ENUMERATION)) {
- //TODO: ENUMERATION.
- } else if (type.equals(BITS)) {
- //TODO:BITS
- } else if (type.equals(BINARY)) {
- //TODO:BINARY
- } else if (type.equals(LEAFREF)) {
- //TODO:LEAFREF
- } else if (type.equals(IDENTITYREF)) {
- //TODO:IDENTITYREF
- } else if (type.equals(EMPTY)) {
- //TODO:EMPTY
- } else if (type.equals(UNION)) {
- //TODO:UNION
- } else if (type.equals(INSTANCE_IDENTIFIER)) {
- //TODO:INSTANCE_IDENTIFIER
- } else if (type.equals(DERIVED)) {
- for (JavaQualifiedTypeInfo imports : getImportInfo()) {
- if (imports.getClassInfo().equals(classInfo)) {
- return imports.getPkgInfo();
- }
- }
+ switch (type) {
+ case INT8:
+ case INT16:
+ case INT32:
+ case INT64:
+ case UINT8:
+ case UINT16:
+ case UINT32:
+ case STRING:
+ case BOOLEAN:
+ return JAVA_LANG;
+ case UINT64:
+ return JAVA_MATH;
+ case DECIMAL64:
+ //TODO: DECIMAL64.
+ case ENUMERATION:
+ //TODO: ENUMERATION.
+ case BITS:
+ //TODO:BITS
+ case BINARY:
+ //TODO:BINARY
+ case LEAFREF:
+ //TODO:LEAFREF
+ case IDENTITYREF:
+ //TODO:IDENTITYREF
+ case EMPTY:
+ //TODO:EMPTY
+ case UNION:
+ //TODO:UNION
+ case INSTANCE_IDENTIFIER:
+ //TODO:INSTANCE_IDENTIFIER
+ case DERIVED:
+ return getTypDefsPackage(yangType);
+ default:
+ throw new TranslatorException("given data type is not supported.");
}
} else {
-
- if (type.equals(UINT64)) {
- //TODO: BIGINTEGER.
- } else if (type.equals(DECIMAL64)) {
- //TODO: DECIMAL64.
- } else if (type.equals(STRING)) {
- return JAVA_LANG;
- } else if (type.equals(ENUMERATION)) {
- //TODO: ENUMERATION.
- } else if (type.equals(BITS)) {
- //TODO:BITS
- } else if (type.equals(BINARY)) {
- //TODO:BINARY
- } else if (type.equals(LEAFREF)) {
- //TODO:LEAFREF
- } else if (type.equals(IDENTITYREF)) {
- //TODO:IDENTITYREF
- } else if (type.equals(EMPTY)) {
- //TODO:EMPTY
- } else if (type.equals(UNION)) {
- //TODO:UNION
- } else if (type.equals(INSTANCE_IDENTIFIER)) {
- //TODO:INSTANCE_IDENTIFIER
- } else if (type.equals(DERIVED)) {
- for (JavaQualifiedTypeInfo imports : getImportInfo()) {
- if (imports.getClassInfo().equals(classInfo)) {
- return imports.getPkgInfo();
- }
- }
+ switch (type) {
+ case UINT64:
+ //TODO: BIGINTEGER.
+ case DECIMAL64:
+ //TODO: DECIMAL64
+ case STRING:
+ return JAVA_LANG;
+ case ENUMERATION:
+ //TODO: ENUMERATION.
+ case BITS:
+ //TODO:BITS
+ case BINARY:
+ //TODO:BINARY
+ case LEAFREF:
+ //TODO:LEAFREF
+ case IDENTITYREF:
+ //TODO:IDENTITYREF
+ case EMPTY:
+ //TODO:EMPTY
+ case UNION:
+ //TODO:UNION
+ case INSTANCE_IDENTIFIER:
+ //TODO:INSTANCE_IDENTIFIER
+ case DERIVED:
+ return getTypDefsPackage(yangType);
+ default:
+ return null;
}
}
- return null;
+ }
+
+ /**
+ * Returns java package for typedef node.
+ *
+ * @param type YANG type
+ * @return java package for typedef node
+ */
+ private static String getTypDefsPackage(YangType<?> type) {
+ Object var = type.getDataTypeExtendedInfo();
+ if (!(var instanceof YangDerivedInfo)) {
+ throw new TranslatorException("type should have been derived.");
+ }
+
+ if (!(((YangDerivedInfo<?>) var).getReferredTypeDef() instanceof YangTypeDef)) {
+ throw new TranslatorException("derived info is not an instance of typedef.");
+ }
+
+ YangJavaTypeDef typedef = (YangJavaTypeDef) ((YangDerivedInfo<?>) var).getReferredTypeDef();
+ if (typedef.getJavaFileInfo().getPackage() == null) {
+ return getPackageFromParent(typedef.getParent());
+ }
+ return typedef.getJavaFileInfo().getPackage();
+ }
+
+ /**
+ * Returns package from parent node.
+ *
+ * @param parent parent YANG node
+ * @return java package from parent node
+ */
+ private static String getPackageFromParent(YangNode parent) {
+ if (!(parent instanceof HasJavaFileInfo)) {
+ throw new TranslatorException("Invalid child node is being processed.");
+ }
+ JavaFileInfo parentInfo = ((HasJavaFileInfo) parent).getJavaFileInfo();
+ return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase();
}
}