2 * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.mdsal.binding.generator.impl.reactor;
10 import org.opendaylight.mdsal.binding.model.api.ConcreteType;
11 import org.opendaylight.mdsal.binding.model.api.GeneratedType;
12 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
13 import org.opendaylight.mdsal.binding.model.ri.BindingTypes;
14 import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
15 import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement;
16 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement;
17 import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
20 * Generator corresponding to an {@code input} or an {@code output} statement.
22 class OperationContainerGenerator
23 extends CompositeSchemaTreeGenerator<SchemaTreeEffectiveStatement<?>, OperationContainerGenerator> {
24 private final ConcreteType baseInterface;
26 OperationContainerGenerator(final InputEffectiveStatement statement, final AbstractCompositeGenerator<?> parent) {
27 super(statement, parent);
28 baseInterface = BindingTypes.RPC_INPUT;
31 OperationContainerGenerator(final OutputEffectiveStatement statement, final AbstractCompositeGenerator<?> parent) {
32 super(statement, parent);
33 baseInterface = BindingTypes.RPC_OUTPUT;
37 final void pushToInference(final SchemaInferenceStack dataTree) {
38 dataTree.enterSchemaTree(statement().getIdentifier());
42 final GeneratedType createTypeImpl(final TypeBuilderFactory builderFactory) {
43 final AbstractCompositeGenerator<?> parent = getParent();
44 if (parent instanceof ActionGenerator && ((ActionGenerator) parent).isAddedByUses()) {
45 // final ActionDefinition orig = findOrigAction(parentSchema, action).get();
46 // // Original definition may live in a different module, make sure we account for that
47 // final ModuleContext origContext = moduleContext(
48 // orig.getPath().getPathFromRoot().iterator().next().getModule());
49 // input = context.addAliasType(origContext, orig.getInput(), action.getInput());
50 // output = context.addAliasType(origContext, orig.getOutput(), action.getOutput());
52 throw new UnsupportedOperationException("Lookup in original");
55 final GeneratedTypeBuilder builder = builderFactory.newGeneratedTypeBuilder(typeName());
56 builder.addImplementsType(baseInterface);
57 addAugmentable(builder);
59 addUsesInterfaces(builder, builderFactory);
60 addConcreteInterfaceMethods(builder);
61 addGetterMethods(builder, builderFactory);
63 final ModuleGenerator module = currentModule();
64 module.addQNameConstant(builder, localName());
66 annotateDeprecatedIfNecessary(builder);
67 builderFactory.addCodegenInformation(module, statement(), builder);
68 // builder.setSchemaPath(schemaNode.getPath());
69 builder.setModuleName(module.statement().argument().getLocalName());
71 return builder.build();