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;
14 import java.util.Optional;
16 import org.opendaylight.mdsal.binding.model.api.Type;
17 import org.opendaylight.mdsal.binding.model.api.YangSourceDefinition;
18 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
19 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilderBase;
20 import org.opendaylight.mdsal.binding.model.api.type.builder.TypeMemberBuilder;
21 import org.opendaylight.mdsal.binding.model.util.TypeComments;
22 import org.opendaylight.mdsal.binding.yang.types.CodegenTypeProvider;
23 import org.opendaylight.yangtools.yang.model.api.DocumentedNode;
24 import org.opendaylight.yangtools.yang.model.api.Module;
25 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
26 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
28 final class CodegenTypeGenerator extends AbstractTypeGenerator {
29 CodegenTypeGenerator(final SchemaContext context) {
30 super(context, new CodegenTypeProvider(context));
33 List<Type> toTypes(final Set<Module> modules) {
34 final List<Type> filteredGenTypes = new ArrayList<>();
35 for (final Module m : modules) {
36 filteredGenTypes.addAll(moduleContext(m.getQNameModule()).getGeneratedTypes());
37 final Set<Type> additionalTypes = typeProvider().getAdditionalTypes().get(m);
38 if (additionalTypes != null) {
39 filteredGenTypes.addAll(additionalTypes);
42 return filteredGenTypes;
46 void addCodegenInformation(final GeneratedTypeBuilderBase<?> genType, final Module module,
47 final SchemaNode node) {
48 YangSourceDefinition.of(module, node).ifPresent(genType::setYangSourceDefinition);
49 TypeComments.description(node).ifPresent(genType::addComment);
50 node.getDescription().ifPresent(genType::setDescription);
51 node.getReference().ifPresent(genType::setReference);
55 void addCodegenInformation(final GeneratedTypeBuilderBase<?> genType, final Module module) {
56 YangSourceDefinition.of(module).ifPresent(genType::setYangSourceDefinition);
57 TypeComments.description(module).ifPresent(genType::addComment);
58 module.getDescription().ifPresent(genType::setDescription);
59 module.getReference().ifPresent(genType::setReference);
63 void addCodegenInformation(final GeneratedTypeBuilder interfaceBuilder, final Module module,
64 final String description, final Set<? extends SchemaNode> nodes) {
65 interfaceBuilder.addComment(TypeComments.javadoc("Interface for implementing the following YANG " + description
66 + " defined in module <b>" + module.getName() + "</b>").get());
67 YangSourceDefinition.of(module, nodes).ifPresent(interfaceBuilder::setYangSourceDefinition);
71 void addComment(final TypeMemberBuilder<?> genType, final DocumentedNode node) {
72 final Optional<String> optDesc = node.getDescription();
73 if (optDesc.isPresent()) {
74 genType.setComment(encodeAngleBrackets(optDesc.get()));