[ONOS-4831] Implement op param class for apps
Change-Id: I88aee8a3009de84649c959e21ce83e3bbbf63c18
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
index d8bba5e..67ee69e 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
@@ -47,6 +47,7 @@
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPE_CLASS;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.OPERATION_BUILDER_CLASS_MASK;
import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.AUGMENTE_CLASS_CONSTRUCTOR_MASK;
import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
@@ -69,6 +70,8 @@
import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateImplClassFile;
import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateInterfaceFile;
import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.addResolvedAugmentedDataNodeImports;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateOpParamBuilderClassFile;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateOpParamImplClassFile;
import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentedConstructor;
@@ -102,6 +105,9 @@
import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
+import static org.onosproject.yangutils.utils.UtilConstants.OPERATION;
+import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
+import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.readAppendFile;
import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
@@ -246,11 +252,39 @@
private File builderClassJavaFileHandle;
/**
+ * Retrieves the temporary file handle of op param builder class.
+ *
+ * @return op param builder temporary file handle
+ */
+ public File getBuilderOpParmClassJavaFileHandle() {
+ return builderOpParmClassJavaFileHandle;
+ }
+
+ /**
+ * Sets the java file handle for op param builder class.
+ *
+ * @param builderOpParmClassJavaFileHandle java file handle
+ */
+ public void setBuilderOpParmClassJavaFileHandle(File builderOpParmClassJavaFileHandle) {
+ this.builderOpParmClassJavaFileHandle = builderOpParmClassJavaFileHandle;
+ }
+
+ /**
+ * Java file handle for builder op param class file.
+ */
+ private File builderOpParmClassJavaFileHandle;
+
+ /**
* Java file handle for impl class file.
*/
private File implClassJavaFileHandle;
/**
+ * Java file handle for op param class file.
+ */
+ private File opParamClassJavaFileHandle;
+
+ /**
* Temporary file handle for attribute.
*/
private File attributesTempFileHandle;
@@ -1192,13 +1226,17 @@
* TODO: check if this utility needs to be called or move to the caller
*/
String attributeName = getCamelCase(attr.getAttributeName(), pluginConfig.getConflictResolver());
+ String attributeAccessType = PRIVATE;
+ if ((javaFileInfo.getGeneratedFileTypes() & GENERATE_INTERFACE_WITH_BUILDER) != 0) {
+ attributeAccessType = PROTECTED;
+ }
if (attr.isQualifiedName()) {
return getJavaAttributeDefination(attr.getImportInfo().getPkgInfo(),
attr.getImportInfo().getClassInfo(),
- attributeName, attr.isListAttr());
+ attributeName, attr.isListAttr(), attributeAccessType);
} else {
return getJavaAttributeDefination(null, attr.getImportInfo().getClassInfo(), attributeName,
- attr.isListAttr());
+ attr.isListAttr(), attributeAccessType);
}
}
@@ -1260,7 +1298,7 @@
if (!(leaf instanceof JavaLeafInfoContainer)) {
throw new TranslatorException("Leaf does not have java information");
}
- addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeOfLeaf(leaf, yangPluginConfig),
+ addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeOfLeaf(this, leaf, yangPluginConfig),
yangPluginConfig);
}
}
@@ -1269,12 +1307,13 @@
/**
* Returns java attribute for leaf.
*
+ * @param tempJavaFragmentFiles temporary generated file
* @param leaf YANG leaf
* @param yangPluginConfig plugin configurations
* @return java attribute for leaf
*/
- private JavaAttributeInfo getJavaAttributeOfLeaf(YangLeaf leaf,
- YangPluginConfig yangPluginConfig) {
+ public static JavaAttributeInfo getJavaAttributeOfLeaf(TempJavaFragmentFiles tempJavaFragmentFiles, YangLeaf leaf,
+ YangPluginConfig yangPluginConfig) {
JavaLeafInfoContainer javaLeaf = (JavaLeafInfoContainer) leaf;
javaLeaf.setConflictResolveConfig(yangPluginConfig.getConflictResolver());
javaLeaf.updateJavaQualifiedInfo();
@@ -1282,7 +1321,7 @@
javaLeaf.getJavaQualifiedInfo(),
javaLeaf.getJavaName(yangPluginConfig.getConflictResolver()),
javaLeaf.getDataType(),
- getIsQualifiedAccessOrAddToImportList(javaLeaf.getJavaQualifiedInfo()),
+ tempJavaFragmentFiles.getIsQualifiedAccessOrAddToImportList(javaLeaf.getJavaQualifiedInfo()),
false);
}
@@ -1300,7 +1339,7 @@
if (!(leafList instanceof JavaLeafInfoContainer)) {
throw new TranslatorException("Leaf-list does not have java information");
}
- addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeOfLeafList(leafList, yangPluginConfig),
+ addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeOfLeafList(this, leafList, yangPluginConfig),
yangPluginConfig);
}
}
@@ -1309,25 +1348,28 @@
/**
* Returns java attribute for leaf-list.
*
+ * @param tempJavaFragmentFiles temporary generated file
* @param leafList YANG leaf-list
* @param yangPluginConfig plugin configurations
* @return java attribute for leaf-list
*/
- private JavaAttributeInfo getJavaAttributeOfLeafList(YangLeafList leafList, YangPluginConfig yangPluginConfig) {
+ public static JavaAttributeInfo getJavaAttributeOfLeafList(TempJavaFragmentFiles tempJavaFragmentFiles,
+ YangLeafList leafList, YangPluginConfig yangPluginConfig) {
JavaLeafInfoContainer javaLeaf = (JavaLeafInfoContainer) leafList;
javaLeaf.setConflictResolveConfig(yangPluginConfig.getConflictResolver());
javaLeaf.updateJavaQualifiedInfo();
- getJavaImportData().setIfListImported(true);
+ tempJavaFragmentFiles.getJavaImportData().setIfListImported(true);
return getAttributeInfoForTheData(
javaLeaf.getJavaQualifiedInfo(),
javaLeaf.getJavaName(yangPluginConfig.getConflictResolver()),
javaLeaf.getDataType(),
- getIsQualifiedAccessOrAddToImportList(javaLeaf.getJavaQualifiedInfo()),
+ tempJavaFragmentFiles.getIsQualifiedAccessOrAddToImportList(javaLeaf.getJavaQualifiedInfo()),
true);
}
/**
- * Adds all the leaves in the current data model node as part of the generated temporary file.
+ * Adds all the leaves in the current data model node as part of the
+ * generated temporary file.
*
* @param curNode java file info of the generated file
* @param yangPluginConfig plugin config
@@ -1419,6 +1461,24 @@
}
/**
+ * Returns op param java class name.
+ *
+ * @return op param java class name
+ */
+ String getOpParamImplClassName() {
+ return getCapitalCase(getJavaFileInfo().getJavaName()) + OPERATION;
+ }
+
+ /**
+ * Returns op param builder java class name.
+ *
+ * @return op param builder java class name
+ */
+ String getOpParamBuilderImplClassName() {
+ return getCapitalCase(getJavaFileInfo().getJavaName()) + OPERATION + BUILDER;
+ }
+
+ /**
* Returns the directory path.
*
* @return directory path
@@ -1494,7 +1554,7 @@
}
if ((fileType & BUILDER_CLASS_MASK) != 0 || (fileType & IMPL_CLASS_MASK) != 0) {
if (isAttributePresent()) {
- addImportsToStringAndHasCodeMethods(imports);
+ addImportsToStringAndHasCodeMethods(imports, true);
}
if (curNode instanceof YangAugmentableNode) {
addImportsForAugmentableClass(imports);
@@ -1522,6 +1582,39 @@
validateLineLength(getImplClassJavaFileHandle());
}
insertDataIntoJavaFile(getImplClassJavaFileHandle(), getJavaClassDefClose());
+
+ if (!(curNode instanceof YangModule)) {
+ if (isAttributePresent()) {
+ addImportsToStringAndHasCodeMethods(imports, false);
+ }
+ addBitsetImport(imports, true);
+ /*
+ * Create impl class file.
+ */
+ setOpParamClassJavaFileHandle(getJavaFileHandle(getOpParamImplClassName()));
+ setOpParamClassJavaFileHandle(
+ generateOpParamImplClassFile(getOpParamClassJavaFileHandle(), curNode,
+ isAttributePresent(), imports));
+
+ /*
+ * Create builder class file.
+ */
+ if ((fileType & BUILDER_CLASS_MASK) != 0) {
+ setBuilderOpParmClassJavaFileHandle(getJavaFileHandle(getOpParamBuilderImplClassName()));
+ setBuilderOpParmClassJavaFileHandle(
+ generateOpParamBuilderClassFile(getBuilderOpParmClassJavaFileHandle(), curNode,
+ isAttributePresent()));
+ /*
+ * Append impl class to builder class and close it.
+ */
+ mergeJavaFiles(getBuilderOpParmClassJavaFileHandle(), getOpParamClassJavaFileHandle());
+ validateLineLength(getOpParamClassJavaFileHandle());
+
+ addBitsetImport(imports, false);
+ }
+ insertDataIntoJavaFile(getOpParamClassJavaFileHandle(), getJavaClassDefClose());
+
+ }
}
/*
* Close all the file handles.
@@ -1547,15 +1640,15 @@
YangLeavesHolder holder = (YangLeavesHolder) augmentedNode;
if (holder.getListOfLeaf() != null) {
for (YangLeaf leaf : holder.getListOfLeaf()) {
- addAugmentConstructor(getJavaAttributeOfLeaf(leaf,
- pluginConfig), pluginConfig);
+ addAugmentConstructor(getJavaAttributeOfLeaf(this, leaf,
+ pluginConfig), pluginConfig);
}
}
if (holder.getListOfLeafList() != null) {
for (YangLeafList leafList : holder.getListOfLeafList()) {
- addAugmentConstructor(getJavaAttributeOfLeafList(leafList,
- pluginConfig), pluginConfig);
+ addAugmentConstructor(getJavaAttributeOfLeafList(this, leafList,
+ pluginConfig), pluginConfig);
}
}
@@ -1579,10 +1672,30 @@
* Adds imports for ToString and HashCodeMethod.
*
* @param imports import list
+ * @param operation add or remove
*/
- public void addImportsToStringAndHasCodeMethods(List<String> imports) {
- imports.add(getJavaImportData().getImportForHashAndEquals());
- imports.add(getJavaImportData().getImportForToString());
+ public void addImportsToStringAndHasCodeMethods(List<String> imports, boolean operation) {
+ if (operation) {
+ imports.add(getJavaImportData().getImportForHashAndEquals());
+ imports.add(getJavaImportData().getImportForToString());
+ } else {
+ imports.remove(getJavaImportData().getImportForHashAndEquals());
+ imports.remove(getJavaImportData().getImportForToString());
+ }
+ }
+
+ /**
+ * Adds imports for bitset method.
+ *
+ * @param imports import list
+ * @param operation add or remove
+ */
+ public void addBitsetImport(List<String> imports, boolean operation) {
+ if (operation) {
+ imports.add(getJavaImportData().getImportForToBitSet());
+ } else {
+ imports.remove(getJavaImportData().getImportForToBitSet());
+ }
}
@@ -1653,6 +1766,9 @@
if ((getGeneratedJavaFiles() & BUILDER_CLASS_MASK) != 0) {
closeFile(getBuilderClassJavaFileHandle(), true);
}
+ if ((getGeneratedJavaFiles() & OPERATION_BUILDER_CLASS_MASK) != 0) {
+ closeFile(getBuilderOpParmClassJavaFileHandle(), true);
+ }
if ((getGeneratedJavaFiles() & BUILDER_INTERFACE_MASK) != 0) {
closeFile(getBuilderInterfaceJavaFileHandle(), true);
}
@@ -1700,4 +1816,21 @@
getJavaFileInfo().getPackage());
}
+ /**
+ * Returns java file handle for op param class file.
+ *
+ * @return java file handle for op param class file
+ */
+ public File getOpParamClassJavaFileHandle() {
+ return opParamClassJavaFileHandle;
+ }
+
+ /**
+ * Sets the java file handle for op param class file.
+ *
+ * @param opParamClassJavaFileHandle java file handle
+ */
+ public void setOpParamClassJavaFileHandle(File opParamClassJavaFileHandle) {
+ this.opParamClassJavaFileHandle = opParamClassJavaFileHandle;
+ }
}