import com.google.common.collect.ImmutableSortedSet;
import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
+import org.opendaylight.mdsal.binding.javav2.generator.util.BindingTypes;
import org.opendaylight.mdsal.binding.javav2.generator.util.ReferencedTypeImpl;
import org.opendaylight.mdsal.binding.javav2.generator.util.Types;
import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.builder.GeneratedTOBuilderImpl;
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.GeneratedType;
+import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTypeForBuilder;
import org.opendaylight.mdsal.binding.javav2.model.api.MethodSignature;
import org.opendaylight.mdsal.binding.javav2.model.api.ParameterizedType;
import org.opendaylight.mdsal.binding.javav2.model.api.Type;
*/
private GeneratedProperty augmentField;
+ boolean instantiable = false;
+
public BuilderRenderer(final GeneratedType type) {
super(type);
this.properties = propertiesFromMethods(createMethods());
putToImportMap(Builder.class.getSimpleName(), Builder.class.getPackage().getName());
+ putToImportMap(type.getName(), type.getPackageName());
+ }
+
+ @Override
+ protected String packageDefinition() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("package ")
+ .append(((GeneratedTypeForBuilder)getType()).getPackageNameForBuilder())
+ .append(";\n\n");
+ return sb.toString();
+ }
+
+ @Override
+ protected boolean hasSamePackage(final String importedTypePackageName) {
+ return ((GeneratedTypeForBuilder)getType()).getPackageNameForBuilder()
+ .equals(importedTypePackageName);
}
/**
for (Type implementedIfc : implementedIfcs) {
if ((implementedIfc instanceof GeneratedType && !(implementedIfc instanceof GeneratedTransferObject))) {
final GeneratedType ifc = (GeneratedType) implementedIfc;
- methods.addAll(ifc.getMethodDefinitions());
+ if (implementedIfc instanceof GeneratedTypeForBuilder) {
+ methods.addAll(ifc.getMethodDefinitions());
+ }
collectImplementedMethods(methods, ifc.getImplements());
} else if (Augmentable.class.getName().equals(implementedIfc.getFullyQualifiedName())) {
for (Method method : Augmentable.class.getMethods()) {
importedNames.put("augmentFieldReturnType", importedName(augmentField.getReturnType()));
}
}
+ } else if (Instantiable.class.getName().equals(implementedIfc.getFullyQualifiedName())) {
+ importedNames.put("class", importedName(Class.class));
+ instantiable = true;
}
}
}
importedNames.put("objects", importedName(Objects.class));
importedNames.put("object", importedName(Object.class));
importedNames.put("string", importedName(String.class));
+ importedNames.put("arrays", importedName(Arrays.class));
importedNames.put("stringBuilder", importedName(StringBuilder.class));
importedNames.put("treeNode", importedName(TreeNode.class));
importedNames.put("instantiable", importedName(Instantiable.class));
importedNames.put("item", importedName(Item.class));
if (getType().getParentType() != null) {
importedNames.put("parent", importedName(getType().getParentType()));
- parentTypeForBuilderName = getType().getParentType().getName();
+ parentTypeForBuilderName = getType().getParentType().getFullyQualifiedName();
} else if (getType().getParentTypeForBuilder() != null) {
importedNames.put("parentTypeForBuilder", importedName(getType().getParentTypeForBuilder()));
- parentTypeForBuilderName = getType().getParentTypeForBuilder().getName();
+ parentTypeForBuilderName = getType().getParentTypeForBuilder().getFullyQualifiedName();
} else {
parentTypeForBuilderName = null;
}
+
+ boolean childTreeNode = false;
+ if (getType().getImplements().contains(BindingTypes.TREE_CHILD_NODE)) {
+ childTreeNode = true;
+ }
+
importedNames.put("augmentation", importedName(Augmentation.class));
importedNames.put("classInstMap", importedName(ClassToInstanceMap.class));
List<String> getterMethods = new ArrayList<>(Collections2.transform(properties, this::getterMethod));
return builderTemplate.render(getType(), properties, importedNames, importedNamesForProperties, augmentField,
- copyConstructorHelper, getterMethods, parentTypeForBuilderName)
+ copyConstructorHelper, getterMethods, parentTypeForBuilderName, childTreeNode, instantiable)
.body();
}