Bharat saraswal
Committed by Ray Milkey

[ONOS-4616] YANG grouping linker issues fixed.

Change-Id: I741aa9ad1008c02c9a9f90cc117cd43729132129
Showing 28 changed files with 541 additions and 394 deletions
...@@ -225,9 +225,7 @@ public class YangDerivedInfo<T> implements LocationInfo { ...@@ -225,9 +225,7 @@ public class YangDerivedInfo<T> implements LocationInfo {
225 * @throws DataModelException a violation in data mode rule 225 * @throws DataModelException a violation in data mode rule
226 */ 226 */
227 public ResolvableStatus resolve() throws DataModelException { 227 public ResolvableStatus resolve() throws DataModelException {
228 -
229 YangType<?> baseType = getReferredTypeDef().getTypeDefBaseType(); 228 YangType<?> baseType = getReferredTypeDef().getTypeDefBaseType();
230 -
231 /* 229 /*
232 * Checks the data type of the referred typedef, if it's derived, 230 * Checks the data type of the referred typedef, if it's derived,
233 * obtain effective built-in type and restrictions from it's derived 231 * obtain effective built-in type and restrictions from it's derived
...@@ -240,7 +238,6 @@ public class YangDerivedInfo<T> implements LocationInfo { ...@@ -240,7 +238,6 @@ public class YangDerivedInfo<T> implements LocationInfo {
240 if (baseType.getResolvableStatus() != INTRA_FILE_RESOLVED && baseType.getResolvableStatus() != RESOLVED) { 238 if (baseType.getResolvableStatus() != INTRA_FILE_RESOLVED && baseType.getResolvableStatus() != RESOLVED) {
241 throw new DataModelException("Linker Error: Referred typedef is not resolved for type."); 239 throw new DataModelException("Linker Error: Referred typedef is not resolved for type.");
242 } 240 }
243 -
244 /* 241 /*
245 * Check if the referred typedef is intra file resolved, if yes sets 242 * Check if the referred typedef is intra file resolved, if yes sets
246 * current status also to intra file resolved . 243 * current status also to intra file resolved .
...@@ -250,7 +247,7 @@ public class YangDerivedInfo<T> implements LocationInfo { ...@@ -250,7 +247,7 @@ public class YangDerivedInfo<T> implements LocationInfo {
250 } 247 }
251 setEffectiveBuiltInType(((YangDerivedInfo<?>) baseType.getDataTypeExtendedInfo()) 248 setEffectiveBuiltInType(((YangDerivedInfo<?>) baseType.getDataTypeExtendedInfo())
252 .getEffectiveBuiltInType()); 249 .getEffectiveBuiltInType());
253 - YangDerivedInfo refDerivedInfo = ((YangDerivedInfo<?>) baseType.getDataTypeExtendedInfo()); 250 + YangDerivedInfo refDerivedInfo = (YangDerivedInfo<?>) baseType.getDataTypeExtendedInfo();
254 /* 251 /*
255 * Check whether the effective built-in type can have range 252 * Check whether the effective built-in type can have range
256 * restrictions, if yes call resolution of range. 253 * restrictions, if yes call resolution of range.
...@@ -327,7 +324,7 @@ public class YangDerivedInfo<T> implements LocationInfo { ...@@ -327,7 +324,7 @@ public class YangDerivedInfo<T> implements LocationInfo {
327 } 324 }
328 } 325 }
329 } else { 326 } else {
330 - setEffectiveBuiltInType((baseType.getDataType())); 327 + setEffectiveBuiltInType(baseType.getDataType());
331 /* 328 /*
332 * Check whether the effective built-in type can have range 329 * Check whether the effective built-in type can have range
333 * restrictions, if yes call resolution of range. 330 * restrictions, if yes call resolution of range.
...@@ -404,7 +401,6 @@ public class YangDerivedInfo<T> implements LocationInfo { ...@@ -404,7 +401,6 @@ public class YangDerivedInfo<T> implements LocationInfo {
404 } 401 }
405 } 402 }
406 } 403 }
407 -
408 /* 404 /*
409 * Check if the data type is the one which can't be restricted, in 405 * Check if the data type is the one which can't be restricted, in
410 * this case check whether no self restrictions should be present. 406 * this case check whether no self restrictions should be present.
...@@ -418,7 +414,6 @@ public class YangDerivedInfo<T> implements LocationInfo { ...@@ -418,7 +414,6 @@ public class YangDerivedInfo<T> implements LocationInfo {
418 throw new DataModelException("YANG file error: Restrictions can't be applied to a given type"); 414 throw new DataModelException("YANG file error: Restrictions can't be applied to a given type");
419 } 415 }
420 } 416 }
421 -
422 // Throw exception for unsupported types 417 // Throw exception for unsupported types
423 throw new DataModelException("Linker error: Unable to process the derived type."); 418 throw new DataModelException("Linker error: Unable to process the derived type.");
424 } 419 }
...@@ -438,7 +433,7 @@ public class YangDerivedInfo<T> implements LocationInfo { ...@@ -438,7 +433,7 @@ public class YangDerivedInfo<T> implements LocationInfo {
438 * Check that range restriction should be null when built-in type is 433 * Check that range restriction should be null when built-in type is
439 * string. 434 * string.
440 */ 435 */
441 - if (!(Strings.isNullOrEmpty(getRangeRestrictionString()))) { 436 + if (!Strings.isNullOrEmpty(getRangeRestrictionString())) {
442 DataModelException dataModelException = new DataModelException("YANG file error: Range restriction " + 437 DataModelException dataModelException = new DataModelException("YANG file error: Range restriction " +
443 "should't be present for string data type."); 438 "should't be present for string data type.");
444 dataModelException.setLine(lineNumber); 439 dataModelException.setLine(lineNumber);
...@@ -605,7 +600,7 @@ public class YangDerivedInfo<T> implements LocationInfo { ...@@ -605,7 +600,7 @@ public class YangDerivedInfo<T> implements LocationInfo {
605 * Check that string restriction should be null when built-in type is 600 * Check that string restriction should be null when built-in type is
606 * of range type. 601 * of range type.
607 */ 602 */
608 - if (!(Strings.isNullOrEmpty(getLengthRestrictionString())) || getPatternRestriction() != null) { 603 + if (!Strings.isNullOrEmpty(getLengthRestrictionString()) || getPatternRestriction() != null) {
609 DataModelException dataModelException = new DataModelException("YANG file error: Length/Pattern " + 604 DataModelException dataModelException = new DataModelException("YANG file error: Length/Pattern " +
610 "restriction should't be present for int/uint/decimal data type."); 605 "restriction should't be present for int/uint/decimal data type.");
611 dataModelException.setLine(lineNumber); 606 dataModelException.setLine(lineNumber);
...@@ -660,12 +655,12 @@ public class YangDerivedInfo<T> implements LocationInfo { ...@@ -660,12 +655,12 @@ public class YangDerivedInfo<T> implements LocationInfo {
660 * @return true, if data type can't be restricted, false otherwise 655 * @return true, if data type can't be restricted, false otherwise
661 */ 656 */
662 private boolean isOfValidNonRestrictedType(YangDataTypes dataType) { 657 private boolean isOfValidNonRestrictedType(YangDataTypes dataType) {
663 - return (dataType == BOOLEAN 658 + return dataType == BOOLEAN
664 || dataType == ENUMERATION 659 || dataType == ENUMERATION
665 || dataType == BITS 660 || dataType == BITS
666 || dataType == EMPTY 661 || dataType == EMPTY
667 || dataType == UNION 662 || dataType == UNION
668 || dataType == IDENTITYREF 663 || dataType == IDENTITYREF
669 - || dataType == LEAFREF); 664 + || dataType == LEAFREF;
670 } 665 }
671 } 666 }
......
...@@ -271,6 +271,7 @@ public class YangModule extends YangNode ...@@ -271,6 +271,7 @@ public class YangModule extends YangNode
271 * 271 *
272 * @return the list of imported modules 272 * @return the list of imported modules
273 */ 273 */
274 + @Override
274 public List<YangImport> getImportList() { 275 public List<YangImport> getImportList() {
275 return importList; 276 return importList;
276 } 277 }
...@@ -280,6 +281,7 @@ public class YangModule extends YangNode ...@@ -280,6 +281,7 @@ public class YangModule extends YangNode
280 * 281 *
281 * @param importedModule module being imported 282 * @param importedModule module being imported
282 */ 283 */
284 + @Override
283 public void addToImportList(YangImport importedModule) { 285 public void addToImportList(YangImport importedModule) {
284 getImportList().add(importedModule); 286 getImportList().add(importedModule);
285 } 287 }
...@@ -294,6 +296,7 @@ public class YangModule extends YangNode ...@@ -294,6 +296,7 @@ public class YangModule extends YangNode
294 * 296 *
295 * @return the included list of sub modules 297 * @return the included list of sub modules
296 */ 298 */
299 + @Override
297 public List<YangInclude> getIncludeList() { 300 public List<YangInclude> getIncludeList() {
298 return includeList; 301 return includeList;
299 } 302 }
...@@ -303,6 +306,7 @@ public class YangModule extends YangNode ...@@ -303,6 +306,7 @@ public class YangModule extends YangNode
303 * 306 *
304 * @param includeModule submodule being included 307 * @param includeModule submodule being included
305 */ 308 */
309 + @Override
306 public void addToIncludeList(YangInclude includeModule) { 310 public void addToIncludeList(YangInclude includeModule) {
307 getIncludeList().add(includeModule); 311 getIncludeList().add(includeModule);
308 } 312 }
...@@ -393,6 +397,7 @@ public class YangModule extends YangNode ...@@ -393,6 +397,7 @@ public class YangModule extends YangNode
393 * 397 *
394 * @return the prefix 398 * @return the prefix
395 */ 399 */
400 + @Override
396 public String getPrefix() { 401 public String getPrefix() {
397 return prefix; 402 return prefix;
398 } 403 }
...@@ -402,6 +407,7 @@ public class YangModule extends YangNode ...@@ -402,6 +407,7 @@ public class YangModule extends YangNode
402 * 407 *
403 * @param prefix the prefix to set 408 * @param prefix the prefix to set
404 */ 409 */
410 + @Override
405 public void setPrefix(String prefix) { 411 public void setPrefix(String prefix) {
406 this.prefix = prefix; 412 this.prefix = prefix;
407 } 413 }
......
...@@ -285,6 +285,7 @@ public class YangSubModule extends YangNode ...@@ -285,6 +285,7 @@ public class YangSubModule extends YangNode
285 * 285 *
286 * @return the list of imported modules 286 * @return the list of imported modules
287 */ 287 */
288 + @Override
288 public List<YangImport> getImportList() { 289 public List<YangImport> getImportList() {
289 return importList; 290 return importList;
290 } 291 }
...@@ -294,6 +295,7 @@ public class YangSubModule extends YangNode ...@@ -294,6 +295,7 @@ public class YangSubModule extends YangNode
294 * 295 *
295 * @param importedModule module being imported 296 * @param importedModule module being imported
296 */ 297 */
298 + @Override
297 public void addToImportList(YangImport importedModule) { 299 public void addToImportList(YangImport importedModule) {
298 getImportList().add(importedModule); 300 getImportList().add(importedModule);
299 } 301 }
...@@ -308,6 +310,7 @@ public class YangSubModule extends YangNode ...@@ -308,6 +310,7 @@ public class YangSubModule extends YangNode
308 * 310 *
309 * @return the included list of sub modules 311 * @return the included list of sub modules
310 */ 312 */
313 + @Override
311 public List<YangInclude> getIncludeList() { 314 public List<YangInclude> getIncludeList() {
312 return includeList; 315 return includeList;
313 } 316 }
...@@ -317,6 +320,7 @@ public class YangSubModule extends YangNode ...@@ -317,6 +320,7 @@ public class YangSubModule extends YangNode
317 * 320 *
318 * @param includeModule submodule being included 321 * @param includeModule submodule being included
319 */ 322 */
323 + @Override
320 public void addToIncludeList(YangInclude includeModule) { 324 public void addToIncludeList(YangInclude includeModule) {
321 getIncludeList().add(includeModule); 325 getIncludeList().add(includeModule);
322 } 326 }
......
...@@ -187,7 +187,7 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable, Y ...@@ -187,7 +187,7 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable, Y
187 * @return the data type 187 * @return the data type
188 */ 188 */
189 public YangType<?> getTypeDefBaseType() { 189 public YangType<?> getTypeDefBaseType() {
190 - if (!(getTypeList().isEmpty())) { 190 + if (!getTypeList().isEmpty()) {
191 return getTypeList().get(0); 191 return getTypeList().get(0);
192 } 192 }
193 return null; 193 return null;
......
...@@ -271,8 +271,8 @@ public class YangUses ...@@ -271,8 +271,8 @@ public class YangUses
271 } 271 }
272 272
273 YangNode usesParentNode = getParentNodeInGenCode(this); 273 YangNode usesParentNode = getParentNodeInGenCode(this);
274 - if ((!(usesParentNode instanceof YangLeavesHolder)) 274 + if (!(usesParentNode instanceof YangLeavesHolder)
275 - || (!(usesParentNode instanceof CollisionDetector))) { 275 + || !(usesParentNode instanceof CollisionDetector)) {
276 throw new LinkerException("Linker Exception: YANG uses holder construct is wrong"); 276 throw new LinkerException("Linker Exception: YANG uses holder construct is wrong");
277 } 277 }
278 278
......
...@@ -696,7 +696,7 @@ public class YangResolutionInfo<T> implements LocationInfo { ...@@ -696,7 +696,7 @@ public class YangResolutionInfo<T> implements LocationInfo {
696 * Check if prefix is null or not, to identify whether to search 696 * Check if prefix is null or not, to identify whether to search
697 * in import list or include list. 697 * in import list or include list.
698 */ 698 */
699 - if (getRefPrefix() != null && !(getRefPrefix().contentEquals(getCurReferenceResolver().getPrefix()))) { 699 + if (getRefPrefix() != null && !getRefPrefix().contentEquals(getCurReferenceResolver().getPrefix())) {
700 if (resolveWithImport()) { 700 if (resolveWithImport()) {
701 return; 701 return;
702 } 702 }
......
...@@ -77,23 +77,8 @@ public final class JavaCodeGeneratorUtil { ...@@ -77,23 +77,8 @@ public final class JavaCodeGeneratorUtil {
77 77
78 while (codeGenNode != null) { 78 while (codeGenNode != null) {
79 if (curTraversal != PARENT) { 79 if (curTraversal != PARENT) {
80 - if (codeGenNode instanceof JavaCodeGenerator) { 80 + setCurNode(codeGenNode);
81 - setCurNode(codeGenNode); 81 + generateCodeEntry(codeGenNode, yangPlugin);
82 - generateCodeEntry(codeGenNode, yangPlugin);
83 - } else {
84 - /*
85 - * For grouping and uses, there is no code generation, skip the generation for the child.
86 - */
87 - if (codeGenNode.getNextSibling() != null) {
88 - curTraversal = SIBILING;
89 - codeGenNode = codeGenNode.getNextSibling();
90 - } else {
91 - curTraversal = PARENT;
92 - codeGenNode = codeGenNode.getParent();
93 - }
94 - continue;
95 - }
96 -
97 } 82 }
98 if (curTraversal != PARENT && codeGenNode.getChild() != null) { 83 if (curTraversal != PARENT && codeGenNode.getChild() != null) {
99 curTraversal = CHILD; 84 curTraversal = CHILD;
......
...@@ -112,7 +112,7 @@ public class JavaQualifiedTypeInfo ...@@ -112,7 +112,7 @@ public class JavaQualifiedTypeInfo
112 */ 112 */
113 importInfo.setClassInfo(className); 113 importInfo.setClassInfo(className);
114 String classPkg = AttributesJavaDataType.getJavaImportPackage(leaf.getDataType(), 114 String classPkg = AttributesJavaDataType.getJavaImportPackage(leaf.getDataType(),
115 - leaf.isLeafList(), className, leaf.getConflictResolveConfig()); 115 + leaf.isLeafList(), leaf.getConflictResolveConfig());
116 if (classPkg == null) { 116 if (classPkg == null) {
117 throw new TranslatorException("import package cannot be null when the class is used"); 117 throw new TranslatorException("import package cannot be null when the class is used");
118 } 118 }
...@@ -180,7 +180,7 @@ public class JavaQualifiedTypeInfo ...@@ -180,7 +180,7 @@ public class JavaQualifiedTypeInfo
180 qualifiedInfoOfFromString.setClassInfo( 180 qualifiedInfoOfFromString.setClassInfo(
181 getJavaImportClass(referredTypesAttrInfo.getAttributeType(), true, conflictResolver)); 181 getJavaImportClass(referredTypesAttrInfo.getAttributeType(), true, conflictResolver));
182 qualifiedInfoOfFromString.setPkgInfo( 182 qualifiedInfoOfFromString.setPkgInfo(
183 - getJavaImportPackage(referredTypesAttrInfo.getAttributeType(), true, null, conflictResolver)); 183 + getJavaImportPackage(referredTypesAttrInfo.getAttributeType(), true, conflictResolver));
184 return qualifiedInfoOfFromString; 184 return qualifiedInfoOfFromString;
185 } 185 }
186 186
......
...@@ -28,6 +28,12 @@ import org.onosproject.yangutils.datamodel.YangLeavesHolder; ...@@ -28,6 +28,12 @@ import org.onosproject.yangutils.datamodel.YangLeavesHolder;
28 import org.onosproject.yangutils.datamodel.YangNode; 28 import org.onosproject.yangutils.datamodel.YangNode;
29 import org.onosproject.yangutils.translator.exception.TranslatorException; 29 import org.onosproject.yangutils.translator.exception.TranslatorException;
30 import org.onosproject.yangutils.translator.tojava.javamodel.JavaLeafInfoContainer; 30 import org.onosproject.yangutils.translator.tojava.javamodel.JavaLeafInfoContainer;
31 +import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaGrouping;
32 +import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaInput;
33 +import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModule;
34 +import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaOutput;
35 +import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModule;
36 +import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaUses;
31 import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder; 37 import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
32 import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig; 38 import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
33 39
...@@ -61,6 +67,7 @@ import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSy ...@@ -61,6 +67,7 @@ import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSy
61 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase; 67 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase;
62 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage; 68 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage;
63 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getParentNodeInGenCode; 69 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getParentNodeInGenCode;
70 +import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
64 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuildString; 71 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuildString;
65 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getDefaultConstructorString; 72 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getDefaultConstructorString;
66 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethod; 73 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
...@@ -1078,6 +1085,9 @@ public class TempJavaFragmentFiles { ...@@ -1078,6 +1085,9 @@ public class TempJavaFragmentFiles {
1078 if (!(parent instanceof JavaCodeGenerator)) { 1085 if (!(parent instanceof JavaCodeGenerator)) {
1079 throw new TranslatorException("missing parent node to contain current node info in generated file"); 1086 throw new TranslatorException("missing parent node to contain current node info in generated file");
1080 } 1087 }
1088 + if (curNode instanceof YangJavaUses) {
1089 + curNode = ((YangJavaUses) curNode).getRefGroup();
1090 + }
1081 JavaAttributeInfo javaAttributeInfo = getCurNodeAsAttributeInParent(curNode, 1091 JavaAttributeInfo javaAttributeInfo = getCurNodeAsAttributeInParent(curNode,
1082 parent, isList); 1092 parent, isList);
1083 if (!(parent instanceof TempJavaCodeFragmentFilesContainer)) { 1093 if (!(parent instanceof TempJavaCodeFragmentFilesContainer)) {
...@@ -1100,23 +1110,57 @@ public class TempJavaFragmentFiles { ...@@ -1100,23 +1110,57 @@ public class TempJavaFragmentFiles {
1100 */ 1110 */
1101 public static JavaAttributeInfo getCurNodeAsAttributeInParent( 1111 public static JavaAttributeInfo getCurNodeAsAttributeInParent(
1102 YangNode curNode, YangNode parentNode, boolean isListNode) { 1112 YangNode curNode, YangNode parentNode, boolean isListNode) {
1103 - String curNodeName = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName(); 1113 +
1104 - /* 1114 + YangPluginConfig pluginConfig = ((JavaFileInfoContainer) parentNode).getJavaFileInfo().getPluginConfig();
1105 - * Get the import info corresponding to the attribute for import in 1115 + JavaFileInfo curNodeJavaInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
1106 - * generated java files or qualified access 1116 + String curNodeName = null;
1107 - */ 1117 +
1108 - JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(parentNode, 1118 + if (curNodeJavaInfo.getJavaName() != null) {
1109 - getCapitalCase(curNodeName)); 1119 + curNodeName = curNodeJavaInfo.getJavaName();
1120 + } else {
1121 + curNodeName = getCamelCase(curNode.getName(), pluginConfig.getConflictResolver());
1122 + }
1123 +
1110 if (!(parentNode instanceof TempJavaCodeFragmentFilesContainer)) { 1124 if (!(parentNode instanceof TempJavaCodeFragmentFilesContainer)) {
1111 throw new TranslatorException("Parent node does not have file info"); 1125 throw new TranslatorException("Parent node does not have file info");
1112 } 1126 }
1127 +
1113 TempJavaFragmentFiles tempJavaFragmentFiles = getNodesInterfaceFragmentFiles(parentNode); 1128 TempJavaFragmentFiles tempJavaFragmentFiles = getNodesInterfaceFragmentFiles(parentNode);
1114 boolean isQualified = true; 1129 boolean isQualified = true;
1115 JavaImportData parentImportData = tempJavaFragmentFiles.getJavaImportData(); 1130 JavaImportData parentImportData = tempJavaFragmentFiles.getJavaImportData();
1116 if (isListNode) { 1131 if (isListNode) {
1117 parentImportData.setIfListImported(true); 1132 parentImportData.setIfListImported(true);
1118 } 1133 }
1119 - if (!detectCollisionBwParentAndChildForImport(curNode, qualifiedTypeInfo)) { 1134 +
1135 + /*
1136 + * Get the import info corresponding to the attribute for import in
1137 + * generated java files or qualified access
1138 + */
1139 +
1140 + JavaQualifiedTypeInfo qualifiedTypeInfo = new JavaQualifiedTypeInfo();
1141 + if (curNode instanceof YangJavaGrouping) {
1142 + qualifiedTypeInfo = resolveGroupingsQuailifiedInfo(curNode, pluginConfig);
1143 + } else {
1144 + qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(parentNode,
1145 + getCapitalCase(curNodeName));
1146 + }
1147 +
1148 + if (parentNode instanceof YangJavaModule
1149 + || parentNode instanceof YangJavaSubModule
1150 + || parentNode instanceof YangJavaInput
1151 + || parentNode instanceof YangJavaOutput) {
1152 + parentImportData.addImportInfo(qualifiedTypeInfo);
1153 + isQualified = false;
1154 + } else if (curNode instanceof YangJavaGrouping) {
1155 + JavaFileInfo parentsClassInfo = ((JavaFileInfoContainer) parentNode).getJavaFileInfo();
1156 + if (qualifiedTypeInfo.getClassInfo().equals(parentsClassInfo.getJavaName())) {
1157 + isQualified = true;
1158 + }
1159 + if (!qualifiedTypeInfo.getPkgInfo().equals(parentsClassInfo.getPackage())) {
1160 + parentImportData.addImportInfo(qualifiedTypeInfo);
1161 + isQualified = false;
1162 + }
1163 + } else if (!detectCollisionBwParentAndChildForImport(curNode, qualifiedTypeInfo)) {
1120 parentImportData.addImportInfo(qualifiedTypeInfo); 1164 parentImportData.addImportInfo(qualifiedTypeInfo);
1121 isQualified = false; 1165 isQualified = false;
1122 } 1166 }
...@@ -1124,6 +1168,63 @@ public class TempJavaFragmentFiles { ...@@ -1124,6 +1168,63 @@ public class TempJavaFragmentFiles {
1124 } 1168 }
1125 1169
1126 /** 1170 /**
1171 + * Resolves groupings java qualified info.
1172 + *
1173 + * @param curNode grouping node
1174 + * @param pluginConfig plugin configurations
1175 + * @return groupings java qualified info
1176 + */
1177 + public static JavaQualifiedTypeInfo resolveGroupingsQuailifiedInfo(YangNode curNode,
1178 + YangPluginConfig pluginConfig) {
1179 +
1180 + JavaFileInfo groupingFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
1181 + JavaQualifiedTypeInfo qualifiedTypeInfo = new JavaQualifiedTypeInfo();
1182 + if (groupingFileInfo.getPackage() == null) {
1183 + List<String> parentNames = new ArrayList<>();
1184 +
1185 + YangNode tempNode = curNode.getParent();
1186 + YangNode groupingSuperParent = null;
1187 + while (tempNode != null) {
1188 + parentNames.add(tempNode.getName());
1189 + groupingSuperParent = tempNode;
1190 + tempNode = tempNode.getParent();
1191 + }
1192 +
1193 + String pkg = null;
1194 + JavaFileInfo parentInfo = ((JavaFileInfoContainer) groupingSuperParent).getJavaFileInfo();
1195 + if (parentInfo.getPackage() == null) {
1196 + if (groupingSuperParent instanceof YangJavaModule) {
1197 + YangJavaModule module = (YangJavaModule) groupingSuperParent;
1198 + String modulePkg = getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module
1199 + .getRevision().getRevDate(), pluginConfig.getConflictResolver());
1200 + pkg = modulePkg;
1201 + } else if (groupingSuperParent instanceof YangJavaSubModule) {
1202 + YangJavaSubModule submodule = (YangJavaSubModule) groupingSuperParent;
1203 + String subModulePkg = getRootPackage(submodule.getVersion(),
1204 + submodule.getNameSpaceFromModule(submodule.getBelongsTo()),
1205 + submodule.getRevision().getRevDate(), pluginConfig.getConflictResolver());
1206 + pkg = subModulePkg;
1207 + }
1208 + } else {
1209 + pkg = parentInfo.getPackage();
1210 + }
1211 + for (String name : parentNames) {
1212 + pkg = pkg + PERIOD + getCamelCase(name, pluginConfig.getConflictResolver());
1213 + }
1214 +
1215 + qualifiedTypeInfo.setPkgInfo(pkg.toLowerCase());
1216 + qualifiedTypeInfo.setClassInfo(
1217 + getCapitalCase(getCamelCase(curNode.getName(), pluginConfig.getConflictResolver())));
1218 + return qualifiedTypeInfo;
1219 +
1220 + } else {
1221 + qualifiedTypeInfo.setPkgInfo(groupingFileInfo.getPackage().toLowerCase());
1222 + qualifiedTypeInfo.setClassInfo(getCapitalCase(groupingFileInfo.getJavaName()));
1223 + return qualifiedTypeInfo;
1224 + }
1225 + }
1226 +
1227 + /**
1127 * Returns interface fragment files for node. 1228 * Returns interface fragment files for node.
1128 * 1229 *
1129 * @param node YANG node 1230 * @param node YANG node
......
...@@ -39,7 +39,10 @@ import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType. ...@@ -39,7 +39,10 @@ import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.
39 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK; 39 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
40 import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData; 40 import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
41 import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo.getQualifiedTypeInfoOfCurNode; 41 import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo.getQualifiedTypeInfoOfCurNode;
42 +import static org.onosproject.yangutils.translator.tojava.utils.AttributesJavaDataType.getJavaDataType;
43 +import static org.onosproject.yangutils.translator.tojava.utils.AttributesJavaDataType.getJavaImportClass;
42 import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaClassDefClose; 44 import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaClassDefClose;
45 +import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getListAttribute;
43 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventFile; 46 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventFile;
44 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventListenerFile; 47 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventListenerFile;
45 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventSubjectFile; 48 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventSubjectFile;
...@@ -48,6 +51,7 @@ import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerato ...@@ -48,6 +51,7 @@ import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerato
48 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject; 51 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
49 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase; 52 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase;
50 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase; 53 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase;
54 +import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
51 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getSmallCase; 55 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getSmallCase;
52 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass; 56 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
53 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRpcManagerMethod; 57 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRpcManagerMethod;
...@@ -440,33 +444,129 @@ public class TempJavaServiceFragmentFiles ...@@ -440,33 +444,129 @@ public class TempJavaServiceFragmentFiles
440 String rpcName) throws IOException { 444 String rpcName) throws IOException {
441 String rpcInput = EMPTY_STRING; 445 String rpcInput = EMPTY_STRING;
442 String rpcOutput = VOID; 446 String rpcOutput = VOID;
447 + String rpcInputJavaDoc = EMPTY_STRING;
443 if (javaAttributeInfoOfInput != null) { 448 if (javaAttributeInfoOfInput != null) {
444 rpcInput = getCapitalCase(javaAttributeInfoOfInput.getAttributeName()); 449 rpcInput = getCapitalCase(javaAttributeInfoOfInput.getAttributeName());
445 } 450 }
446 if (javaAttributeInfoOfOutput != null) { 451 if (javaAttributeInfoOfOutput != null) {
447 rpcOutput = getCapitalCase(javaAttributeInfoOfOutput.getAttributeName()); 452 rpcOutput = getCapitalCase(javaAttributeInfoOfOutput.getAttributeName());
448 } 453 }
454 + if (!rpcInput.equals(EMPTY_STRING)) {
455 + rpcInputJavaDoc = RPC_INPUT_VAR_NAME;
456 + }
457 + appendToFile(getRpcInterfaceTempFileHandle(),
458 + generateJavaDocForRpc(rpcName, rpcInputJavaDoc, rpcOutput, pluginConfig)
459 + + getRpcServiceMethod(rpcName, rpcInput, rpcOutput, pluginConfig) + NEW_LINE);
460 + appendToFile(getRpcImplTempFileHandle(),
461 + getRpcManagerMethod(rpcName, rpcInput, rpcOutput, pluginConfig) + NEW_LINE);
462 + }
463 +
464 + /**
465 + * Adds rpc string information to applicable temp file.
466 + *
467 + * @param javaAttributeInfoOfInput rpc's input node attribute info
468 + * @param javaAttributeInfoOfOutput rpc's output node attribute info
469 + * @param rpcName name of the rpc function
470 + * @param pluginConfig plugin configurations
471 + * @param isInputLeafHolder if input node is leaf holder
472 + * @param isOutputLeafHolder if output node is leaf holder
473 + * @param isInputSingleChildHolder if input node is single child holder
474 + * @param isOutputSingleChildHolder if input node is single child holder
475 + * @throws IOException IO operation fail
476 + */
477 + public void addRpcString(JavaAttributeInfo javaAttributeInfoOfInput,
478 + JavaAttributeInfo javaAttributeInfoOfOutput, YangPluginConfig pluginConfig,
479 + String rpcName, boolean isInputLeafHolder, boolean isOutputLeafHolder,
480 + boolean isInputSingleChildHolder, boolean isOutputSingleChildHolder) throws IOException {
481 + String rpcInput = EMPTY_STRING;
482 + String rpcOutput = VOID;
483 + String rpcInputJavaDoc = EMPTY_STRING;
484 + if (javaAttributeInfoOfInput != null) {
485 + rpcInput = getInputOutputNames(javaAttributeInfoOfInput, isInputLeafHolder, isInputSingleChildHolder,
486 + pluginConfig);
487 + }
488 + if (javaAttributeInfoOfOutput != null) {
489 + rpcOutput =
490 + getInputOutputNames(javaAttributeInfoOfOutput, isOutputLeafHolder, isOutputSingleChildHolder,
491 + pluginConfig);
492 + }
493 + if (!rpcInput.equals(EMPTY_STRING)) {
494 + rpcInputJavaDoc = RPC_INPUT_VAR_NAME;
495 + }
496 +
449 appendToFile(getRpcInterfaceTempFileHandle(), 497 appendToFile(getRpcInterfaceTempFileHandle(),
450 - generateJavaDocForRpc(rpcName, RPC_INPUT_VAR_NAME, rpcOutput, pluginConfig) 498 + generateJavaDocForRpc(rpcName, rpcInputJavaDoc, rpcOutput, pluginConfig)
451 + getRpcServiceMethod(rpcName, rpcInput, rpcOutput, pluginConfig) + NEW_LINE); 499 + getRpcServiceMethod(rpcName, rpcInput, rpcOutput, pluginConfig) + NEW_LINE);
452 appendToFile(getRpcImplTempFileHandle(), 500 appendToFile(getRpcImplTempFileHandle(),
453 getRpcManagerMethod(rpcName, rpcInput, rpcOutput, pluginConfig) + NEW_LINE); 501 getRpcManagerMethod(rpcName, rpcInput, rpcOutput, pluginConfig) + NEW_LINE);
454 } 502 }
455 503
456 /** 504 /**
505 + * Returns names for input and output.
506 + *
507 + * @param attr attribute info
508 + * @param isLeafHolder if leaf holder
509 + * @param isSinglechildHolder if single child holder
510 + * @param pluginConfig plugin configurations
511 + * @return names for input and output
512 + */
513 + private String getInputOutputNames(JavaAttributeInfo attr, boolean isLeafHolder, boolean isSinglechildHolder,
514 + YangPluginConfig pluginConfig) {
515 + if (!attr.isListAttr()) {
516 + if (!isLeafHolder || isSinglechildHolder) {
517 + String attrName = "";
518 + if (!attr.isQualifiedName()) {
519 + attrName = getCapitalCase(attr.getAttributeName());
520 + } else {
521 + attrName = attr.getImportInfo().getPkgInfo() + "." + getCapitalCase(attr.getAttributeName());
522 + }
523 + return attrName;
524 + } else {
525 + String rpcInput = getJavaImportClass(attr.getAttributeType(), false,
526 + pluginConfig.getConflictResolver());
527 + if (rpcInput == null) {
528 + rpcInput = getJavaDataType(attr.getAttributeType());
529 + }
530 + return rpcInput;
531 + }
532 + } else {
533 + if (!isLeafHolder || isSinglechildHolder) {
534 + String attrName = "";
535 + if (!attr.isQualifiedName()) {
536 + attrName = getCapitalCase(attr.getAttributeName());
537 + } else {
538 + attrName = attr.getImportInfo().getPkgInfo() + "." + getCapitalCase(attr.getAttributeName());
539 + }
540 + return getListAttribute(attrName);
541 +
542 + } else {
543 + return getListAttribute(getJavaImportClass(attr.getAttributeType(), true,
544 + pluginConfig.getConflictResolver()));
545 +
546 + }
547 + }
548 + }
549 +
550 + /**
457 * Adds the JAVA rpc snippet information. 551 * Adds the JAVA rpc snippet information.
458 * 552 *
459 * @param javaAttributeInfoOfInput rpc's input node attribute info 553 * @param javaAttributeInfoOfInput rpc's input node attribute info
460 * @param javaAttributeInfoOfOutput rpc's output node attribute info 554 * @param javaAttributeInfoOfOutput rpc's output node attribute info
461 * @param pluginConfig plugin configurations 555 * @param pluginConfig plugin configurations
462 * @param rpcName name of the rpc function 556 * @param rpcName name of the rpc function
557 + * @param isInputLeafHolder if input node is leaf holder
558 + * @param isOutputLeafHolder if output node is leaf holder
559 + * @param isInputSingleChildHolder if input node is single child holder
560 + * @param isOutputSingleChildHolder if input node is single child holder
463 * @throws IOException IO operation fail 561 * @throws IOException IO operation fail
464 */ 562 */
465 public void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo javaAttributeInfoOfInput, 563 public void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo javaAttributeInfoOfInput,
466 JavaAttributeInfo javaAttributeInfoOfOutput, YangPluginConfig pluginConfig, 564 JavaAttributeInfo javaAttributeInfoOfOutput, YangPluginConfig pluginConfig,
467 - String rpcName) 565 + String rpcName, boolean isInputLeafHolder, boolean isOutputLeafHolder,
566 + boolean isInputSingleChildHolder, boolean isOutputSingleChildHolder)
468 throws IOException { 567 throws IOException {
469 - addRpcString(javaAttributeInfoOfInput, javaAttributeInfoOfOutput, pluginConfig, rpcName); 568 + addRpcString(javaAttributeInfoOfInput, javaAttributeInfoOfOutput, pluginConfig, rpcName, isInputLeafHolder,
569 + isOutputLeafHolder, isInputSingleChildHolder, isOutputSingleChildHolder);
470 } 570 }
471 571
472 /** 572 /**
...@@ -690,6 +790,7 @@ public class TempJavaServiceFragmentFiles ...@@ -690,6 +790,7 @@ public class TempJavaServiceFragmentFiles
690 790
691 String currentInfo = getCapitalCase(getCamelCase(((YangNotification) curNode).getName(), 791 String currentInfo = getCapitalCase(getCamelCase(((YangNotification) curNode).getName(),
692 pluginConfig.getConflictResolver())); 792 pluginConfig.getConflictResolver()));
793 + String notificationName = ((YangNotification) curNode).getName();
693 794
694 JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode.getParent(), 795 JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode.getParent(),
695 getCapitalCase(currentInfo)); 796 getCapitalCase(currentInfo));
...@@ -699,7 +800,7 @@ public class TempJavaServiceFragmentFiles ...@@ -699,7 +800,7 @@ public class TempJavaServiceFragmentFiles
699 null, false, false); 800 null, false, false);
700 801
701 /*Adds java info for event in respective temp files.*/ 802 /*Adds java info for event in respective temp files.*/
702 - addEventEnum(currentInfo, pluginConfig); 803 + addEventEnum(notificationName, pluginConfig);
703 addEventSubjectAttribute(javaAttributeInfo, pluginConfig); 804 addEventSubjectAttribute(javaAttributeInfo, pluginConfig);
704 addEventSubjectGetter(javaAttributeInfo, pluginConfig); 805 addEventSubjectGetter(javaAttributeInfo, pluginConfig);
705 addEventSubjectSetter(javaAttributeInfo, pluginConfig, currentInfo); 806 addEventSubjectSetter(javaAttributeInfo, pluginConfig, currentInfo);
...@@ -709,7 +810,7 @@ public class TempJavaServiceFragmentFiles ...@@ -709,7 +810,7 @@ public class TempJavaServiceFragmentFiles
709 private void addEventEnum(String notificationName, YangPluginConfig pluginConfig) throws IOException { 810 private void addEventEnum(String notificationName, YangPluginConfig pluginConfig) throws IOException {
710 appendToFile(getEventEnumTempFileHandle(), 811 appendToFile(getEventEnumTempFileHandle(),
711 getJavaDoc(ENUM_ATTRIBUTE, notificationName, false, pluginConfig) + FOUR_SPACE_INDENTATION 812 getJavaDoc(ENUM_ATTRIBUTE, notificationName, false, pluginConfig) + FOUR_SPACE_INDENTATION
712 - + notificationName.toUpperCase() + COMMA + NEW_LINE); 813 + + getEnumJavaAttribute(notificationName).toUpperCase() + COMMA + NEW_LINE);
713 } 814 }
714 815
715 /*Adds event method in event class*/ 816 /*Adds event method in event class*/
......
...@@ -15,18 +15,116 @@ ...@@ -15,18 +15,116 @@
15 */ 15 */
16 package org.onosproject.yangutils.translator.tojava.javamodel; 16 package org.onosproject.yangutils.translator.tojava.javamodel;
17 17
18 +import java.io.IOException;
19 +
18 import org.onosproject.yangutils.datamodel.YangGrouping; 20 import org.onosproject.yangutils.datamodel.YangGrouping;
21 +import org.onosproject.yangutils.translator.exception.TranslatorException;
22 +import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
23 +import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
24 +import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
25 +import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
26 +
27 +import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
28 +import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.generateCodeOfNode;
19 29
20 /** 30 /**
21 * Represents grouping information extended to support java code generation. 31 * Represents grouping information extended to support java code generation.
22 */ 32 */
23 public class YangJavaGrouping 33 public class YangJavaGrouping
24 - extends YangGrouping { 34 + extends YangGrouping implements JavaCodeGeneratorInfo, JavaCodeGenerator {
35 +
36 + /**
37 + * Contains the information of the java file being generated.
38 + */
39 + private JavaFileInfo javaFileInfo;
40 +
41 + /**
42 + * File handle to maintain temporary java code fragments as per the code
43 + * snippet types.
44 + */
45 + private TempJavaCodeFragmentFiles tempFileHandle;
25 46
26 /** 47 /**
27 * Creates YANG Java grouping object. 48 * Creates YANG Java grouping object.
28 */ 49 */
29 public YangJavaGrouping() { 50 public YangJavaGrouping() {
30 super(); 51 super();
52 + setJavaFileInfo(new JavaFileInfo());
53 + getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
31 } 54 }
55 +
56 + /**
57 + * Returns the generated java file information.
58 + *
59 + * @return generated java file information
60 + */
61 + @Override
62 + public JavaFileInfo getJavaFileInfo() {
63 + if (javaFileInfo == null) {
64 + throw new TranslatorException("Missing java info in java datamodel node");
65 + }
66 + return javaFileInfo;
67 + }
68 +
69 + /**
70 + * Sets the java file info object.
71 + *
72 + * @param javaInfo java file info object
73 + */
74 + @Override
75 + public void setJavaFileInfo(JavaFileInfo javaInfo) {
76 + javaFileInfo = javaInfo;
77 + }
78 +
79 + /**
80 + * Returns the temporary file handle.
81 + *
82 + * @return temporary file handle
83 + */
84 + @Override
85 + public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
86 + return tempFileHandle;
87 + }
88 +
89 + /**
90 + * Sets temporary file handle.
91 + *
92 + * @param fileHandle temporary file handle
93 + */
94 + @Override
95 + public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
96 + tempFileHandle = fileHandle;
97 + }
98 +
99 + /**
100 + * Prepare the information for java code generation corresponding to YANG
101 + * grouping info.
102 + *
103 + * @param yangPlugin YANG plugin config
104 + * @throws TranslatorException translator operation fail
105 + */
106 + @Override
107 + public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
108 + try {
109 + generateCodeOfNode(this, yangPlugin);
110 + } catch (IOException e) {
111 + throw new TranslatorException(
112 + "Failed to prepare generate code entry for container node " + this.getName());
113 + }
114 + }
115 +
116 + /**
117 + * Create a java file using the YANG grouping info.
118 + *
119 + * @throws TranslatorException translator operation fail
120 + */
121 + @Override
122 + public void generateCodeExit() throws TranslatorException {
123 + try {
124 + getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
125 + } catch (IOException e) {
126 + throw new TranslatorException("Failed to generate code for container node " + this.getName());
127 + }
128 + }
129 +
32 } 130 }
......
...@@ -26,7 +26,7 @@ import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles; ...@@ -26,7 +26,7 @@ import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
26 import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig; 26 import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
27 27
28 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER; 28 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
29 -import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.generateCodeOfNode; 29 +import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.generateCodeOfAugmentableNode;
30 30
31 /** 31 /**
32 * Represents input information extended to support java code generation. 32 * Represents input information extended to support java code generation.
...@@ -46,6 +46,8 @@ public class YangJavaInput ...@@ -46,6 +46,8 @@ public class YangJavaInput
46 */ 46 */
47 private TempJavaCodeFragmentFiles tempFileHandle; 47 private TempJavaCodeFragmentFiles tempFileHandle;
48 48
49 + private boolean codeGenFlag;
50 +
49 /** 51 /**
50 * Creates an instance of java input. 52 * Creates an instance of java input.
51 */ 53 */
...@@ -108,7 +110,7 @@ public class YangJavaInput ...@@ -108,7 +110,7 @@ public class YangJavaInput
108 @Override 110 @Override
109 public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException { 111 public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
110 try { 112 try {
111 - generateCodeOfNode(this, yangPlugin); 113 + generateCodeOfAugmentableNode(this, yangPlugin);
112 } catch (IOException e) { 114 } catch (IOException e) {
113 throw new TranslatorException( 115 throw new TranslatorException(
114 "Failed to prepare generate code entry for input node " + this.getName()); 116 "Failed to prepare generate code entry for input node " + this.getName());
...@@ -123,9 +125,29 @@ public class YangJavaInput ...@@ -123,9 +125,29 @@ public class YangJavaInput
123 @Override 125 @Override
124 public void generateCodeExit() throws TranslatorException { 126 public void generateCodeExit() throws TranslatorException {
125 try { 127 try {
126 - getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this); 128 + if (isCodeGenFlag()) {
129 + getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
130 + }
127 } catch (IOException e) { 131 } catch (IOException e) {
128 throw new TranslatorException("Failed to generate code for input node " + this.getName()); 132 throw new TranslatorException("Failed to generate code for input node " + this.getName());
129 } 133 }
130 } 134 }
135 +
136 + /**
137 + * Returns code generator flag.
138 + *
139 + * @return code generator flag
140 + */
141 + public boolean isCodeGenFlag() {
142 + return codeGenFlag;
143 + }
144 +
145 + /**
146 + * Sets code generator flag.
147 + *
148 + * @param codeGenFlag code generator flag
149 + */
150 + public void setCodeGenFlag(boolean codeGenFlag) {
151 + this.codeGenFlag = codeGenFlag;
152 + }
131 } 153 }
......
...@@ -71,6 +71,7 @@ public class YangJavaLeaf ...@@ -71,6 +71,7 @@ public class YangJavaLeaf
71 * 71 *
72 * @return java naming conflict resolve configurations 72 * @return java naming conflict resolve configurations
73 */ 73 */
74 + @Override
74 public YangToJavaNamingConflictUtil getConflictResolveConfig() { 75 public YangToJavaNamingConflictUtil getConflictResolveConfig() {
75 return conflictResolveConfig; 76 return conflictResolveConfig;
76 } 77 }
...@@ -80,6 +81,7 @@ public class YangJavaLeaf ...@@ -80,6 +81,7 @@ public class YangJavaLeaf
80 * 81 *
81 * @param conflictResolveConfig java naming conflict resolve configurations 82 * @param conflictResolveConfig java naming conflict resolve configurations
82 */ 83 */
84 + @Override
83 public void setConflictResolveConfig(YangToJavaNamingConflictUtil conflictResolveConfig) { 85 public void setConflictResolveConfig(YangToJavaNamingConflictUtil conflictResolveConfig) {
84 this.conflictResolveConfig = conflictResolveConfig; 86 this.conflictResolveConfig = conflictResolveConfig;
85 } 87 }
......
...@@ -26,7 +26,7 @@ import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles; ...@@ -26,7 +26,7 @@ import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
26 import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig; 26 import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
27 27
28 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER; 28 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
29 -import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.generateCodeOfNode; 29 +import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.generateCodeOfAugmentableNode;
30 30
31 /** 31 /**
32 * Represents output information extended to support java code generation. 32 * Represents output information extended to support java code generation.
...@@ -46,6 +46,8 @@ public class YangJavaOutput ...@@ -46,6 +46,8 @@ public class YangJavaOutput
46 */ 46 */
47 private TempJavaCodeFragmentFiles tempFileHandle; 47 private TempJavaCodeFragmentFiles tempFileHandle;
48 48
49 + private boolean codeGenFlag;
50 +
49 /** 51 /**
50 * Creates an instance of java output. 52 * Creates an instance of java output.
51 */ 53 */
...@@ -108,7 +110,7 @@ public class YangJavaOutput ...@@ -108,7 +110,7 @@ public class YangJavaOutput
108 @Override 110 @Override
109 public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException { 111 public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
110 try { 112 try {
111 - generateCodeOfNode(this, yangPlugin); 113 + generateCodeOfAugmentableNode(this, yangPlugin);
112 } catch (IOException e) { 114 } catch (IOException e) {
113 throw new TranslatorException( 115 throw new TranslatorException(
114 "Failed to prepare generate code entry for output node " + this.getName()); 116 "Failed to prepare generate code entry for output node " + this.getName());
...@@ -124,10 +126,30 @@ public class YangJavaOutput ...@@ -124,10 +126,30 @@ public class YangJavaOutput
124 @Override 126 @Override
125 public void generateCodeExit() throws TranslatorException { 127 public void generateCodeExit() throws TranslatorException {
126 try { 128 try {
127 - getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this); 129 + if (isCodeGenFlag()) {
130 + getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
131 + }
128 } catch (IOException e) { 132 } catch (IOException e) {
129 throw new TranslatorException( 133 throw new TranslatorException(
130 "Failed to prepare generate code exit for output node " + this.getName()); 134 "Failed to prepare generate code exit for output node " + this.getName());
131 } 135 }
132 } 136 }
137 +
138 + /**
139 + * Returns code generator flag.
140 + *
141 + * @return code generator flag
142 + */
143 + public boolean isCodeGenFlag() {
144 + return codeGenFlag;
145 + }
146 +
147 + /**
148 + * Sets code generator flag.
149 + *
150 + * @param codeGenFlag code generator flag
151 + */
152 + public void setCodeGenFlag(boolean codeGenFlag) {
153 + this.codeGenFlag = codeGenFlag;
154 + }
133 } 155 }
......
...@@ -55,7 +55,7 @@ public class YangJavaType<T> ...@@ -55,7 +55,7 @@ public class YangJavaType<T>
55 */ 55 */
56 importInfo.setClassInfo(className); 56 importInfo.setClassInfo(className);
57 String classPkg = AttributesJavaDataType.getJavaImportPackage(this, 57 String classPkg = AttributesJavaDataType.getJavaImportPackage(this,
58 - false, className, conflictResolver); 58 + false, conflictResolver);
59 if (classPkg == null) { 59 if (classPkg == null) {
60 throw new TranslatorException("import package cannot be null when the class is used"); 60 throw new TranslatorException("import package cannot be null when the class is used");
61 } 61 }
......
...@@ -15,18 +15,113 @@ ...@@ -15,18 +15,113 @@
15 */ 15 */
16 package org.onosproject.yangutils.translator.tojava.javamodel; 16 package org.onosproject.yangutils.translator.tojava.javamodel;
17 17
18 +import java.io.IOException;
19 +
18 import org.onosproject.yangutils.datamodel.YangUses; 20 import org.onosproject.yangutils.datamodel.YangUses;
21 +import org.onosproject.yangutils.translator.exception.TranslatorException;
22 +import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
23 +import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
24 +import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
25 +import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
26 +
27 +import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
28 +import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.addCurNodeInfoInParentTempFile;
19 29
20 /** 30 /**
21 * Represents uses information extended to support java code generation. 31 * Represents uses information extended to support java code generation.
22 */ 32 */
23 public class YangJavaUses 33 public class YangJavaUses
24 - extends YangUses { 34 + extends YangUses implements JavaCodeGeneratorInfo, JavaCodeGenerator {
35 +
36 +
37 + /**
38 + * Contains the information of the java file being generated.
39 + */
40 + private JavaFileInfo javaFileInfo;
41 +
42 + /**
43 + * File handle to maintain temporary java code fragments as per the code
44 + * snippet types.
45 + */
46 + private TempJavaCodeFragmentFiles tempFileHandle;
25 47
26 /** 48 /**
27 * Creates YANG java uses object. 49 * Creates YANG java uses object.
28 */ 50 */
29 public YangJavaUses() { 51 public YangJavaUses() {
30 super(); 52 super();
53 + setJavaFileInfo(new JavaFileInfo());
54 + getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
55 + }
56 +
57 + /**
58 + * Returns the generated java file information.
59 + *
60 + * @return generated java file information
61 + */
62 + @Override
63 + public JavaFileInfo getJavaFileInfo() {
64 + if (javaFileInfo == null) {
65 + throw new TranslatorException("Missing java info in java datamodel node");
66 + }
67 + return javaFileInfo;
68 + }
69 +
70 + /**
71 + * Sets the java file info object.
72 + *
73 + * @param javaInfo java file info object
74 + */
75 + @Override
76 + public void setJavaFileInfo(JavaFileInfo javaInfo) {
77 + javaFileInfo = javaInfo;
31 } 78 }
79 +
80 + /**
81 + * Returns the temporary file handle.
82 + *
83 + * @return temporary file handle
84 + */
85 + @Override
86 + public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
87 + return tempFileHandle;
88 + }
89 +
90 + /**
91 + * Sets temporary file handle.
92 + *
93 + * @param fileHandle temporary file handle
94 + */
95 + @Override
96 + public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
97 + tempFileHandle = fileHandle;
98 + }
99 +
100 + /**
101 + * Prepare the information for java code generation corresponding to YANG
102 + * uses info.
103 + *
104 + * @param yangPlugin YANG plugin config
105 + * @throws TranslatorException translator operation fail
106 + */
107 + @Override
108 + public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
109 + try {
110 + addCurNodeInfoInParentTempFile(this, false, yangPlugin);
111 + } catch (IOException e) {
112 + throw new TranslatorException(
113 + "Failed to prepare generate code entry for container node " + this.getName());
114 + }
115 + }
116 +
117 + /**
118 + * Create a java file using the YANG uses info.
119 + *
120 + * @throws TranslatorException translator operation fail
121 + */
122 + @Override
123 + public void generateCodeExit() throws TranslatorException {
124 + // no code generation will be done for uses.
125 + }
126 +
32 } 127 }
......
...@@ -270,11 +270,10 @@ public final class AttributesJavaDataType { ...@@ -270,11 +270,10 @@ public final class AttributesJavaDataType {
270 * 270 *
271 * @param yangType YANG type 271 * @param yangType YANG type
272 * @param isListAttr if the attribute is of list type 272 * @param isListAttr if the attribute is of list type
273 - * @param classInfo java import class info
274 * @param conflictResolver object of YANG to java naming conflict util 273 * @param conflictResolver object of YANG to java naming conflict util
275 * @return java import package 274 * @return java import package
276 */ 275 */
277 - public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr, String classInfo, 276 + public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr,
278 YangToJavaNamingConflictUtil conflictResolver) { 277 YangToJavaNamingConflictUtil conflictResolver) {
279 278
280 YangDataTypes type = yangType.getDataType(); 279 YangDataTypes type = yangType.getDataType();
...@@ -430,13 +429,13 @@ public final class AttributesJavaDataType { ...@@ -430,13 +429,13 @@ public final class AttributesJavaDataType {
430 YangJavaModule module = (YangJavaModule) parent; 429 YangJavaModule module = (YangJavaModule) parent;
431 String modulePkg = getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module 430 String modulePkg = getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module
432 .getRevision().getRevDate(), conflictResolver); 431 .getRevision().getRevDate(), conflictResolver);
433 - return modulePkg + PERIOD + getCamelCase(module.getName(), null).toLowerCase(); 432 + return modulePkg + PERIOD + getCamelCase(module.getName(), conflictResolver).toLowerCase();
434 } else if (parent instanceof YangJavaSubModule) { 433 } else if (parent instanceof YangJavaSubModule) {
435 YangJavaSubModule submodule = (YangJavaSubModule) parent; 434 YangJavaSubModule submodule = (YangJavaSubModule) parent;
436 String subModulePkg = getRootPackage(submodule.getVersion(), 435 String subModulePkg = getRootPackage(submodule.getVersion(),
437 submodule.getNameSpaceFromModule(submodule.getBelongsTo()), 436 submodule.getNameSpaceFromModule(submodule.getBelongsTo()),
438 submodule.getRevision().getRevDate(), conflictResolver); 437 submodule.getRevision().getRevDate(), conflictResolver);
439 - return subModulePkg + PERIOD + getCamelCase(submodule.getName(), null).toLowerCase(); 438 + return subModulePkg + PERIOD + getCamelCase(submodule.getName(), conflictResolver).toLowerCase();
440 } 439 }
441 } 440 }
442 return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase(); 441 return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase();
......
...@@ -115,7 +115,7 @@ public final class JavaCodeSnippetGen { ...@@ -115,7 +115,7 @@ public final class JavaCodeSnippetGen {
115 * @param type attribute type 115 * @param type attribute type
116 * @return list attribute string 116 * @return list attribute string
117 */ 117 */
118 - private static String getListAttribute(String type) { 118 + public static String getListAttribute(String type) {
119 return LIST + DIAMOND_OPEN_BRACKET + type + DIAMOND_CLOSE_BRACKET; 119 return LIST + DIAMOND_OPEN_BRACKET + type + DIAMOND_CLOSE_BRACKET;
120 } 120 }
121 121
......
...@@ -366,7 +366,7 @@ public final class JavaIdentifierSyntax { ...@@ -366,7 +366,7 @@ public final class JavaIdentifierSyntax {
366 i = 1; 366 i = 1;
367 } 367 }
368 for (; i < stringArray.length; i++) { 368 for (; i < stringArray.length; i++) {
369 - if ((i + 1) == stringArray.length) { 369 + if (i + 1 == stringArray.length) {
370 if (stringArray[i].matches(REGEX_FOR_SINGLE_LETTER) 370 if (stringArray[i].matches(REGEX_FOR_SINGLE_LETTER)
371 || stringArray[i].matches(REGEX_FOR_DIGITS_WITH_SINGLE_LETTER)) { 371 || stringArray[i].matches(REGEX_FOR_DIGITS_WITH_SINGLE_LETTER)) {
372 ruleChecker = ruleChecker + stringArray[i].toLowerCase(); 372 ruleChecker = ruleChecker + stringArray[i].toLowerCase();
......
...@@ -265,7 +265,7 @@ public final class MethodsGenerator { ...@@ -265,7 +265,7 @@ public final class MethodsGenerator {
265 * @return getter for attribute 265 * @return getter for attribute
266 */ 266 */
267 public static String getGetter(String type, String name, int generatedJavaFiles) { 267 public static String getGetter(String type, String name, int generatedJavaFiles) {
268 - String ret = parseTypeForGetter(type); 268 + String ret = parseTypeForReturnValue(type);
269 if ((generatedJavaFiles & GENERATE_SERVICE_AND_MANAGER) != 0) { 269 if ((generatedJavaFiles & GENERATE_SERVICE_AND_MANAGER) != 0) {
270 return FOUR_SPACE_INDENTATION + PUBLIC + SPACE + type + SPACE + GET_METHOD_PREFIX + getCapitalCase(name) 270 return FOUR_SPACE_INDENTATION + PUBLIC + SPACE + type + SPACE + GET_METHOD_PREFIX + getCapitalCase(name)
271 + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + 271 + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE +
...@@ -281,7 +281,7 @@ public final class MethodsGenerator { ...@@ -281,7 +281,7 @@ public final class MethodsGenerator {
281 } 281 }
282 282
283 /*Provides string to return for type.*/ 283 /*Provides string to return for type.*/
284 - private static String parseTypeForGetter(String type) { 284 + private static String parseTypeForReturnValue(String type) {
285 switch (type) { 285 switch (type) {
286 case BYTE: 286 case BYTE:
287 case INT: 287 case INT:
...@@ -555,12 +555,11 @@ public final class MethodsGenerator { ...@@ -555,12 +555,11 @@ public final class MethodsGenerator {
555 YangPluginConfig pluginConfig) { 555 YangPluginConfig pluginConfig) {
556 556
557 rpcName = getCamelCase(rpcName, pluginConfig.getConflictResolver()); 557 rpcName = getCamelCase(rpcName, pluginConfig.getConflictResolver());
558 - inputName = getCapitalCase(inputName); 558 + if (!inputName.equals(EMPTY_STRING)) {
559 - if (!outputName.equals(VOID)) { 559 + inputName = inputName + SPACE + RPC_INPUT_VAR_NAME;
560 - outputName = getCapitalCase(outputName);
561 } 560 }
562 - return FOUR_SPACE_INDENTATION + outputName + SPACE + rpcName + OPEN_PARENTHESIS + inputName + SPACE 561 + return FOUR_SPACE_INDENTATION + outputName + SPACE + rpcName + OPEN_PARENTHESIS + inputName
563 - + RPC_INPUT_VAR_NAME + CLOSE_PARENTHESIS + SEMI_COLAN; 562 + + CLOSE_PARENTHESIS + SEMI_COLAN;
564 } 563 }
565 564
566 /** 565 /**
...@@ -576,16 +575,17 @@ public final class MethodsGenerator { ...@@ -576,16 +575,17 @@ public final class MethodsGenerator {
576 YangPluginConfig pluginConfig) { 575 YangPluginConfig pluginConfig) {
577 576
578 rpcName = getCamelCase(rpcName, pluginConfig.getConflictResolver()); 577 rpcName = getCamelCase(rpcName, pluginConfig.getConflictResolver());
579 - inputName = getCapitalCase(inputName); 578 + if (!inputName.equals(EMPTY_STRING)) {
580 - if (!outputName.equals(VOID)) { 579 + inputName = inputName + SPACE + RPC_INPUT_VAR_NAME;
581 - outputName = getCapitalCase(outputName);
582 } 580 }
583 581
584 - String method = getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC + SPACE + outputName + SPACE + rpcName 582 + String method =
585 - + OPEN_PARENTHESIS + inputName + SPACE + RPC_INPUT_VAR_NAME + CLOSE_PARENTHESIS + SPACE 583 + getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC + SPACE + outputName + SPACE + rpcName
586 - + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION + YANG_UTILS_TODO + NEW_LINE; 584 + + OPEN_PARENTHESIS + inputName + CLOSE_PARENTHESIS + SPACE
585 + + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION + YANG_UTILS_TODO + NEW_LINE;
587 if (!outputName.contentEquals(VOID)) { 586 if (!outputName.contentEquals(VOID)) {
588 - method += EIGHT_SPACE_INDENTATION + RETURN + SPACE + NULL + SEMI_COLAN + NEW_LINE; 587 + method += EIGHT_SPACE_INDENTATION + RETURN + SPACE + parseTypeForReturnValue(outputName) + SEMI_COLAN
588 + + NEW_LINE;
589 } 589 }
590 method += FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET; 590 method += FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET;
591 591
......
...@@ -29,7 +29,10 @@ import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles; ...@@ -29,7 +29,10 @@ import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
29 import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer; 29 import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
30 import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles; 30 import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles;
31 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaAugment; 31 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaAugment;
32 +import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaInput;
32 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModule; 33 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModule;
34 +import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaOutput;
35 +import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModule;
33 36
34 import static java.util.Collections.sort; 37 import static java.util.Collections.sort;
35 38
...@@ -339,6 +342,12 @@ public final class TempJavaCodeFragmentFilesUtils { ...@@ -339,6 +342,12 @@ public final class TempJavaCodeFragmentFilesUtils {
339 JavaQualifiedTypeInfo qualifiedTypeInfo) { 342 JavaQualifiedTypeInfo qualifiedTypeInfo) {
340 343
341 YangNode parent = curNode.getParent(); 344 YangNode parent = curNode.getParent();
345 + if (parent instanceof YangJavaModule
346 + || parent instanceof YangJavaSubModule
347 + || parent instanceof YangJavaInput
348 + || parent instanceof YangJavaOutput) {
349 + return false;
350 + }
342 String parentsClassInfo = getCapitalCase(((JavaFileInfoContainer) parent).getJavaFileInfo().getJavaName()); 351 String parentsClassInfo = getCapitalCase(((JavaFileInfoContainer) parent).getJavaFileInfo().getJavaName());
343 String childsClassInfo = qualifiedTypeInfo.getClassInfo(); 352 String childsClassInfo = qualifiedTypeInfo.getClassInfo();
344 if (childsClassInfo.equals(parentsClassInfo)) { 353 if (childsClassInfo.equals(parentsClassInfo)) {
......
...@@ -24,6 +24,7 @@ import static org.onosproject.yangutils.utils.UtilConstants.BUILDER; ...@@ -24,6 +24,7 @@ import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
24 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_CLASS_JAVA_DOC; 24 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_CLASS_JAVA_DOC;
25 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_INTERFACE_JAVA_DOC; 25 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_INTERFACE_JAVA_DOC;
26 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_OBJECT; 26 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_OBJECT;
27 +import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
27 import static org.onosproject.yangutils.utils.UtilConstants.ENUM_ATTRIBUTE_JAVADOC; 28 import static org.onosproject.yangutils.utils.UtilConstants.ENUM_ATTRIBUTE_JAVADOC;
28 import static org.onosproject.yangutils.utils.UtilConstants.ENUM_CLASS_JAVADOC; 29 import static org.onosproject.yangutils.utils.UtilConstants.ENUM_CLASS_JAVADOC;
29 import static org.onosproject.yangutils.utils.UtilConstants.EVENT_JAVA_DOC; 30 import static org.onosproject.yangutils.utils.UtilConstants.EVENT_JAVA_DOC;
...@@ -298,8 +299,10 @@ public final class JavaDocGen { ...@@ -298,8 +299,10 @@ public final class JavaDocGen {
298 299
299 String javadoc = 300 String javadoc =
300 NEW_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_FIRST_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_RPC 301 NEW_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_FIRST_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_RPC
301 - + rpcName + PERIOD + NEW_LINE + FOUR_SPACE_INDENTATION + NEW_LINE_ASTERISK 302 + + rpcName + PERIOD + NEW_LINE + FOUR_SPACE_INDENTATION + NEW_LINE_ASTERISK;
302 - + getInputString(inputName, rpcName); 303 + if (!inputName.equals(EMPTY_STRING)) {
304 + javadoc = javadoc + getInputString(inputName, rpcName);
305 + }
303 if (!outputName.equals(VOID)) { 306 if (!outputName.equals(VOID)) {
304 javadoc = javadoc + getOutputString(outputName, rpcName); 307 javadoc = javadoc + getOutputString(outputName, rpcName);
305 } 308 }
...@@ -406,7 +409,8 @@ public final class JavaDocGen { ...@@ -406,7 +409,8 @@ public final class JavaDocGen {
406 } else { 409 } else {
407 setter = setter + VALUE + SPACE + OF + SPACE; 410 setter = setter + VALUE + SPACE + OF + SPACE;
408 } 411 }
409 - setter = setter + attribute + NEW_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_RETURN + BUILDER_OBJECT + attribute 412 + setter = setter + attribute + NEW_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_RETURN + BUILDER_OBJECT
413 + + attribute
410 + NEW_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_END_LINE; 414 + NEW_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_END_LINE;
411 return setter; 415 return setter;
412 } 416 }
......
...@@ -433,7 +433,20 @@ public final class YangIoUtils { ...@@ -433,7 +433,20 @@ public final class YangIoUtils {
433 } else { 433 } else {
434 stringBuilder.append(line + NEW_LINE); 434 stringBuilder.append(line + NEW_LINE);
435 } 435 }
436 - return stringBuilder.toString(); 436 +
437 + String[] strArray = stringBuilder.toString().split(NEW_LINE);
438 + StringBuilder tempBuilder = new StringBuilder();
439 + for (String str : strArray) {
440 + if (str.length() > SUB_LINE_SIZE) {
441 + if (str.contains(SPACE)) {
442 + String[] strArr = str.split(SPACE);
443 + tempBuilder = updateString(strArr, tempBuilder, SPACE, SUB_LINE_SIZE);
444 + }
445 + } else {
446 + tempBuilder.append(str + NEW_LINE);
447 + }
448 + }
449 + return tempBuilder.toString();
437 } 450 }
438 451
439 /*Updates the given line with the given size conditions.*/ 452 /*Updates the given line with the given size conditions.*/
......
1 -/*
2 - * Copyright 2016-present Open Networking Laboratory
3 - *
4 - * Licensed under the Apache License, Version 2.0 (the "License");
5 - * you may not use this file except in compliance with the License.
6 - * You may obtain a copy of the License at
7 - *
8 - * http://www.apache.org/licenses/LICENSE-2.0
9 - *
10 - * Unless required by applicable law or agreed to in writing, software
11 - * distributed under the License is distributed on an "AS IS" BASIS,
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 - * See the License for the specific language governing permissions and
14 - * limitations under the License.
15 - */
16 -
17 -package org.onosproject.yangutils.parser.parseutils;
18 -
19 -import org.junit.Test;
20 -
21 -import static org.hamcrest.core.Is.is;
22 -import static org.junit.Assert.assertThat;
23 -import static org.onosproject.yangutils.utils.YangConstructType.CONTACT_DATA;
24 -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
25 -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
26 -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
27 -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
28 -
29 -/**
30 - * Test case for testing listener error message construction util.
31 - */
32 -public class ListenerErrorMessageConstructionTest {
33 -
34 - /**
35 - * Checks for error message construction with parsable data type name.
36 - */
37 - @Test
38 - public void checkErrorMsgConstructionWithName() {
39 -
40 - // Create an test error message
41 - String testErrorMessage = constructListenerErrorMessage(INVALID_HOLDER, CONTACT_DATA, "Test Instance", ENTRY);
42 -
43 - // Check message.
44 - assertThat(testErrorMessage, is("Internal parser error detected: Invalid holder for contact "
45 - + "\"Test Instance\" before processing."));
46 - }
47 -
48 - /**
49 - * Checks for error message construction without parsable data type name.
50 - */
51 - @Test
52 - public void checkErrorMsgConstructionWithoutName() {
53 -
54 - // Create an test error message
55 - String testErrorMessage = constructListenerErrorMessage(INVALID_HOLDER, CONTACT_DATA, "Test Instance", ENTRY);
56 -
57 - // Check message.
58 - assertThat(testErrorMessage,
59 - is("Internal parser error detected: Invalid holder for contact \"Test Instance\""
60 - + " before processing."));
61 - }
62 -
63 - /**
64 - * Checks for extended error message construction with parsable data type
65 - * name.
66 - */
67 - @Test
68 - public void checkExtendedErrorMsgConstructionWithName() {
69 -
70 - // Create an test error message
71 - String testErrorMessage = constructExtendedListenerErrorMessage(INVALID_HOLDER, CONTACT_DATA,
72 - "Test Instance", ENTRY,
73 - "Extended Information");
74 -
75 - // Check message.
76 - assertThat(testErrorMessage,
77 - is("Internal parser error detected: Invalid holder for contact \"Test Instance\""
78 - + " before processing.\n" + "Error Information: Extended Information"));
79 - }
80 -
81 - /**
82 - * Checks for extended error message construction without parsable data type
83 - * name.
84 - */
85 - @Test
86 - public void checkExtendedErrorMsgConstructionWithoutName() {
87 -
88 - // Create an test error message
89 - String testErrorMessage = constructExtendedListenerErrorMessage(INVALID_HOLDER, CONTACT_DATA, "", ENTRY,
90 - "Extended Information");
91 -
92 - // Check message.
93 - assertThat(testErrorMessage, is("Internal parser error detected: Invalid holder for contact"
94 - + " before processing.\n" + "Error Information: Extended Information"));
95 - }
96 -}
1 -/*
2 - * Copyright 2016-present Open Networking Laboratory
3 - *
4 - * Licensed under the Apache License, Version 2.0 (the "License");
5 - * you may not use this file except in compliance with the License.
6 - * You may obtain a copy of the License at
7 - *
8 - * http://www.apache.org/licenses/LICENSE-2.0
9 - *
10 - * Unless required by applicable law or agreed to in writing, software
11 - * distributed under the License is distributed on an "AS IS" BASIS,
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 - * See the License for the specific language governing permissions and
14 - * limitations under the License.
15 - */
16 -
17 -package org.onosproject.yangutils.parser.parseutils;
18 -
19 -import org.junit.Rule;
20 -import org.junit.Test;
21 -import org.junit.rules.ExpectedException;
22 -import org.onosproject.yangutils.datamodel.YangRevision;
23 -import org.onosproject.yangutils.parser.exceptions.ParserException;
24 -import org.onosproject.yangutils.parser.impl.TreeWalkListener;
25 -
26 -import static org.onosproject.yangutils.utils.YangConstructType.YANGBASE_DATA;
27 -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
28 -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
29 -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
30 -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsEmpty;
31 -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
32 -
33 -/**
34 - * Test case for testing listener validation util.
35 - */
36 -public class ListenerValidationTest {
37 -
38 - @Rule
39 - public ExpectedException thrown = ExpectedException.none();
40 -
41 - /**
42 - * Checks for exception in case parsable stack is empty while validating for
43 - * not empty scenario.
44 - */
45 - @Test
46 - public void validateStackIsNotEmptyForEmptyStack() {
47 -
48 - String expectedError = constructListenerErrorMessage(MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
49 -
50 - // Get the exception occurred during parsing.
51 - thrown.expect(ParserException.class);
52 - thrown.expectMessage(expectedError);
53 -
54 - // Create test walker and assign test error to it.
55 - TreeWalkListener testWalker = new TreeWalkListener();
56 -
57 - checkStackIsNotEmpty(testWalker, MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
58 - }
59 -
60 - /**
61 - * Checks if there is no exception in case parsable stack is not empty while
62 - * validating for not empty scenario.
63 - */
64 - @Test
65 - public void validateStackIsNotEmptyForNonEmptyStack() {
66 -
67 - // Create test walker and assign test error to it.
68 - TreeWalkListener testWalker = new TreeWalkListener();
69 -
70 - // Create a temporary node of parsable.
71 - YangRevision tmpNode = new YangRevision();
72 - testWalker.getParsedDataStack().push(tmpNode);
73 -
74 - checkStackIsNotEmpty(testWalker, MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
75 - }
76 -
77 - /**
78 - * Checks for exception in case parsable stack is not empty while validating
79 - * for empty scenario.
80 - */
81 - @Test
82 - public void validateStackIsEmptyForNonEmptyStack() {
83 -
84 - String expectedError = constructListenerErrorMessage(MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
85 -
86 - // Get the exception occurred during parsing.
87 - thrown.expect(ParserException.class);
88 - thrown.expectMessage(expectedError);
89 -
90 - // Create test walker and assign test error to it.
91 - TreeWalkListener testWalker = new TreeWalkListener();
92 -
93 - // Create a temporary node of parsable.
94 - YangRevision tmpNode = new YangRevision();
95 - testWalker.getParsedDataStack().push(tmpNode);
96 -
97 - checkStackIsEmpty(testWalker, MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
98 - }
99 -
100 - /**
101 - * Checks if there is no exception in case parsable stack is empty while
102 - * validating for empty scenario.
103 - */
104 - @Test
105 - public void validateStackIsEmptyForEmptyStack() {
106 -
107 - // Create test walker and assign test error to it.
108 - TreeWalkListener testWalker = new TreeWalkListener();
109 -
110 - checkStackIsEmpty(testWalker, MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
111 - }
112 -}
1 -/*
2 - * Copyright 2016-present Open Networking Laboratory
3 - *
4 - * Licensed under the Apache License, Version 2.0 (the "License");
5 - * you may not use this file except in compliance with the License.
6 - * You may obtain a copy of the License at
7 - *
8 - * http://www.apache.org/licenses/LICENSE-2.0
9 - *
10 - * Unless required by applicable law or agreed to in writing, software
11 - * distributed under the License is distributed on an "AS IS" BASIS,
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 - * See the License for the specific language governing permissions and
14 - * limitations under the License.
15 - */
16 -
17 -package org.onosproject.yangutils.parser.parseutils;
18 -
19 -import org.antlr.v4.runtime.ANTLRFileStream;
20 -import org.antlr.v4.runtime.ANTLRInputStream;
21 -import org.antlr.v4.runtime.CommonTokenStream;
22 -import org.antlr.v4.runtime.tree.ParseTree;
23 -import org.junit.Rule;
24 -import org.junit.Test;
25 -import org.junit.rules.ExpectedException;
26 -import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangLexer;
27 -import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
28 -import org.onosproject.yangutils.parser.exceptions.ParserException;
29 -import org.onosproject.yangutils.parser.impl.CustomExceptionMatcher;
30 -import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
31 -import org.onosproject.yangutils.parser.impl.parserutils.ParseTreeErrorListener;
32 -
33 -import java.io.BufferedWriter;
34 -import java.io.File;
35 -import java.io.IOException;
36 -
37 -/**
38 - * Test case for testing parse tree error listener.
39 - */
40 -public class ParseTreeErrorListenerTest {
41 -
42 - YangUtilsParserManager manager = new YangUtilsParserManager();
43 - File file;
44 - BufferedWriter out;
45 -
46 - @Rule
47 - public ExpectedException thrown = ExpectedException.none();
48 -
49 - /**
50 - * Checks that no exception is generated for YANG file with valid syntax.
51 - */
52 - @Test
53 - public void checkValidYangFileForNoSyntaxError() throws IOException {
54 -
55 - ANTLRInputStream input = new ANTLRFileStream("src/test/resources/YangFileWithoutSyntaxError.yang");
56 -
57 - // Create a lexer that feeds off of input char stream.
58 - GeneratedYangLexer lexer = new GeneratedYangLexer(input);
59 - // Create a buffer of tokens pulled from the lexer.
60 - CommonTokenStream tokens = new CommonTokenStream(lexer);
61 - // Create a parser that feeds off the tokens buffer.
62 - GeneratedYangParser parser = new GeneratedYangParser(tokens);
63 - // Remove console error listener.
64 - parser.removeErrorListeners();
65 - // Create instance of customized error listener.
66 - ParseTreeErrorListener parseTreeErrorListener = new ParseTreeErrorListener();
67 - // Add customized error listener to catch errors during parsing.
68 - parser.addErrorListener(parseTreeErrorListener);
69 - // Begin parsing YANG file and generate parse tree.
70 - ParseTree tree = parser.yangfile();
71 - }
72 -
73 - /**
74 - * Checks that exception is generated for YANG file with invalid syntax.
75 - */
76 - @Test
77 - public void checkInvalidYangFileForSyntaxError() throws IOException {
78 -
79 - // Get the exception occurred during parsing.
80 - thrown.expect(ParserException.class);
81 - thrown.expect(CustomExceptionMatcher.errorLocation(3, 0));
82 - thrown.expectMessage("no viable alternative at input 'yang-version 1\\nnamespace'");
83 -
84 - ANTLRInputStream input = new ANTLRFileStream("src/test/resources/YangFileWithSyntaxError.yang");
85 -
86 - // Create a lexer that feeds off of input char stream.
87 - GeneratedYangLexer lexer = new GeneratedYangLexer(input);
88 - // Create a buffer of tokens pulled from the lexer.
89 - CommonTokenStream tokens = new CommonTokenStream(lexer);
90 - // Create a parser that feeds off the tokens buffer.
91 - GeneratedYangParser parser = new GeneratedYangParser(tokens);
92 - // Remove console error listener.
93 - parser.removeErrorListeners();
94 - // Create instance of customized error listener.
95 - ParseTreeErrorListener parseTreeErrorListener = new ParseTreeErrorListener();
96 - // Add customized error listener to catch errors during parsing.
97 - parser.addErrorListener(parseTreeErrorListener);
98 - // Begin parsing YANG file and generate parse tree.
99 - ParseTree tree = parser.yangfile();
100 - }
101 -}
...\ No newline at end of file ...\ No newline at end of file
...@@ -125,16 +125,16 @@ public class AttributesJavaDataTypeTest { ...@@ -125,16 +125,16 @@ public class AttributesJavaDataTypeTest {
125 */ 125 */
126 @Test 126 @Test
127 public void testgetJavaPkgInfo() { 127 public void testgetJavaPkgInfo() {
128 - test = getJavaImportPackage(getStubYangType(TYPE1), false, CLASS_INFO1, pluginConfig); 128 + test = getJavaImportPackage(getStubYangType(TYPE1), false, pluginConfig);
129 assertThat(true, is(test.equals(JAVA_LANG))); 129 assertThat(true, is(test.equals(JAVA_LANG)));
130 130
131 - test = getJavaImportPackage(getStubYangType(TYPE2), true, CLASS_INFO5, pluginConfig); 131 + test = getJavaImportPackage(getStubYangType(TYPE2), true, pluginConfig);
132 assertThat(true, is(test.equals(JAVA_LANG))); 132 assertThat(true, is(test.equals(JAVA_LANG)));
133 133
134 - test = getJavaImportPackage(getStubYangType(TYPE3), false, CLASS_INFO3, pluginConfig); 134 + test = getJavaImportPackage(getStubYangType(TYPE3), false, pluginConfig);
135 assertThat(null, is(test)); 135 assertThat(null, is(test));
136 136
137 - test = getJavaImportPackage(getStubYangType(TYPE4), false, CLASS_INFO4, pluginConfig); 137 + test = getJavaImportPackage(getStubYangType(TYPE4), false, pluginConfig);
138 assertThat(null, is(test)); 138 assertThat(null, is(test));
139 } 139 }
140 140
...@@ -145,7 +145,7 @@ public class AttributesJavaDataTypeTest { ...@@ -145,7 +145,7 @@ public class AttributesJavaDataTypeTest {
145 */ 145 */
146 @Test 146 @Test
147 public void testForTypeDef() throws DataModelException { 147 public void testForTypeDef() throws DataModelException {
148 - test = getJavaImportPackage(getStubExtendedInfo(getStubYangType(TYPE_DEF)), false, TYPE_DEF_PKG, pluginConfig); 148 + test = getJavaImportPackage(getStubExtendedInfo(getStubYangType(TYPE_DEF)), false, pluginConfig);
149 assertThat(true, is(test.equals(TYPE_DEF_PKG))); 149 assertThat(true, is(test.equals(TYPE_DEF_PKG)));
150 } 150 }
151 151
......