X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fcode-generator%2Fbinding-generator-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fbinding%2Fgenerator%2Fimpl%2FBindingGeneratorImpl.java;h=b89dbb44ac786756b60d866c02459097bbe615b4;hp=863770d2c747bc8dfe2ff10f6130af811e7f1211;hb=8f13b5e59fc066808cc73879f8defcb9cf3dc82a;hpb=a473dbd2a72e49c11b7a9943d617f3908989aa46 diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/BindingGeneratorImpl.java b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/BindingGeneratorImpl.java index 863770d2c7..b89dbb44ac 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/BindingGeneratorImpl.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/BindingGeneratorImpl.java @@ -9,6 +9,7 @@ package org.opendaylight.controller.sal.binding.generator.impl; import org.opendaylight.controller.binding.generator.util.ReferencedTypeImpl; import org.opendaylight.controller.binding.generator.util.Types; +import org.opendaylight.controller.binding.generator.util.generated.type.builder.GeneratedTOBuilderImpl; import org.opendaylight.controller.binding.generator.util.generated.type.builder.GeneratedTypeBuilderImpl; import org.opendaylight.controller.sal.binding.generator.api.BindingGenerator; import org.opendaylight.controller.sal.binding.generator.spi.TypeProvider; @@ -23,6 +24,7 @@ import org.opendaylight.controller.yang.model.api.type.EnumTypeDefinition; import org.opendaylight.controller.yang.model.api.type.EnumTypeDefinition.EnumPair; import org.opendaylight.controller.yang.model.util.DataNodeIterator; import org.opendaylight.controller.yang.model.util.ExtendedType; +import org.opendaylight.controller.yang.model.util.SchemaContextUtil; import java.util.*; import java.util.concurrent.Future; @@ -65,6 +67,8 @@ public final class BindingGeneratorImpl implements BindingGenerator { generatedTypes.addAll(allAugmentsToGenTypes(module)); generatedTypes.addAll(allRPCMethodsToGenType(module)); generatedTypes.addAll(allNotificationsToGenType(module)); + generatedTypes.addAll(allIdentitiesToGenTypes(module, context)); + generatedTypes.addAll(allGroupingsToGenTypes(module)); } return generatedTypes; } @@ -100,6 +104,9 @@ public final class BindingGeneratorImpl implements BindingGenerator { generatedTypes.addAll(allAugmentsToGenTypes(contextModule)); generatedTypes.addAll(allRPCMethodsToGenType(contextModule)); generatedTypes.addAll(allNotificationsToGenType(contextModule)); + generatedTypes.addAll(allIdentitiesToGenTypes(contextModule, + context)); + generatedTypes.addAll(allGroupingsToGenTypes(contextModule)); if (modules.contains(contextModule)) { filteredGenTypes.addAll(generatedTypes); @@ -397,6 +404,84 @@ public final class BindingGeneratorImpl implements BindingGenerator { return genNotifyTypes; } + private List allIdentitiesToGenTypes(final Module module, + final SchemaContext context) { + List genTypes = new ArrayList(); + + final Set schemaIdentities = module.getIdentities(); + + final String basePackageName = moduleNamespaceToPackageName(module); + + if (schemaIdentities != null && !schemaIdentities.isEmpty()) { + for (final IdentitySchemaNode identity : schemaIdentities) { + genTypes.add(identityToGenType(basePackageName, identity, + context)); + } + } + return genTypes; + } + + private GeneratedType identityToGenType(final String basePackageName, + IdentitySchemaNode identity, SchemaContext context) { + if (identity == null) { + return null; + } + + final String packageName = packageNameForGeneratedType(basePackageName, + identity.getPath()); + + final String genTypeName = parseToClassName(identity.getQName() + .getLocalName()); + final GeneratedTOBuilderImpl newType = new GeneratedTOBuilderImpl( + packageName, genTypeName); + + IdentitySchemaNode baseIdentity = identity.getBaseIdentity(); + if (baseIdentity != null) { + Module baseIdentityParentModule = SchemaContextUtil.findParentModule( + context, baseIdentity); + + final String returnTypePkgName = moduleNamespaceToPackageName(baseIdentityParentModule); + final String returnTypeName = parseToClassName(baseIdentity + .getQName().getLocalName()); + + GeneratedTransferObject gto = new GeneratedTOBuilderImpl( + returnTypePkgName, returnTypeName).toInstance(); + newType.addExtendsType(gto); + } else { + newType.addExtendsType(Types.getBaseIdentityTO()); + } + + return newType.toIdentityInstance(); + } + + private List allGroupingsToGenTypes(Module module) { + final List genTypes = new ArrayList(); + final String basePackageName = moduleNamespaceToPackageName(module); + Set groupings = module.getGroupings(); + if (groupings != null && !groupings.isEmpty()) { + for (final GroupingDefinition grouping : groupings) { + genTypes.add(groupingToGenType(basePackageName, grouping)); + } + } + return genTypes; + } + + private GeneratedType groupingToGenType(final String basePackageName, + GroupingDefinition grouping) { + if (grouping == null) { + return null; + } + + final String packageName = packageNameForGeneratedType(basePackageName, + grouping.getPath()); + final Set schemaNodes = grouping.getChildNodes(); + final GeneratedTypeBuilder typeBuilder = addRawInterfaceDefinition( + packageName, grouping); + + resolveDataSchemaNodes(basePackageName, typeBuilder, schemaNodes); + return typeBuilder.toInstance(); + } + private EnumTypeDefinition enumTypeDefFromExtendedType( final TypeDefinition typeDefinition) { if (typeDefinition != null) {