MDSAL-304: Binding V2 maps identities to java.lang.Class 91/68791/2
authorJie Han <han.jie@zte.com.cn>
Tue, 27 Feb 2018 02:27:01 +0000 (10:27 +0800)
committerRobert Varga <nite@hq.sk>
Wed, 7 Mar 2018 11:01:12 +0000 (11:01 +0000)
- Make BaseIdentity an interface, change abstract classs
  to interface for identifier binding.

Change-Id: I256f650da0e535fbbe2d1671efdc503b7912f86f
Signed-off-by: Jie Han <han.jie@zte.com.cn>
binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/context/ModuleContext.java
binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java
binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/BindingGeneratorImplTest.java
binding2/mdsal-binding2-generator-impl/src/test/resources/identity/identity4.yang [new file with mode: 0644]
binding2/mdsal-binding2-runtime/src/test/java/org/opendaylight/mdsal/binding/javav2/runtime/reflection/BindingReflectionsTest.java
binding2/mdsal-binding2-spec/src/main/java/org/opendaylight/mdsal/binding/javav2/spec/base/BaseIdentity.java

index 2b1e94126f79753ad07a3209b5a822839388c624..755686df9906142d510232287db236a33d96a88f 100644 (file)
@@ -49,7 +49,7 @@ public final class ModuleContext {
     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();
@@ -75,7 +75,7 @@ public final class ModuleContext {
         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()));
@@ -129,7 +129,7 @@ public final class ModuleContext {
         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);
     }
 
@@ -157,7 +157,7 @@ public final class ModuleContext {
         return Collections.unmodifiableMap(this.cases);
     }
 
-    public Map<QName,GeneratedTOBuilder> getIdentities() {
+    public Map<QName,GeneratedTypeBuilder> getIdentities() {
         return Collections.unmodifiableMap(this.identities);
     }
 
index 79ecf3c13ddc46b60f64a57b6d809d080554825e..601ec1ab1a44f5623f80e3e1b891dc64b8da5373 100755 (executable)
@@ -35,6 +35,7 @@ import com.google.common.base.Preconditions;
 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;
@@ -212,9 +213,9 @@ final class GenHelperUtil {
         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;
             }
@@ -1356,13 +1357,13 @@ final class GenHelperUtil {
         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),
@@ -1371,25 +1372,24 @@ final class GenHelperUtil {
 
             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);
index 464be22817880410e7ad00c67ff1a8da0cd28ee7..ef5ea30518ceeed229c32fbb44a34e86f81b8ed0 100644 (file)
@@ -283,23 +283,35 @@ public class BindingGeneratorImplTest {
         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"));
+                });
 
             }
         }
diff --git a/binding2/mdsal-binding2-generator-impl/src/test/resources/identity/identity4.yang b/binding2/mdsal-binding2-generator-impl/src/test/resources/identity/identity4.yang
new file mode 100644 (file)
index 0000000..c88cd06
--- /dev/null
@@ -0,0 +1,24 @@
+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
index 0fb573c3b32d9993892eda085eab6e91186afd96..66c8cc5e4b28885343c93cdd233f1509e9a9125e 100644 (file)
@@ -72,8 +72,8 @@ public class BindingReflectionsTest {
     }
 
     @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");
 
index ebf3a5606c1d38337fa4ce0080ab64b854c9478c..2785dc9af153d949d2b41f9efaccf4e72c09953e 100644 (file)
@@ -9,8 +9,8 @@
 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