6a8b7e3029fa042d4b7bba72c7163e2dbbd2db61
[mdsal.git] / binding / mdsal-binding-generator / src / main / java / org / opendaylight / mdsal / binding / generator / impl / reactor / ContainerGenerator.java
1 /*
2  * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.mdsal.binding.generator.impl.reactor;
9
10 import java.util.List;
11 import org.opendaylight.mdsal.binding.generator.impl.rt.DefaultContainerRuntimeType;
12 import org.opendaylight.mdsal.binding.model.api.GeneratedType;
13 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
14 import org.opendaylight.mdsal.binding.runtime.api.AugmentRuntimeType;
15 import org.opendaylight.mdsal.binding.runtime.api.ContainerRuntimeType;
16 import org.opendaylight.mdsal.binding.runtime.api.RuntimeType;
17 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
18 import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
19
20 /**
21  * Generator corresponding to a {@code container} statement.
22  */
23 final class ContainerGenerator extends CompositeSchemaTreeGenerator<ContainerEffectiveStatement, ContainerRuntimeType> {
24     ContainerGenerator(final ContainerEffectiveStatement statement, final AbstractCompositeGenerator<?, ?> parent) {
25         super(statement, parent);
26     }
27
28     @Override
29     void pushToInference(final SchemaInferenceStack dataTree) {
30         dataTree.enterDataTree(statement().getIdentifier());
31     }
32
33     @Override
34     GeneratedType createTypeImpl(final TypeBuilderFactory builderFactory) {
35         final GeneratedTypeBuilder builder = builderFactory.newGeneratedTypeBuilder(typeName());
36         addImplementsChildOf(builder);
37         addAugmentable(builder);
38         addUsesInterfaces(builder, builderFactory);
39         addConcreteInterfaceMethods(builder);
40
41         final ModuleGenerator module = currentModule();
42         module.addQNameConstant(builder, localName());
43
44         addGetterMethods(builder, builderFactory);
45
46         annotateDeprecatedIfNecessary(builder);
47         builderFactory.addCodegenInformation(module, statement(), builder);
48         builder.setModuleName(module.statement().argument().getLocalName());
49 //      builder.setSchemaPath(node.getPath());
50
51         return builder.build();
52     }
53
54     @Override
55     ContainerRuntimeType createRuntimeType(final GeneratedType type, final ContainerEffectiveStatement statement,
56             final List<RuntimeType> children, final List<AugmentRuntimeType> augments) {
57         return new DefaultContainerRuntimeType(type, statement, children, augments);
58     }
59 }