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%2FRpcGenerator.java;h=c431fb355b9bbef8da8260c9f92dbef808a6649a;hb=078d561c79e3fcf57b2bfd5d6b50c4502288781a;hp=a79d27f3a3e07f366b702a530727548bbb11aa16;hpb=89a12a10b9573dcc84a5636c046cbd0610bc2111;p=mdsal.git diff --git a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/RpcGenerator.java b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/RpcGenerator.java index a79d27f3a3..c431fb355b 100644 --- a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/RpcGenerator.java +++ b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/RpcGenerator.java @@ -7,37 +7,55 @@ */ package org.opendaylight.mdsal.binding.generator.impl.reactor; +import java.util.List; +import org.opendaylight.mdsal.binding.generator.impl.rt.DefaultRpcRuntimeType; import org.opendaylight.mdsal.binding.model.api.GeneratedType; -import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilderBase; +import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder; +import org.opendaylight.mdsal.binding.model.ri.BindingTypes; +import org.opendaylight.mdsal.binding.model.ri.Types; +import org.opendaylight.mdsal.binding.runtime.api.RpcRuntimeType; +import org.opendaylight.mdsal.binding.runtime.api.RuntimeType; +import org.opendaylight.yangtools.yang.binding.contract.Naming; +import org.opendaylight.yangtools.yang.binding.contract.StatementNamespace; import org.opendaylight.yangtools.yang.model.api.stmt.RpcEffectiveStatement; -import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; /** * Generator corresponding to a {@code rpc} statement. */ -final class RpcGenerator extends AbstractCompositeGenerator { - RpcGenerator(final RpcEffectiveStatement statement, final AbstractCompositeGenerator parent) { +final class RpcGenerator extends AbstractInvokableGenerator { + RpcGenerator(final RpcEffectiveStatement statement, final ModuleGenerator parent) { super(statement, parent); } @Override - void pushToInference(final SchemaInferenceStack dataTree) { - dataTree.enterSchemaTree(statement().argument()); + StatementNamespace namespace() { + return StatementNamespace.RPC; } @Override - // FIXME: switch to the same thing we are using for 'action' ClassPlacement classPlacement() { - return ClassPlacement.PHANTOM; + return ClassPlacement.TOP_LEVEL; } @Override - GeneratedType createTypeImpl(final TypeBuilderFactory builderFactory) { - throw new UnsupportedOperationException(); + void addImplementedType(final TypeBuilderFactory builderFactory, final GeneratedTypeBuilder builder, + final GeneratedType input, final GeneratedType output) { + builder.addImplementsType(BindingTypes.rpc(input, output)); + builder.addMethod(Naming.RPC_INVOKE_NAME).setAbstract(true) + .addParameter(input, "input") + .setReturnType(Types.listenableFutureTypeFor(BindingTypes.rpcResult(output))) + .addAnnotation(OVERRIDE_ANNOTATION); } @Override - void addAsGetterMethod(final GeneratedTypeBuilderBase builder, final TypeBuilderFactory builderFactory) { - // RPCs are a separate concept + CompositeRuntimeTypeBuilder createBuilder( + final RpcEffectiveStatement statement) { + return new InvokableRuntimeTypeBuilder<>(statement) { + @Override + RpcRuntimeType build(final GeneratedType generatedType, final RpcEffectiveStatement statement, + final List childTypes) { + return new DefaultRpcRuntimeType(generatedType, statement, childTypes); + } + }; } }