import static org.opendaylight.mdsal.binding.javav2.generator.util.Types.BOOLEAN;
+import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import java.beans.ConstructorProperties;
import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedProperty;
import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTransferObject;
import org.opendaylight.mdsal.binding.javav2.model.api.Type;
+import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
public class UnionRenderer extends ClassRenderer {
public UnionRenderer(final GeneratedTransferObject type) {
importedNames.put(finalProperty.getName(), importedName(finalProperty.getReturnType()));
}
+ for (GeneratedProperty property : getProperties()) {
+ if("char[]".equals(property.getReturnType().getName())) {
+ importedNames.put("constructorProperties", importedName(ConstructorProperties.class));
+ importedNames.put("string", importedName(String.class));
+ importedNames.put(property.getName(), importedName(property.getReturnType()));
+ }
+ }
+
final StringBuilder sb = new StringBuilder();
if (!getProperties().isEmpty()) {
for (GeneratedProperty property : getProperties()) {
.append(" = source.")
.append(name);
if (!"value".equals(name) && importedName(generatedProperty.getReturnType()).contains("[]")) {
- sb.append(" == null ? null : source._")
+ sb.append(" == null ? null : source.")
.append(name)
.append(".clone()");
}
- sb.append(';');
+ sb.append(";\n");
+ return sb.toString();
+ }
+
+ private String generateCharArrayFieldForTypedef(final String fieldName, GeneratedTransferObject typedefType) {
+ Preconditions.checkState(typedefType.isTypedef(),"Not a typedef type!");
+
+ final StringBuilder sb = new StringBuilder();
+ final List<GeneratedProperty> retTypeCastProperties = typedefType.getProperties();
+
+ if (retTypeCastProperties != null &&
+ !retTypeCastProperties.isEmpty() && retTypeCastProperties.size() == 1 &&
+ retTypeCastProperties.get(0).getName().equals("value")) {
+
+ final StringBuilder sb1 = new StringBuilder(fieldName);
+ sb1.append(".")
+ .append(TextTemplateUtil.getterMethodName(retTypeCastProperties.get(0)))
+ .append("()");
+
+ sb.append(generateCharArrayField(sb1.toString(), retTypeCastProperties.get(0)));
+ // generated bits typedef
+ } else if (retTypeCastProperties != null && !retTypeCastProperties.isEmpty() &&
+ typedefType.getBaseType() instanceof BitsTypeDefinition) {
+ sb.append("java.util.Arrays.toString(")
+ .append(fieldName)
+ .append(".getValue()).toCharArray();");
+
+ //generated typedef typedef
+ } else if ((retTypeCastProperties == null || retTypeCastProperties.isEmpty())) {
+ Preconditions.checkState(typedefType.getSuperType() != null );
+
+ sb.append(generateCharArrayFieldForTypedef(fieldName,
+ (GeneratedTransferObject) typedefType.getSuperType()));
+ }
+
+ return sb.toString();
+ }
+
+ private String generateCharArrayField(final String fieldName, final GeneratedProperty generatedProperty) {
+ final StringBuilder sb = new StringBuilder();
+ final Type propertyReturnType = generatedProperty.getReturnType();
+
+ // generated type String
+ if ("java.lang.String".equals(propertyReturnType.getFullyQualifiedName())) {
+ sb.append(fieldName).append(".toCharArray();");
+ // generated type InstanceIdentifier
+ } else if ("org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier".equals(propertyReturnType
+ .getFullyQualifiedName())) {
+ sb.append(fieldName)
+ .append(".toString().toCharArray();");
+ //generated type binary, boolean, empty
+ } else if (BOOLEAN.equals(propertyReturnType)) {
+ sb.append(fieldName).append(".toString().toCharArray();");
+ //generated type byte[]
+ } else if ("byte[]".equals(propertyReturnType.getName())) {
+ sb.append("BaseEncoding.base64().encode(").append(fieldName)
+ .append(").toCharArray();");
+ //generated type int*, uint, decimal64 or enumeration*
+ } else if (propertyReturnType.getFullyQualifiedName().startsWith("java.lang") ||
+ propertyReturnType instanceof Enumeration ||
+ propertyReturnType.getFullyQualifiedName().startsWith("java.math")) {
+ sb.append(fieldName).append(".toString().toCharArray();");
+
+ } else if (propertyReturnType instanceof GeneratedTransferObject) {
+ final GeneratedTransferObject propRetTypeCast = (GeneratedTransferObject) propertyReturnType;
+
+ // generated union type
+ if (propRetTypeCast.isUnionType()) {
+ sb.append(fieldName).append(".getValue();");
+
+ // generated typedef type
+ } else if (propRetTypeCast.isTypedef()) {
+ sb.append(generateCharArrayFieldForTypedef(fieldName, propRetTypeCast));
+ }
+ // generated type
+ } else {
+ sb.append(fieldName)
+ .append(".getValue().toString().toCharArray();");
+ }
+
return sb.toString();
}
return super.getterMethod(field);
}
+ final StringBuilder sb1 = new StringBuilder();
+ final String name = TextTemplateUtil.fieldName(field);
+ final String importedName = Preconditions.checkNotNull(importedName(field.getReturnType()));
+ sb1.append("public ")
+ .append(importedName)
+ .append(' ')
+ .append(TextTemplateUtil.getterMethodName(field))
+ .append("() {\n");
+
Predicate<GeneratedProperty> predicate = input -> !"value".equals(input.getName());
final List<GeneratedProperty> filtered = new ArrayList<>(Collections2.filter(this.getFinalProperties(),
predicate));
.append(TextTemplateUtil.fieldName(property))
.append(" != null) {")
.append(TextTemplateUtil.fieldName(field))
- .append(" = ");
-
- // generated type String
- if ("java.lang.String".equals(propertyReturnType.getFullyQualifiedName())) {
- sb.append(TextTemplateUtil.fieldName(property)).append(".toCharArray();");
- // generated type InstanceIdentifier
- } else if ("org.opendaylight.mdsal.binding2.spec.base.InstanceIdentifier".equals(propertyReturnType
- .getFullyQualifiedName())) {
- sb.append(TextTemplateUtil.fieldName(field))
- .append(" = ")
- .append(TextTemplateUtil.fieldName(property))
- .append(".toString().toCharArray();");
- //generated type binary
- } else if ("byte[]".equals(propertyReturnType.getName())) {
- sb.append("new ")
- .append(importedName(String.class))
- .append('(')
- .append(TextTemplateUtil.fieldName(property))
- .append(").toCharArray();");
- //generated type int*, uint, decimal64 or enumeration*
- } else if (propertyReturnType.getFullyQualifiedName().startsWith("java.lang") ||
- propertyReturnType instanceof Enumeration ||
- propertyReturnType.getFullyQualifiedName().startsWith("java.math")) {
- sb.append(TextTemplateUtil.fieldName(property)).append(".toString().toCharArray();");
-
- } else if (propertyReturnType instanceof GeneratedTransferObject) {
- final GeneratedTransferObject propRetTypeCast = (GeneratedTransferObject) propertyReturnType;
- final List<GeneratedProperty> retTypeCastProperties = propRetTypeCast.getProperties();
-
- // generated union type
- if (propRetTypeCast.isUnionType()) {
- sb.append(TextTemplateUtil.fieldName(property)).append(".getValue();");
-
- // generated boolean typedef
- } else if (propRetTypeCast.isTypedef() && retTypeCastProperties != null &&
- !retTypeCastProperties.isEmpty() && retTypeCastProperties.size() == 1 &&
- retTypeCastProperties.get(0).getName().equals("value") &&
- BOOLEAN.equals(retTypeCastProperties.get(0).getReturnType())) {
- sb.append(TextTemplateUtil.fieldName(property)).append(".isValue().toString().toCharArray();");
-
- //generated byte[] typedef
- } else if (propRetTypeCast.isTypedef() && retTypeCastProperties != null &&
- !retTypeCastProperties.isEmpty() && retTypeCastProperties.size() == 1 &&
- retTypeCastProperties.get(0).getName().equals("value") &&
- "byte[]".equals(retTypeCastProperties.get(0).getReturnType().getName())) {
- sb.append("BaseEncoding.base64().encode(").append(TextTemplateUtil.fieldName(property))
- .append(".getValue()).toCharArray();");
- }
- } else {
- sb.append(TextTemplateUtil.fieldName(property))
- .append(".getValue().toString().toCharArray();");
- }
- sb.append("}");
+ .append(" = ")
+ .append(generateCharArrayField(TextTemplateUtil.fieldName(property), property))
+ .append("}\n");
strings.add(sb);
}
- return String.join(" else ", strings);
+
+ sb1.append(String.join(" else ", strings))
+ .append("\n");
+
+ sb1.append("return ")
+ .append(name);
+ if (importedName.contains("[]")) {
+ sb1.append(" == null ? null : ")
+ .append(name)
+ .append(".clone()");
+ }
+ sb1.append(";\n}\n");
+
+ return sb1.toString();
+ }
+
+ @Override
+ protected String generateInnerClassBody(GeneratedTransferObject innerClass) {
+ final UnionRenderer unionRenderer = new UnionRenderer((GeneratedTransferObject) innerClass);
+ final String body = unionRenderer.generateAsInnerClass();
+ this.putAllToImportMap(unionRenderer.getImportMap());
+ return body;
}
}
\ No newline at end of file
super(@{fieldName(property)});
}
}
+
@for(property <- finalProperties) {
- @if("char[]".equals(property.getReturnType.getName)) {
- /**
- * Constructor provided only for using in JMX. Don't use it for
- * construction new object of this union type.
- */
- @@@{importedNames.get("constructorProperties")}("@{property.getName}")
+ @*TO DO parentProperties + #[property] as argument to method below see unionTemplate 84 *@
public @{baseType.getName}(@{importedNames.get(property.getName)} @{fieldName(property)}) {
- @{importedNames.get("string")} defVal = new @{importedNames.get("string")}(@{fieldName(property)});
- @{baseType.getName} defInst = @{typeBuilder}.getDefaultInstance(defVal);
+ super();
+ this.@{fieldName(property)} = @{fieldName(property)};
@for(otherProperty <- finalProperties) {
- this.@{fieldName(otherProperty)} =
- @if("value".equals(otherProperty.getName)) {
- @if(importedNames.get(otherProperty.getName).contains("[]")) {
- @{fieldName(otherProperty)} == null ? null : @{fieldName(otherProperty)}.clone();
- } else {
- @{fieldName(otherProperty)};
- }
- } else {
- defInst.@{fieldName(otherProperty)};
+ @if(property != otherProperty && !"value".equals(otherProperty.getName)) {
+ this.@{fieldName(otherProperty)} = null;
}
}
}
- } else {
- @*TO DO parentProperties + #[property] as argument to method below see unionTemplate 84 *@
- public @{baseType.getName}() {
- super(@{asArguments(parentProperties)});
- this.@{fieldName(property)} = @{fieldName(property)};
+}
+
+@for(property <- properties) {
+ @if("char[]".equals(property.getReturnType.getName)) {
+ /**
+ * Constructor provided only for using in JMX. Don't use it for
+ * construction new object of this union type.
+ */
+ @@@{importedNames.get("constructorProperties")}("@{property.getName}")
+ public @{baseType.getName}(@{importedNames.get(property.getName)} @{fieldName(property)}) {
+ @{importedNames.get("string")} defVal = new @{importedNames.get("string")}(@{fieldName(property)});
+ @{baseType.getName} defInst = @{typeBuilder}.getDefaultInstance(defVal);
@for(otherProperty <- finalProperties) {
- @if(property != otherProperty && !"value".equals(otherProperty.getName)) {
- this.@{fieldName(otherProperty)} = null;
- }
+ this.@{fieldName(otherProperty)} = defInst.@{fieldName(otherProperty)};
}
+
+ this.@{fieldName(property)} = @{fieldName(property)} == null ? null : @{fieldName(property)}.clone();
}
}
}
-@if(!properties.isEmpty) {
- /**
- * Creates a copy from Source Object.
- *
- * @@param source Source object
- */
- public @{baseType.getName}
- (@{baseType.getName}
- source) {
- @if(!parentProperties.isEmpty()) {super(source);}
- @{propertyList}
+
+/**
+ * Creates a copy from Source Object.
+ *
+ * @@param source Source object
+ */
+public @{baseType.getName}(@{baseType.getName} source) {
+ @if(!parentProperties.isEmpty()) {
+ super(source);
+ } else {
+ @{propertyList}
}
}
+
@if(properties.isEmpty && !parentProperties.isEmpty) {
/**
* Creates a new instance from @{importedNames.get("superType")}