X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fbuilder%2Fimpl%2FModuleBuilder.java;h=e8716365d4adf6a88d16734074d1cd5055507ae2;hb=c2bbf5ea78b943a43f7ca1e2f802e8fd82119335;hp=36ff7bfe6afae2ee856145a11f892b2d8e8f6764;hpb=40541e307e2dcb438a9fd5aea2b624407cd8caf9;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java index 36ff7bfe6a..e8716365d4 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java @@ -8,11 +8,43 @@ package org.opendaylight.yangtools.yang.parser.builder.impl; import java.net.URI; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.Deque; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.*; -import org.opendaylight.yangtools.yang.parser.builder.api.*; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.Deviation; +import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition; +import org.opendaylight.yangtools.yang.model.api.FeatureDefinition; +import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; +import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; +import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.ModuleImport; +import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; +import org.opendaylight.yangtools.yang.model.api.RpcDefinition; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.UsesNode; +import org.opendaylight.yangtools.yang.parser.builder.api.AbstractDataNodeContainerBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.Builder; +import org.opendaylight.yangtools.yang.parser.builder.api.DataNodeContainerBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.GroupingBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.TypeAwareBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.UsesNodeBuilder; import org.opendaylight.yangtools.yang.parser.util.Comparators; import org.opendaylight.yangtools.yang.parser.util.ModuleImportImpl; import org.opendaylight.yangtools.yang.parser.util.RefineHolder; @@ -27,6 +59,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { private final ModuleImpl instance; private final String name; + private final String sourcePath; private final SchemaPath schemaPath; private URI namespace; private String prefix; @@ -36,11 +69,12 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { private String belongsTo; private ModuleBuilder parent; - public ModuleBuilder getParent() { + @Override + public ModuleBuilder getParent() { return parent; } - public void setParent(ModuleBuilder parent) { + public void setParent(final ModuleBuilder parent) { this.parent = parent; } @@ -49,7 +83,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { private final Set imports = new HashSet(); - private final Set augments = new HashSet<>(); + private final Set augments = new LinkedHashSet<>(); private final List augmentBuilders = new ArrayList<>(); private final List allAugments = new ArrayList<>(); @@ -77,27 +111,33 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { private final List allUnknownNodes = new ArrayList(); - public ModuleBuilder(final String name) { - this(name, false); + private final List allLists = new ArrayList(); + + private String source; + + public ModuleBuilder(final String name, final String sourcePath) { + this(name, false, sourcePath); } - public ModuleBuilder(final String name, final boolean submodule) { + public ModuleBuilder(final String name, final boolean submodule, final String sourcePath) { super(name, 0, null); this.name = name; - schemaPath = new SchemaPath(Collections. emptyList(), true); - instance = new ModuleImpl(name); + this.sourcePath = sourcePath; + schemaPath = SchemaPath.create(Collections. emptyList(), true); this.submodule = submodule; + instance = new ModuleImpl(name, sourcePath); actualPath.push(this); } - public ModuleBuilder(Module base) { + public ModuleBuilder(final Module base) { super(base.getName(), 0, null); this.name = base.getName(); - schemaPath = new SchemaPath(Collections. emptyList(), true); - instance = new ModuleImpl(base.getName()); + this.sourcePath = base.getModuleSourcePath(); + schemaPath = SchemaPath.create(Collections. emptyList(), true); submodule = false; + instance = new ModuleImpl(base.getName(), base.getModuleSourcePath()); + instance.setYangVersion(base.getYangVersion()); actualPath.push(this); - namespace = base.getNamespace(); prefix = base.getPrefix(); revision = base.getRevision(); @@ -112,7 +152,11 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { augments.addAll(base.getAugmentations()); rpcs.addAll(base.getRpcs()); notifications.addAll(base.getNotifications()); - identities.addAll(base.getIdentities()); + + for (IdentitySchemaNode identityNode : base.getIdentities()) { + addedIdentities.add(new IdentitySchemaNodeBuilder(name, identityNode)); + } + features.addAll(base.getFeatures()); deviations.addAll(base.getDeviations()); extensions.addAll(base.getExtensionSchemaNodes()); @@ -203,11 +247,17 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP); instance.setUnknownSchemaNodes(unknownNodes); + instance.setSource(source); + return instance; } + public String getModuleSourcePath() { + return sourcePath; + } + @Override - public void setParent(Builder parent) { + public void setParent(final Builder parent) { throw new YangParseException(name, 0, "Can not set parent to module"); } @@ -237,17 +287,6 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { } } - public Builder getActualParent() { - if (actualPath.size() < 2) { - return null; - } else { - Builder builderChild = actualPath.removeFirst(); - Builder builderParent = actualPath.peekFirst(); - actualPath.addFirst(builderChild); - return builderParent; - } - } - public Set getDirtyNodes() { return dirtyNodes; } @@ -308,6 +347,10 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return allUnknownNodes; } + public List getAllLists() { + return allLists; + } + public String getName() { return name; } @@ -336,7 +379,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return belongsTo; } - public void setBelongsTo(String belongsTo) { + public void setBelongsTo(final String belongsTo) { this.belongsTo = belongsTo; } @@ -416,6 +459,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { Builder parent = getActualNode(); builder.setParent(parent); addChildToParent(parent, builder, qname.getLocalName()); + allLists.add(builder); return builder; } @@ -480,8 +524,8 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return builder; } - public AugmentationSchemaBuilder addAugment(final int line, final String augmentTargetStr) { - final AugmentationSchemaBuilder builder = new AugmentationSchemaBuilderImpl(name, line, augmentTargetStr); + public AugmentationSchemaBuilder addAugment(final int line, final String augmentTargetStr, final int order) { + final AugmentationSchemaBuilder builder = new AugmentationSchemaBuilderImpl(name, line, augmentTargetStr, order); Builder parent = getActualNode(); builder.setParent(parent); @@ -514,7 +558,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { } @Override - public void addUsesNode(UsesNodeBuilder usesBuilder) { + public void addUsesNode(final UsesNodeBuilder usesBuilder) { addedUsesNodes.add(usesBuilder); allUsesNodes.add(usesBuilder); } @@ -607,7 +651,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return outputBuilder; } - public void addNotification(NotificationDefinition notification) { + public void addNotification(final NotificationDefinition notification) { notifications.add(notification); } @@ -701,7 +745,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { } @Override - public void addTypedef(TypeDefinitionBuilder typedefBuilder) { + public void addTypedef(final TypeDefinitionBuilder typedefBuilder) { String nodeName = typedefBuilder.getQName().getLocalName(); for (TypeDefinitionBuilder tdb : addedTypedefs) { if (tdb.getQName().getLocalName().equals(nodeName)) { @@ -872,9 +916,14 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return "module " + name; } - private final class ModuleImpl implements Module { + public void setSource(final String source) { + this.source = source; + } + + public static final class ModuleImpl implements Module { private URI namespace; private final String name; + private final String sourcePath; private Date revision; private String prefix; private String yangVersion; @@ -895,9 +944,16 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { private final List extensionNodes = new ArrayList<>(); private final Set identities = new TreeSet<>(Comparators.SCHEMA_NODE_COMP); private final List unknownNodes = new ArrayList<>(); + private String source; - private ModuleImpl(String name) { + private ModuleImpl(final String name, final String sourcePath) { this.name = name; + this.sourcePath = sourcePath; + } + + @Override + public String getModuleSourcePath() { + return sourcePath; } @Override @@ -905,7 +961,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return namespace; } - private void setNamespace(URI namespace) { + private void setNamespace(final URI namespace) { this.namespace = namespace; } @@ -919,7 +975,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return revision; } - private void setRevision(Date revision) { + private void setRevision(final Date revision) { this.revision = revision; } @@ -928,7 +984,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return prefix; } - private void setPrefix(String prefix) { + private void setPrefix(final String prefix) { this.prefix = prefix; } @@ -937,7 +993,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return yangVersion; } - private void setYangVersion(String yangVersion) { + private void setYangVersion(final String yangVersion) { this.yangVersion = yangVersion; } @@ -946,7 +1002,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return description; } - private void setDescription(String description) { + private void setDescription(final String description) { this.description = description; } @@ -955,7 +1011,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return reference; } - private void setReference(String reference) { + private void setReference(final String reference) { this.reference = reference; } @@ -964,7 +1020,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return organization; } - private void setOrganization(String organization) { + private void setOrganization(final String organization) { this.organization = organization; } @@ -973,7 +1029,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return contact; } - private void setContact(String contact) { + private void setContact(final String contact) { this.contact = contact; } @@ -982,7 +1038,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return imports; } - private void setImports(Set imports) { + private void setImports(final Set imports) { if (imports != null) { this.imports.addAll(imports); } @@ -993,7 +1049,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return features; } - private void setFeatures(Set features) { + private void setFeatures(final Set features) { if (features != null) { this.features.addAll(features); } @@ -1004,7 +1060,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return typeDefinitions; } - private void setTypeDefinitions(Set> typeDefinitions) { + private void setTypeDefinitions(final Set> typeDefinitions) { if (typeDefinitions != null) { this.typeDefinitions.addAll(typeDefinitions); } @@ -1015,7 +1071,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return notifications; } - private void setNotifications(Set notifications) { + private void setNotifications(final Set notifications) { if (notifications != null) { this.notifications.addAll(notifications); } @@ -1026,7 +1082,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return augmentations; } - private void setAugmentations(Set augmentations) { + private void setAugmentations(final Set augmentations) { if (augmentations != null) { this.augmentations.addAll(augmentations); } @@ -1037,7 +1093,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return rpcs; } - private void setRpcs(Set rpcs) { + private void setRpcs(final Set rpcs) { if (rpcs != null) { this.rpcs.addAll(rpcs); } @@ -1048,7 +1104,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return deviations; } - private void setDeviations(Set deviations) { + private void setDeviations(final Set deviations) { if (deviations != null) { this.deviations.addAll(deviations); } @@ -1059,7 +1115,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return Collections.unmodifiableSet(childNodes); } - private void addChildNodes(Set childNodes) { + private void addChildNodes(final Set childNodes) { if (childNodes != null) { this.childNodes.addAll(childNodes); } @@ -1070,7 +1126,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return groupings; } - private void setGroupings(Set groupings) { + private void setGroupings(final Set groupings) { if (groupings != null) { this.groupings.addAll(groupings); } @@ -1081,7 +1137,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return uses; } - private void setUses(Set uses) { + private void setUses(final Set uses) { if (uses != null) { this.uses.addAll(uses); } @@ -1122,15 +1178,23 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { } @Override - public DataSchemaNode getDataChildByName(QName name) { + public DataSchemaNode getDataChildByName(final QName name) { return getChildNode(childNodes, name); } @Override - public DataSchemaNode getDataChildByName(String name) { + public DataSchemaNode getDataChildByName(final String name) { return getChildNode(childNodes, name); } + void setSource(final String source){ + this.source = source; + } + + public String getSource() { + return source; + } + @Override public int hashCode() { final int prime = 31; @@ -1138,13 +1202,12 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { 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()); return result; } @Override - public boolean equals(Object obj) { + public boolean equals(final Object obj) { if (this == obj) { return true; } @@ -1176,13 +1239,6 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { } else if (!revision.equals(other.revision)) { return false; } - if (prefix == null) { - if (other.prefix != null) { - return false; - } - } else if (!prefix.equals(other.prefix)) { - return false; - } if (yangVersion == null) { if (other.yangVersion != null) { return false; @@ -1340,7 +1396,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { } @Override - public boolean equals(Object obj) { + public boolean equals(final Object obj) { if (this == obj) { return true; } @@ -1382,4 +1438,5 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder { return true; } + }