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.Collection;
14 import java.util.List;
16 import java.util.Optional;
18 import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
19 import org.opendaylight.mdsal.binding.model.api.Type;
20 import org.opendaylight.mdsal.binding.model.api.YangSourceDefinition;
21 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
22 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilderBase;
23 import org.opendaylight.mdsal.binding.model.api.type.builder.TypeMemberBuilder;
24 import org.opendaylight.mdsal.binding.model.util.TypeComments;
25 import org.opendaylight.mdsal.binding.yang.types.CodegenTypeProvider;
26 import org.opendaylight.yangtools.yang.model.api.DocumentedNode;
27 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
28 import org.opendaylight.yangtools.yang.model.api.Module;
29 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
31 final class CodegenTypeGenerator extends AbstractTypeGenerator {
32 CodegenTypeGenerator(final EffectiveModelContext context, final Map<SchemaNode, JavaTypeName> renames) {
33 super(context, new CodegenTypeProvider(context, renames), renames);
36 List<Type> toTypes(final Collection<? extends Module> modules) {
37 final List<Type> filteredGenTypes = new ArrayList<>();
38 for (final Module m : modules) {
39 filteredGenTypes.addAll(moduleContext(m.getQNameModule()).getGeneratedTypes());
40 final Set<Type> additionalTypes = typeProvider().getAdditionalTypes().get(m);
41 if (additionalTypes != null) {
42 filteredGenTypes.addAll(additionalTypes);
45 return filteredGenTypes;
49 void addCodegenInformation(final GeneratedTypeBuilderBase<?> genType, final Module module,
50 final SchemaNode node) {
51 YangSourceDefinition.of(module, node).ifPresent(genType::setYangSourceDefinition);
52 TypeComments.description(node).ifPresent(genType::addComment);
53 node.getDescription().ifPresent(genType::setDescription);
54 node.getReference().ifPresent(genType::setReference);
58 void addCodegenInformation(final GeneratedTypeBuilderBase<?> genType, final Module module) {
59 YangSourceDefinition.of(module).ifPresent(genType::setYangSourceDefinition);
60 TypeComments.description(module).ifPresent(genType::addComment);
61 module.getDescription().ifPresent(genType::setDescription);
62 module.getReference().ifPresent(genType::setReference);
66 void addCodegenInformation(final GeneratedTypeBuilder interfaceBuilder, final Module module,
67 final String description, final Collection<? extends SchemaNode> nodes) {
68 interfaceBuilder.addComment(TypeComments.javadoc("Interface for implementing the following YANG " + description
69 + " defined in module <b>" + module.getName() + "</b>").get());
70 YangSourceDefinition.of(module, nodes).ifPresent(interfaceBuilder::setYangSourceDefinition);
74 void addComment(final TypeMemberBuilder<?> genType, final DocumentedNode node) {
75 final Optional<String> optDesc = node.getDescription();
76 if (optDesc.isPresent()) {
77 genType.setComment(encodeAngleBrackets(optDesc.get()));