X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-generator%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fgenerator%2Fimpl%2Freactor%2FActionGenerator.java;h=2bcaded507d5a52bced97064e222fbdb5304275a;hb=114cc6781dcce3101ff893d39786eef2c7ea5646;hp=fad601d721afdaa2277edbd976d321fdc7bbd493;hpb=9d864921bf14cfe05b21735f501238d68b5accd7;p=mdsal.git diff --git a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/ActionGenerator.java b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/ActionGenerator.java index fad601d721..2bcaded507 100644 --- a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/ActionGenerator.java +++ b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/ActionGenerator.java @@ -7,38 +7,29 @@ */ package org.opendaylight.mdsal.binding.generator.impl.reactor; -import static com.google.common.base.Verify.verify; - 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.JavaTypeName; 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 { - private static final JavaTypeName FUNCTIONAL_INTERFACE_ANNOTATION = JavaTypeName.create(FunctionalInterface.class); - +final class ActionGenerator extends AbstractInvokableGenerator { 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 @@ -50,54 +41,38 @@ final class ActionGenerator extends CompositeSchemaTreeGenerator 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); - } - - @Override - void addAsGetterMethod(final GeneratedTypeBuilderBase builder, final TypeBuilderFactory builderFactory) { - // actions are a separate concept + 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 CompositeRuntimeTypeBuilder createBuilder( final ActionEffectiveStatement statement) { - return new CompositeRuntimeTypeBuilder<>(statement) { + return new InvokableRuntimeTypeBuilder<>(statement) { @Override ActionRuntimeType build(final GeneratedType generatedType, final ActionEffectiveStatement statement, - final List childTypes, final List augmentTypes) { - verify(augmentTypes.isEmpty(), "Unexpected augments %s", augmentTypes); + final List childTypes) { return new DefaultActionRuntimeType(generatedType, statement, childTypes); } };