From 74c410c9ec176752575ff131ed28e821b0ed745c Mon Sep 17 00:00:00 2001 From: Jie Han Date: Tue, 22 Aug 2017 10:07:49 +0800 Subject: [PATCH] Binding generator v2 - fix list/key implements identifiable/identifier - Support keyed list type implements Identifiable and its key implements Identifier. Change-Id: I0d12d2154f727a0088dc5329a4bd748edfa3e9f6 Signed-off-by: Jie Han --- .../javav2/generator/impl/GenHelperUtil.java | 10 +++++++- .../impl/BindingGeneratorImplTest.java | 4 +-- .../generator/renderers/BuilderRenderer.java | 8 +----- ...builderConstructorHelperTemplate.scala.txt | 8 +++--- .../src/main/yang/test-list.yang | 25 +++++++++++++++++++ 5 files changed, 41 insertions(+), 14 deletions(-) create mode 100644 binding2/mdsal-binding2-test-model/src/main/yang/test-list.yang diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java index 73ea20003a..51cc8187d0 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java +++ b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java @@ -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); } } diff --git a/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/BindingGeneratorImplTest.java b/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/BindingGeneratorImplTest.java index fbfe586b69..a2fea07765 100644 --- a/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/BindingGeneratorImplTest.java +++ b/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/BindingGeneratorImplTest.java @@ -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++; diff --git a/binding2/mdsal-binding2-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/javav2/java/api/generator/renderers/BuilderRenderer.java b/binding2/mdsal-binding2-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/javav2/java/api/generator/renderers/BuilderRenderer.java index bd7e75a090..ec373f9e47 100644 --- a/binding2/mdsal-binding2-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/javav2/java/api/generator/renderers/BuilderRenderer.java +++ b/binding2/mdsal-binding2-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/javav2/java/api/generator/renderers/BuilderRenderer.java @@ -315,18 +315,12 @@ public class BuilderRenderer extends BaseRenderer { final Type keyType = getKey(getType()); if (isList && keyType != null) { final List keyProps = ((GeneratedTransferObject) keyType).getProperties(); - final Comparator 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(); diff --git a/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/generator/builderConstructorHelperTemplate.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/generator/builderConstructorHelperTemplate.scala.txt index 6ad54d0bab..bb62f71cc6 100644 --- a/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/generator/builderConstructorHelperTemplate.scala.txt +++ b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/generator/builderConstructorHelperTemplate.scala.txt @@ -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 index 0000000000..d593441ffb --- /dev/null +++ b/binding2/mdsal-binding2-test-model/src/main/yang/test-list.yang @@ -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 -- 2.36.6