2 * Copyright (c) 2018 Pantheon Technologies, s.r.o. 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;
10 import static org.opendaylight.mdsal.binding.model.util.BindingGeneratorUtil.encodeAngleBrackets;
12 import java.util.ArrayList;
13 import java.util.List;
15 import java.util.Optional;
17 import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
18 import org.opendaylight.mdsal.binding.model.api.Type;
19 import org.opendaylight.mdsal.binding.model.api.YangSourceDefinition;
20 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
21 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilderBase;
22 import org.opendaylight.mdsal.binding.model.api.type.builder.TypeMemberBuilder;
23 import org.opendaylight.mdsal.binding.model.util.TypeComments;
24 import org.opendaylight.mdsal.binding.yang.types.CodegenTypeProvider;
25 import org.opendaylight.yangtools.yang.model.api.DocumentedNode;
26 import org.opendaylight.yangtools.yang.model.api.Module;
27 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
28 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
30 final class CodegenTypeGenerator extends AbstractTypeGenerator {
31 CodegenTypeGenerator(final SchemaContext context, final Map<SchemaNode, JavaTypeName> renames) {
32 super(context, new CodegenTypeProvider(context, renames), renames);
35 List<Type> toTypes(final Set<Module> modules) {
36 final List<Type> filteredGenTypes = new ArrayList<>();
37 for (final Module m : modules) {
38 filteredGenTypes.addAll(moduleContext(m.getQNameModule()).getGeneratedTypes());
39 final Set<Type> additionalTypes = typeProvider().getAdditionalTypes().get(m);
40 if (additionalTypes != null) {
41 filteredGenTypes.addAll(additionalTypes);
44 return filteredGenTypes;
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);
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);
65 void addCodegenInformation(final GeneratedTypeBuilder interfaceBuilder, final Module module,
66 final String description, final Set<? 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);
73 void addComment(final TypeMemberBuilder<?> genType, final DocumentedNode node) {
74 final Optional<String> optDesc = node.getDescription();
75 if (optDesc.isPresent()) {
76 genType.setComment(encodeAngleBrackets(optDesc.get()));