[ONOS-5400][ONOS-5614] identity ref support in yangtools and defect fixes.
Change-Id: Ia1f32a6772e9d468717340953cf7598c61d9f1ed
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 7bc490f..6b9f346 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
@@ -19,9 +19,9 @@
import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
import org.onosproject.yangutils.datamodel.YangAugmentableNode;
import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
import org.onosproject.yangutils.datamodel.YangEnumeration;
import org.onosproject.yangutils.datamodel.YangLeavesHolder;
+import org.onosproject.yangutils.datamodel.YangList;
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangType;
import org.onosproject.yangutils.datamodel.YangTypeDef;
@@ -32,6 +32,7 @@
import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
import org.onosproject.yangutils.translator.tojava.JavaImportData;
+import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
@@ -41,11 +42,10 @@
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import static java.util.Collections.sort;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
@@ -53,6 +53,7 @@
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
+import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_KEY_CLASS;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
@@ -80,10 +81,12 @@
import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
+import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getListOfAttributesForKey;
import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isGetSetOfRootNodeRequired;
import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefinition;
import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeEnum;
import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getSetValueParaForUnionClass;
import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
@@ -97,6 +100,7 @@
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassFromString;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassToString;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getCompareToForKeyClass;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfValueMethod;
@@ -105,11 +109,13 @@
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumSignature;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRangeValidatorMethodForUnion;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForSelectLeaf;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringForEnumClass;
@@ -122,6 +128,7 @@
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isLeafValueSetInterface;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isSelectLeafSetInterface;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.setSelectLeafSetInterface;
+import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getImportString;
import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getInterfaceLeafIdEnumMethods;
import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIsSelectLeafSet;
import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIsValueLeafSet;
@@ -155,6 +162,7 @@
import static org.onosproject.yangutils.utils.UtilConstants.IMPL_CLASS;
import static org.onosproject.yangutils.utils.UtilConstants.INT;
import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
+import static org.onosproject.yangutils.utils.UtilConstants.KEYS;
import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
@@ -166,6 +174,7 @@
import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_CLASS;
import static org.onosproject.yangutils.utils.UtilConstants.UNION_CLASS;
import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
+import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
@@ -454,6 +463,85 @@
}
/**
+ * Returns generated key class file for current list node.
+ *
+ * @param file file
+ * @param curNode current YANG node
+ * @return key class file
+ * @throws IOException when fails to write in file
+ */
+ public static File generateKeyClassFile(File file, YangNode curNode)
+ throws IOException {
+
+ JavaFileInfoTranslator fileInfo =
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+
+ String className = getCapitalCase(fileInfo.getJavaName()) + KEYS;
+ List<String> imports = new ArrayList<>();
+
+ YangNode parent = curNode.getParent();
+ JavaImportData importData = ((JavaCodeGeneratorInfo) parent)
+ .getTempJavaCodeFragmentFiles().getBeanTempFiles()
+ .getJavaImportData();
+ JavaQualifiedTypeInfoTranslator info =
+ new JavaQualifiedTypeInfoTranslator();
+ info.setClassInfo(className);
+ info.setPkgInfo(fileInfo.getPackage());
+ importData.addImportInfo(info, parent.getJavaClassNameOrBuiltInType(),
+ parent.getJavaPackage());
+ List<String> keys = ((YangList) curNode).getKeyList();
+ List<JavaAttributeInfo> attrs = getListOfAttributesForKey(curNode);
+
+ Iterator<JavaAttributeInfo> attrIt = attrs.iterator();
+ JavaAttributeInfo attr;
+ JavaQualifiedTypeInfoTranslator typeInfo;
+ while (attrIt.hasNext()) {
+ attr = attrIt.next();
+ typeInfo = attr.getImportInfo();
+ if (!typeInfo.getClassInfo().equals(className)) {
+ imports.add(getImportString(attr.getImportInfo().getPkgInfo(),
+ attr.getImportInfo().getClassInfo()));
+ } else {
+ attr.setIsQualifiedAccess(true);
+ }
+ }
+
+ initiateJavaFileGeneration(file, GENERATE_KEY_CLASS, imports, curNode,
+ className);
+ String pkg = null;
+ attrIt = attrs.iterator();
+ while (attrIt.hasNext()) {
+ attr = attrIt.next();
+ if (attr.isQualifiedName()) {
+ pkg = attr.getImportInfo().getPkgInfo();
+ }
+ insertDataIntoJavaFile(file, getJavaAttributeDefinition(
+ pkg, attr.getImportInfo().getClassInfo(),
+ attr.getAttributeName(), false, PROTECTED, null));
+ }
+ attrIt = attrs.iterator();
+ while (attrIt.hasNext()) {
+ attr = attrIt.next();
+ //add getter methods
+ insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, attr
+ .getAttributeName(), false, null));
+ insertDataIntoJavaFile(file, getGetterForClass(
+ attr, GENERATE_KEY_CLASS));
+ insertDataIntoJavaFile(file, NEW_LINE);
+ //Add setter methods.
+ insertDataIntoJavaFile(file, getJavaDoc(MANAGER_SETTER_METHOD, attr
+ .getAttributeName(), false, null));
+ insertDataIntoJavaFile(file, getSetterForClass(
+ attr, className, GENERATE_EVENT_SUBJECT_CLASS));
+ insertDataIntoJavaFile(file, NEW_LINE);
+ }
+ insertDataIntoJavaFile(file, getCompareToForKeyClass(attrs, className));
+
+ insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
+ return file;
+ }
+
+ /**
* Returns generated default class file for current node.
*
* @param file file
@@ -701,25 +789,12 @@
JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
//From string method.
- if (type.getDataType() == DERIVED &&
- ((YangDerivedInfo) type.getDataTypeExtendedInfo())
- .getEffectiveBuiltInType()
- == IDENTITYREF) {
- yangDataTypes = IDENTITYREF;
- }
-
- if (type.getDataType() == IDENTITYREF) {
- yangDataTypes = IDENTITYREF;
- }
-
- if (yangDataTypes != IDENTITYREF) {
- methods.add(getFromStringMethodSignature(className) +
- getDataFromTempFileHandle(
- FROM_STRING_IMPL_MASK,
- javaGenInfo.getTempJavaCodeFragmentFiles()
- .getTypeTempFiles(), path) +
- getFromStringMethodClose());
- }
+ methods.add(getFromStringMethodSignature(className) +
+ getDataFromTempFileHandle(
+ FROM_STRING_IMPL_MASK,
+ javaGenInfo.getTempJavaCodeFragmentFiles()
+ .getTypeTempFiles(), path) +
+ getFromStringMethodClose());
} catch (IOException e) {
throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
}