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%2FGenHelperUtil.java;h=bea588774f8eae3402049fce3d5952767fae5ef8;hb=4178b9af2ee9bcdf6aa5126b31854625f813abbc;hp=451e389e3cfc19705c0764656aaf1c4a32f86a4f;hpb=5428e290f2ad02386dca6a0eb582ca7663b1cf94;p=mdsal.git 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 451e389e3c..bea588774f 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 @@ -201,6 +201,16 @@ final class GenHelperUtil { return null; } + static GeneratedTOBuilder findIdentityByQname(final QName qname, final Map genCtx) { + for (final ModuleContext ctx : genCtx.values()) { + final GeneratedTOBuilder result = ctx.getIdentities().get(qname); + if (result != null) { + return result; + } + } + return null; + } + /** * Adds the methods to typeBuilder which represent subnodes of * node for which typeBuilder was created. @@ -1336,60 +1346,55 @@ final class GenHelperUtil { */ static Map identityToGenType(final Module module, final String basePackageName, final IdentitySchemaNode identity, final SchemaContext schemaContext, Map genCtx, - boolean verboseClassComments, final Map> genTypeBuilders, - final TypeProvider typeProvider, Map generatedIdentities) { + boolean verboseClassComments) { - //check first if identity has been resolved as base identity of some other one - GeneratedTOBuilderImpl newType = generatedIdentities.get(identity.getQName()); + resolveIdentitySchemaNode(basePackageName, schemaContext, identity, module, verboseClassComments, genCtx); + return genCtx; + } + + private static GeneratedTOBuilder resolveIdentitySchemaNode(final String basePackageName, final SchemaContext schemaContext, + final IdentitySchemaNode identity, final Module module, final boolean verboseClassComments, + final Map genCtx) { + Preconditions.checkNotNull(identity,"Identity can not be null!"); + //check first if identity has been resolved as base identity of some other one + GeneratedTOBuilder newType = findIdentityByQname(identity.getQName(), genCtx); if (newType == null) { + final Module parentModule = SchemaContextUtil.findParentModule(schemaContext, identity); + Preconditions.checkState(module.equals(parentModule), + "If the type is null ,it must be in the same module, otherwise it must has been" + + "resolved by an imported module."); + final String packageName = BindingGeneratorUtil.packageNameForGeneratedType(basePackageName, identity.getPath(), BindingNamespaceType.Identity); newType = new GeneratedTOBuilderImpl(packageName, identity.getQName().getLocalName(), true, false); - } - final Set baseIdentities = identity.getBaseIdentities(); - if (baseIdentities.size() == 0) { - //no base - abstract - final GeneratedTOBuilderImpl gto = new GeneratedTOBuilderImpl(BaseIdentity.class.getPackage().getName(), - BaseIdentity.class.getSimpleName()); - newType.setExtendsType(gto.toInstance()); - generatedIdentities.put(identity.getQName(), newType); - } else { - //one base - inheritance - final IdentitySchemaNode baseIdentity = baseIdentities.iterator().next(); - final Module baseIdentityParentModule = SchemaContextUtil.findParentModule(schemaContext, baseIdentity); - final String returnTypePkgName = new StringBuilder(BindingMapping.getRootPackageName - (baseIdentityParentModule)) - .append('.') - .append(BindingNamespaceType.Identity.getPackagePrefix()) - .toString(); - - final GeneratedTOBuilderImpl existingIdentityGto = generatedIdentities.get(baseIdentity.getQName()); - if (existingIdentityGto != null) { - newType.setExtendsType(existingIdentityGto.toInstance()); - } else { - final GeneratedTOBuilderImpl gto = new GeneratedTOBuilderImpl(returnTypePkgName, - baseIdentity.getQName().getLocalName()); + final Set baseIdentities = identity.getBaseIdentities(); + if (baseIdentities.size() == 0) { + //no base - abstract + final GeneratedTOBuilderImpl gto = new GeneratedTOBuilderImpl(BaseIdentity.class.getPackage().getName(), + BaseIdentity.class.getSimpleName()); newType.setExtendsType(gto.toInstance()); - generatedIdentities.put(baseIdentity.getQName(), gto); + } else { + //one base - inheritance + final IdentitySchemaNode baseIdentity = baseIdentities.iterator().next(); + GeneratedTOBuilder baseType = resolveIdentitySchemaNode(basePackageName, schemaContext, + baseIdentity, module, verboseClassComments, genCtx); + newType.setExtendsType(baseType.toInstance()); } - //FIXME: more bases - possible composition, multiple inheritance not possible - } - generatedIdentities.put(identity.getQName(), newType); - - newType.setAbstract(true); - newType.addComment(identity.getDescription()); - newType.setDescription(createDescription(identity, newType.getFullyQualifiedName(), schemaContext, - verboseClassComments, BindingNamespaceType.Identity)); - newType.setReference(identity.getReference()); - newType.setModuleName(module.getName()); - newType.setSchemaPath((List) identity.getPath().getPathFromRoot()); + newType.setAbstract(true); + newType.addComment(identity.getDescription()); + newType.setDescription(createDescription(identity, newType.getFullyQualifiedName(), schemaContext, + verboseClassComments, BindingNamespaceType.Identity)); + newType.setReference(identity.getReference()); + newType.setModuleName(module.getName()); + newType.setSchemaPath((List) identity.getPath().getPathFromRoot()); - qNameConstant(newType, BindingMapping.QNAME_STATIC_FIELD_NAME, identity.getQName()); + qNameConstant(newType, BindingMapping.QNAME_STATIC_FIELD_NAME, identity.getQName()); - genCtx.get(module).addIdentityType(identity.getQName(), newType); - return genCtx; + genCtx.get(module).addIdentityType(identity.getQName(), newType); + } + return newType; } }