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=e0ba03adfb0013f4eb69873ee96973b9f1c2733f;hb=be6d2cfbf462fc44301309b872ca8eeae6e2eb97;hp=e309172f4ca35177f82aac613da99ec6687037d3;hpb=258cac6ec48a0a4ff62b33b4bdcbac5105a1e006;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..e0ba03adfb 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; /** @@ -80,6 +82,7 @@ public class ModuleBuilder implements Builder { private final Map addedDeviations = new HashMap(); private final Map, TypeDefinitionBuilder> addedTypedefs = new HashMap, TypeDefinitionBuilder>(); private final List addedExtensions = new ArrayList(); + private final Set addedUnknownNodes = new HashSet(); private final Map, TypeAwareBuilder> dirtyNodes = new HashMap, TypeAwareBuilder>(); @@ -124,7 +127,6 @@ public class ModuleBuilder implements Builder { instance.setNotifications(notifications); // AUGMENTATIONS - // instance.setAugmentations(augmentations); final Set augmentations = new HashSet(); for (AugmentationSchemaBuilder builder : addedAugments) { augmentations.add(builder.build()); @@ -193,6 +195,10 @@ public class ModuleBuilder implements Builder { return addedUsesNodes; } + public Set getAddedUnknownNodes() { + return addedUnknownNodes; + } + public Set getModuleTypedefs() { Set typedefs = new HashSet(); for (Map.Entry, TypeDefinitionBuilder> entry : addedTypedefs @@ -419,10 +425,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 +435,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 +595,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 +631,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 +656,14 @@ 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); + addedUnknownNodes.add(builder); + return builder; } private class ModuleImpl implements Module {