X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-java-api-generator%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fsal%2Fjava%2Fapi%2Fgenerator%2FBuilderTemplate.xtend;h=126c3ed46194c9bd59fc4a785279b1c16f24fa08;hb=3c156c1ca8c7bb91a2579811c6b0cbe555997a91;hp=7a8b72aef526885602a7ccea8e725f42f8ac99b2;hpb=470e20edf85dbf3731d1fea7fde5eab7bd3afe95;p=mdsal.git diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend index 7a8b72aef5..126c3ed461 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend @@ -17,6 +17,7 @@ import java.util.HashSet import java.util.LinkedHashSet import java.util.List import java.util.Map +import java.util.Objects import java.util.Set import org.opendaylight.yangtools.binding.generator.util.ReferencedTypeImpl import org.opendaylight.yangtools.binding.generator.util.Types @@ -70,6 +71,10 @@ class BuilderTemplate extends BaseTemplate { val Set properties private static val METHOD_COMPARATOR = new AlphabeticallyTypeMemberComparator(); + private static val APPEND_COMMA = "builder.append(\", \");"; + private static val APPEND_COMMA_WITH_WS = "\n "+ APPEND_COMMA + "\n}"; + private static val APPEND_ENDIF = " }\n"; + private static val APPEND_END = "return builder.append(']').toString();"; /** * Constructs new instance of this class. @@ -413,10 +418,6 @@ class BuilderTemplate extends BaseTemplate { «IF properties !== null» «FOR f : properties» private«IF _final» final«ENDIF» «f.returnType.importedName» «f.fieldName»; - «val restrictions = f.returnType.restrictions» - «IF !_final && restrictions != null && !(restrictions.lengthConstraints.empty)» - «LengthGenerator.generateLengthChecker(f.fieldName.toString, f.returnType, restrictions.lengthConstraints)» - «ENDIF» «ENDFOR» «ENDIF» ''' @@ -434,16 +435,22 @@ class BuilderTemplate extends BaseTemplate { */ def private generateSetters() ''' «FOR field : properties SEPARATOR '\n'» - «val restrictions = field.returnType.restrictions» - «IF restrictions != null» - «IF !restrictions.rangeConstraints.nullOrEmpty» - «val rangeGenerator = AbstractRangeGenerator.forType(field.returnType)» - «rangeGenerator.generateRangeChecker(field.name.toFirstUpper, restrictions.rangeConstraints)» + «/* FIXME: generate checkers as simple blocks and embed them directly in setters */» + «val restrictions = field.returnType.restrictions» + «IF !(field.returnType instanceof GeneratedType) && restrictions != null» + «IF !restrictions.rangeConstraints.nullOrEmpty» + «val rangeGenerator = AbstractRangeGenerator.forType(field.returnType)» + «rangeGenerator.generateRangeChecker(field.name.toFirstUpper, restrictions.rangeConstraints)» - «ENDIF» + «ENDIF» + «IF !restrictions.lengthConstraints.nullOrEmpty» + «LengthGenerator.generateLengthChecker(field.fieldName.toString, field.returnType, restrictions.lengthConstraints)» + + «ENDIF» «ENDIF» - public «type.name»«BUILDER» set«field.name.toFirstUpper»(«field.returnType.importedName» value) { - «IF restrictions != null» + public «type.name»«BUILDER» set«field.name.toFirstUpper»(final «field.returnType.importedName» value) { + «IF !(field.returnType instanceof GeneratedType) && restrictions != null» + «IF restrictions != null && (!restrictions.rangeConstraints.nullOrEmpty || !restrictions.lengthConstraints.nullOrEmpty)» if (value != null) { «IF !restrictions.rangeConstraints.nullOrEmpty» «val rangeGenerator = AbstractRangeGenerator.forType(field.returnType)» @@ -453,9 +460,16 @@ class BuilderTemplate extends BaseTemplate { «rangeGenerator.generateRangeCheckerCall(field.name.toFirstUpper, "value.getValue()")» «ENDIF» «ENDIF» - «generateRestrictions(field, "value")» + «IF !restrictions.lengthConstraints.nullOrEmpty» + «IF field.returnType instanceof ConcreteType» + «LengthGenerator.generateLengthCheckerCall(field.fieldName.toString, "value")» + «ELSE» + «LengthGenerator.generateLengthCheckerCall(field.fieldName.toString, "value.getValue()")» + «ENDIF» + «ENDIF» } «ENDIF» + «ENDIF» this.«field.fieldName» = value; return this; } @@ -484,18 +498,6 @@ class BuilderTemplate extends BaseTemplate { «ENDIF» ''' - def private generateRestrictions(GeneratedProperty field, String paramName) ''' - «val Type type = field.returnType» - «val restrictions = type.getRestrictions» - «IF restrictions !== null && !restrictions.lengthConstraints.empty» - «IF type instanceof ConcreteType» - «LengthGenerator.generateLengthCheckerCall(field.fieldName.toString, paramName)» - «ELSE» - «LengthGenerator.generateLengthCheckerCall(field.fieldName.toString, paramName + ".getValue()")» - «ENDIF» - «ENDIF» - ''' - def private CharSequence generateCopyConstructor(boolean impl) ''' «IF impl»private«ELSE»public«ENDIF» «type.name»«IF impl»«IMPL»«ELSE»«BUILDER»«ENDIF»(«type.name»«IF impl»«BUILDER»«ENDIF» base) { «val allProps = new ArrayList(properties)» @@ -637,13 +639,13 @@ class BuilderTemplate extends BaseTemplate { int result = 1; «FOR property : properties» «IF property.returnType.name.contains("[")» - result = prime * result + ((«property.fieldName» == null) ? 0 : «Arrays.importedName».hashCode(«property.fieldName»)); + result = prime * result + «Arrays.importedName».hashCode(«property.fieldName»); «ELSE» - result = prime * result + ((«property.fieldName» == null) ? 0 : «property.fieldName».hashCode()); + result = prime * result + «Objects.importedName».hashCode(«property.fieldName»); «ENDIF» «ENDFOR» «IF augmentField != null» - result = prime * result + ((«augmentField.name» == null) ? 0 : «augmentField.name».hashCode()); + result = prime * result + «Objects.importedName».hashCode(«augmentField.name»); «ENDIF» hash = result; @@ -674,14 +676,10 @@ class BuilderTemplate extends BaseTemplate { «type.importedName» other = («type.importedName»)obj; «FOR property : properties» «val fieldName = property.fieldName» - if («fieldName» == null) { - if (other.«property.getterMethodName»() != null) { - return false; - } «IF property.returnType.name.contains("[")» - } else if(!«Arrays.importedName».equals(«fieldName», other.«property.getterMethodName»())) { + if (!«Arrays.importedName».equals(«fieldName», other.«property.getterMethodName»())) { «ELSE» - } else if(!«fieldName».equals(other.«property.getterMethodName»())) { + if (!«Objects.importedName».equals(«fieldName», other.«property.getterMethodName»())) { «ENDIF» return false; } @@ -691,11 +689,7 @@ class BuilderTemplate extends BaseTemplate { // Simple case: we are comparing against self «type.name»«IMPL» otherImpl = («type.name»«IMPL») obj; «val fieldName = augmentField.name» - if («fieldName» == null) { - if (otherImpl.«fieldName» != null) { - return false; - } - } else if(!«fieldName».equals(otherImpl.«fieldName»)) { + if (!«Objects.importedName».equals(«fieldName», otherImpl.«fieldName»)) { return false; } } else { @@ -721,33 +715,29 @@ class BuilderTemplate extends BaseTemplate { @Override public «String.importedName» toString() { «StringBuilder.importedName» builder = new «StringBuilder.importedName» ("«type.name» ["); - boolean first = true; - - «FOR property : properties» + «FOR property : properties SEPARATOR APPEND_COMMA_WITH_WS AFTER APPEND_ENDIF» if («property.fieldName» != null) { - if (first) { - first = false; - } else { - builder.append(", "); - } builder.append("«property.fieldName»="); «IF property.returnType.name.contains("[")» builder.append(«Arrays.importedName».toString(«property.fieldName»)); «ELSE» builder.append(«property.fieldName»); «ENDIF» - } «ENDFOR» «IF augmentField != null» - if (first) { - first = false; - } else { - builder.append(", "); - } + «IF !properties.empty» + «APPEND_COMMA» + «ENDIF» builder.append("«augmentField.name»="); - builder.append(«augmentField.name».values()); + builder.append(«augmentField.name».values());«"\n"» + «APPEND_END» + «ELSE» + «IF properties.empty» + «APPEND_END» + «ELSE» + «APPEND_END» + «ENDIF» «ENDIF» - return builder.append(']').toString(); } «ENDIF» '''