Improve RpcRoutingStrategyTest
[mdsal.git] / binding / mdsal-binding-generator-impl / src / main / java / org / opendaylight / mdsal / binding / generator / impl / CodegenTypeGenerator.java
1 /*
2  * Copyright (c) 2018 Pantheon Technologies, s.r.o.  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;
9
10 import java.util.ArrayList;
11 import java.util.Collection;
12 import java.util.List;
13 import java.util.Map;
14 import java.util.Set;
15 import org.opendaylight.mdsal.binding.model.api.GeneratedType;
16 import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
17 import org.opendaylight.mdsal.binding.model.api.TypeMemberComment;
18 import org.opendaylight.mdsal.binding.model.api.YangSourceDefinition;
19 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
20 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilderBase;
21 import org.opendaylight.mdsal.binding.model.api.type.builder.TypeMemberBuilder;
22 import org.opendaylight.mdsal.binding.model.util.TypeComments;
23 import org.opendaylight.mdsal.binding.yang.types.CodegenTypeProvider;
24 import org.opendaylight.yangtools.yang.model.api.DocumentedNode;
25 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
26 import org.opendaylight.yangtools.yang.model.api.Module;
27 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
28 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
29
30 final class CodegenTypeGenerator extends AbstractTypeGenerator {
31     CodegenTypeGenerator(final EffectiveModelContext context, final Map<SchemaNode, JavaTypeName> renames) {
32         super(context, new CodegenTypeProvider(context, renames), renames);
33     }
34
35     List<GeneratedType> toTypes(final Collection<? extends Module> modules) {
36         final List<GeneratedType> filteredGenTypes = new ArrayList<>();
37         for (final Module m : modules) {
38             filteredGenTypes.addAll(moduleContext(m.getQNameModule()).getGeneratedTypes());
39             final Set<GeneratedType> additionalTypes = typeProvider().getAdditionalTypes().get(m);
40             if (additionalTypes != null) {
41                 filteredGenTypes.addAll(additionalTypes);
42             }
43         }
44         return filteredGenTypes;
45     }
46
47     @Override
48     void addCodegenInformation(final GeneratedTypeBuilderBase<?> genType, final Module module,
49             final SchemaNode node) {
50         YangSourceDefinition.of(module, node).ifPresent(genType::setYangSourceDefinition);
51         TypeComments.description(node).ifPresent(genType::addComment);
52         node.getDescription().ifPresent(genType::setDescription);
53         node.getReference().ifPresent(genType::setReference);
54     }
55
56     @Override
57     void addCodegenInformation(final GeneratedTypeBuilderBase<?> genType, final Module module) {
58         YangSourceDefinition.of(module).ifPresent(genType::setYangSourceDefinition);
59         TypeComments.description(module).ifPresent(genType::addComment);
60         module.getDescription().ifPresent(genType::setDescription);
61         module.getReference().ifPresent(genType::setReference);
62     }
63
64     @Override
65     void addCodegenInformation(final GeneratedTypeBuilder interfaceBuilder, final Module module,
66             final String description, final Collection<?  extends SchemaNode> nodes) {
67         interfaceBuilder.addComment(TypeComments.javadoc("Interface for implementing the following YANG " + description
68             + " defined in module <b>" + module.getName() + "</b>").get());
69         YangSourceDefinition.of(module, nodes).ifPresent(interfaceBuilder::setYangSourceDefinition);
70     }
71
72     @Override
73     void addComment(final TypeMemberBuilder<?> genType, final DocumentedNode node) {
74         node.getDescription().map(TypeMemberComment::referenceOf).ifPresent(genType::setComment);
75     }
76
77     @Override
78     void addRpcMethodComment(final TypeMemberBuilder<?> genType, final RpcDefinition node) {
79         final String rpcName = node.getQName().getLocalName();
80         genType.setComment(new TypeMemberComment(
81             "Invoke {@code " + rpcName + "} RPC.",
82             node.getDescription().orElse(null),
83             "@param input of {@code " + rpcName + "}\n"
84                 + "@return output of {@code " + rpcName + '}'));
85     }
86 }