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%2Fyang%2Ftypes%2FTypeProviderImpl.java;h=9ec117fd87e09c9444b08404101c635dbf0c4b3a;hb=9f590ba6faeb258e6f3d97271a66a491e3ff9979;hp=a57f29cce67bb94e4fd752effc25242e2746432f;hpb=36376d3c7c73038c2bfbc4e03825ec0557040591;p=mdsal.git 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 a57f29cce6..9ec117fd87 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 @@ -9,6 +9,8 @@ package org.opendaylight.mdsal.binding.javav2.generator.yang.types; import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil.encodeAngleBrackets; +import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil.packageNameWithNamespacePrefix; +import static org.opendaylight.mdsal.binding.javav2.generator.util.Types.getOuterClassPackageName; import static org.opendaylight.mdsal.binding.javav2.generator.yang.types.TypeGenHelper.addStringRegExAsConstant; import static org.opendaylight.mdsal.binding.javav2.generator.yang.types.TypeGenHelper.baseTypeDefForExtendedType; import static org.opendaylight.mdsal.binding.javav2.generator.yang.types.TypeGenHelper.getAllTypedefs; @@ -205,7 +207,8 @@ public final class TypeProviderImpl implements TypeProvider { } modulesSortedByDependency.stream().filter(module -> module != null).forEach(module -> { - final String basePackageName = getRootPackageName(module); + final String basePackageName = packageNameWithNamespacePrefix(getRootPackageName(module), + BindingNamespaceType.Typedef); final List> typeDefinitions = getAllTypedefs(module); final List> listTypeDefinitions = sortTypeDefinitionAccordingDepth(typeDefinitions); if (listTypeDefinitions != null) { @@ -303,7 +306,7 @@ public final class TypeProviderImpl implements TypeProvider { if (typeDef instanceof BitsTypeDefinition) { final BitsTypeDefinition bitsTypeDefinition = (BitsTypeDefinition) typeDef; - final GeneratedTOBuilderImpl genTOBuilder = new GeneratedTOBuilderImpl(basePackageName, typeDefName); + final GeneratedTOBuilderImpl genTOBuilder = new GeneratedTOBuilderImpl(basePackageName, typeDefName, true, false); final String typedefDescription = encodeAngleBrackets(typeDef.getDescription()); genTOBuilder.setDescription(typedefDescription); @@ -364,16 +367,12 @@ public final class TypeProviderImpl implements TypeProvider { final Module module = findParentModule(schemaContext, parentNode); final GeneratedTOBuilderImpl unionGenTOBuilder; - if (typeDefName != null && !typeDefName.isEmpty()) { - unionGenTOBuilder = new GeneratedTOBuilderImpl(basePackageName, typeDefName); - final String typedefDescription = encodeAngleBrackets(typedef.getDescription()); - unionGenTOBuilder.setDescription(typedefDescription); - unionGenTOBuilder.setReference(typedef.getReference()); - unionGenTOBuilder.setSchemaPath((List) typedef.getPath().getPathFromRoot()); - unionGenTOBuilder.setModuleName(module.getName()); - } else { - unionGenTOBuilder = typedefToTransferObject(basePackageName, typedef, module.getName()); - } + unionGenTOBuilder = new GeneratedTOBuilderImpl(basePackageName, typeDefName, true, false); + final String typedefDescription = encodeAngleBrackets(typedef.getDescription()); + unionGenTOBuilder.setDescription(typedefDescription); + unionGenTOBuilder.setReference(typedef.getReference()); + unionGenTOBuilder.setSchemaPath((List) typedef.getPath().getPathFromRoot()); + unionGenTOBuilder.setModuleName(module.getName()); generatedTOBuilders.add(unionGenTOBuilder); unionGenTOBuilder.setIsUnion(true); @@ -384,8 +383,8 @@ public final class TypeProviderImpl implements TypeProvider { resolveExtendedSubtypeAsUnion(unionGenTOBuilder, unionType, regularExpressions, parentNode, schemaContext, genTypeDefsContextMap); } else if (unionType instanceof UnionTypeDefinition) { - generatedTOBuilders.addAll(resolveUnionSubtypeAsUnion(unionGenTOBuilder, (UnionTypeDefinition) unionType, - basePackageName, parentNode, schemaContext, genTypeDefsContextMap)); + generatedTOBuilders.add(resolveUnionSubtypeAsUnion(unionGenTOBuilder, (UnionTypeDefinition) unionType, + unionGenTOBuilder.getFullyQualifiedName(), parentNode, schemaContext, genTypeDefsContextMap)); } else if (unionType instanceof EnumTypeDefinition) { final Enumeration enumeration = addInnerEnumerationToTypeBuilder((EnumTypeDefinition) unionType, unionTypeName, unionGenTOBuilder); @@ -451,15 +450,17 @@ public final class TypeProviderImpl implements TypeProvider { } Type returnType = javaTypeForExtendedType(typeDefinition, schemaContext, genTypeDefsContextMap); - if (r != null && returnType instanceof GeneratedTransferObject) { + if (r != null && !r.isEmpty() && returnType instanceof GeneratedTransferObject) { final GeneratedTransferObject gto = (GeneratedTransferObject) returnType; final Module module = findParentModule(schemaContext, parentNode); + final Module module1 = findParentModule(schemaContext, typeDefinition); final String basePackageName = BindingMapping.getRootPackageName(module); final String packageName = BindingGeneratorUtil.packageNameForGeneratedType(basePackageName, typeDefinition .getPath(), BindingNamespaceType.Typedef); - final String genTOName = JavaIdentifierNormalizer.normalizeClassIdentifier(packageName, typedefName); + final String genTOName = + JavaIdentifierNormalizer.normalizeSpecificIdentifier(typedefName, JavaIdentifier.CLASS); final String name = packageName + "." + genTOName; - if (!(returnType.getFullyQualifiedName().equals(name))) { + if (module.equals(module1) && !(returnType.getFullyQualifiedName().equals(name))) { returnType = shadedTOWithRestrictions(gto, r); } } @@ -503,22 +504,6 @@ public final class TypeProviderImpl implements TypeProvider { addUnitsToGenTO(genTOBuilder, typedef.getUnits()); makeSerializable((GeneratedTOBuilderImpl) genTOBuilder); returnType = genTOBuilder.toInstance(); - // union builder - final GeneratedTOBuilder unionBuilder = new GeneratedTOBuilderImpl(genTOBuilder.getPackageName(), - genTOBuilder.getName() + "Builder"); - unionBuilder.setIsUnionBuilder(true); - final MethodSignatureBuilder method = unionBuilder.addMethod("getDefaultInstance"); - method.setReturnType(returnType); - method.addParameter(Types.STRING, "defaultValue"); - method.setAccessModifier(AccessModifier.PUBLIC); - method.setStatic(true); - Set types = additionalTypes.get(module); - if (types == null) { - types = Sets.newHashSet(unionBuilder.toInstance()); - additionalTypes.put(module, types); - } else { - types.add(unionBuilder.toInstance()); - } } else if (innerTypeDefinition instanceof EnumTypeDefinition) { // enums are automatically Serializable final EnumTypeDefinition enumTypeDef = (EnumTypeDefinition) innerTypeDefinition; @@ -570,22 +555,17 @@ public final class TypeProviderImpl implements TypeProvider { final TypeDefinition baseTypeDef = baseTypeDefForExtendedType(typeDefinition); Type returnType = javaTypeForLeafrefOrIdentityRef(baseTypeDef, typeDefinition, schemaContext, genTypeDefsContextMap); if (returnType == null) { - if (baseTypeDef instanceof EnumTypeDefinition) { - final EnumTypeDefinition enumTypeDef = (EnumTypeDefinition) baseTypeDef; - returnType = provideTypeForEnum(enumTypeDef, typedefName, typeDefinition, schemaContext); - } else { - final Module module = findParentModule(schemaContext, typeDefinition); - final Restrictions r = BindingGeneratorUtil.getRestrictions(typeDefinition); - if (module != null) { - final Map> modulesByDate = genTypeDefsContextMap.get(module.getName()); - final Map genTOs = modulesByDate.get(module.getRevision()); - if (genTOs != null) { - returnType = genTOs.get(typedefName); - } - if (returnType == null) { - returnType = BaseYangTypes.BASE_YANG_TYPES_PROVIDER.javaTypeForSchemaDefinitionType( - baseTypeDef, typeDefinition, r); - } + final Module module = findParentModule(schemaContext, typeDefinition); + final Restrictions r = BindingGeneratorUtil.getRestrictions(typeDefinition); + if (module != null) { + final Map> modulesByDate = genTypeDefsContextMap.get(module.getName()); + final Map genTOs = modulesByDate.get(module.getRevision()); + if (genTOs != null) { + returnType = genTOs.get(typedefName); + } + if (returnType == null) { + returnType = BaseYangTypes.BASE_YANG_TYPES_PROVIDER.javaTypeForSchemaDefinitionType( + baseTypeDef, typeDefinition, r); } } } @@ -779,12 +759,13 @@ public final class TypeProviderImpl implements TypeProvider { final String basePackageName = BindingMapping.getRootPackageName(module); final String packageName = BindingGeneratorUtil.packageNameForGeneratedType(basePackageName, identity.getPath - (), BindingNamespaceType.Typedef); - final String genTypeName = - JavaIdentifierNormalizer.normalizeClassIdentifier(packageName, identity.getQName().getLocalName()); + (), BindingNamespaceType.Identity); + + final String genTypeName = JavaIdentifierNormalizer.normalizeSpecificIdentifier(identity.getQName().getLocalName(), + JavaIdentifier.CLASS); final Type baseType = Types.typeForClass(Class.class); - final Type paramType = Types.wildcardTypeFor(packageName, genTypeName); + final Type paramType = Types.wildcardTypeFor(packageName, genTypeName, true, true); return Types.parameterizedTypeFor(baseType, paramType); } @@ -886,22 +867,22 @@ public final class TypeProviderImpl implements TypeProvider { * bigger one due to recursive call of * provideGeneratedTOBuildersForUnionTypeDef method. */ - private List resolveUnionSubtypeAsUnion(final GeneratedTOBuilder + private GeneratedTOBuilder resolveUnionSubtypeAsUnion(final GeneratedTOBuilder parentUnionGenTOBuilder, final UnionTypeDefinition unionSubtype, final String basePackageName, final SchemaNode parentNode, final SchemaContext schemaContext, final Map>> genTypeDefsContextMap) { final String newTOBuilderName = provideAvailableNameForGenTOBuilder(parentUnionGenTOBuilder.getName()); - final List subUnionGenTOBUilders = provideGeneratedTOBuildersForUnionTypeDef( + final GeneratedTOBuilder subUnionGenTOBUilder = provideGeneratedTOBuilderForUnionTypeDef( basePackageName, unionSubtype, newTOBuilderName, parentNode, schemaContext, genTypeDefsContextMap); final GeneratedPropertyBuilder propertyBuilder; propertyBuilder = parentUnionGenTOBuilder .addProperty(JavaIdentifierNormalizer.normalizeSpecificIdentifier(newTOBuilderName, JavaIdentifier.METHOD)); - propertyBuilder.setReturnType(subUnionGenTOBUilders.get(0)); + propertyBuilder.setReturnType(subUnionGenTOBUilder); parentUnionGenTOBuilder.addEqualsIdentity(propertyBuilder); parentUnionGenTOBuilder.addToStringProperty(propertyBuilder); - return subUnionGenTOBUilders; + return subUnionGenTOBUilder; } /** @@ -918,7 +899,7 @@ public final class TypeProviderImpl implements TypeProvider { * @return generated TO builder with the list of enclosed generated TO * builders */ - private GeneratedTOBuilder provideGeneratedTOBuilderForUnionTypeDef(final String basePackageName, + public GeneratedTOBuilder provideGeneratedTOBuilderForUnionTypeDef(final String basePackageName, final UnionTypeDefinition typedef, final String typeDefName, final SchemaNode parentNode, final SchemaContext schemaContext, final Map>> genTypeDefsContextMap) { @@ -931,10 +912,51 @@ public final class TypeProviderImpl implements TypeProvider { resultTOBuilder.addEnclosingTransferObject(genTOBuilder); } - resultTOBuilder.addProperty("value").setReturnType(Types.CHAR_ARRAY); + final GeneratedPropertyBuilder genPropBuilder; + + genPropBuilder = resultTOBuilder.addProperty("value").setReturnType(Types.CHAR_ARRAY).setReadOnly(false); + resultTOBuilder.addEqualsIdentity(genPropBuilder); + resultTOBuilder.addHashIdentity(genPropBuilder); + resultTOBuilder.addToStringProperty(genPropBuilder); + + provideGeneratedTOBuilderForUnionBuilder(findParentModule(schemaContext, parentNode), resultTOBuilder); + return resultTOBuilder; } + + private GeneratedTOBuilder provideGeneratedTOBuilderForUnionBuilder(final Module parentModule, + final GeneratedTOBuilder genTOBuilder) { + final String outerCls = Types.getOuterClassName(genTOBuilder); + final StringBuilder name; + if (outerCls != null) { + name = new StringBuilder(outerCls); + } else { + name = new StringBuilder(); + } + name.append(genTOBuilder.getName()); + name.append("Builder"); + final GeneratedTOBuilderImpl unionBuilder = new GeneratedTOBuilderImpl(getOuterClassPackageName(genTOBuilder), + name.toString(), true); + unionBuilder.setIsUnionBuilder(true); + + final MethodSignatureBuilder method = unionBuilder.addMethod("getDefaultInstance"); + method.setReturnType(genTOBuilder); + method.addParameter(Types.STRING, "defaultValue"); + method.setAccessModifier(AccessModifier.PUBLIC); + method.setStatic(true); + + final Set types = this.getAdditionalTypes().get(parentModule); + if (types == null) { + this.getAdditionalTypes().put(parentModule, + Sets.newHashSet(unionBuilder.toInstance())); + } else { + types.add(unionBuilder.toInstance()); + } + + return unionBuilder; + } + /** * Wraps code which handle case when union subtype is of the type * ExtendedType. @@ -961,7 +983,7 @@ public final class TypeProviderImpl implements TypeProvider { final String unionTypeName = unionSubtype.getQName().getLocalName(); final Type genTO = findGenTO(unionTypeName, unionSubtype, schemaContext, genTypeDefsContextMap); if (genTO != null) { - updateUnionTypeAsProperty(parentUnionGenTOBuilder, genTO, genTO.getName()); + updateUnionTypeAsProperty(parentUnionGenTOBuilder, genTO, unionTypeName); } else { final TypeDefinition baseType = baseTypeDefForExtendedType(unionSubtype); if (unionTypeName.equals(baseType.getQName().getLocalName())) {