private final BiMap<String, GeneratedTypeBuilder> dataTypes = HashBiMap.create();
private final Map<SchemaPath, GeneratedTypeBuilder> groupings = new HashMap<>();
private final Map<SchemaPath, GeneratedTypeBuilder> cases = new HashMap<>();
- private final Map<QName,GeneratedTOBuilder> identities = new HashMap<>();
+ private final Map<QName,GeneratedTypeBuilder> identities = new HashMap<>();
private final Set<GeneratedTypeBuilder> topLevelNodes = new HashSet<>();
private final List<GeneratedTypeBuilder> augmentations = new ArrayList<>();
private final Multimap<Type,AugmentationSchemaNode> typeToAugmentations = HashMultimap.create();
result.addAll(this.dataTypes.values().stream().map(GeneratedTypeBuilder::toInstance).collect(Collectors.toList()));
result.addAll(this.groupings.values().stream().map(GeneratedTypeBuilder::toInstance).collect(Collectors.toList()));
result.addAll(this.cases.values().stream().map(GeneratedTypeBuilder::toInstance).collect(Collectors.toList()));
- result.addAll(this.identities.values().stream().map(GeneratedTOBuilder::toInstance).collect(Collectors.toList()));
+ result.addAll(this.identities.values().stream().map(GeneratedTypeBuilder::toInstance).collect(Collectors.toList()));
result.addAll(this.topLevelNodes.stream().map(GeneratedTypeBuilder::toInstance).collect(Collectors.toList()));
result.addAll(this.augmentations.stream().map(GeneratedTypeBuilder::toInstance).collect(Collectors.toList()));
result.addAll(this.keyTypes.values().stream().map(GeneratedTypeBuilder::toInstance).collect(Collectors.toList()));
this.cases.put(p, b);
}
- public void addIdentityType(final QName name,final GeneratedTOBuilder b) {
+ public void addIdentityType(final QName name,final GeneratedTypeBuilder b) {
this.identities.put(name,b);
}
return Collections.unmodifiableMap(this.cases);
}
- public Map<QName,GeneratedTOBuilder> getIdentities() {
+ public Map<QName,GeneratedTypeBuilder> getIdentities() {
return Collections.unmodifiableMap(this.identities);
}
import com.google.common.collect.Iterables;
import java.util.Collection;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
return null;
}
- static GeneratedTOBuilder findIdentityByQname(final QName qname, final Map<Module, ModuleContext> genCtx) {
+ static GeneratedTypeBuilder findIdentityByQname(final QName qname, final Map<Module, ModuleContext> genCtx) {
for (final ModuleContext ctx : genCtx.values()) {
- final GeneratedTOBuilder result = ctx.getIdentities().get(qname);
+ final GeneratedTypeBuilder result = ctx.getIdentities().get(qname);
if (result != null) {
return result;
}
return genCtx;
}
- private static GeneratedTOBuilder resolveIdentitySchemaNode(final String basePackageName, final SchemaContext schemaContext,
+ private static GeneratedTypeBuilder resolveIdentitySchemaNode(final String basePackageName, final SchemaContext schemaContext,
final IdentitySchemaNode identity, final Module module, final boolean verboseClassComments,
final Map<Module, ModuleContext> genCtx) {
Preconditions.checkNotNull(identity,"Identity can not be null!");
//check first if identity has been resolved as base identity of some other one
- GeneratedTOBuilder newType = findIdentityByQname(identity.getQName(), genCtx);
+ GeneratedTypeBuilder newType = findIdentityByQname(identity.getQName(), genCtx);
if (newType == null) {
final Module parentModule = SchemaContextUtil.findParentModule(schemaContext, identity);
Preconditions.checkState(module.equals(parentModule),
final String packageName = BindingGeneratorUtil.packageNameForGeneratedType(basePackageName, identity.getPath(),
BindingNamespaceType.Identity);
- newType = new GeneratedTOBuilderImpl(packageName, identity.getQName().getLocalName(), true, false,
+ newType = new GeneratedTypeBuilderImpl(packageName, identity.getQName().getLocalName(), true, false,
genCtx.get(module));
final Set<IdentitySchemaNode> baseIdentities = identity.getBaseIdentities();
if (baseIdentities.size() == 0) {
//no base - abstract
- final GeneratedTOBuilderImpl gto = new GeneratedTOBuilderImpl(BaseIdentity.class.getPackage().getName(),
+ final GeneratedTypeBuilderImpl genType = new GeneratedTypeBuilderImpl(BaseIdentity.class.getPackage().getName(),
BaseIdentity.class.getSimpleName(), genCtx.get(module));
- newType.setExtendsType(gto.toInstance());
+ newType.addImplementsType(genType.toInstance());
} else {
- //one base - inheritance
- final IdentitySchemaNode baseIdentity = baseIdentities.iterator().next();
- GeneratedTOBuilder baseType = resolveIdentitySchemaNode(basePackageName, schemaContext,
- baseIdentity, module, verboseClassComments, genCtx);
- newType.setExtendsType(baseType.toInstance());
+ //multiple bases - inheritance
+ for (IdentitySchemaNode baseIdentity : baseIdentities) {
+ GeneratedTypeBuilder baseType = resolveIdentitySchemaNode(basePackageName, schemaContext,
+ baseIdentity, module, verboseClassComments, genCtx);
+ newType.addImplementsType(baseType.toInstance());
+ }
}
- newType.setAbstract(true);
-
if (verboseClassComments) {
newType.setYangSourceDefinition(YangSourceDefinition.of(module));
TypeComments.description(module).ifPresent(newType::addComment);
for (final Type type : generateTypes) {
if (type.getFullyQualifiedName()
.equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden1")) {
- final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
+ final GeneratedType genType = (GeneratedType)type;
assertEquals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden2",
- genTO.getSuperType().getFullyQualifiedName());
+ genType.getImplements().stream().findFirst().get().getFullyQualifiedName());
}
if (type.getFullyQualifiedName()
.equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden2")) {
- final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
+ final GeneratedType genType = (GeneratedType)type;
assertEquals("org.opendaylight.mdsal.gen.javav2.identity.import_.rev170602.ident.Iden1",
- genTO.getSuperType().getFullyQualifiedName());
+ genType.getImplements().stream().findFirst().get().getFullyQualifiedName());
}
if (type.getFullyQualifiedName()
.equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden3")) {
- final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
+ final GeneratedType genType = (GeneratedType)type;
assertEquals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden1",
- genTO.getSuperType().getFullyQualifiedName());
+ genType.getImplements().stream().findFirst().get().getFullyQualifiedName());
+
+ }
+ if (type.getFullyQualifiedName()
+ .equals("org.opendaylight.mdsal.gen.javav2.identity4.module.rev180227.ident.Iden3")) {
+ final GeneratedType genType = (GeneratedType)type;
+ genType.getImplements().stream().forEach(impl -> {
+ final String fqn = impl.getFullyQualifiedName();
+ assertTrue(fqn.equals(
+ "org.opendaylight.mdsal.gen.javav2.identity4.module.rev180227.ident.Iden1")
+ || fqn.equals(
+ "org.opendaylight.mdsal.gen.javav2.identity4.module.rev180227.ident.Iden2"));
+ });
}
}
--- /dev/null
+module identity4-module {
+ yang-version 1.1;
+ namespace "identity4:module";
+
+ prefix "ide4mod";
+
+ revision 2018-02-27;
+
+ identity iden1 {
+ }
+
+ identity iden2 {
+
+ }
+
+ identity iden3 {
+ base iden1;
+ base iden2;
+ }
+
+ identity iden4 {
+ base iden3;
+ }
+}
\ No newline at end of file
}
@SuppressWarnings({ "rawtypes", "unused" })
- private static final class TestImplementation extends BaseIdentity
- implements Augmentation<TestImplementation>, Rpc {
+ private static final class TestImplementation
+ implements Augmentation<TestImplementation>, Rpc, BaseIdentity {
public static final QName QNAME = QName.create("", "test");
package org.opendaylight.mdsal.binding.javav2.spec.base;
/**
- * Base Identity abstract class
+ * Base Identity interface
*
*/
-public abstract class BaseIdentity {
+public interface BaseIdentity {
}
\ No newline at end of file