Clean up constant reference
[mdsal.git] / binding / mdsal-binding-generator / src / main / java / org / opendaylight / mdsal / binding / generator / impl / reactor / ActionGenerator.java
index 8b0c9b9b22c7ddd97084fee0cf5119e1eea0ddda..2bcaded507d5a52bced97064e222fbdb5304275a 100644 (file)
@@ -8,32 +8,28 @@
 package org.opendaylight.mdsal.binding.generator.impl.reactor;
 
 import java.util.List;
-import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.generator.impl.rt.DefaultActionRuntimeType;
 import org.opendaylight.mdsal.binding.model.api.GeneratedType;
 import org.opendaylight.mdsal.binding.model.api.Type;
 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
-import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilderBase;
 import org.opendaylight.mdsal.binding.model.ri.BindingTypes;
+import org.opendaylight.mdsal.binding.model.ri.Types;
 import org.opendaylight.mdsal.binding.runtime.api.ActionRuntimeType;
-import org.opendaylight.mdsal.binding.runtime.api.AugmentRuntimeType;
 import org.opendaylight.mdsal.binding.runtime.api.RuntimeType;
+import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
 import org.opendaylight.yangtools.yang.model.api.stmt.ActionEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
 
 /**
  * Generator corresponding to a {@code action} statement.
  */
-final class ActionGenerator extends CompositeSchemaTreeGenerator<ActionEffectiveStatement, ActionRuntimeType> {
+final class ActionGenerator extends AbstractInvokableGenerator<ActionEffectiveStatement, ActionRuntimeType> {
     ActionGenerator(final ActionEffectiveStatement statement, final AbstractCompositeGenerator<?, ?> parent) {
         super(statement, parent);
     }
 
     @Override
-    void pushToInference(final SchemaInferenceStack dataTree) {
-        dataTree.enterSchemaTree(statement().getIdentifier());
+    StatementNamespace namespace() {
+        return StatementNamespace.ACTION;
     }
 
     @Override
@@ -45,47 +41,40 @@ final class ActionGenerator extends CompositeSchemaTreeGenerator<ActionEffective
     }
 
     @Override
-    GeneratedType createTypeImpl(final TypeBuilderFactory builderFactory) {
-        final GeneratedTypeBuilder builder = builderFactory.newGeneratedTypeBuilder(typeName());
-        builder.addImplementsType(implementedType(builderFactory));
-
-        final ModuleGenerator module = currentModule();
-        module.addQNameConstant(builder, statement().argument());
-
-//        addGetterMethods(builder, builderFactory);
-
-        annotateDeprecatedIfNecessary(builder);
-        builderFactory.addCodegenInformation(module, statement(), builder);
-
-        return builder.build();
-    }
-
-    @Override
-    ActionRuntimeType createRuntimeType(final GeneratedType type, final ActionEffectiveStatement statement,
-            final List<RuntimeType> children, final List<AugmentRuntimeType> augments) {
-        return new DefaultActionRuntimeType(type, statement, children, augments);
-    }
-
-    private @NonNull Type implementedType(final TypeBuilderFactory builderFactory) {
-        final GeneratedType input = getChild(this, InputEffectiveStatement.class).getOriginal()
-            .getGeneratedType(builderFactory);
-        final GeneratedType output = getChild(this, OutputEffectiveStatement.class).getOriginal()
-            .getGeneratedType(builderFactory);
-
-        final AbstractCompositeGenerator<?, ?> parent = getParent();
-        if (parent instanceof ListGenerator) {
-            final KeyGenerator keyGen = ((ListGenerator) parent).keyGenerator();
+    void addImplementedType(final TypeBuilderFactory builderFactory, final GeneratedTypeBuilder builder,
+            final GeneratedType input, final GeneratedType output) {
+        final var parent = getParent();
+        final var parentType = Type.of(parent.typeName());
+        if (parent instanceof ListGenerator list) {
+            final var keyGen = list.keyGenerator();
             if (keyGen != null) {
-                return BindingTypes.keyedListAction(Type.of(parent.typeName()), keyGen.getGeneratedType(builderFactory),
-                    input, output);
+                final var keyType = keyGen.getGeneratedType(builderFactory);
+                builder.addImplementsType(BindingTypes.keyedListAction(parentType, keyType, input, output));
+                builder.addMethod(BindingMapping.ACTION_INVOKE_NAME).setAbstract(true)
+                    .addParameter(BindingTypes.keyedInstanceIdentifier(parentType, keyType), "path")
+                    .addParameter(input, "input")
+                    .setReturnType(Types.listenableFutureTypeFor(BindingTypes.rpcResult(output)))
+                    .addAnnotation(OVERRIDE_ANNOTATION);
+                return;
             }
         }
-
-        return BindingTypes.action(Type.of(parent.typeName()), input, output);
+        builder.addImplementsType(BindingTypes.action(parentType, input, output));
+        builder.addMethod(BindingMapping.ACTION_INVOKE_NAME).setAbstract(true)
+            .addParameter(BindingTypes.instanceIdentifier(parentType), "path")
+            .addParameter(input, "input")
+            .setReturnType(Types.listenableFutureTypeFor(BindingTypes.rpcResult(output)))
+            .addAnnotation(OVERRIDE_ANNOTATION);
     }
 
     @Override
-    void addAsGetterMethod(final GeneratedTypeBuilderBase<?> builder, final TypeBuilderFactory builderFactory) {
-        // actions are a separate concept
+    CompositeRuntimeTypeBuilder<ActionEffectiveStatement, ActionRuntimeType> createBuilder(
+            final ActionEffectiveStatement statement) {
+        return new InvokableRuntimeTypeBuilder<>(statement) {
+            @Override
+            ActionRuntimeType build(final GeneratedType generatedType, final ActionEffectiveStatement statement,
+                    final List<RuntimeType> childTypes) {
+                return new DefaultActionRuntimeType(generatedType, statement, childTypes);
+            }
+        };
     }
 }