Binding generator v2 - fix list/key implements identifiable/identifier 17/62117/12
authorJie Han <han.jie@zte.com.cn>
Tue, 22 Aug 2017 02:07:49 +0000 (10:07 +0800)
committerRobert Varga <nite@hq.sk>
Wed, 13 Dec 2017 07:56:32 +0000 (07:56 +0000)
- Support keyed list type implements
  Identifiable and its key implements Identifier.

Change-Id: I0d12d2154f727a0088dc5329a4bd748edfa3e9f6
Signed-off-by: Jie Han <han.jie@zte.com.cn>
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-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/javav2/java/api/generator/renderers/BuilderRenderer.java
binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/generator/builderConstructorHelperTemplate.scala.txt
binding2/mdsal-binding2-test-model/src/main/yang/test-list.yang [new file with mode: 0644]

index 73ea20003a3384fc796e7c423a4127a9b3108385..51cc8187d03998e3cb11c5cff512948d6d6e6e0c 100644 (file)
@@ -23,6 +23,8 @@ import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenU
 import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil.computeDefaultSUID;
 import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil.encodeAngleBrackets;
 import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil.packageNameForGeneratedType;
+import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingTypes.IDENTIFIABLE;
+import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingTypes.IDENTIFIER;
 import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingTypes.NOTIFICATION;
 import static org.opendaylight.mdsal.binding.javav2.generator.util.Types.parameterizedTypeFor;
 import static org.opendaylight.mdsal.binding.javav2.generator.util.Types.wildcardTypeFor;
@@ -779,6 +781,12 @@ final class GenHelperUtil {
                 processUsesImplements(node, module, schemaContext, genCtx, namespaceType);
             } else {
                 final GeneratedTOBuilder genTOBuilder = resolveListKeyTOBuilder(packageName, node, genCtx.get(module));
+                if (genTOBuilder != null) {
+                    final Type identifiableMarker = Types.parameterizedTypeFor(IDENTIFIABLE, genTOBuilder);
+                    genTOBuilder.addImplementsType(IDENTIFIER);
+                    genType.addImplementsType(identifiableMarker);
+                }
+
                 for (final DataSchemaNode schemaNode : node.getChildNodes()) {
                     if (resolveDataSchemaNodesCheck(module, schemaContext, schemaNode)) {
                         addSchemaNodeToListBuilders(nodeName, basePackageName, schemaNode, genType, genTOBuilder, listKeys,
@@ -810,7 +818,7 @@ final class GenHelperUtil {
                 returnKeyType = wildcardTypeFor(keyType.getPackageName(), keyType.getName(),
                         true, true, null);
             }
-            constructGetter(typeBuilder, "key", "Returns Primary Key of Yang List Type", returnKeyType, Status.CURRENT);
+            constructGetter(typeBuilder, "identifier", "Returns Primary Key of Yang List Type", returnKeyType, Status.CURRENT);
 
         }
     }
index fbfe586b692c6ff1493dfc51b90e3940039784b8..a2fea0776526b936d67537d0435ea6043e2a79ae 100644 (file)
@@ -382,8 +382,8 @@ public class BindingGeneratorImplTest {
                 int test_j = 0;
                 for (final MethodSignature m : t.getMethodDefinitions()) {
                     switch (m.getName()) {
-                        case "getKey":
-                                assertMethod(t, "getKey", "MyListKey",
+                        case "getIdentifier":
+                                assertMethod(t, "getIdentifier", "MyListKey",
                                         "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
                                         m);
                             test_j++;
index bd7e75a0908fee306ab08b592e4997b1e9ba4107..ec373f9e4788f85aba9c49a35134d2dae8e241a9 100644 (file)
@@ -315,18 +315,12 @@ public class BuilderRenderer extends BaseRenderer {
         final Type keyType = getKey(getType());
         if (isList && keyType != null) {
             final List<GeneratedProperty> keyProps = ((GeneratedTransferObject) keyType).getProperties();
-            final Comparator<GeneratedProperty> function = (GeneratedProperty p1, GeneratedProperty p2) -> {
-                String name2 = p1.getName();
-                String name3 = p2.getName();
-                return name2.compareTo(name3);
-            };
-            Collections.sort(keyProps, function);
             for (GeneratedProperty keyProp : keyProps) {
                 removeProperty(allProps, keyProp.getName());
             }
             removeProperty(allProps, "key");
             importedNames.put("keyTypeConstructor", importedName(keyType));
-            return builderConstructorHelperTemplate.render(allProps, keyProps, importedNames, getPropertyList(allProps))
+            return builderConstructorHelperTemplate.render(allProps, keyProps, importedNames, getPropertyList(keyProps))
                     .body();
         }
         return builderConstructorHelperTemplate.render(allProps, null, importedNames, null).body();
index 6ad54d0bab098ff467493bb3ec74d55fe842fb8d..bb62f71cc6cd9940ebe54834b955ddfbf42bddac 100644 (file)
@@ -13,8 +13,8 @@
 @(allProps: List[GeneratedProperty], keyProps: List[GeneratedProperty], importedNames: Map[String, String],
 keyPropsList: String)
 @if(keyProps != null) {
-if (base.getKey() == null) {
-    this._key = new @{importedNames.get("keyTypeConstructor")}(
+if (base.getIdentifier() == null) {
+    this._identifier = new @{importedNames.get("keyTypeConstructor")}(
     @{keyPropsList}
     );
     @for(field <- keyProps) {
@@ -22,9 +22,9 @@ if (base.getKey() == null) {
         @{getterMethodName(field)}();
     }
 } @{"else"} {
-    this._key = base.getKey();
+    this._identifier = base.getIdentifier();
     @for(field <- keyProps) {
-        this.@{fieldName(field)} = _key.@{getterMethodName(field)}();
+        this.@{fieldName(field)} = _identifier.@{getterMethodName(field)}();
     }
 }
 }
diff --git a/binding2/mdsal-binding2-test-model/src/main/yang/test-list.yang b/binding2/mdsal-binding2-test-model/src/main/yang/test-list.yang
new file mode 100644 (file)
index 0000000..d593441
--- /dev/null
@@ -0,0 +1,25 @@
+module test-list {
+    yang-version 1.1;
+
+    namespace "urn:test:simple:test:list";
+    prefix test-list;
+    organization "test.list.org";
+    revision "2017-03-14";
+
+    list my-list {
+        key "key key1 key2";
+        leaf key{
+            type string;
+        }
+        leaf key1 {
+            type string;
+        }
+        leaf key2 {
+            type string;
+        }
+        leaf foo{
+            type string;
+        }
+    }
+
+}
\ No newline at end of file