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=146893bf3821f3d3e8980e9a4cfb9efcd560f8c1;hb=d62116a5cd78856140135a991b1efe09081fe127;hp=3becdd14a67edd1e69538f66a004bfd34ff48f41;hpb=a5bdef7fdfea23bc27cc7600e3fa34232bc27e71;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 3becdd14a6..146893bf38 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 @@ -66,6 +66,7 @@ import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType; import org.opendaylight.mdsal.binding.javav2.spec.structural.Augmentable; import org.opendaylight.mdsal.binding.javav2.util.BindingMapping; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode; import org.opendaylight.yangtools.yang.model.api.AnyDataSchemaNode; import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; @@ -281,6 +282,47 @@ final class GenHelperUtil { return genCtx; } + + static void addUsesImplements(final DataNodeContainer superNode, final Module superModule, + final DataNodeContainer node, final Module module, + final SchemaContext schemaContext, Map genCtx, final BindingNamespaceType namespaceType ) { + for (SchemaNode superChildNode : superNode.getChildNodes()) { + if (superChildNode instanceof DataNodeContainer) { + final QName childQName = QName.create(((SchemaNode)node).getQName(), superChildNode.getQName().getLocalName()); + DataSchemaNode childNode = node.getDataChildByName(childQName); + Preconditions.checkNotNull(childNode, ((SchemaNode) node).getPath() + "->" + childQName.toString()); + + final GeneratedTypeBuilder type = genCtx.get(module).getChildNode(childNode.getPath()); + final GeneratedTypeBuilder superType = genCtx.get(superModule).getChildNode(superChildNode.getPath()); + + //TODO:delete this after supporting uses augment + if (type == null || superType == null) { + return; + } + Preconditions.checkNotNull(type, module.toString() + "->" + childNode.getPath().toString()); + Preconditions.checkNotNull(superType, superModule.toString() + "->" + superChildNode.getPath().toString()); + type.addImplementsType(superType); + addUsesImplements((DataNodeContainer)superChildNode, superModule, (DataNodeContainer)childNode, module, schemaContext, genCtx, namespaceType); + } + } + } + + static Map processUsesImplements(final DataNodeContainer node, final Module module, + final SchemaContext schemaContext, Map genCtx, final BindingNamespaceType namespaceType) { + + for (final UsesNode usesNode : node.getUses()) { + final SchemaNode groupingNode = SchemaContextUtil.findDataSchemaNode(schemaContext, usesNode.getGroupingPath()); + Preconditions.checkNotNull(groupingNode, module.toString() + "->" + + usesNode.getGroupingPath().toString()); + Preconditions.checkState(groupingNode instanceof GroupingDefinition, + module.toString() + "->" + usesNode.getGroupingPath().toString()); + final Module superModule = SchemaContextUtil.findParentModule(schemaContext, groupingNode); + GroupingDefinition grouping = (GroupingDefinition)groupingNode; + addUsesImplements(grouping, superModule, node, module, schemaContext, genCtx, namespaceType); + } + return genCtx; + } + static GeneratedTypeBuilder findChildNodeByPath(final SchemaPath path, final Map genCtx) { for (final ModuleContext ctx : genCtx.values()) { final GeneratedTypeBuilder result = ctx.getChildNode(path); @@ -654,6 +696,7 @@ final class GenHelperUtil { } resolveDataSchemaNodes(module, basePackageName, genType, genType, node.getChildNodes(), genCtx, schemaContext, verboseClassComments, genTypeBuilders, typeProvider, namespaceType); + processUsesImplements(node, module, schemaContext, genCtx, namespaceType); } } @@ -1118,8 +1161,6 @@ final class GenHelperUtil { genType.setParentTypeForBuilder(childOf); if (node instanceof DataNodeContainer) { genCtx.get(module).addChildNodeType(node, genType); - genCtx = groupingsToGenTypes(module, ((DataNodeContainer) node).getGroupings(), genCtx, schemaContext, - verboseClassComments, genTypeBuilders, typeProvider); processUsesAugments(schemaContext, (DataNodeContainer) node, module, genCtx, genTypeBuilders, verboseClassComments, typeProvider, namespaceType); } @@ -1196,10 +1237,9 @@ final class GenHelperUtil { genCtx.get(module).addGroupingType(grouping, genType); resolveDataSchemaNodes(module, basePackageName, genType, genType, grouping.getChildNodes(), genCtx, schemaContext, verboseClassComments, genTypeBuilders, typeProvider, BindingNamespaceType.Grouping); - genCtx = groupingsToGenTypes(module, grouping.getGroupings(), genCtx, schemaContext, verboseClassComments, - genTypeBuilders, typeProvider); genCtx = processUsesAugments(schemaContext, grouping, module, genCtx, genTypeBuilders, verboseClassComments, typeProvider, BindingNamespaceType.Grouping); + genCtx = processUsesImplements(grouping, module, schemaContext, genCtx, BindingNamespaceType.Grouping); return genCtx; }