X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding2%2Fmdsal-binding2-generator-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fjavav2%2Fgenerator%2Fimpl%2FAuxiliaryGenUtils.java;h=4432555e945577263895d51e69709f7a52aa8fd6;hb=refs%2Fchanges%2F52%2F60452%2F2;hp=d5d11c078cb26d4c56c02e2b006f65524834481c;hpb=b4da01a5d7875a89d739f7ac5e450eb5d19cb5a1;p=mdsal.git 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 d5d11c078c..4432555e94 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 @@ -8,7 +8,9 @@ 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; @@ -16,8 +18,6 @@ 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 com.google.common.collect.Sets; -import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; @@ -28,12 +28,14 @@ import org.opendaylight.mdsal.binding.javav2.generator.impl.txt.yangTemplateForN 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.NonJavaCharsConverter; +import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifierNormalizer; 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.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.type.builder.EnumBuilder; @@ -43,13 +45,16 @@ 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.ChoiceCaseNode; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; 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; @@ -67,7 +72,7 @@ import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; @Beta final class AuxiliaryGenUtils { - private static final Splitter BSDOT_SPLITTER = Splitter.on("\\."); + private static final Splitter BSDOT_SPLITTER = Splitter.on("."); private static final char NEW_LINE = '\n'; private static final Pattern UNICODE_CHAR_PATTERN = Pattern.compile("\\\\+u"); @@ -91,12 +96,11 @@ final class AuxiliaryGenUtils { } } - private static boolean hasBuilderClass(final SchemaNode schemaNode) { - if (schemaNode instanceof ContainerSchemaNode || schemaNode instanceof ListSchemaNode || - schemaNode instanceof RpcDefinition || schemaNode instanceof NotificationDefinition) { - return true; - } - return false; + 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 ChoiceCaseNode)); } static Constant qNameConstant(final GeneratedTypeBuilderBase> toBuilder, final String constantName, @@ -159,11 +163,12 @@ final class AuxiliaryGenUtils { } // underscore used as separator for distinction of method parts in convertIdentifier() method.append('_').append(localName); - return NonJavaCharsConverter.convertIdentifier(method.toString(), JavaIdentifier.METHOD); + return JavaIdentifierNormalizer.normalizeSpecificIdentifier(method.toString(), JavaIdentifier.METHOD); } static String createDescription(final SchemaNode schemaNode, final String fullyQualifiedName, - final SchemaContext schemaContext, final boolean verboseClassComments) { + final SchemaContext schemaContext, final boolean verboseClassComments, + final BindingNamespaceType namespaceType) { final StringBuilder sb = new StringBuilder(); final String nodeDescription = encodeAngleBrackets(schemaNode.getDescription()); final String formattedDescription = YangTextTemplate.formatToParagraph(nodeDescription, 0); @@ -173,17 +178,8 @@ final class AuxiliaryGenUtils { sb.append(NEW_LINE); } + final Module module = SchemaContextUtil.findParentModule(schemaContext, schemaNode); if (verboseClassComments) { - final Module module = SchemaContextUtil.findParentModule(schemaContext, schemaNode); - final StringBuilder linkToBuilderClass = new StringBuilder(); - final String[] namespace = Iterables.toArray(BSDOT_SPLITTER.split(fullyQualifiedName), String.class); - final String className = namespace[namespace.length - 1]; - - if (hasBuilderClass(schemaNode)) { - linkToBuilderClass.append(className); - linkToBuilderClass.append("Builder"); - } - sb.append("
");
sb.append("This class represents the following YANG schema fragment defined in module ");
sb.append(module.getName());
@@ -191,7 +187,8 @@ final class AuxiliaryGenUtils {
sb.append(NEW_LINE);
sb.append("");
sb.append(NEW_LINE);
- sb.append(encodeAngleBrackets(yangTemplateForNode.render(schemaNode).body()));
+ 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");
@@ -201,7 +198,14 @@ final class AuxiliaryGenUtils {
sb.append("");
sb.append(NEW_LINE);
- if (hasBuilderClass(schemaNode)) {
+ 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);
@@ -209,11 +213,21 @@ final class AuxiliaryGenUtils {
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");
sb.append(NEW_LINE);
- sb.append(encodeAngleBrackets(yangTemplateForModule.render(module).body()));
+ String formedYang = YangSnippetCleaner.clean(yangTemplateForModule.render(module).body());
+ sb.append(encodeAngleBrackets(formedYang));
sb.append("
");
}
return replaceAllIllegalChars(sb);
}
- static String createDescription(final Set extends SchemaNode> schemaNodes, final String moduleName, final
+ static String createDescription(final Set extends SchemaNode> schemaNodes, final Module module, final
boolean verboseClassComments) {
final StringBuilder sb = new StringBuilder();
@@ -256,9 +271,9 @@ final class AuxiliaryGenUtils {
final SchemaNode node = schemaNodes.iterator().next();
if (node instanceof RpcDefinition) {
- sb.append("Interface for implementing the following YANG RPCs defined in module " + moduleName + "");
+ 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 " + moduleName + "");
+ sb.append("Interface for receiving the following YANG notifications defined in module " + module.getName() + "");
}
}
sb.append(NEW_LINE);
@@ -266,7 +281,7 @@ final class AuxiliaryGenUtils {
if (verboseClassComments) {
sb.append("");
sb.append(NEW_LINE);
- sb.append(encodeAngleBrackets(yangTemplateForNodes.render(schemaNodes).body()));
+ sb.append(encodeAngleBrackets(yangTemplateForNodes.render(schemaNodes, module).body()));
sb.append("
");
sb.append(NEW_LINE);
}
@@ -301,7 +316,7 @@ final class AuxiliaryGenUtils {
}
/**
- * @param unknownSchemaNodes unknows schema nodes
+ * @param unknownSchemaNodes unknown schema nodes
* @return nodeParameter of UnknownSchemaNode
*/
static String getAugmentIdentifier(final Listleaf
schema node to property of generated TO
* builder.
@@ -520,16 +488,23 @@ final class AuxiliaryGenUtils {
*