Fix actions in keyed lists
[mdsal.git] / binding / mdsal-binding-generator-impl / src / main / java / org / opendaylight / mdsal / binding / generator / impl / AbstractTypeGenerator.java
index 115299052a0a4cd1e89b537cc6c5b0475d98c675..a70b7cf95951ae83ac301c6ae8c7fcf234f14a13 100644 (file)
@@ -29,6 +29,7 @@ import static org.opendaylight.mdsal.binding.model.util.BindingTypes.childOf;
 import static org.opendaylight.mdsal.binding.model.util.BindingTypes.choiceIn;
 import static org.opendaylight.mdsal.binding.model.util.BindingTypes.identifiable;
 import static org.opendaylight.mdsal.binding.model.util.BindingTypes.identifier;
+import static org.opendaylight.mdsal.binding.model.util.BindingTypes.keyedListAction;
 import static org.opendaylight.mdsal.binding.model.util.BindingTypes.rpcResult;
 import static org.opendaylight.mdsal.binding.model.util.Types.BOOLEAN;
 import static org.opendaylight.mdsal.binding.model.util.Types.listTypeFor;
@@ -74,10 +75,10 @@ import org.opendaylight.mdsal.binding.model.util.ReferencedTypeImpl;
 import org.opendaylight.mdsal.binding.model.util.TypeConstants;
 import org.opendaylight.mdsal.binding.model.util.Types;
 import org.opendaylight.mdsal.binding.model.util.generated.type.builder.GeneratedPropertyBuilderImpl;
+import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
 import org.opendaylight.mdsal.binding.yang.types.AbstractTypeProvider;
 import org.opendaylight.mdsal.binding.yang.types.BaseYangTypes;
 import org.opendaylight.mdsal.binding.yang.types.GroupingDefinitionDependencySort;
-import org.opendaylight.yangtools.yang.binding.BindingMapping;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
@@ -285,7 +286,7 @@ abstract class AbstractTypeGenerator {
         if (genType != null) {
             constructGetter(parent, genType, node);
             resolveDataSchemaNodes(context, genType, genType, node.getChildNodes());
-            actionsToGenType(context, genType, node);
+            actionsToGenType(context, genType, node, null);
         }
     }
 
@@ -303,8 +304,8 @@ abstract class AbstractTypeGenerator {
                 genTOBuilder.addImplementsType(identifierMarker);
                 genType.addImplementsType(identifiableMarker);
 
-                actionsToGenType(context, genTOBuilder, node);
             }
+            actionsToGenType(context, genType, node, genTOBuilder);
 
             for (final DataSchemaNode schemaNode : node.getChildNodes()) {
                 if (!schemaNode.isAugmenting()) {
@@ -404,7 +405,7 @@ abstract class AbstractTypeGenerator {
     }
 
     private <T extends DataNodeContainer & ActionNodeContainer> void actionsToGenType(final ModuleContext context,
-            final Type parent, final T parentSchema) {
+            final Type parent, final T parentSchema, final Type keyType) {
         for (final ActionDefinition action : parentSchema.getActions()) {
             final GeneratedType input;
             final GeneratedType output;
@@ -425,9 +426,12 @@ abstract class AbstractTypeGenerator {
                 final GeneratedTypeBuilder builder = typeProvider.newGeneratedTypeBuilder(JavaTypeName.create(
                     packageNameForGeneratedType(context.modulePackageName(), action.getPath()),
                     BindingMapping.getClassName(qname)));
+                qnameConstant(builder, JavaTypeName.create(context.modulePackageName(),
+                    BindingMapping.MODULE_INFO_CLASS_NAME), qname.getLocalName());
 
                 annotateDeprecatedIfNecessary(action.getStatus(), builder);
-                builder.addImplementsType(action(parent, input, output));
+                builder.addImplementsType(keyType != null ? keyedListAction(parent, keyType, input, output)
+                        : action(parent, input, output));
 
                 addCodegenInformation(builder, context.module(), action);
                 context.addChildNodeType(action, builder);
@@ -496,9 +500,9 @@ abstract class AbstractTypeGenerator {
                 method.addAnnotation("javax.annotation", "CheckReturnValue");
                 addComment(method, rpc);
                 method.addParameter(
-                    createRpcContainer(context, rpcName, rpc, verifyNotNull(rpc.getInput())), "input");
+                    createRpcContainer(context, rpcName, rpc, verifyNotNull(rpc.getInput()), RPC_INPUT), "input");
                 method.setReturnType(listenableFutureTypeFor(
-                    rpcResult(createRpcContainer(context, rpcName, rpc, verifyNotNull(rpc.getOutput())))));
+                    rpcResult(createRpcContainer(context, rpcName, rpc, verifyNotNull(rpc.getOutput()), RPC_OUTPUT))));
             }
         }
 
@@ -506,13 +510,13 @@ abstract class AbstractTypeGenerator {
     }
 
     private Type createRpcContainer(final ModuleContext context, final String rpcName, final RpcDefinition rpc,
-            final ContainerSchemaNode schema) {
+            final ContainerSchemaNode schema, final Type type) {
         processUsesAugments(schema, context);
         final GeneratedTypeBuilder outType = addRawInterfaceDefinition(
             JavaTypeName.create(context.modulePackageName(), rpcName + BindingMapping.getClassName(schema.getQName())),
             schema);
         addImplementedInterfaceFromUses(schema, outType);
-        outType.addImplementsType(DATA_OBJECT);
+        outType.addImplementsType(type);
         outType.addImplementsType(augmentable(outType));
         annotateDeprecatedIfNecessary(rpc.getStatus(), outType);
         resolveDataSchemaNodes(context, outType, outType, schema.getChildNodes());
@@ -667,7 +671,7 @@ abstract class AbstractTypeGenerator {
             resolveDataSchemaNodes(context, genType, genType, grouping.getChildNodes());
             groupingsToGenTypes(context, grouping.getGroupings());
             processUsesAugments(grouping, context);
-            actionsToGenType(context, genType, grouping);
+            actionsToGenType(context, genType, grouping, null);
         }
     }
 
@@ -1958,11 +1962,6 @@ abstract class AbstractTypeGenerator {
             resultTOBuilder.addEnclosingTransferObject(genTOBuilder);
         }
 
-        final GeneratedPropertyBuilder genPropBuilder = resultTOBuilder.addProperty("value");
-        genPropBuilder.setReturnType(Types.CHAR_ARRAY);
-        resultTOBuilder.addEqualsIdentity(genPropBuilder);
-        resultTOBuilder.addHashIdentity(genPropBuilder);
-        resultTOBuilder.addToStringProperty(genPropBuilder);
         processEnclosedTOBuilderes(typeBuilder, genTOBuilders);
         return resultTOBuilder;
     }