X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;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=cca505e98505d26907b0c49202285cfda98040d6;hp=86adcdd71d45ec704d1673d25abd0b975372d7ba;hb=fbfab4661220d56543ceabbcba5a40b335be1e07;hpb=4a5b8b61c06c7091a7de5ed9df7456fa325dd909 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 86adcdd71d..cca505e985 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; @@ -36,10 +37,12 @@ import org.opendaylight.controller.yang.model.parser.builder.api.Builder; import org.opendaylight.controller.yang.model.parser.builder.api.ChildNodeBuilder; import org.opendaylight.controller.yang.model.parser.builder.api.DataSchemaNodeBuilder; import org.opendaylight.controller.yang.model.parser.builder.api.GroupingBuilder; +import org.opendaylight.controller.yang.model.parser.builder.api.SchemaNodeBuilder; import org.opendaylight.controller.yang.model.parser.builder.api.TypeAwareBuilder; 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; /** @@ -48,14 +51,15 @@ import org.opendaylight.controller.yang.model.parser.util.YangParseException; * otherwise result may not be valid. */ public class ModuleBuilder implements Builder { - private final ModuleImpl instance; private final String name; + private URI namespace; private String prefix; private Date revision; + private int augmentsResolved; + private final Set imports = new HashSet(); - private Set augmentations; /** * All nodes, that can contain other nodes @@ -78,21 +82,24 @@ 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>(); - public ModuleBuilder(String name) { + public ModuleBuilder(final String name) { this.name = name; instance = new ModuleImpl(name); } - /** * Build new Module object based on this builder. */ @Override public Module build() { + instance.setPrefix(prefix); + instance.setRevision(revision); instance.setImports(imports); + instance.setNamespace(namespace); // TYPEDEFS final Set> typedefs = buildModuleTypedefs(addedTypedefs); @@ -122,6 +129,10 @@ public class ModuleBuilder implements Builder { instance.setNotifications(notifications); // AUGMENTATIONS + final Set augmentations = new HashSet(); + for (AugmentationSchemaBuilder builder : addedAugments) { + augmentations.add(builder.build()); + } instance.setAugmentations(augmentations); // RPCs @@ -138,14 +149,14 @@ public class ModuleBuilder implements Builder { // EXTENSIONS final List extensions = new ArrayList(); - for(ExtensionBuilder b : addedExtensions) { + for (ExtensionBuilder b : addedExtensions) { extensions.add(b.build()); } instance.setExtensionSchemaNodes(extensions); // IDENTITIES final Set identities = new HashSet(); - for(IdentitySchemaNodeBuilder idBuilder : addedIdentities) { + for (IdentitySchemaNodeBuilder idBuilder : addedIdentities) { identities.add(idBuilder.build()); } instance.setIdentities(identities); @@ -153,10 +164,23 @@ public class ModuleBuilder implements Builder { return instance; } - public Builder getNode(List path) { + public Builder getNode(final List path) { return moduleNodes.get(path); } + public Set getChildNodes() { + final Set childNodes = new HashSet(); + for (Map.Entry, DataSchemaNodeBuilder> entry : addedChilds + .entrySet()) { + List path = entry.getKey(); + DataSchemaNodeBuilder child = entry.getValue(); + if (path.size() == 2) { + childNodes.add(child); + } + } + return childNodes; + } + public Map, TypeAwareBuilder> getDirtyNodes() { return dirtyNodes; } @@ -169,10 +193,37 @@ public class ModuleBuilder implements Builder { return addedIdentities; } + public Map, UsesNodeBuilder> getAddedUsesNodes() { + return addedUsesNodes; + } + + public Set getAddedUnknownNodes() { + return addedUnknownNodes; + } + + public Set getModuleTypedefs() { + Set typedefs = new HashSet(); + for (Map.Entry, TypeDefinitionBuilder> entry : addedTypedefs + .entrySet()) { + if (entry.getKey().size() == 2) { + typedefs.add(entry.getValue()); + } + } + return typedefs; + } + public String getName() { return name; } + public URI getNamespace() { + return namespace; + } + + public void setNamespace(final URI namespace) { + this.namespace = namespace; + } + public String getPrefix() { return prefix; } @@ -181,55 +232,53 @@ public class ModuleBuilder implements Builder { return revision; } - public void addDirtyNode(List path) { - List dirtyNodePath = new ArrayList(path); - TypeAwareBuilder nodeBuilder = (TypeAwareBuilder) moduleNodes - .get(dirtyNodePath); - dirtyNodes.put(dirtyNodePath, nodeBuilder); + public int getAugmentsResolved() { + return augmentsResolved; } - public void setNamespace(URI namespace) { - instance.setNamespace(namespace); + public void augmentResolved() { + augmentsResolved++; } - public void setRevision(Date revision) { + public void addDirtyNode(final List path) { + final List dirtyNodePath = new ArrayList(path); + final TypeAwareBuilder nodeBuilder = (TypeAwareBuilder) moduleNodes + .get(dirtyNodePath); + dirtyNodes.put(dirtyNodePath, nodeBuilder); + } + + public void setRevision(final Date revision) { this.revision = revision; - instance.setRevision(revision); } - public void setPrefix(String prefix) { + public void setPrefix(final String prefix) { this.prefix = prefix; - instance.setPrefix(prefix); } - public void setYangVersion(String yangVersion) { + public void setYangVersion(final String yangVersion) { instance.setYangVersion(yangVersion); } - public void setDescription(String description) { + public void setDescription(final String description) { instance.setDescription(description); } - public void setReference(String reference) { + public void setReference(final String reference) { instance.setReference(reference); } - public void setOrganization(String organization) { + public void setOrganization(final String organization) { instance.setOrganization(organization); } - public void setContact(String contact) { + public void setContact(final String contact) { instance.setContact(contact); } - public void setAugmentations(Set augmentations) { - this.augmentations = augmentations; - } - public boolean addModuleImport(final String moduleName, final Date revision, final String prefix) { - ModuleImport moduleImport = createModuleImport(moduleName, revision, - prefix); + final ModuleImport moduleImport = createModuleImport(moduleName, + revision, prefix); return imports.add(moduleImport); } @@ -237,21 +286,21 @@ public class ModuleBuilder implements Builder { return imports; } - public ExtensionBuilder addExtension(QName qname) { - return new ExtensionBuilder(qname); + public ExtensionBuilder addExtension(final QName qname) { + final ExtensionBuilder builder = new ExtensionBuilder(qname); + addedExtensions.add(builder); + return builder; } - public ContainerSchemaNodeBuilder addContainerNode(QName containerName, - List parentPath) { - List pathToNode = new ArrayList(parentPath); - - ContainerSchemaNodeBuilder containerBuilder = new ContainerSchemaNodeBuilder( + public ContainerSchemaNodeBuilder addContainerNode( + final QName containerName, final List parentPath) { + final List pathToNode = new ArrayList(parentPath); + final ContainerSchemaNodeBuilder containerBuilder = new ContainerSchemaNodeBuilder( containerName); - - ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes + final ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes .get(pathToNode); if (parent != null) { - if(parent instanceof AugmentationSchemaBuilder) { + if (parent instanceof AugmentationSchemaBuilder) { containerBuilder.setAugmenting(true); } parent.addChildNode(containerBuilder); @@ -264,16 +313,15 @@ public class ModuleBuilder implements Builder { return containerBuilder; } - public ListSchemaNodeBuilder addListNode(QName listName, - List parentPath) { - List pathToNode = new ArrayList(parentPath); - - ListSchemaNodeBuilder listBuilder = new ListSchemaNodeBuilder(listName); - - ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes + public ListSchemaNodeBuilder addListNode(final QName listName, + final List parentPath) { + final List pathToNode = new ArrayList(parentPath); + final ListSchemaNodeBuilder listBuilder = new ListSchemaNodeBuilder( + listName); + final ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes .get(pathToNode); if (parent != null) { - if(parent instanceof AugmentationSchemaBuilder) { + if (parent instanceof AugmentationSchemaBuilder) { listBuilder.setAugmenting(true); } parent.addChildNode(listBuilder); @@ -286,15 +334,15 @@ public class ModuleBuilder implements Builder { return listBuilder; } - public LeafSchemaNodeBuilder addLeafNode(QName leafName, - List parentPath) { - List pathToNode = new ArrayList(parentPath); - - LeafSchemaNodeBuilder leafBuilder = new LeafSchemaNodeBuilder(leafName); - - ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes.get(pathToNode); + public LeafSchemaNodeBuilder addLeafNode(final QName leafName, + final List parentPath) { + final List pathToNode = new ArrayList(parentPath); + final LeafSchemaNodeBuilder leafBuilder = new LeafSchemaNodeBuilder( + leafName); + final ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes + .get(pathToNode); if (parent != null) { - if(parent instanceof AugmentationSchemaBuilder) { + if (parent instanceof AugmentationSchemaBuilder) { leafBuilder.setAugmenting(true); } parent.addChildNode(leafBuilder); @@ -307,15 +355,15 @@ public class ModuleBuilder implements Builder { return leafBuilder; } - public LeafListSchemaNodeBuilder addLeafListNode(QName leafListName, - List parentPath) { - List pathToNode = new ArrayList(parentPath); - - LeafListSchemaNodeBuilder leafListBuilder = new LeafListSchemaNodeBuilder( + public LeafListSchemaNodeBuilder addLeafListNode(final QName leafListName, + final List parentPath) { + final List pathToNode = new ArrayList(parentPath); + final LeafListSchemaNodeBuilder leafListBuilder = new LeafListSchemaNodeBuilder( leafListName); - ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes.get(pathToNode); + final ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes + .get(pathToNode); if (parent != null) { - if(parent instanceof AugmentationSchemaBuilder) { + if (parent instanceof AugmentationSchemaBuilder) { leafListBuilder.setAugmenting(true); } parent.addChildNode(leafListBuilder); @@ -328,15 +376,17 @@ public class ModuleBuilder implements Builder { return leafListBuilder; } - public GroupingBuilder addGrouping(QName qname, List parentPath) { - List pathToGroup = new ArrayList(parentPath); - - GroupingBuilder builder = new GroupingBuilderImpl(qname); - ChildNodeBuilder parentNodeBuilder = (ChildNodeBuilder) moduleNodes.get(pathToGroup); + public GroupingBuilder addGrouping(final QName qname, + final List parentPath) { + final List pathToGroup = new ArrayList(parentPath); + final GroupingBuilder builder = new GroupingBuilderImpl(qname); + final ChildNodeBuilder parentNodeBuilder = (ChildNodeBuilder) moduleNodes + .get(pathToGroup); if (parentNodeBuilder != null) { parentNodeBuilder.addGrouping(builder); } + pathToGroup.add("grouping"); pathToGroup.add(qname.getLocalName()); moduleNodes.put(pathToGroup, builder); addedGroupings.put(pathToGroup, builder); @@ -344,14 +394,14 @@ public class ModuleBuilder implements Builder { return builder; } - public AugmentationSchemaBuilder addAugment(String name, - List parentPath) { - List pathToAugment = new ArrayList(parentPath); - - AugmentationSchemaBuilder builder = new AugmentationSchemaBuilderImpl(name); + public AugmentationSchemaBuilder addAugment(final String name, + final List parentPath) { + final List pathToAugment = new ArrayList(parentPath); + final AugmentationSchemaBuilder builder = new AugmentationSchemaBuilderImpl( + name); // augment can only be in 'module' or 'uses' statement - UsesNodeBuilder parent = addedUsesNodes.get(pathToAugment); + final UsesNodeBuilder parent = addedUsesNodes.get(pathToAugment); if (parent != null) { parent.addAugment(builder); } @@ -363,43 +413,59 @@ public class ModuleBuilder implements Builder { return builder; } - public UsesNodeBuilder addUsesNode(String groupingPathStr, - List parentPath) { - List pathToUses = new ArrayList(parentPath); - - UsesNodeBuilder usesBuilder = new UsesNodeBuilderImpl(groupingPathStr); - - ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes.get(pathToUses); + public UsesNodeBuilder addUsesNode(final String groupingPathStr, + final List parentPath) { + final List pathToUses = new ArrayList(parentPath); + final UsesNodeBuilder usesBuilder = new UsesNodeBuilderImpl( + groupingPathStr); + final ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes + .get(pathToUses); if (parent != null) { parent.addUsesNode(usesBuilder); } pathToUses.add(groupingPathStr); addedUsesNodes.put(pathToUses, usesBuilder); - + moduleNodes.put(pathToUses, usesBuilder); return usesBuilder; } - public RpcDefinitionBuilder addRpc(QName qname, List parentPath) { - List pathToRpc = new ArrayList(parentPath); + public void addRefine(final RefineHolder refine, + final List 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(inputQName); - List pathToInput = new ArrayList(pathToRpc); + final QName inputQName = new QName(qname.getNamespace(), + qname.getRevision(), qname.getPrefix(), "input"); + final ContainerSchemaNodeBuilder inputBuilder = new ContainerSchemaNodeBuilder( + inputQName); + 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(outputQName); - List pathToOutput = new ArrayList(pathToRpc); + final ContainerSchemaNodeBuilder outputBuilder = new ContainerSchemaNodeBuilder( + outputQName); + final List pathToOutput = new ArrayList(pathToRpc); pathToOutput.add("output"); moduleNodes.put(pathToOutput, outputBuilder); rpcBuilder.setOutput(outputBuilder); @@ -407,12 +473,12 @@ public class ModuleBuilder implements Builder { return rpcBuilder; } - public NotificationBuilder addNotification(QName notificationName, - List parentPath) { - List pathToNotification = new ArrayList(parentPath); + public NotificationBuilder addNotification(final QName notificationName, + final List parentPath) { + final List pathToNotification = new ArrayList( + parentPath); - NotificationBuilder builder = new NotificationBuilder( - notificationName); + NotificationBuilder builder = new NotificationBuilder(notificationName); pathToNotification.add(notificationName.getLocalName()); moduleNodes.put(pathToNotification, builder); @@ -421,7 +487,8 @@ public class ModuleBuilder implements Builder { return builder; } - public FeatureBuilder addFeature(QName featureName, List parentPath) { + public FeatureBuilder addFeature(final QName featureName, + final List parentPath) { List pathToFeature = new ArrayList(parentPath); pathToFeature.add(featureName.getLocalName()); @@ -430,10 +497,75 @@ public class ModuleBuilder implements Builder { return builder; } - public TypedefBuilder addTypedef(QName typeDefName, List parentPath) { + public ChoiceBuilder addChoice(final QName choiceName, + final List parentPath) { + List pathToChoice = new ArrayList(parentPath); + ChoiceBuilder builder = new ChoiceBuilder(choiceName); + + final ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes + .get(pathToChoice); + if (parent != null) { + if (parent instanceof AugmentationSchemaBuilder) { + builder.setAugmenting(true); + } + parent.addChildNode(builder); + } + + pathToChoice.add(choiceName.getLocalName()); + addedChilds.put(pathToChoice, builder); + moduleNodes.put(pathToChoice, builder); + + return builder; + } + + public ChoiceCaseBuilder addCase(final QName caseName, + final List parentPath) { + List pathToCase = new ArrayList(parentPath); + ChoiceCaseBuilder builder = new ChoiceCaseBuilder(caseName); + + final ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes + .get(pathToCase); + if (parent != null) { + if (parent instanceof AugmentationSchemaBuilder) { + builder.setAugmenting(true); + } + parent.addChildNode(builder); + } + + pathToCase.add(caseName.getLocalName()); + moduleNodes.put(pathToCase, builder); + + return builder; + } + + public AnyXmlBuilder addAnyXml(final QName anyXmlName, + final List parentPath) { + List pathToAnyXml = new ArrayList(parentPath); + AnyXmlBuilder builder = new AnyXmlBuilder(anyXmlName); + + final ChildNodeBuilder parent = (ChildNodeBuilder) moduleNodes + .get(pathToAnyXml); + if (parent != null) { + if (parent instanceof AugmentationSchemaBuilder) { + throw new UnsupportedOperationException( + "An anyxml node cannot be augmented."); + } + parent.addChildNode(builder); + } + + pathToAnyXml.add(anyXmlName.getLocalName()); + addedChilds.put(pathToAnyXml, builder); + moduleNodes.put(pathToAnyXml, builder); + + return builder; + } + + public TypedefBuilder addTypedef(final QName typeDefName, + final List parentPath) { List pathToType = new ArrayList(parentPath); TypedefBuilder builder = new TypedefBuilder(typeDefName); - TypeDefinitionAwareBuilder parent = (TypeDefinitionAwareBuilder) moduleNodes.get(pathToType); + TypeDefinitionAwareBuilder parent = (TypeDefinitionAwareBuilder) moduleNodes + .get(pathToType); if (parent != null) { parent.addTypedef(builder); } @@ -443,63 +575,88 @@ public class ModuleBuilder implements Builder { return builder; } - public Set getModuleTypedefs() { - Set typedefs = new HashSet(); - for (Map.Entry, TypeDefinitionBuilder> entry : addedTypedefs.entrySet()) { - if (entry.getKey().size() == 2) { - typedefs.add(entry.getValue()); - } - } - return typedefs; - } - public void setType(TypeDefinition type, List parentPath) { - TypeAwareBuilder parent = (TypeAwareBuilder) moduleNodes.get(parentPath); - if(parent == null) { - throw new YangParseException("Failed to set type '"+ type.getQName().getLocalName() +"'. Parent node not found."); + TypeAwareBuilder parent = (TypeAwareBuilder) moduleNodes + .get(parentPath); + if (parent == null) { + throw new YangParseException("Failed to set type '" + + type.getQName().getLocalName() + + "'. Parent node not found."); } parent.setType(type); } - public void addUnionType(List parentPath) { - TypeAwareBuilder parent = (TypeAwareBuilder) moduleNodes.get(parentPath); - UnionTypeBuilder union = new UnionTypeBuilder(); + public void addUnionType(final List actualPath, + final URI namespace, final Date revision) { + List pathToUnion = new ArrayList(actualPath); + TypeAwareBuilder parent = (TypeAwareBuilder) moduleNodes + .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 DeviationBuilder addDeviation(String targetPath) { + 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, schemaPath); + parent.setType(identityref); + dirtyNodes.put(pathToIdentityref, parent); + } + + public DeviationBuilder addDeviation(String targetPath, + List parentPath) { + final List pathToDeviation = new ArrayList(parentPath); + pathToDeviation.add(targetPath); DeviationBuilder builder = new DeviationBuilder(targetPath); addedDeviations.put(targetPath, builder); + moduleNodes.put(pathToDeviation, builder); return builder; } - public IdentitySchemaNodeBuilder addIdentity(QName qname) { + public IdentitySchemaNodeBuilder addIdentity(QName qname, + List parentPath) { + List pathToIdentity = new ArrayList(parentPath); IdentitySchemaNodeBuilder builder = new IdentitySchemaNodeBuilder(qname); + pathToIdentity.add(qname.getLocalName()); + moduleNodes.put(pathToIdentity, builder); addedIdentities.add(builder); return builder; } public void addConfiguration(boolean configuration, List parentPath) { Builder builder = moduleNodes.get(parentPath); - if (builder instanceof DeviationBuilder) { - // skip - // TODO - } else { - DataSchemaNodeBuilder configBuilder = (DataSchemaNodeBuilder) moduleNodes.get(parentPath); + // current api did not support adding config to deviate + if (!(builder instanceof DeviationBuilder)) { + DataSchemaNodeBuilder configBuilder = (DataSchemaNodeBuilder) moduleNodes + .get(parentPath); configBuilder.setConfiguration(configuration); } } - public UnknownSchemaNodeBuilder addUnknownSchemaNode(QName qname, List parentPath) { - return new UnknownSchemaNodeBuilder(qname); + public UnknownSchemaNodeBuilder addUnknownSchemaNode(QName qname, + List parentPath) { + final List pathToUnknown = new ArrayList(parentPath); + final UnknownSchemaNodeBuilder builder = new UnknownSchemaNodeBuilder( + qname); + final Builder parent = moduleNodes.get(pathToUnknown); + if (parent instanceof RefineHolder) { + ((RefineHolder) parent).addUnknownSchemaNode(builder); + } else if (parent instanceof SchemaNodeBuilder) { + ((SchemaNodeBuilder) parent).addUnknownSchemaNode(builder); + } + addedUnknownNodes.add(builder); + return builder; } - private class ModuleImpl implements Module { private URI namespace; private final String name; @@ -513,14 +670,16 @@ public class ModuleBuilder implements Builder { private Set imports = Collections.emptySet(); private Set features = Collections.emptySet(); private Set> typeDefinitions = Collections.emptySet(); - private Set notifications = Collections.emptySet(); + private Set notifications = Collections + .emptySet(); private Set augmentations = Collections.emptySet(); private Set rpcs = Collections.emptySet(); private Set deviations = Collections.emptySet(); private Map childNodes = Collections.emptyMap(); private Set groupings = Collections.emptySet(); private Set uses = Collections.emptySet(); - private List extensionNodes = Collections.emptyList(); + private List extensionNodes = Collections + .emptyList(); private Set identities = Collections.emptySet(); private ModuleImpl(String name) { @@ -610,7 +769,7 @@ public class ModuleBuilder implements Builder { } private void setImports(Set imports) { - if(imports != null) { + if (imports != null) { this.imports = imports; } } @@ -621,7 +780,7 @@ public class ModuleBuilder implements Builder { } private void setFeatures(Set features) { - if(features != null) { + if (features != null) { this.features = features; } } @@ -632,7 +791,7 @@ public class ModuleBuilder implements Builder { } private void setTypeDefinitions(Set> typeDefinitions) { - if(typeDefinitions != null) { + if (typeDefinitions != null) { this.typeDefinitions = typeDefinitions; } } @@ -643,7 +802,7 @@ public class ModuleBuilder implements Builder { } private void setNotifications(Set notifications) { - if(notifications != null) { + if (notifications != null) { this.notifications = notifications; } } @@ -654,7 +813,7 @@ public class ModuleBuilder implements Builder { } private void setAugmentations(Set augmentations) { - if(augmentations != null) { + if (augmentations != null) { this.augmentations = augmentations; } } @@ -665,7 +824,7 @@ public class ModuleBuilder implements Builder { } private void setRpcs(Set rpcs) { - if(rpcs != null) { + if (rpcs != null) { this.rpcs = rpcs; } } @@ -676,7 +835,7 @@ public class ModuleBuilder implements Builder { } private void setDeviations(Set deviations) { - if(deviations != null) { + if (deviations != null) { this.deviations = deviations; } } @@ -687,7 +846,7 @@ public class ModuleBuilder implements Builder { } private void setChildNodes(Map childNodes) { - if(childNodes != null) { + if (childNodes != null) { this.childNodes = childNodes; } } @@ -698,7 +857,7 @@ public class ModuleBuilder implements Builder { } private void setGroupings(Set groupings) { - if(groupings != null) { + if (groupings != null) { this.groupings = groupings; } } @@ -709,7 +868,7 @@ public class ModuleBuilder implements Builder { } private void setUses(Set uses) { - if(uses != null) { + if (uses != null) { this.uses = uses; } } @@ -719,9 +878,10 @@ public class ModuleBuilder implements Builder { return extensionNodes; } - private void setExtensionSchemaNodes(List extensionSchemaNodes) { - if(extensionSchemaNodes != null) { - this.extensionNodes = extensionSchemaNodes; + private void setExtensionSchemaNodes( + List extensionNodes) { + if (extensionNodes != null) { + this.extensionNodes = extensionNodes; } } @@ -731,7 +891,7 @@ public class ModuleBuilder implements Builder { } private void setIdentities(Set identities) { - if(identities != null) { + if (identities != null) { this.identities = identities; } } @@ -757,11 +917,15 @@ public class ModuleBuilder implements Builder { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((namespace == null) ? 0 : namespace.hashCode()); + result = prime * result + + ((namespace == null) ? 0 : namespace.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); - result = prime * result + ((revision == null) ? 0 : revision.hashCode()); - result = prime * result + ((prefix == null) ? 0 : prefix.hashCode()); - result = prime * result + ((yangVersion == null) ? 0 : yangVersion.hashCode()); + result = prime * result + + ((revision == null) ? 0 : revision.hashCode()); + result = prime * result + + ((prefix == null) ? 0 : prefix.hashCode()); + result = prime * result + + ((yangVersion == null) ? 0 : yangVersion.hashCode()); return result; } @@ -931,7 +1095,8 @@ public class ModuleBuilder implements Builder { private Map buildModuleChildNodes( Map, DataSchemaNodeBuilder> addedChilds) { final Map childNodes = new HashMap(); - for (Map.Entry, DataSchemaNodeBuilder> entry : addedChilds.entrySet()) { + for (Map.Entry, DataSchemaNodeBuilder> entry : addedChilds + .entrySet()) { List path = entry.getKey(); DataSchemaNodeBuilder child = entry.getValue(); if (path.size() == 2) { @@ -993,11 +1158,13 @@ public class ModuleBuilder implements Builder { private Set> buildModuleTypedefs( Map, TypeDefinitionBuilder> addedTypedefs) { Set> typedefs = new HashSet>(); - for (Map.Entry, TypeDefinitionBuilder> entry : addedTypedefs.entrySet()) { + for (Map.Entry, TypeDefinitionBuilder> entry : addedTypedefs + .entrySet()) { List key = entry.getKey(); TypeDefinitionBuilder typedefBuilder = entry.getValue(); if (key.size() == 2) { - TypeDefinition> node = typedefBuilder.build(); + TypeDefinition> node = typedefBuilder + .build(); typedefs.add(node); } } @@ -1014,14 +1181,14 @@ public class ModuleBuilder implements Builder { */ private Set buildUsesNodes( Map, UsesNodeBuilder> addedUsesNodes) { - final Set usesNodeDefinitions = new HashSet(); + final Set usesNodeDefs = new HashSet(); for (Map.Entry, UsesNodeBuilder> entry : addedUsesNodes .entrySet()) { if (entry.getKey().size() == 2) { - usesNodeDefinitions.add(entry.getValue().build()); + usesNodeDefs.add(entry.getValue().build()); } } - return usesNodeDefinitions; + return usesNodeDefs; } /**