X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fcode-generator%2Fyang-model-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fyang%2Fmodel%2Fparser%2Fbuilder%2Fimpl%2FModuleBuilder.java;h=51ab3639bbf4d084e15dde3dddd389d473f53e24;hb=refs%2Fchanges%2F60%2F260%2F2;hp=e309172f4ca35177f82aac613da99ec6687037d3;hpb=184e4f61d034f6c83da75de288d4f56ec48f60bf;p=controller.git diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/ModuleBuilder.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/ModuleBuilder.java index e309172f4c..51ab3639bb 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/ModuleBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/builder/impl/ModuleBuilder.java @@ -29,6 +29,7 @@ import org.opendaylight.controller.yang.model.api.Module; import org.opendaylight.controller.yang.model.api.ModuleImport; import org.opendaylight.controller.yang.model.api.NotificationDefinition; import org.opendaylight.controller.yang.model.api.RpcDefinition; +import org.opendaylight.controller.yang.model.api.SchemaPath; import org.opendaylight.controller.yang.model.api.TypeDefinition; import org.opendaylight.controller.yang.model.api.UsesNode; import org.opendaylight.controller.yang.model.parser.builder.api.AugmentationSchemaBuilder; @@ -41,6 +42,7 @@ import org.opendaylight.controller.yang.model.parser.builder.api.TypeAwareBuilde import org.opendaylight.controller.yang.model.parser.builder.api.TypeDefinitionAwareBuilder; import org.opendaylight.controller.yang.model.parser.builder.api.TypeDefinitionBuilder; import org.opendaylight.controller.yang.model.parser.builder.api.UsesNodeBuilder; +import org.opendaylight.controller.yang.model.parser.util.RefineHolder; import org.opendaylight.controller.yang.model.parser.util.YangParseException; /** @@ -419,10 +421,9 @@ public class ModuleBuilder implements Builder { public UsesNodeBuilder addUsesNode(final String groupingPathStr, final List parentPath) { final List pathToUses = new ArrayList(parentPath); - - UsesNodeBuilder usesBuilder = new UsesNodeBuilderImpl(groupingPathStr); - - ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes + final UsesNodeBuilder usesBuilder = new UsesNodeBuilderImpl( + groupingPathStr); + final ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes .get(pathToUses); if (parent != null) { parent.addUsesNode(usesBuilder); @@ -430,33 +431,46 @@ public class ModuleBuilder implements Builder { pathToUses.add(groupingPathStr); addedUsesNodes.put(pathToUses, usesBuilder); - + moduleNodes.put(pathToUses, usesBuilder); return usesBuilder; } - public RpcDefinitionBuilder addRpc(final QName qname, + public void addRefine(final RefineHolder refine, final List parentPath) { - List pathToRpc = new ArrayList(parentPath); + final List path = new ArrayList(parentPath); + final Builder parent = moduleNodes.get(path); + if (!(parent instanceof UsesNodeBuilder)) { + throw new YangParseException("Failed to parse refine " + + refine.getName()); + } + UsesNodeBuilder usesBuilder = (UsesNodeBuilder) parent; + usesBuilder.addRefine(refine); + path.add(refine.getName()); + moduleNodes.put(path, refine); + } - RpcDefinitionBuilder rpcBuilder = new RpcDefinitionBuilder(qname); + public RpcDefinitionBuilder addRpc(final QName qname, + final List parentPath) { + final List pathToRpc = new ArrayList(parentPath); + final RpcDefinitionBuilder rpcBuilder = new RpcDefinitionBuilder(qname); pathToRpc.add(qname.getLocalName()); addedRpcs.put(pathToRpc, rpcBuilder); - QName inputQName = new QName(qname.getNamespace(), qname.getRevision(), - qname.getPrefix(), "input"); - ContainerSchemaNodeBuilder inputBuilder = new ContainerSchemaNodeBuilder( + final QName inputQName = new QName(qname.getNamespace(), + qname.getRevision(), qname.getPrefix(), "input"); + final ContainerSchemaNodeBuilder inputBuilder = new ContainerSchemaNodeBuilder( inputQName); - List pathToInput = new ArrayList(pathToRpc); + final List pathToInput = new ArrayList(pathToRpc); pathToInput.add("input"); moduleNodes.put(pathToInput, inputBuilder); rpcBuilder.setInput(inputBuilder); - QName outputQName = new QName(qname.getNamespace(), + final QName outputQName = new QName(qname.getNamespace(), qname.getRevision(), qname.getPrefix(), "output"); - ContainerSchemaNodeBuilder outputBuilder = new ContainerSchemaNodeBuilder( + final ContainerSchemaNodeBuilder outputBuilder = new ContainerSchemaNodeBuilder( outputQName); - List pathToOutput = new ArrayList(pathToRpc); + final List pathToOutput = new ArrayList(pathToRpc); pathToOutput.add("output"); moduleNodes.put(pathToOutput, outputBuilder); rpcBuilder.setOutput(outputBuilder); @@ -577,23 +591,28 @@ public class ModuleBuilder implements Builder { parent.setType(type); } - public void addUnionType(List parentPath) { + public void addUnionType(final List actualPath, + final URI namespace, final Date revision) { + List pathToUnion = new ArrayList(actualPath); TypeAwareBuilder parent = (TypeAwareBuilder) moduleNodes - .get(parentPath); - UnionTypeBuilder union = new UnionTypeBuilder(); + .get(pathToUnion); + UnionTypeBuilder union = new UnionTypeBuilder(pathToUnion, namespace, + revision); parent.setType(union); - List path = new ArrayList(parentPath); + List path = new ArrayList(pathToUnion); path.add("union"); moduleNodes.put(path, union); } - public void addIdentityrefType(String baseString, List parentPath) { + public void addIdentityrefType(String baseString, List parentPath, + SchemaPath schemaPath) { List pathToIdentityref = new ArrayList(parentPath); TypeAwareBuilder parent = (TypeAwareBuilder) moduleNodes .get(pathToIdentityref); - IdentityrefTypeBuilder identityref = new IdentityrefTypeBuilder(baseString); + IdentityrefTypeBuilder identityref = new IdentityrefTypeBuilder( + baseString, schemaPath); parent.setType(identityref); dirtyNodes.put(pathToIdentityref, parent); } @@ -608,7 +627,8 @@ public class ModuleBuilder implements Builder { return builder; } - public IdentitySchemaNodeBuilder addIdentity(QName qname, List parentPath) { + public IdentitySchemaNodeBuilder addIdentity(QName qname, + List parentPath) { List pathToIdentity = new ArrayList(parentPath); IdentitySchemaNodeBuilder builder = new IdentitySchemaNodeBuilder(qname); pathToIdentity.add(qname.getLocalName()); @@ -632,14 +652,13 @@ public class ModuleBuilder implements Builder { final List pathToUnknown = new ArrayList(parentPath); final UnknownSchemaNodeBuilder builder = new UnknownSchemaNodeBuilder( qname); - - final SchemaNodeBuilder parent = (SchemaNodeBuilder) moduleNodes - .get(pathToUnknown); - if (parent != null) { - parent.addUnknownSchemaNode(builder); + final Builder parent = moduleNodes.get(pathToUnknown); + if (parent instanceof RefineHolder) { + ((RefineHolder) parent).addUnknownSchemaNode(builder); + } else if (parent instanceof SchemaNodeBuilder) { + ((SchemaNodeBuilder) parent).addUnknownSchemaNode(builder); } - - return new UnknownSchemaNodeBuilder(qname); + return builder; } private class ModuleImpl implements Module {