From 3cc71d48d6f1e686ac949827459041e281d9b3db Mon Sep 17 00:00:00 2001 From: Jie Han Date: Sat, 24 Feb 2018 15:33:31 +0800 Subject: [PATCH] MDSAL-301: Binding v2 - Rework javadoc generation - ported from: https://git.opendaylight.org/gerrit/68191 https://git.opendaylight.org/gerrit/68254 - Move javadoc generation from mdsal-binding2-generator-impl to mdsal-binding2-java-api-generator Change-Id: Ia9a23af5528f7511908d13a0570e8900daeb60a1 Signed-off-by: Jie Han --- .../javav2/model/api/GeneratedType.java | 10 +- .../model/api/GeneratedTypeForBuilder.java | 8 + .../binding/javav2/model/api/TypeComment.java | 29 +++ .../model/api/YangSourceDefinition.java | 88 ++++++++++ .../builder/GeneratedTypeBuilderBase.java | 19 +- .../generator/impl/AuxiliaryGenUtils.java | 165 ++---------------- .../javav2/generator/impl/GenHelperUtil.java | 89 ++++++---- .../generator/impl/ModuleToGenType.java | 19 +- .../generator/impl/RpcActionGenHelper.java | 12 +- .../generator/yang/types/TypeGenHelper.java | 4 +- .../yang/types/TypeProviderImpl.java | 4 +- .../generator/impl/AuxiliaryGenUtilsTest.java | 70 +------- .../impl/BindingGeneratorImplTest.java | 22 --- .../generator/util/BindingGeneratorUtil.java | 7 + .../generator/util/FormattingUtils.java} | 8 +- .../javav2/generator/util/TypeComments.java | 58 ++++++ .../type/builder/AbstractGeneratedType.java | 24 ++- .../builder/AbstractGeneratedTypeBuilder.java | 25 ++- .../type/builder/EnumerationBuilderImpl.java | 10 +- .../type/builder/GeneratedTOBuilderImpl.java | 8 +- .../builder/GeneratedTypeBuilderImpl.java | 13 +- .../mdsal-binding2-java-api-generator/pom.xml | 4 + .../api/generator/util/TextTemplateUtil.java | 137 ++++++++++++++- .../api/yang}/yangTemplateForModule.scala.txt | 2 +- .../api/yang}/yangTemplateForNode.scala.txt | 2 +- .../api/yang}/yangTemplateForNodes.scala.txt | 2 +- .../yang}/yangTemplateWriteAction.scala.txt | 0 .../yang}/yangTemplateWriteActions.scala.txt | 0 .../yang}/yangTemplateWriteAugments.scala.txt | 4 +- .../yangTemplateWriteDataSchemaNode.scala.txt | 0 ...yangTemplateWriteDataSchemaNodes.scala.txt | 0 .../yangTemplateWriteDeviation.scala.txt | 0 .../yangTemplateWriteDeviations.scala.txt | 0 .../yangTemplateWriteExtension.scala.txt | 0 .../yang}/yangTemplateWriteFeature.scala.txt | 0 .../yangTemplateWriteGroupingDef.scala.txt | 0 .../yangTemplateWriteGroupingDefs.scala.txt | 0 .../yang}/yangTemplateWriteIdentity.scala.txt | 0 .../yangTemplateWriteNotification.scala.txt | 0 .../api/yang}/yangTemplateWriteRPC.scala.txt | 0 .../api/yang}/yangTemplateWriteType.scala.txt | 0 .../yang}/yangTemplateWriteTypeDef.scala.txt | 0 .../yang}/yangTemplateWriteTypeDefs.scala.txt | 0 ...ngTemplateWriteUnknownSchemaNode.scala.txt | 0 ...gTemplateWriteUnknownSchemaNodes.scala.txt | 0 .../yangTemplateWriteUsesNodes.scala.txt | 0 .../java/api/generator}/YangTemplateTest.java | 6 +- .../yang-template/yang-template-import.yang | 0 .../yang-template/yang-template-test.yang | 0 49 files changed, 525 insertions(+), 324 deletions(-) mode change 100644 => 100755 binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/GeneratedType.java create mode 100644 binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/TypeComment.java create mode 100644 binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/YangSourceDefinition.java rename binding2/{mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/util/YangTextTemplate.java => mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/FormattingUtils.java} (95%) create mode 100644 binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/TypeComments.java mode change 100644 => 100755 binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/AbstractGeneratedType.java mode change 100644 => 100755 binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/AbstractGeneratedTypeBuilder.java mode change 100644 => 100755 binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/EnumerationBuilderImpl.java mode change 100644 => 100755 binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/GeneratedTypeBuilderImpl.java mode change 100644 => 100755 binding2/mdsal-binding2-java-api-generator/pom.xml mode change 100644 => 100755 binding2/mdsal-binding2-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/javav2/java/api/generator/util/TextTemplateUtil.java rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateForModule.scala.txt (98%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateForNode.scala.txt (99%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateForNodes.scala.txt (95%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteAction.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteActions.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteAugments.scala.txt (91%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteDataSchemaNode.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteDataSchemaNodes.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteDeviation.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteDeviations.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteExtension.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteFeature.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteGroupingDef.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteGroupingDefs.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteIdentity.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteNotification.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteRPC.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteType.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteTypeDef.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteTypeDefs.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteUnknownSchemaNode.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteUnknownSchemaNodes.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang}/yangTemplateWriteUsesNodes.scala.txt (100%) rename binding2/{mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl => mdsal-binding2-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/javav2/java/api/generator}/YangTemplateTest.java (94%) rename binding2/{mdsal-binding2-generator-impl => mdsal-binding2-java-api-generator}/src/test/resources/yang-template/yang-template-import.yang (100%) rename binding2/{mdsal-binding2-generator-impl => mdsal-binding2-java-api-generator}/src/test/resources/yang-template/yang-template-test.yang (100%) diff --git a/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/GeneratedType.java b/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/GeneratedType.java old mode 100644 new mode 100755 index 0d1d61e573..c37fbd0c9d --- a/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/GeneratedType.java +++ b/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/GeneratedType.java @@ -10,6 +10,7 @@ package org.opendaylight.mdsal.binding.javav2.model.api; import com.google.common.annotations.Beta; import java.util.List; +import java.util.Optional; /** * Every Java interface has to be specified with: @@ -52,7 +53,7 @@ public interface GeneratedType extends Type, DocumentedType { * * @return comment string associated with Generated Type. */ - String getComment(); + TypeComment getComment(); /** * Returns List of annotation definitions associated with generated type. @@ -120,4 +121,11 @@ public interface GeneratedType extends Type, DocumentedType { * Returns parent type for data schema node builder */ Type getParentTypeForBuilder(); + + /** + * Returns the YANG definition of this type, if available. + * + * @return YANG source definition, or empty when unavailable. + */ + Optional getYangSourceDefinition(); } diff --git a/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/GeneratedTypeForBuilder.java b/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/GeneratedTypeForBuilder.java index ff1a2e22e1..4f68bf017b 100644 --- a/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/GeneratedTypeForBuilder.java +++ b/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/GeneratedTypeForBuilder.java @@ -21,4 +21,12 @@ public interface GeneratedTypeForBuilder { */ String getPackageNameForBuilder(); + /** + * Returns base package name that builder class belongs to. + * + * @return base package name that builder class belongs to + */ + String getBasePackageName(); + + } diff --git a/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/TypeComment.java b/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/TypeComment.java new file mode 100644 index 0000000000..d292f299fe --- /dev/null +++ b/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/TypeComment.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2018 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.javav2.model.api; + +import com.google.common.annotations.Beta; +import org.eclipse.jdt.annotation.NonNullByDefault; + +/** + * Dedicated type for holding a class comment. It exposes a javadoc-encoded string. + * + * @author Robert Varga + */ +@Beta +@FunctionalInterface +@NonNullByDefault +public interface TypeComment { + + /** + * Return a javadoc snippet. This snippet is guaranteed to be safe for direct inclusion in a Java block comment. + * + * @return Javadoc snippet. + */ + String getJavadoc(); +} diff --git a/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/YangSourceDefinition.java b/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/YangSourceDefinition.java new file mode 100644 index 0000000000..421cff5bc2 --- /dev/null +++ b/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/YangSourceDefinition.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2018 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.javav2.model.api; + +import static com.google.common.base.Preconditions.checkArgument; +import static java.util.Objects.requireNonNull; + +import com.google.common.annotations.Beta; +import com.google.common.collect.ImmutableList; +import java.util.Collection; +import java.util.List; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.opendaylight.yangtools.yang.model.api.DocumentedNode; +import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.SchemaNode; + +/** + * DTO capturing the YANG source definition which lead to a {@link GeneratedType} being emitted. + * + * @author Robert Varga + */ +@Beta +@NonNullByDefault +public abstract class YangSourceDefinition { + public static final class Multiple extends YangSourceDefinition { + private final List nodes; + + Multiple(final Module module, final Collection nodes) { + super(module); + this.nodes = ImmutableList.copyOf(nodes); + } + + /** + * Return the defining SchemaNodes. + * + * @return defining SchemaNodes, guaranteed to be non-empty + */ + public List getNodes() { + return nodes; + } + } + + public static final class Single extends YangSourceDefinition { + private final DocumentedNode node; + + Single(final Module module, final DocumentedNode node) { + super(module); + this.node = requireNonNull(node); + } + + public DocumentedNode getNode() { + return node; + } + } + + private final Module module; + + private YangSourceDefinition(final Module module) { + this.module = requireNonNull(module); + } + + public static YangSourceDefinition of(final Module module) { + return new Single(module, module); + } + + public static YangSourceDefinition of(final Module module, final SchemaNode node) { + return new Single(module, node); + } + + public static YangSourceDefinition of(final Module module, final Collection nodes) { + checkArgument(!nodes.isEmpty()); + return new Multiple(module, nodes); + } + + /** + * Return the defining YANG module. + * + * @return Defining YANG module. + */ + public final Module getModule() { + return module; + } +} diff --git a/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/type/builder/GeneratedTypeBuilderBase.java b/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/type/builder/GeneratedTypeBuilderBase.java index 73e87d5ff0..587d21e0e2 100644 --- a/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/type/builder/GeneratedTypeBuilderBase.java +++ b/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/type/builder/GeneratedTypeBuilderBase.java @@ -10,9 +10,13 @@ package org.opendaylight.mdsal.binding.javav2.model.api.type.builder; import com.google.common.annotations.Beta; import java.util.List; +import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.javav2.generator.context.ModuleContext; import org.opendaylight.mdsal.binding.javav2.model.api.Constant; import org.opendaylight.mdsal.binding.javav2.model.api.Type; +import org.opendaylight.mdsal.binding.javav2.model.api.TypeComment; +import org.opendaylight.mdsal.binding.javav2.model.api.YangSourceDefinition; import org.opendaylight.yangtools.yang.common.QName; @Beta @@ -62,7 +66,7 @@ public interface GeneratedTypeBuilderBase> * @param comment * Comment String. */ - T addComment(String comment); + T addComment(TypeComment comment); /** * The method creates new AnnotationTypeBuilder containing specified package @@ -170,6 +174,13 @@ public interface GeneratedTypeBuilderBase> List getProperties(); + /** + * Returns the YANG definition of this type, if available. + * + * @return YANG source definition, or empty when unavailable. + */ + Optional getYangSourceDefinition(); + /** * Add new Generated Property definition for Generated Transfer Object * Builder and returns Generated Property Builder for specifying Property.
@@ -230,4 +241,10 @@ public interface GeneratedTypeBuilderBase> */ void setReference(String reference); + /** + * Set the YANG source definition. + * + * @param definition YANG source definition, must not be null + */ + void setYangSourceDefinition(@NonNull YangSourceDefinition definition); } diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AuxiliaryGenUtils.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AuxiliaryGenUtils.java index eb3d9d3801..e8591dcccb 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AuxiliaryGenUtils.java +++ b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AuxiliaryGenUtils.java @@ -10,35 +10,27 @@ package org.opendaylight.mdsal.binding.javav2.generator.impl; import static com.google.common.base.Preconditions.checkArgument; import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil.encodeAngleBrackets; -import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil.replacePackageTopNamespace; import static org.opendaylight.mdsal.binding.javav2.generator.util.Types.BOOLEAN; import com.google.common.annotations.Beta; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Splitter; -import com.google.common.base.Strings; -import com.google.common.collect.Iterables; import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.regex.Pattern; import org.opendaylight.mdsal.binding.javav2.generator.context.ModuleContext; -import org.opendaylight.mdsal.binding.javav2.generator.impl.txt.yangTemplateForModule; -import org.opendaylight.mdsal.binding.javav2.generator.impl.txt.yangTemplateForNode; -import org.opendaylight.mdsal.binding.javav2.generator.impl.txt.yangTemplateForNodes; -import org.opendaylight.mdsal.binding.javav2.generator.impl.util.YangTextTemplate; import org.opendaylight.mdsal.binding.javav2.generator.spi.TypeProvider; -import org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil; import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifier; import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifierNormalizer; +import org.opendaylight.mdsal.binding.javav2.generator.util.TypeComments; import org.opendaylight.mdsal.binding.javav2.generator.util.Types; -import org.opendaylight.mdsal.binding.javav2.generator.util.YangSnippetCleaner; import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.builder.GeneratedTOBuilderImpl; import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.builder.GeneratedTypeBuilderImpl; import org.opendaylight.mdsal.binding.javav2.generator.yang.types.TypeProviderImpl; import org.opendaylight.mdsal.binding.javav2.model.api.Constant; import org.opendaylight.mdsal.binding.javav2.model.api.Type; +import org.opendaylight.mdsal.binding.javav2.model.api.YangSourceDefinition; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.EnumBuilder; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedPropertyBuilder; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTOBuilder; @@ -46,7 +38,6 @@ import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTyp import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTypeBuilderBase; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.MethodSignatureBuilder; import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType; -import org.opendaylight.mdsal.binding.javav2.util.BindingMapping; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; @@ -55,7 +46,6 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; -import org.opendaylight.yangtools.yang.model.api.OperationDefinition; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaNode; @@ -65,7 +55,6 @@ import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition; -import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; /** * Auxiliary util class for {@link GenHelperUtil} class @@ -97,13 +86,6 @@ final class AuxiliaryGenUtils { } } - public static boolean hasBuilderClass(final SchemaNode schemaNode, final BindingNamespaceType namespaceType) { - return (namespaceType.equals(BindingNamespaceType.Data) - && (schemaNode instanceof ContainerSchemaNode || schemaNode instanceof ListSchemaNode - || schemaNode instanceof RpcDefinition || schemaNode instanceof NotificationDefinition - || schemaNode instanceof CaseSchemaNode)); - } - static Constant qNameConstant(final GeneratedTypeBuilderBase toBuilder, final String constantName, final QName name) { return toBuilder.addConstant(Types.typeForClass(QName.class), constantName, name); @@ -133,7 +115,7 @@ final class AuxiliaryGenUtils { * interfaceBuilder */ static MethodSignatureBuilder constructGetter(final GeneratedTypeBuilder interfaceBuilder, - final String schemaNodeName, final String comment, final Type returnType, final Status status) { + final String schemaNodeName, final String comment, final Type returnType, final Status status) { final MethodSignatureBuilder getMethod = interfaceBuilder .addMethod(getterMethodName(schemaNodeName, returnType)); @@ -163,130 +145,15 @@ final class AuxiliaryGenUtils { } else { method.append("get"); } - return method.append(JavaIdentifierNormalizer.normalizeSpecificIdentifier(localName, JavaIdentifier.CLASS)).toString(); + return method.append(JavaIdentifierNormalizer.normalizeSpecificIdentifier(localName, JavaIdentifier.CLASS)) + .toString(); } - static String createDescription(final SchemaNode schemaNode, final String fullyQualifiedName, - final SchemaContext schemaContext, final boolean verboseClassComments, - final BindingNamespaceType namespaceType) { - final StringBuilder sb = new StringBuilder(); - final String nodeDescription = encodeAngleBrackets(schemaNode.getDescription().orElse(null)); - final String formattedDescription = YangTextTemplate.formatToParagraph(nodeDescription, 0); - - if (!Strings.isNullOrEmpty(formattedDescription)) { - sb.append(formattedDescription); - sb.append(NEW_LINE); - } - - final Module module = SchemaContextUtil.findParentModule(schemaContext, schemaNode); - if (verboseClassComments) { - sb.append("

"); - sb.append("This class represents the following YANG schema fragment defined in module "); - sb.append(module.getName()); - sb.append(""); - sb.append(NEW_LINE); - sb.append("

");
-            sb.append(NEW_LINE);
-            String formedYang = YangSnippetCleaner.clean(yangTemplateForNode.render(schemaNode, module).body());
-            sb.append(encodeAngleBrackets(formedYang));
-            sb.append("
"); - sb.append(NEW_LINE); - sb.append("The schema path to identify an instance is"); - sb.append(NEW_LINE); - sb.append(""); - sb.append(YangTextTemplate.formatSchemaPath(module.getName(), schemaNode.getPath().getPathFromRoot())); - sb.append(""); - sb.append(NEW_LINE); - - if (hasBuilderClass(schemaNode, namespaceType) && !(schemaNode instanceof OperationDefinition)) { - final StringBuilder linkToBuilderClass = new StringBuilder(); - final String basePackageName = BindingMapping.getRootPackageName(module); - - linkToBuilderClass - .append(replacePackageTopNamespace(basePackageName, fullyQualifiedName, - namespaceType, BindingNamespaceType.Builder)) - .append("Builder"); - sb.append(NEW_LINE); - sb.append("

To create instances of this class use " + "{@link " + linkToBuilderClass + "}."); - sb.append(NEW_LINE); - sb.append("@see "); - sb.append(linkToBuilderClass); - sb.append(NEW_LINE); - if (schemaNode instanceof ListSchemaNode) { - final StringBuilder linkToKeyClass = new StringBuilder(); - - final String[] namespace = Iterables.toArray(BSDOT_SPLITTER.split(fullyQualifiedName), String.class); - final String className = namespace[namespace.length - 1]; - - linkToKeyClass.append(BindingGeneratorUtil.packageNameForSubGeneratedType(basePackageName, schemaNode, - BindingNamespaceType.Key)) - .append('.') - .append(className) - .append("Key"); - - final List keyDef = ((ListSchemaNode)schemaNode).getKeyDefinition(); - if (keyDef != null && !keyDef.isEmpty()) { - sb.append("@see "); - sb.append(linkToKeyClass); - } - sb.append(NEW_LINE); - } - } - } - - return replaceAllIllegalChars(sb); - } - - static String createDescription(final Module module, final boolean verboseClassComments) { - final StringBuilder sb = new StringBuilder(); - final String moduleDescription = encodeAngleBrackets(module.getDescription().orElse(null)); - final String formattedDescription = YangTextTemplate.formatToParagraph(moduleDescription, 0); - - if (!Strings.isNullOrEmpty(formattedDescription)) { - sb.append(formattedDescription); - sb.append(NEW_LINE); - } - - if (verboseClassComments) { - sb.append("

"); - sb.append("This class represents the following YANG schema fragment defined in module "); - sb.append(module.getName()); - sb.append(""); - sb.append(NEW_LINE); - sb.append("

");
-            sb.append(NEW_LINE);
-            String formedYang = YangSnippetCleaner.clean(yangTemplateForModule.render(module).body());
-            sb.append(encodeAngleBrackets(formedYang));
-            sb.append("
"); - } - - return replaceAllIllegalChars(sb); - } - - static String createDescription(final Set schemaNodes, final Module module, final - boolean verboseClassComments) { - final StringBuilder sb = new StringBuilder(); - - if (!isNullOrEmpty(schemaNodes)) { - final SchemaNode node = schemaNodes.iterator().next(); - - if (node instanceof RpcDefinition) { - sb.append("Interface for implementing the following YANG RPCs defined in module " + module.getName() + ""); - } else if (node instanceof NotificationDefinition) { - sb.append("Interface for receiving the following YANG notifications defined in module " + module.getName() + ""); - } - } - sb.append(NEW_LINE); - - if (verboseClassComments) { - sb.append("
");
-            sb.append(NEW_LINE);
-            sb.append(encodeAngleBrackets(yangTemplateForNodes.render(schemaNodes, module).body()));
-            sb.append("
"); - sb.append(NEW_LINE); - } - - return replaceAllIllegalChars(sb); + public static boolean hasBuilderClass(final SchemaNode schemaNode, final BindingNamespaceType namespaceType) { + return (namespaceType.equals(BindingNamespaceType.Data) + && (schemaNode instanceof ContainerSchemaNode || schemaNode instanceof ListSchemaNode + || schemaNode instanceof RpcDefinition || schemaNode instanceof NotificationDefinition + || schemaNode instanceof CaseSchemaNode)); } @VisibleForTesting @@ -412,12 +279,16 @@ final class AuxiliaryGenUtils { @SuppressWarnings({ "unchecked", "rawtypes" }) static Type createReturnTypeForUnion(final GeneratedTOBuilder genTOBuilder, final TypeDefinition typeDef, - final GeneratedTypeBuilder typeBuilder, final Module parentModule, final TypeProvider typeProvider) { + final GeneratedTypeBuilder typeBuilder, final Module parentModule, final TypeProvider typeProvider, + final boolean verboseClassComments) { final GeneratedTOBuilderImpl returnType = (GeneratedTOBuilderImpl) genTOBuilder; - final String typedefDescription = encodeAngleBrackets(typeDef.getDescription().orElse(null)); - returnType.setDescription(typedefDescription); - returnType.setReference(typeDef.getReference().orElse(null)); + if (verboseClassComments) { + returnType.setYangSourceDefinition(YangSourceDefinition.of(parentModule, typeDef)); + TypeComments.description(typeDef).ifPresent(returnType::addComment); + typeDef.getDescription().ifPresent(returnType::setDescription); + typeDef.getReference().ifPresent(returnType::setReference); + } returnType.setSchemaPath((List) typeDef.getPath().getPathFromRoot()); returnType.setModuleName(parentModule.getName()); diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java index 58c81991b1..28aba87660 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java +++ b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java @@ -12,7 +12,6 @@ import static com.google.common.base.Preconditions.checkArgument; import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.addTOToTypeBuilder; import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.annotateDeprecatedIfNecessary; import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.constructGetter; -import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.createDescription; import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.createReturnTypeForUnion; import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.getAugmentIdentifier; import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.isInnerType; @@ -25,7 +24,6 @@ import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingGenera import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil.packageNameForGeneratedType; import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingTypes.IDENTIFIABLE; import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingTypes.IDENTIFIER; -import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingTypes.INSTANTIABLE; import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingTypes.NOTIFICATION; import static org.opendaylight.mdsal.binding.javav2.generator.util.Types.parameterizedTypeFor; import static org.opendaylight.mdsal.binding.javav2.generator.util.Types.wildcardTypeFor; @@ -48,6 +46,7 @@ import org.opendaylight.mdsal.binding.javav2.generator.util.BindingTypes; import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifier; import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifierNormalizer; import org.opendaylight.mdsal.binding.javav2.generator.util.ReferencedTypeImpl; +import org.opendaylight.mdsal.binding.javav2.generator.util.TypeComments; import org.opendaylight.mdsal.binding.javav2.generator.util.Types; import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.builder.GeneratedPropertyBuilderImpl; import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.builder.GeneratedTOBuilderImpl; @@ -59,6 +58,7 @@ import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType; import org.opendaylight.mdsal.binding.javav2.model.api.ParameterizedType; import org.opendaylight.mdsal.binding.javav2.model.api.Restrictions; import org.opendaylight.mdsal.binding.javav2.model.api.Type; +import org.opendaylight.mdsal.binding.javav2.model.api.YangSourceDefinition; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.EnumBuilder; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedPropertyBuilder; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTOBuilder; @@ -127,9 +127,14 @@ final class GenHelperUtil { genCtx.get(module)); addImplementedInterfaceFromUses(module, moduleDataTypeBuilder, genCtx); moduleDataTypeBuilder.addImplementsType(BindingTypes.TREE_ROOT); - moduleDataTypeBuilder.addComment(module.getDescription().orElse(null)); - moduleDataTypeBuilder.setDescription(createDescription(module, verboseClassComments)); - moduleDataTypeBuilder.setReference(module.getReference().orElse(null)); + + if (verboseClassComments) { + moduleDataTypeBuilder.setYangSourceDefinition(YangSourceDefinition.of(module)); + TypeComments.description(module).ifPresent(moduleDataTypeBuilder::addComment); + module.getDescription().ifPresent(moduleDataTypeBuilder::setDescription); + module.getReference().ifPresent(moduleDataTypeBuilder::setReference); + } + return moduleDataTypeBuilder; } @@ -156,8 +161,12 @@ final class GenHelperUtil { final String moduleName = new StringBuilder(module.getName()).append('_').append(postfix).toString(); final GeneratedTypeBuilderImpl moduleBuilder = new GeneratedTypeBuilderImpl(packageName, moduleName, context); - moduleBuilder.setDescription(createDescription(module, verboseClassComments)); - moduleBuilder.setReference(module.getReference().orElse(null)); + if (verboseClassComments) { + moduleBuilder.setYangSourceDefinition(YangSourceDefinition.of(module)); + TypeComments.description(module).ifPresent(moduleBuilder::addComment); + module.getDescription().ifPresent(moduleBuilder::setDescription); + module.getReference().ifPresent(moduleBuilder::setReference); + } moduleBuilder.setModuleName(moduleName); return moduleBuilder; } @@ -637,10 +646,12 @@ final class GenHelperUtil { final GeneratedTypeBuilderImpl newType = new GeneratedTypeBuilderImpl(packageName, schemaNodeName, context); final Module module = SchemaContextUtil.findParentModule(schemaContext, schemaNode); qNameConstant(newType, BindingMapping.QNAME_STATIC_FIELD_NAME, schemaNode.getQName()); - newType.addComment(schemaNode.getDescription().orElse(null)); - newType.setDescription(createDescription(schemaNode, newType.getFullyQualifiedName(), schemaContext, - verboseClassComments, namespaceType)); - newType.setReference(schemaNode.getReference().orElse(null)); + if (verboseClassComments) { + newType.setYangSourceDefinition(YangSourceDefinition.of(module, schemaNode)); + TypeComments.description(schemaNode).ifPresent(newType::addComment); + schemaNode.getDescription().ifPresent(newType::setDescription); + schemaNode.getReference().ifPresent(newType::setReference); + } newType.setSchemaPath((List) schemaNode.getPath().getPathFromRoot()); newType.setModuleName(module.getName()); newType.setBasePackageName(BindingMapping.getRootPackageName(module)); @@ -672,10 +683,10 @@ final class GenHelperUtil { schemaContext, verboseClassComments, genCtx, genTypeBuilders, typeProvider, namespaceType); } else if (node instanceof LeafListSchemaNode) { resolveLeafListSchemaNode(schemaContext, typeBuilder, (LeafListSchemaNode) node, module, - typeProvider, genCtx); + typeProvider, genCtx, verboseClassComments); } else if (node instanceof LeafSchemaNode) { resolveLeafSchemaNodeAsMethod("", schemaContext, typeBuilder, genCtx, (LeafSchemaNode) node, module, - typeProvider); + typeProvider, verboseClassComments); } else if (node instanceof ListSchemaNode) { listToGenType(module, basePackageName, typeBuilder, childOf, (ListSchemaNode) node, schemaContext, verboseClassComments, genCtx, genTypeBuilders, typeProvider, namespaceType); @@ -850,7 +861,7 @@ final class GenHelperUtil { */ private static Type resolveLeafSchemaNodeAsMethod(final String nodeName, final SchemaContext schemaContext, final GeneratedTypeBuilder typeBuilder, final Map genCtx, final LeafSchemaNode leaf, - final Module module, final TypeProvider typeProvider) { + final Module module, final TypeProvider typeProvider, final boolean verboseClassComments) { if (leaf == null || typeBuilder == null) { return null; } @@ -897,7 +908,8 @@ final class GenHelperUtil { typeProvider, schemaContext, genCtx.get(module), genCtx); if (genTOBuilder != null) { //TODO: https://bugs.opendaylight.org/show_bug.cgi?id=2289 - returnType = createReturnTypeForUnion(genTOBuilder, typeDef, typeBuilder, parentModule, typeProvider); + returnType = createReturnTypeForUnion(genTOBuilder, typeDef, typeBuilder, parentModule, + typeProvider, verboseClassComments); } } else if (typeDef instanceof BitsTypeDefinition) { final GeneratedTOBuilder genTOBuilder = addTOToTypeBuilder(typeDef, typeBuilder, leaf, parentModule, @@ -961,7 +973,7 @@ final class GenHelperUtil { */ private static boolean resolveLeafListSchemaNode(final SchemaContext schemaContext, final GeneratedTypeBuilder typeBuilder, final LeafListSchemaNode node, final Module module, final TypeProvider typeProvider, - final Map genCtx) { + final Map genCtx, final boolean verboseClassComments) { if (node == null || typeBuilder == null) { return false; } @@ -985,7 +997,8 @@ final class GenHelperUtil { final GeneratedTOBuilder genTOBuilder = addTOToTypeBuilder(typeDef, typeBuilder, node, parentModule, typeProvider, schemaContext, genCtx.get(module), genCtx); if (genTOBuilder != null) { - returnType = createReturnTypeForUnion(genTOBuilder, typeDef, typeBuilder, parentModule, typeProvider); + returnType = createReturnTypeForUnion(genTOBuilder, typeDef, typeBuilder, parentModule, + typeProvider, verboseClassComments); } } else if (typeDef instanceof BitsTypeDefinition) { final GeneratedTOBuilder genTOBuilder = addTOToTypeBuilder(typeDef, typeBuilder, node, parentModule, @@ -1163,7 +1176,7 @@ final class GenHelperUtil { final QName leafQName = leaf.getQName(); final Type type = resolveLeafSchemaNodeAsMethod(nodeName, schemaContext, typeBuilder, genCtx, leaf, module, - typeProvider); + typeProvider, verboseClassComments); if (listKeys.contains(leafQName)) { if (type == null) { resolveLeafSchemaNodeAsProperty(nodeName, schemaContext, typeProvider, genCtx, genTOBuilder, leaf, true, @@ -1175,7 +1188,7 @@ final class GenHelperUtil { } else { if (schemaNode instanceof LeafListSchemaNode) { resolveLeafListSchemaNode(schemaContext, typeBuilder, (LeafListSchemaNode) schemaNode, module, - typeProvider, genCtx); + typeProvider, genCtx, verboseClassComments); } else if (schemaNode instanceof ContainerSchemaNode) { containerToGenType(module, basePackageName, typeBuilder, typeBuilder, (ContainerSchemaNode) schemaNode, schemaContext, verboseClassComments, genCtx, genTypeBuilders, typeProvider, namespaceType); @@ -1190,11 +1203,11 @@ final class GenHelperUtil { } private static void addSchemaNodeToListTypeBuilders(final String nodeName, final String basePackageName, - final DataSchemaNode schemaNode, final GeneratedTypeBuilder typeBuilder, - final GeneratedTypeBuilder genTypeBuilder, final List listKeys, final Module module, - final TypeProvider typeProvider, final SchemaContext schemaContext, final Map genCtx, - final Map> genTypeBuilders, final boolean verboseClassComments, - final BindingNamespaceType namespaceType) { + final DataSchemaNode schemaNode, final GeneratedTypeBuilder typeBuilder, + final GeneratedTypeBuilder genTypeBuilder, final List listKeys, final Module module, + final TypeProvider typeProvider, final SchemaContext schemaContext, final Map genCtx, + final Map> genTypeBuilders, final boolean verboseClassComments, + final BindingNamespaceType namespaceType) { checkArgument(schemaNode != null, "Data Schema Node cannot be NULL."); checkArgument(typeBuilder != null, "Generated Type Builder cannot be NULL."); @@ -1202,15 +1215,15 @@ final class GenHelperUtil { final LeafSchemaNode leaf = (LeafSchemaNode) schemaNode; final QName leafQName = leaf.getQName(); final Type type = resolveLeafSchemaNodeAsMethod(nodeName, schemaContext, typeBuilder, genCtx, leaf, module, - typeProvider); + typeProvider, verboseClassComments); if (listKeys.contains(leafQName)) { resolveLeafSchemaNodeAsMethod(nodeName, schemaContext, genTypeBuilder, genCtx, leaf, module, - typeProvider); + typeProvider, verboseClassComments); } } else { if (schemaNode instanceof LeafListSchemaNode) { resolveLeafListSchemaNode(schemaContext, typeBuilder, (LeafListSchemaNode) schemaNode, module, - typeProvider, genCtx); + typeProvider, genCtx, verboseClassComments); } else if (schemaNode instanceof ContainerSchemaNode) { containerToGenType(module, basePackageName, typeBuilder, typeBuilder, (ContainerSchemaNode) schemaNode, schemaContext, verboseClassComments, genCtx, genTypeBuilders, typeProvider, namespaceType); @@ -1265,12 +1278,14 @@ final class GenHelperUtil { final GeneratedTypeBuilder genType = addDefaultInterfaceDefinition(basePackageName, node, childOf, module, genCtx, schemaContext, verboseClassComments, genTypeBuilders, typeProvider, namespaceType); - genType.addComment(node.getDescription().orElse(null)); annotateDeprecatedIfNecessary(node.getStatus(), genType); - genType.setDescription(createDescription(node, genType.getFullyQualifiedName(), schemaContext, - verboseClassComments, namespaceType)); genType.setModuleName(module.getName()); - genType.setReference(node.getReference().orElse(null)); + if (verboseClassComments) { + genType.setYangSourceDefinition(YangSourceDefinition.of(module, node)); + TypeComments.description(node).ifPresent(genType::addComment); + node.getDescription().ifPresent(genType::setDescription); + node.getReference().ifPresent(genType::setReference); + } genType.setSchemaPath((List) node.getPath().getPathFromRoot()); genType.setParentTypeForBuilder(childOf); if (node instanceof DataNodeContainer) { @@ -1415,11 +1430,13 @@ final class GenHelperUtil { } newType.setAbstract(true); - newType.addComment(identity.getDescription().orElse(null)); - newType.setDescription(createDescription(identity, newType.getFullyQualifiedName(), schemaContext, - verboseClassComments, BindingNamespaceType.Identity)); - newType.setReference(identity.getReference().orElse(null)); - newType.setModuleName(module.getName()); + + if (verboseClassComments) { + newType.setYangSourceDefinition(YangSourceDefinition.of(module)); + TypeComments.description(module).ifPresent(newType::addComment); + module.getDescription().ifPresent(newType::setDescription); + module.getReference().ifPresent(newType::setReference); + } newType.setSchemaPath((List) identity.getPath().getPathFromRoot()); qNameConstant(newType, BindingMapping.QNAME_STATIC_FIELD_NAME, identity.getQName()); diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/ModuleToGenType.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/ModuleToGenType.java index 5ca5880d08..fadecdb08f 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/ModuleToGenType.java +++ b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/ModuleToGenType.java @@ -9,7 +9,6 @@ package org.opendaylight.mdsal.binding.javav2.generator.impl; import static com.google.common.base.Preconditions.checkArgument; -import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.createDescription; import static org.opendaylight.mdsal.binding.javav2.generator.impl.GenHelperUtil.groupingsToGenTypes; import static org.opendaylight.mdsal.binding.javav2.generator.impl.GenHelperUtil.moduleTypeBuilder; import static org.opendaylight.mdsal.binding.javav2.generator.impl.GenHelperUtil.processUsesImplements; @@ -25,8 +24,10 @@ import java.util.Map; import java.util.Set; import org.opendaylight.mdsal.binding.javav2.generator.context.ModuleContext; import org.opendaylight.mdsal.binding.javav2.generator.spi.TypeProvider; +import org.opendaylight.mdsal.binding.javav2.generator.util.TypeComments; import org.opendaylight.mdsal.binding.javav2.generator.yang.types.TypeProviderImpl; import org.opendaylight.mdsal.binding.javav2.model.api.Type; +import org.opendaylight.mdsal.binding.javav2.model.api.YangSourceDefinition; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTypeBuilder; import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType; import org.opendaylight.mdsal.binding.javav2.util.BindingMapping; @@ -210,11 +211,17 @@ final class ModuleToGenType { } } - if (tiedNotifications != null) { - listenerInterface.setDescription(createDescription(ImmutableSet.builder() - .addAll(notifications).addAll(tiedNotifications).build(), module, verboseClassComments)); - } else { - listenerInterface.setDescription(createDescription(notifications, module, verboseClassComments)); + if (verboseClassComments) { + if (tiedNotifications != null) { + listenerInterface.setYangSourceDefinition(YangSourceDefinition.of(module, + ImmutableSet.builder().addAll(notifications).addAll(tiedNotifications) + .build())); + } else { + listenerInterface.setYangSourceDefinition(YangSourceDefinition.of(module, notifications)); + } + listenerInterface.addComment(TypeComments.javadoc( + "Interface for receiving the following YANG notifications defined in module " + module.getName() + + "").get()); } genCtx.get(module).addTopLevelNodeType(listenerInterface); diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/RpcActionGenHelper.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/RpcActionGenHelper.java index b3c2479e36..b4f3b07648 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/RpcActionGenHelper.java +++ b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/RpcActionGenHelper.java @@ -11,7 +11,6 @@ package org.opendaylight.mdsal.binding.javav2.generator.impl; import static com.google.common.base.Preconditions.checkState; import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.annotateDeprecatedIfNecessary; import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.checkModuleAndModuleName; -import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.createDescription; import static org.opendaylight.mdsal.binding.javav2.generator.impl.GenHelperUtil.addImplementedInterfaceFromUses; import static org.opendaylight.mdsal.binding.javav2.generator.impl.GenHelperUtil.addRawInterfaceDefinition; import static org.opendaylight.mdsal.binding.javav2.generator.impl.GenHelperUtil.moduleTypeBuilder; @@ -43,8 +42,10 @@ import java.util.Set; import org.opendaylight.mdsal.binding.javav2.generator.context.ModuleContext; import org.opendaylight.mdsal.binding.javav2.generator.spi.TypeProvider; import org.opendaylight.mdsal.binding.javav2.generator.util.BindingTypes; +import org.opendaylight.mdsal.binding.javav2.generator.util.TypeComments; import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTransferObject; import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType; +import org.opendaylight.mdsal.binding.javav2.model.api.YangSourceDefinition; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTypeBuilder; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.MethodSignatureBuilder; import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType; @@ -233,8 +234,13 @@ final class RpcActionGenHelper { final String basePackageName = interfaceBuilder.getPackageName(); - interfaceBuilder.setDescription(createDescription(operation, interfaceBuilder.getFullyQualifiedName(), - schemaContext, verboseClassComments, namespaceType)); + if (verboseClassComments) { + interfaceBuilder.addComment(TypeComments.javadoc( + "Interface for implementing the following YANG Operation defined in module " + module.getName() + "") + .get()); + interfaceBuilder.setYangSourceDefinition(YangSourceDefinition.of(module, operation)); + } + final String operationComment = encodeAngleBrackets(operation.getDescription().orElse(null)); final MethodSignatureBuilder operationMethod = interfaceBuilder.addMethod("invoke"); diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/TypeGenHelper.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/TypeGenHelper.java index 7e5f38e148..3b2a057f83 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/TypeGenHelper.java +++ b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/TypeGenHelper.java @@ -135,7 +135,7 @@ final class TypeGenHelper { final String typedefDescription = encodeAngleBrackets(typedef.getDescription().orElse(null)); genTOBuilder.setDescription(typedefDescription); - genTOBuilder.setReference(typedef.getReference().orElse(null)); + typedef.getReference().ifPresent(genTOBuilder::setReference); genTOBuilder.setSchemaPath((List) typedef.getPath().getPathFromRoot()); genTOBuilder.setModuleName(moduleName); genTOBuilder.setTypedef(true); @@ -483,7 +483,7 @@ final class TypeGenHelper { final String typedefDescription = encodeAngleBrackets(typedef.getDescription().orElse(null)); newType.setDescription(typedefDescription); - newType.setReference(typedef.getReference().orElse(null)); + typedef.getReference().ifPresent(newType::setReference); newType.setSchemaPath((List) typedef.getPath().getPathFromRoot()); newType.setModuleName(moduleName); diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/TypeProviderImpl.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/TypeProviderImpl.java index acff4d595f..05824b2dc9 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/TypeProviderImpl.java +++ b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/TypeProviderImpl.java @@ -313,7 +313,7 @@ public final class TypeProviderImpl implements TypeProvider { final String typedefDescription = encodeAngleBrackets(typeDef.getDescription().orElse(null)); genTOBuilder.setDescription(typedefDescription); - genTOBuilder.setReference(typeDef.getReference().orElse(null)); + typeDef.getReference().ifPresent(genTOBuilder::setReference); genTOBuilder.setSchemaPath((List) typeDef.getPath().getPathFromRoot()); genTOBuilder.setModuleName(moduleName); genTOBuilder.setBaseType(typeDef); @@ -374,7 +374,7 @@ public final class TypeProviderImpl implements TypeProvider { context); final String typedefDescription = encodeAngleBrackets(typedef.getDescription().orElse(null)); unionGenTOBuilder.setDescription(typedefDescription); - unionGenTOBuilder.setReference(typedef.getReference().orElse(null)); + typedef.getReference().ifPresent(unionGenTOBuilder::setReference); unionGenTOBuilder.setSchemaPath((List) typedef.getPath().getPathFromRoot()); unionGenTOBuilder.setModuleName(module.getName()); diff --git a/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AuxiliaryGenUtilsTest.java b/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AuxiliaryGenUtilsTest.java index 94ff461ee9..b2bea753fd 100644 --- a/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AuxiliaryGenUtilsTest.java +++ b/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AuxiliaryGenUtilsTest.java @@ -149,74 +149,6 @@ public class AuxiliaryGenUtilsTest { assertEquals("getClazz", AuxiliaryGenUtils.getterMethodName("clazz", Types.CLASS)); } - @Test - public void createDescriptionWithSchemaNodeTest() { - final SchemaContext schemaContext = YangParserTestUtils.parseYangResource("/generator/test-list.yang"); - final ListSchemaNode containerSchemaNode = - (ListSchemaNode) schemaContext.getModules().iterator().next().getChildNodes().iterator().next(); - final String fullyQualifiedName = - "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data.MyList"; - - final String result = AuxiliaryGenUtils.createDescription(containerSchemaNode, fullyQualifiedName, - schemaContext, true, BindingNamespaceType.Data); - assertNotNull(result); - assertTrue(result.contains("list my-list")); - assertTrue(result.contains("leaf key")); - assertTrue(result.contains("leaf key1")); - assertTrue(result.contains("leaf key2")); - assertTrue(result.contains("leaf foo")); - assertTrue(result.contains("@see org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.dto.MyListBuilder")); - assertTrue(result.contains("@see org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list.MyListKey")); - } - - @Test - public void createDescriptionWithSchemaNodeWithDescriptionTest() { - final SchemaContext schemaContext = - YangParserTestUtils.parseYangResource("/base/test-leaf-with-description.yang"); - final LeafSchemaNode containerSchemaNode = - (LeafSchemaNode) schemaContext.getModules().iterator().next().getChildNodes().iterator().next(); - final String fullyQualifiedName = "test.base.cont.with.leaf.MyList"; - - final String result = AuxiliaryGenUtils.createDescription(containerSchemaNode, fullyQualifiedName, - schemaContext, true, BindingNamespaceType.Data); - assertNotNull(result); - assertTrue(result.contains("I am leaf.")); - } - - @Test - public void createDescriptionTest() { - final SchemaContext schemaContext = YangParserTestUtils.parseYangResource("/base/test-module.yang"); - final String result = AuxiliaryGenUtils.createDescription(schemaContext.getModules().iterator().next(), true); - assertNotNull(result); - assertTrue(result.contains("Base test module description")); - assertTrue(result.contains("test-module")); - } - - @Test - public void createDescriptionWithSchemaNodesTest() { - final SchemaContext schemaContext = YangParserTestUtils.parseYangResource("/base/test-rpc-and-notification.yang"); - final Module module = schemaContext.getModules().iterator().next(); - Set schemaNodes = new HashSet<>(); - schemaNodes.add(module.getRpcs().iterator().next()); - - String result = AuxiliaryGenUtils.createDescription(schemaNodes, module, true); - assertNotNull(result); - assertTrue(result.contains( - "Interface for implementing the following YANG RPCs defined in module test-rpc-and-notification-module")); - assertTrue(result.contains("rpc my-rpc")); - assertTrue(!result.contains("notification my-notification")); - - schemaNodes = new HashSet<>(); - schemaNodes.add(module.getNotifications().iterator().next()); - - result = AuxiliaryGenUtils.createDescription(schemaNodes, module, true); - assertNotNull(result); - assertTrue(result.contains( - "Interface for receiving the following YANG notifications defined in module test-rpc-and-notification-module")); - assertTrue(!result.contains("rpc my-rpc")); - assertTrue(result.contains("notification my-notification")); - } - @Test public void isNullOrEmptyIsNullTest() { assertTrue(AuxiliaryGenUtils.isNullOrEmpty(null)); @@ -358,7 +290,7 @@ public class AuxiliaryGenUtilsTest { final TypeDefinition> typeDef = leafSchemaNode.getType(); final Type result = AuxiliaryGenUtils.createReturnTypeForUnion(addTOToBuilder("/base/test-union.yang"), typeDef, - typeBuilder, schemaContext.getModules().iterator().next(), typeProvider); + typeBuilder, schemaContext.getModules().iterator().next(), typeProvider, false); assertNotNull(result); } diff --git a/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/BindingGeneratorImplTest.java b/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/BindingGeneratorImplTest.java index f92a468b44..464be22817 100644 --- a/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/BindingGeneratorImplTest.java +++ b/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/BindingGeneratorImplTest.java @@ -271,28 +271,6 @@ public class BindingGeneratorImplTest { assertEquals(3, test_i[0]); } - @Test - public void generateTypesDescriptionsTest() { - final BindingGenerator bg = new BindingGeneratorImpl(true); - final SchemaContext context = YangParserTestUtils.parseYangResourceDirectory("/base/with_import/"); - assertNotNull(context); - - final List generateTypes = bg.generateTypes(context, context.getModules()); - assertNotNull(generateTypes); - assertTrue(!generateTypes.isEmpty()); - - for (final Type type : generateTypes) { - if (type.getName().equals("TestData")) { - final String description = ((GeneratedType) type).getDescription().get(); - description - .contains(" import test-import { prefix \"imported-test\"; revision-date 2017-04-21; }\n\n"); - description.contains(" revision 2017-02-06;\n\n"); - description.contains(" typedef my-type {\n type int8;\n }"); - description.contains(" container *my-cont {\n }\n"); - } - } - } - @Test public void generateTypesIdentityTest() throws Exception { final BindingGenerator bg = new BindingGeneratorImpl(true); diff --git a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/BindingGeneratorUtil.java b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/BindingGeneratorUtil.java index 67ed5a72f8..81b01c5d2e 100644 --- a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/BindingGeneratorUtil.java +++ b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/BindingGeneratorUtil.java @@ -29,6 +29,7 @@ import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Optional; +import java.util.regex.Pattern; import org.opendaylight.mdsal.binding.javav2.model.api.AccessModifier; import org.opendaylight.mdsal.binding.javav2.model.api.Restrictions; import org.opendaylight.mdsal.binding.javav2.model.api.Type; @@ -62,6 +63,7 @@ public final class BindingGeneratorUtil { private static final CharMatcher GT_MATCHER = CharMatcher.is('>'); private static final CharMatcher LT_MATCHER = CharMatcher.is('<'); + private static final Pattern UNICODE_CHAR_PATTERN = Pattern.compile("\\\\+u"); private static final Interner PACKAGE_INTERNER = Interners.newWeakInterner(); private static final Comparator> SUID_MEMBER_COMPARATOR = @@ -512,4 +514,9 @@ public final class BindingGeneratorUtil { return def.getRangeConstraint(); } + public static String replaceAllIllegalChars(final CharSequence stringBuilder){ + final String ret = UNICODE_CHAR_PATTERN.matcher(stringBuilder).replaceAll("\\\\\\\\u"); + return ret.isEmpty() ? "" : ret; + } + } diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/util/YangTextTemplate.java b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/FormattingUtils.java similarity index 95% rename from binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/util/YangTextTemplate.java rename to binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/FormattingUtils.java index 8fe8c49aee..440f27085c 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/util/YangTextTemplate.java +++ b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/FormattingUtils.java @@ -1,11 +1,11 @@ /* - * Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2018 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.javav2.generator.impl.util; +package org.opendaylight.mdsal.binding.javav2.generator.util; import com.google.common.annotations.Beta; import com.google.common.base.CharMatcher; @@ -20,13 +20,13 @@ import org.opendaylight.yangtools.yang.common.QName; * Util class */ @Beta -public final class YangTextTemplate { +public final class FormattingUtils { private static final CharMatcher NEWLINE_OR_TAB = CharMatcher.anyOf("\n\t"); @RegEx private static final String SPACES_REGEX = " +"; private static final Pattern SPACES_PATTERN = Pattern.compile(SPACES_REGEX); - private YangTextTemplate() { + private FormattingUtils() { throw new UnsupportedOperationException("Util class"); } diff --git a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/TypeComments.java b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/TypeComments.java new file mode 100644 index 0000000000..0bf2f9a569 --- /dev/null +++ b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/TypeComments.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2018 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.javav2.generator.util; + +import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil.replaceAllIllegalChars; +import static org.opendaylight.mdsal.binding.javav2.generator.util.FormattingUtils.formatToParagraph; + +import com.google.common.annotations.Beta; +import com.google.common.escape.Escaper; +import com.google.common.escape.Escapers; +import java.util.Optional; +import java.util.regex.Pattern; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.opendaylight.mdsal.binding.javav2.model.api.TypeComment; +import org.opendaylight.yangtools.yang.model.api.DocumentedNode; + +/** + * Utility methods for creating {@link TypeComment}s. + */ +@Beta +@NonNullByDefault +public final class TypeComments { + private static final Escaper ENTITY_ESCAPER = Escapers.builder() + .addEscape('<', "<") + .addEscape('>', ">") + .addEscape('&', "&") + .addEscape('@', "@").build(); + private static final Pattern TAIL_COMMENT_PATTERN = Pattern.compile("*/", Pattern.LITERAL); + + /** + * Create a {@link TypeComment} for a javadoc-compliant text snippet. This snippet must be eligible for direct + * inclusion in a Java comment without further escaping. + * + * @param javadoc Pre-formatted javadoc snippet + * @return {@link TypeComment}, or empty if the snippet was empty + */ + public static Optional javadoc(final String javadoc) { + return javadoc.isEmpty() ? Optional.empty() : Optional.of(() -> javadoc); + } + + /** + * Create a {@link TypeComment} for a {@link DocumentedNode}'s description string. + * + * @param node Documented node containing the description to be processed + * @return {@link TypeComment}, or empty if the node's description was empty or non-present. + */ + public static Optional description(final DocumentedNode node) { + final String description = node.getDescription().orElse(""); + return description.isEmpty() ? Optional.empty() : Optional.of(() -> replaceAllIllegalChars( + formatToParagraph( + TAIL_COMMENT_PATTERN.matcher(ENTITY_ESCAPER.escape(description)).replaceAll("*/"), 0))); + } +} diff --git a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/AbstractGeneratedType.java b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/AbstractGeneratedType.java old mode 100644 new mode 100755 index e36bbcb35f..fbdfe48351 --- a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/AbstractGeneratedType.java +++ b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/AbstractGeneratedType.java @@ -13,6 +13,7 @@ import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; import org.opendaylight.mdsal.binding.javav2.generator.util.AbstractBaseType; import org.opendaylight.mdsal.binding.javav2.model.api.AnnotationType; @@ -22,6 +23,8 @@ import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedProperty; import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType; import org.opendaylight.mdsal.binding.javav2.model.api.MethodSignature; import org.opendaylight.mdsal.binding.javav2.model.api.Type; +import org.opendaylight.mdsal.binding.javav2.model.api.TypeComment; +import org.opendaylight.mdsal.binding.javav2.model.api.YangSourceDefinition; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.AnnotationTypeBuilder; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.EnumBuilder; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedPropertyBuilder; @@ -34,7 +37,7 @@ abstract class AbstractGeneratedType extends AbstractBaseType implements Generat private final Type parent; private final Type parentTypeForBuilder; - private final String comment; + private final TypeComment comment; private final List annotations; private final List implementsTypes; private final List enumerations; @@ -43,6 +46,7 @@ abstract class AbstractGeneratedType extends AbstractBaseType implements Generat private final List enclosedTypes; private final List properties; private final boolean isAbstract; + private final YangSourceDefinition definition; public AbstractGeneratedType(final AbstractGeneratedTypeBuilder builder) { super(builder.getPackageName(), builder.getName(), true, null); @@ -58,9 +62,10 @@ abstract class AbstractGeneratedType extends AbstractBaseType implements Generat builder.getEnclosedTransferObjects()); this.properties = toUnmodifiableProperties(builder.getProperties()); this.isAbstract = builder.isAbstract(); + this.definition = builder.getYangSourceDefinition().orElse(null); } - public AbstractGeneratedType(final Type parent, final String packageName, final String name, final String comment, + public AbstractGeneratedType(final Type parent, final String packageName, final String name, final TypeComment comment, final List annotationBuilders, final boolean isAbstract, final List implementsTypes, final List enclosedGenTypeBuilders, final List enclosedGenTOBuilders, final List enumBuilders, @@ -79,6 +84,7 @@ abstract class AbstractGeneratedType extends AbstractBaseType implements Generat this.enclosedTypes = toUnmodifiableEnclosedTypes(enclosedGenTypeBuilders, enclosedGenTOBuilders); this.properties = toUnmodifiableProperties(propertyBuilders); this.isAbstract = isAbstract; + this.definition = null; } protected static final List makeUnmodifiable(final List list) { @@ -137,7 +143,7 @@ abstract class AbstractGeneratedType extends AbstractBaseType implements Generat } @Override - public String getComment() { + public final TypeComment getComment() { return this.comment; } @@ -181,6 +187,11 @@ abstract class AbstractGeneratedType extends AbstractBaseType implements Generat return this.properties; } + @Override + public final Optional getYangSourceDefinition() { + return Optional.ofNullable(definition); + } + @Override public String toString() { final StringBuilder builder = new StringBuilder(); @@ -194,8 +205,11 @@ abstract class AbstractGeneratedType extends AbstractBaseType implements Generat } else { builder.append(", parent=null"); } - builder.append(", comment="); - builder.append(this.comment); + final TypeComment comment = getComment(); + if (comment != null) { + builder.append(", comment="); + builder.append(comment.getJavadoc()); + } builder.append(", annotations="); builder.append(this.annotations); builder.append(", enclosedTypes="); diff --git a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/AbstractGeneratedTypeBuilder.java b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/AbstractGeneratedTypeBuilder.java old mode 100644 new mode 100755 index 01d7c0d156..e2af82c9c5 --- a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/AbstractGeneratedTypeBuilder.java +++ b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/AbstractGeneratedTypeBuilder.java @@ -13,11 +13,14 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import java.util.List; import java.util.Objects; +import java.util.Optional; import org.opendaylight.mdsal.binding.javav2.generator.context.ModuleContext; import org.opendaylight.mdsal.binding.javav2.generator.util.AbstractBaseType; import org.opendaylight.mdsal.binding.javav2.model.api.AccessModifier; import org.opendaylight.mdsal.binding.javav2.model.api.Constant; import org.opendaylight.mdsal.binding.javav2.model.api.Type; +import org.opendaylight.mdsal.binding.javav2.model.api.TypeComment; +import org.opendaylight.mdsal.binding.javav2.model.api.YangSourceDefinition; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.AnnotationTypeBuilder; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.EnumBuilder; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedPropertyBuilder; @@ -39,9 +42,10 @@ abstract class AbstractGeneratedTypeBuilder enclosedTypes = ImmutableList.of(); private List enclosedTransferObjects = ImmutableList.of(); private List properties = ImmutableList.of(); - private String comment = ""; + private TypeComment comment; private boolean isAbstract; private Type parentTypeForBuilder; + private YangSourceDefinition yangSourceDefinition; protected AbstractGeneratedTypeBuilder(final String packageName, final String name, ModuleContext context) { super(packageName, name, context); @@ -57,8 +61,8 @@ abstract class AbstractGeneratedTypeBuilder getAnnotations() { @@ -117,8 +121,8 @@ abstract class AbstractGeneratedTypeBuilder getYangSourceDefinition() { + return Optional.ofNullable(yangSourceDefinition); + } + + + @Override + public void setYangSourceDefinition(final YangSourceDefinition definition) { + yangSourceDefinition = Preconditions.checkNotNull(definition); + } + @Override public int hashCode() { return Objects.hash(getName(), getPackageName()); diff --git a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/EnumerationBuilderImpl.java b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/EnumerationBuilderImpl.java old mode 100644 new mode 100755 index f765e929d0..ea4921941f --- a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/EnumerationBuilderImpl.java +++ b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/EnumerationBuilderImpl.java @@ -27,6 +27,8 @@ import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedProperty; import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType; import org.opendaylight.mdsal.binding.javav2.model.api.MethodSignature; import org.opendaylight.mdsal.binding.javav2.model.api.Type; +import org.opendaylight.mdsal.binding.javav2.model.api.TypeComment; +import org.opendaylight.mdsal.binding.javav2.model.api.YangSourceDefinition; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.AnnotationTypeBuilder; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.EnumBuilder; import org.opendaylight.yangtools.util.LazyCollections; @@ -300,7 +302,7 @@ public class EnumerationBuilderImpl extends AbstractBaseType implements EnumBuil } @Override - public String getComment() { + public TypeComment getComment() { //noop return null; } @@ -344,5 +346,11 @@ public class EnumerationBuilderImpl extends AbstractBaseType implements EnumBuil public Type getParentTypeForBuilder() { return null; } + + @Override + public Optional getYangSourceDefinition() { + // TODO Auto-generated method stub + return Optional.empty(); + } } } diff --git a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/GeneratedTOBuilderImpl.java b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/GeneratedTOBuilderImpl.java index d6faa03f89..174928eca3 100644 --- a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/GeneratedTOBuilderImpl.java +++ b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/GeneratedTOBuilderImpl.java @@ -19,6 +19,7 @@ import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTransferObject; import org.opendaylight.mdsal.binding.javav2.model.api.ParameterizedType; import org.opendaylight.mdsal.binding.javav2.model.api.Restrictions; import org.opendaylight.mdsal.binding.javav2.model.api.Type; +import org.opendaylight.mdsal.binding.javav2.model.api.TypeComment; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedPropertyBuilder; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTOBuilder; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.MethodSignatureBuilder; @@ -315,10 +316,13 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder optDef = type.getYangSourceDefinition(); + if (optDef.isPresent()) { + YangSourceDefinition def = optDef.get(); + sb.append(NEW_LINE); + + if (def instanceof Single) { + DocumentedNode node = ((Single) def).getNode(); + sb.append("

\n") + .append("This class represents the following YANG schema fragment defined in module ") + .append(def.getModule().getName()).append("\n") + .append("

\n")
+                    .append(encodeAngleBrackets(encodeJavadocSymbols(
+                        YangSnippetCleaner.clean(generateYangSnippet(node, def.getModule())))))
+                    .append("
"); + + if (node instanceof SchemaNode) { + sb.append("The schema path to identify an instance is\n") + .append("") + .append(formatSchemaPath(def.getModule().getName(), ((SchemaNode) node).getPath().getPathFromRoot())) + .append("\n"); + + if (hasBuilderClass(type)) { + final String builderName = new StringBuilder() + .append(((GeneratedTypeForBuilder) type).getPackageNameForBuilder()) + .append(".").append(type.getName()).append("Builder").toString(); + + sb.append("\n

To create instances of this class use {@link ").append(builderName) + .append("}.\n") + .append("@see ").append(builderName).append('\n'); + if (node instanceof ListSchemaNode) { + final StringBuilder linkToKeyClass = new StringBuilder(); + + final String[] namespace = Iterables.toArray( + BSDOT_SPLITTER.split(type.getFullyQualifiedName()), String.class); + final String className = namespace[namespace.length - 1]; + + linkToKeyClass.append(BindingGeneratorUtil.packageNameForSubGeneratedType( + ((GeneratedTypeForBuilder) type).getBasePackageName(), (SchemaNode) node, + BindingNamespaceType.Key)).append('.').append(className).append("Key"); + + List keyDef = ((ListSchemaNode) node).getKeyDefinition(); + if (keyDef != null && !keyDef.isEmpty()) { + sb.append("@see ").append(linkToKeyClass); + } + sb.append('\n'); + } + } + } + } else if (def instanceof Multiple) { + sb.append("

\n");
+                sb.append(encodeAngleBrackets(encodeJavadocSymbols(
+                    YangSnippetCleaner.clean(generateYangSnippet(((Multiple) def).getNodes(), def.getModule())))));
+                sb.append("
\n"); + } + } + } + + /** + * Generate a YANG snippet for specified SchemaNode. + * + * @param node node for which to generate a snippet + * @return YANG snippet + */ + private static String generateYangSnippet(final DocumentedNode node, final Module module) { + if (node instanceof Module) { + return yangTemplateForModule.render((Module) node).body(); + } else if (node instanceof SchemaNode) { + return yangTemplateForNode.render((SchemaNode) node, module).body(); + } + + throw new IllegalArgumentException("Not supported."); + } + + private static String generateYangSnippet(final Collection nodes, final Module module) { + return yangTemplateForNodes.render(nodes, module).body(); + } + + public static boolean hasBuilderClass(final GeneratedType type) { + return type instanceof GeneratedTypeForBuilder; + } + + public static String formatSchemaPath(final String moduleName, final Iterable schemaPath) { + final StringBuilder sb = new StringBuilder(); + sb.append(moduleName); + + QName currentElement = Iterables.getFirst(schemaPath, null); + for (final QName pathElement : schemaPath) { + sb.append('/'); + if (!currentElement.getNamespace().equals(pathElement.getNamespace())) { + currentElement = pathElement; + sb.append(pathElement); + } else { + sb.append(pathElement.getLocalName()); + } + } + return sb.toString(); + } + /** * Returns properties names in formatted string * @param properties list of given properties @@ -139,7 +249,18 @@ public final class TextTemplateUtil { * @return formatted type description */ public static String formatDataForJavaDoc(final GeneratedType type) { - return type.getDescription().map(TextTemplateUtil::encodeJavadocSymbols).orElse(""); + final StringBuilder javaDoc = new StringBuilder(); + final TypeComment comment = type.getComment(); + if (comment != null) { + javaDoc.append(comment.getJavadoc()) + .append(NEW_LINE) + .append(NEW_LINE) + .append(NEW_LINE); + } + + appendSnippet(javaDoc, type); + + return javaDoc.toString(); } /** diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateForModule.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateForModule.scala.txt similarity index 98% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateForModule.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateForModule.scala.txt index 38b4c1fe20..bafb8560d0 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateForModule.scala.txt +++ b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateForModule.scala.txt @@ -13,7 +13,7 @@ * parameters to render desired output code. * ***********************************************************@ -@import org.opendaylight.mdsal.binding.javav2.generator.impl.util.YangTextTemplate +@import org.opendaylight.mdsal.binding.javav2.generator.util.FormattingUtils @import org.opendaylight.yangtools.yang.model.api.Module @import org.opendaylight.yangtools.yang.model.api.DocumentedNode @import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateForNode.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateForNode.scala.txt similarity index 99% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateForNode.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateForNode.scala.txt index bdf3489eca..665bebd779 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateForNode.scala.txt +++ b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateForNode.scala.txt @@ -50,7 +50,7 @@ @yangTemplateWriteExtension(node.asInstanceOf[ExtensionDefinition]) } @if(node.isInstanceOf[FeatureDefinition]) { - @yangTemplateWriteFeature(node.asInstanceOf[FeatureDefinition]) + @yangTemplateWriteFeature(node.asInstanceOf[FeatureDefinition]) } @if(node.isInstanceOf[GroupingDefinition]) { @yangTemplateWriteGroupingDef(node.asInstanceOf[GroupingDefinition], module) diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateForNodes.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateForNodes.scala.txt similarity index 95% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateForNodes.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateForNodes.scala.txt index 6d6a2fa088..486bf37ae0 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateForNodes.scala.txt +++ b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateForNodes.scala.txt @@ -18,7 +18,7 @@ @import org.opendaylight.yangtools.yang.model.api.RpcDefinition @import org.opendaylight.yangtools.yang.model.api.SchemaNode -@(nodes: Set[_ <: SchemaNode], module: Module) +@(nodes: Collection[_ <: SchemaNode], module: Module) @if(nodes != null) { @for(node <- nodes) { @if(node.isInstanceOf[NotificationDefinition]) { diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteAction.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteAction.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteAction.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteAction.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteActions.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteActions.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteActions.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteActions.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteAugments.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteAugments.scala.txt similarity index 91% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteAugments.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteAugments.scala.txt index 7f22c44a97..463a3d01a9 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteAugments.scala.txt +++ b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteAugments.scala.txt @@ -13,7 +13,7 @@ * parameters to render desired output code. * ***********************************************************@ -@import org.opendaylight.mdsal.binding.javav2.generator.impl.util.YangTextTemplate +@import org.opendaylight.mdsal.binding.javav2.generator.util.FormattingUtils @import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode @import org.opendaylight.yangtools.yang.model.api.Module @import org.opendaylight.yangtools.yang.model.api.Status @@ -21,7 +21,7 @@ @(augments: Set[_ <: AugmentationSchemaNode], module: Module) @for(augment <- augments) { @if(augment != null) { - augment "@{YangTextTemplate.formatToAugmentPath(augment.getTargetPath().getPathFromRoot())}" { + augment "@{FormattingUtils.formatToAugmentPath(augment.getTargetPath().getPathFromRoot())}" { @if(augment.getWhenCondition() != null && !augment.getWhenCondition().toString().isEmpty()) { when "@augment.getWhenCondition().toString()"; } diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteDataSchemaNode.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteDataSchemaNode.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteDataSchemaNode.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteDataSchemaNode.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteDataSchemaNodes.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteDataSchemaNodes.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteDataSchemaNodes.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteDataSchemaNodes.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteDeviation.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteDeviation.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteDeviation.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteDeviation.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteDeviations.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteDeviations.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteDeviations.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteDeviations.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteExtension.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteExtension.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteExtension.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteExtension.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteFeature.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteFeature.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteFeature.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteFeature.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteGroupingDef.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteGroupingDef.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteGroupingDef.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteGroupingDef.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteGroupingDefs.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteGroupingDefs.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteGroupingDefs.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteGroupingDefs.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteIdentity.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteIdentity.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteIdentity.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteIdentity.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteNotification.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteNotification.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteNotification.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteNotification.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteRPC.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteRPC.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteRPC.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteRPC.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteType.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteType.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteType.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteType.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteTypeDef.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteTypeDef.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteTypeDef.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteTypeDef.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteTypeDefs.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteTypeDefs.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteTypeDefs.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteTypeDefs.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteUnknownSchemaNode.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteUnknownSchemaNode.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteUnknownSchemaNode.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteUnknownSchemaNode.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteUnknownSchemaNodes.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteUnknownSchemaNodes.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteUnknownSchemaNodes.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteUnknownSchemaNodes.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteUsesNodes.scala.txt b/binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteUsesNodes.scala.txt similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/main/twirl/org/opendaylight/mdsal/binding/javav2/generator/impl/yangTemplateWriteUsesNodes.scala.txt rename to binding2/mdsal-binding2-java-api-generator/src/main/twirl/org/opendaylight/mdsal/binding/javav2/java/api/yang/yangTemplateWriteUsesNodes.scala.txt diff --git a/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/YangTemplateTest.java b/binding2/mdsal-binding2-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/javav2/java/api/generator/YangTemplateTest.java similarity index 94% rename from binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/YangTemplateTest.java rename to binding2/mdsal-binding2-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/javav2/java/api/generator/YangTemplateTest.java index 60115e82a2..3fcd3eab13 100644 --- a/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/YangTemplateTest.java +++ b/binding2/mdsal-binding2-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/javav2/java/api/generator/YangTemplateTest.java @@ -1,12 +1,12 @@ /* - * Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2018 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.javav2.generator.impl; +package org.opendaylight.mdsal.binding.javav2.java.api.generator; import static org.junit.Assert.assertTrue; @@ -15,8 +15,8 @@ import java.util.Iterator; import java.util.Set; import org.junit.Before; import org.junit.Test; -import org.opendaylight.mdsal.binding.javav2.generator.impl.txt.yangTemplateForModule; import org.opendaylight.mdsal.binding.javav2.generator.util.YangSnippetCleaner; +import org.opendaylight.mdsal.binding.javav2.java.api.yang.txt.yangTemplateForModule; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; diff --git a/binding2/mdsal-binding2-generator-impl/src/test/resources/yang-template/yang-template-import.yang b/binding2/mdsal-binding2-java-api-generator/src/test/resources/yang-template/yang-template-import.yang similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/test/resources/yang-template/yang-template-import.yang rename to binding2/mdsal-binding2-java-api-generator/src/test/resources/yang-template/yang-template-import.yang diff --git a/binding2/mdsal-binding2-generator-impl/src/test/resources/yang-template/yang-template-test.yang b/binding2/mdsal-binding2-java-api-generator/src/test/resources/yang-template/yang-template-test.yang similarity index 100% rename from binding2/mdsal-binding2-generator-impl/src/test/resources/yang-template/yang-template-test.yang rename to binding2/mdsal-binding2-java-api-generator/src/test/resources/yang-template/yang-template-test.yang -- 2.36.6