if (parent == null) {
it.addImplementsType(BindingTypes.TREE_NODE);
} else {
- if (parent instanceof ListSchemaNode) {
+ if (!(schemaNode instanceof ListSchemaNode) ||
+ ((ListSchemaNode) schemaNode).getKeyDefinition().isEmpty()) {
it.addImplementsType(parameterizedTypeFor(BindingTypes.TREE_CHILD_NODE, parent, parameterizedTypeFor
- (BindingTypes.IDENTIFIABLE_ITEM, parent)));
- } else {
- it.addImplementsType(parameterizedTypeFor(BindingTypes.TREE_CHILD_NODE, parent, parameterizedTypeFor
- (BindingTypes.ITEM, parent)));
- it.addImplementsType(parameterizedTypeFor(BindingTypes.INSTANTIABLE, it));
+ (BindingTypes.ITEM, it)));
}
+ it.addImplementsType(parameterizedTypeFor(BindingTypes.INSTANTIABLE, it));
}
if (!(schemaNode instanceof GroupingDefinition)) {
final Type identifiableMarker = Types.parameterizedTypeFor(IDENTIFIABLE, genTOBuilder);
genTOBuilder.addImplementsType(IDENTIFIER);
genType.addImplementsType(identifiableMarker);
+ genType.addImplementsType(parameterizedTypeFor(BindingTypes.TREE_CHILD_NODE, parent, parameterizedTypeFor
+ (BindingTypes.IDENTIFIABLE_ITEM, genType, genTOBuilder)));
+
}
for (final DataSchemaNode schemaNode : node.getChildNodes()) {
final GeneratedPropertyBuilder prop = new GeneratedPropertyBuilderImpl("serialVersionUID");
prop.setValue(Long.toString(computeDefaultSUID(genTOBuilder)));
genTOBuilder.setSUID(prop);
-
typeBuildersToGenTypes(module, genType, genTOBuilder.toInstance(), genCtx, namespaceType);
genCtx.get(module).addGeneratedTOBuilder(node.getPath(), genTOBuilder);
}
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;
+import org.opendaylight.mdsal.binding.javav2.spec.base.IdentifiableItem;
import org.opendaylight.mdsal.binding.javav2.spec.base.Instantiable;
import org.opendaylight.mdsal.binding.javav2.spec.base.Item;
import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode;
*/
private GeneratedProperty propertyFromGetter(final MethodSignature method) {
Preconditions.checkArgument(method != null, "Method cannot be NULL");
- Preconditions.checkArgument(!Strings.isNullOrEmpty(method.getName()), "Method name cannot be NULL or empty");
- Preconditions.checkArgument(method.getReturnType() != null, "Method return type reference cannot be NULL");
+ Preconditions.checkArgument(!Strings.isNullOrEmpty(method.getName()),
+ "Method name cannot be NULL or empty");
+ Preconditions.checkArgument(method.getReturnType() != null,
+ "Method return type reference cannot be NULL");
final String prefix = Types.BOOLEAN.equals(method.getReturnType()) ? "is" : "get";
if (method.getName().startsWith(prefix)) {
final String fieldName = toFirstLower(method.getName().substring(prefix.length()));
- final GeneratedTOBuilderImpl tmpGenTO = new GeneratedTOBuilderImpl("foo", "foo", true);
- tmpGenTO.addProperty(fieldName)
- .setReturnType(method.getReturnType());
+ final GeneratedTOBuilderImpl tmpGenTO =
+ new GeneratedTOBuilderImpl("foo", "foo", true);
+ tmpGenTO.addProperty(fieldName).setReturnType(method.getReturnType());
return tmpGenTO.toInstance().getProperties().get(0);
}
return null;
final String name = getName(fullyQualifiedName);
final GeneratedTOBuilderImpl generatedTOBuilder = new GeneratedTOBuilderImpl(aPackage,
name, true);
- final ReferencedTypeImpl referencedType = new ReferencedTypeImpl(aPackage, name, true,
- null);
+ final ReferencedTypeImpl referencedType = new ReferencedTypeImpl(aPackage, name,
+ true, null);
final ReferencedTypeImpl generic = new ReferencedTypeImpl(getType().getPackageName(),
getType().getName(), true, null);
- final ParameterizedType parametrizedReturnType = Types.parameterizedTypeFor(referencedType, generic);
+ final ParameterizedType parametrizedReturnType =
+ Types.parameterizedTypeFor(referencedType, generic);
generatedTOBuilder.addMethod(method.getName()).setReturnType(parametrizedReturnType);
- augmentField = propertyFromGetter(generatedTOBuilder.toInstance().getMethodDefinitions().get(0));
+ augmentField = propertyFromGetter(generatedTOBuilder.toInstance().getMethodDefinitions()
+ .get(0));
importedNames.put("map", importedName(Map.class));
importedNames.put("hashMap", importedName(HashMap.class));
importedNames.put("class", importedName(Class.class));
importedNames.put("treeNode", importedName(TreeNode.class));
importedNames.put("instantiable", importedName(Instantiable.class));
importedNames.put("item", importedName(Item.class));
+ importedNames.put("identifiableItem", importedName(IdentifiableItem.class));
if (getType().getParentType() != null) {
importedNames.put("parent", importedName(getType().getParentType()));
parentTypeForBuilderName = getType().getParentType().getFullyQualifiedName();
}
boolean childTreeNode = false;
+ boolean childTreeNodeIdent = false;
+ String keyTypeName = null;
if (getType().getImplements().contains(BindingTypes.TREE_CHILD_NODE)) {
childTreeNode = true;
+ if (getType().getImplements().contains(BindingTypes.IDENTIFIABLE)) {
+ childTreeNodeIdent = true;
+ final ParameterizedType pType = (ParameterizedType) getType().getImplements().get(getType()
+ .getImplements().indexOf(BindingTypes.IDENTIFIABLE));
+ keyTypeName = pType.getActualTypeArguments()[0].getName();
+ }
}
importedNames.put("augmentation", importedName(Augmentation.class));
List<String> getterMethods = new ArrayList<>(Collections2.transform(properties, this::getterMethod));
return builderTemplate.render(getType(), properties, importedNames, importedNamesForProperties, augmentField,
- copyConstructorHelper, getterMethods, parentTypeForBuilderName, childTreeNode, instantiable)
- .body();
+ copyConstructorHelper, getterMethods, parentTypeForBuilderName, childTreeNode, childTreeNodeIdent,
+ keyTypeName, instantiable).body();
}
private String generateListForCopyConstructor() {
final List allProps = new ArrayList<>(properties);
- final boolean isList = implementsIfc(getType(), Types.parameterizedTypeFor(Types.typeForClass(Identifiable.class),
- getType()));
+ final boolean isList = implementsIfc(getType(),
+ Types.parameterizedTypeFor(Types.typeForClass(Identifiable.class), getType()));
final Type keyType = getKey(getType());
if (isList && keyType != null) {
final List<GeneratedProperty> keyProps = ((GeneratedTransferObject) keyType).getProperties();
@(genType: GeneratedType, properties: Set[GeneratedProperty], importedNames: Map[String, String],
ImportedNamesWithProperties: Map[GeneratedProperty, String], augmentField: GeneratedProperty, copyConstructorHelper: String,
-getterMethods: List[String], parentTypeForBuilderName: String, childTreeNode: Boolean, instantiable: Boolean)
+getterMethods: List[String], parentTypeForBuilderName: String, childTreeNode: Boolean, childTreeNodeIdent: Boolean,
+keyTypeName: String, instantiable: Boolean)
@if(genType != null) {
@{wrapToDocumentation(formatDataForJavaDocBuilder(importedNames.get("genType")))}
public class @{genType.getName}Builder implements @{getSimpleNameForBuilder} <@{importedNames.get("genType")}> {
}
@generateImplementedMethods() = {
- @if(childTreeNode) {
+ @if(childTreeNodeIdent) {
@@Override
- public @{importedNames.get("item")}<@{parentTypeForBuilderName}> treeIdentifier() {
- //TODO implement
- return null;
+ public @{importedNames.get("identifiableItem")}<@{genType.getName()}, @{keyTypeName}> treeIdentifier() {
+ return new @{importedNames.get("identifiableItem")}(@{importedNames.get("genType")}.class,_identifier);
}
+ } else {
+ @if(childTreeNode) {
+ @@Override
+ public @{importedNames.get("item")}<@{genType.getName()}> treeIdentifier() {
+ return new @{importedNames.get("item")}(@{importedNames.get("genType")}.class);
+ }
+ }
}
@if(augmentField != null) {