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=d68c7fe825e06409bdd721dd15437ae72be097c5;hp=071c133f3bf0220d680279fe89941a4396946200;hpb=9f1c7a47c852b775c62d723f5d6d5d2f2209bf82;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 071c133f3b..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 @@ -10,6 +10,7 @@ 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; @@ -27,11 +28,13 @@ 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.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.Constant; import org.opendaylight.mdsal.binding.javav2.model.api.Type; @@ -42,7 +45,9 @@ 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; @@ -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, @@ -163,7 +167,8 @@ final class AuxiliaryGenUtils { } 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()); @@ -202,7 +198,14 @@ final class AuxiliaryGenUtils { sb.append(""); sb.append(NEW_LINE); - if (hasBuilderClass(schemaNode) && !(schemaNode instanceof OperationDefinition)) { + 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); @@ -210,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 keyDef = ((ListSchemaNode)schemaNode).getKeyDefinition(); if (keyDef != null && !keyDef.isEmpty()) { sb.append("@see "); - sb.append(className); - sb.append("Key"); + sb.append(linkToKeyClass); } sb.append(NEW_LINE); } @@ -414,14 +427,8 @@ final class AuxiliaryGenUtils { } static boolean isInnerType(final LeafSchemaNode leaf, final TypeDefinition type) { - if (leaf.getPath().equals(type.getPath())) { - return true; - } - if (leaf.getPath().equals(type.getPath().getParent())) { - return true; - } + return leaf.getPath().equals(type.getPath()) || leaf.getPath().equals(type.getPath().getParent()); - return false; } /** @@ -448,6 +455,18 @@ final class AuxiliaryGenUtils { return genTOBuilder; } + static GeneratedTypeBuilder resolveListKeyTypeBuilder(final String packageName, final ListSchemaNode list) { + GeneratedTypeBuilder genTypeBuilder = null; + if ((list.getKeyDefinition() != null) && (!list.getKeyDefinition().isEmpty())) { + // underscore used as separator for distinction of class name parts + final String genTOName = + new StringBuilder(list.getQName().getLocalName()).append('_').append(BindingNamespaceType.Key) + .toString(); + genTypeBuilder = new GeneratedTypeBuilderImpl(packageName, genTOName); + } + return genTypeBuilder; + } + /** * Converts leaf schema node to property of generated TO * builder. @@ -469,16 +488,23 @@ final class AuxiliaryGenUtils { *

  • true - other cases
  • * */ - static boolean resolveLeafSchemaNodeAsProperty(final GeneratedTOBuilder toBuilder, final LeafSchemaNode leaf, + static boolean resolveLeafSchemaNodeAsProperty(final String nodeName, final GeneratedTOBuilder toBuilder, final LeafSchemaNode leaf, final Type returnType, final boolean isReadOnly) { if (returnType == null) { return false; } final String leafName = leaf.getQName().getLocalName(); + final String leafGetterName; + + StringBuilder sb = new StringBuilder(nodeName) + .append('_') + .append(leafName); + leafGetterName = sb.toString(); + final String leafDesc = encodeAngleBrackets(leaf.getDescription()); final GeneratedPropertyBuilder propBuilder = - toBuilder.addProperty(JavaIdentifierNormalizer.normalizeSpecificIdentifier(leafName, JavaIdentifier.METHOD)); + toBuilder.addProperty(JavaIdentifierNormalizer.normalizeSpecificIdentifier(leafGetterName, JavaIdentifier.METHOD)); propBuilder.setReadOnly(isReadOnly); propBuilder.setReturnType(returnType); propBuilder.setComment(leafDesc);