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%2FChoiceCaseBuilder.java;h=dd82fbef442f9c1994adcec94d5ce7e02d3bc755;hb=6f0eeb681698cb64eadd97ff88f92d0b31b545a1;hp=b8fd424805a8ff51ee683c5f57fa3c8cb60a9ae7;hpb=9afdf7db8113ce85705e237d9e4cade1bb087561;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ChoiceCaseBuilder.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ChoiceCaseBuilder.java index b8fd424805..dd82fbef44 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ChoiceCaseBuilder.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ChoiceCaseBuilder.java @@ -11,29 +11,44 @@ import java.net.URI; import java.util.ArrayList; import java.util.Collections; import java.util.Date; -import java.util.HashSet; 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.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; +import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition; +import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.Status; +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.AugmentationTargetBuilder; import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder; 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.ParserUtils; import org.opendaylight.yangtools.yang.parser.util.YangParseException; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; + public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder implements DataSchemaNodeBuilder, AugmentationTargetBuilder { - private boolean isBuilt; - private final ChoiceCaseNodeImpl instance; + private ChoiceCaseNodeImpl instance; // SchemaNode args private SchemaPath schemaPath; + private String description; + private String reference; + private Status status = Status.CURRENT; + // DataSchemaNode args + private boolean augmenting; + private boolean addedByUses; private final ConstraintsBuilder constraints; // AugmentationTarget args private final List augmentations = new ArrayList<>(); @@ -42,128 +57,134 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im public ChoiceCaseBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) { super(moduleName, line, qname); this.schemaPath = path; - instance = new ChoiceCaseNodeImpl(qname, path); constraints = new ConstraintsBuilder(moduleName, line); } - public ChoiceCaseBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path, final ChoiceCaseNode base) { + public ChoiceCaseBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path, + final ChoiceCaseNode base) { super(moduleName, line, qname); this.schemaPath = path; - instance = new ChoiceCaseNodeImpl(qname, path); constraints = new ConstraintsBuilder(moduleName, line, base.getConstraints()); - instance.description = base.getDescription(); - instance.reference = base.getReference(); - instance.status = base.getStatus(); - instance.augmenting = base.isAugmenting(); - instance.addedByUses = base.isAddedByUses(); - instance.constraints = base.getConstraints(); - instance.augmentations.addAll(base.getAvailableAugmentations()); + description = base.getDescription(); + reference = base.getReference(); + status = base.getStatus(); + augmenting = base.isAugmenting(); + addedByUses = base.isAddedByUses(); URI ns = qname.getNamespace(); Date rev = qname.getRevision(); String pref = qname.getPrefix(); addedChildNodes.addAll(ParserUtils.wrapChildNodes(moduleName, line, base.getChildNodes(), path, ns, rev, pref)); addedGroupings.addAll(ParserUtils.wrapGroupings(moduleName, line, base.getGroupings(), path, ns, rev, pref)); + addedUnknownNodes.addAll(ParserUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path, ns, + rev, pref)); - instance.uses.addAll(base.getUses()); - instance.unknownNodes.addAll(base.getUnknownSchemaNodes()); + augmentations.addAll(base.getAvailableAugmentations()); + usesNodes.addAll(base.getUses()); } @Override public ChoiceCaseNode build() { - if (!isBuilt) { - instance.setConstraints(constraints.build()); + if (instance != null) { + return instance; + } - // CHILD NODES - for (DataSchemaNodeBuilder node : addedChildNodes) { - childNodes.add(node.build()); - } - instance.addChildNodes(childNodes); + instance = new ChoiceCaseNodeImpl(qname, schemaPath); - // USES - for (UsesNodeBuilder builder : addedUsesNodes) { - usesNodes.add(builder.build()); - } - instance.addUses(usesNodes); + instance.description = description; + instance.reference = reference; + instance.status = status; + instance.augmenting = augmenting; + instance.addedByUses = addedByUses; - // UNKNOWN NODES - for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { - unknownNodes.add(b.build()); - } - Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP); - instance.addUnknownSchemaNodes(unknownNodes); + instance.constraints = constraints.build(); - // AUGMENTATIONS - for (AugmentationSchemaBuilder builder : augmentationBuilders) { - augmentations.add(builder.build()); - } - instance.addAvailableAugmentations(new HashSet<>(augmentations)); + // CHILD NODES + for (DataSchemaNodeBuilder node : addedChildNodes) { + childNodes.add(node.build()); + } + instance.childNodes = ImmutableSet.copyOf(childNodes); + + // USES + for (UsesNodeBuilder builder : addedUsesNodes) { + usesNodes.add(builder.build()); + } + instance.uses = ImmutableSet.copyOf(usesNodes); + + // UNKNOWN NODES + for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { + unknownNodes.add(b.build()); + } + instance.unknownNodes = ImmutableList.copyOf(unknownNodes); - isBuilt = true; + // AUGMENTATIONS + for (AugmentationSchemaBuilder builder : augmentationBuilders) { + augmentations.add(builder.build()); } + instance.augmentations = ImmutableSet.copyOf(augmentations); return instance; } - @Override public SchemaPath getPath() { - return instance.path; + return schemaPath; } @Override - public void setPath(SchemaPath path) { - instance.path = path; + public void setPath(final SchemaPath path) { + this.schemaPath = path; } + @Override public String getDescription() { - return instance.description; + return description; } @Override public void setDescription(final String description) { - instance.description = description; + this.description = description; } + @Override public String getReference() { - return instance.reference; + return reference; } @Override - public void setReference(String reference) { - instance.reference = reference; + public void setReference(final String reference) { + this.reference = reference; } + @Override public Status getStatus() { - return instance.status; + return status; } @Override public void setStatus(Status status) { - if (status != null) { - instance.status = status; - } + this.status = Preconditions.checkNotNull(status, "status cannot be null"); } @Override public boolean isAugmenting() { - return instance.augmenting; + return augmenting; } @Override - public void setAugmenting(boolean augmenting) { - instance.augmenting = augmenting; + public void setAugmenting(final boolean augmenting) { + this.augmenting = augmenting; } @Override public boolean isAddedByUses() { - return instance.addedByUses; + return addedByUses; } @Override - public void setAddedByUses(boolean addedByUses) { - instance.addedByUses = addedByUses; + public void setAddedByUses(final boolean addedByUses) { + this.addedByUses = addedByUses; } @Override @@ -172,17 +193,17 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im } @Override - public void addTypedef(TypeDefinitionBuilder typedefBuilder) { + public void addTypedef(final TypeDefinitionBuilder typedefBuilder) { throw new YangParseException(moduleName, line, "Can not add type definition to choice case."); } @Override - public Boolean isConfiguration() { + public boolean isConfiguration() { return false; } @Override - public void setConfiguration(final Boolean configuration) { + public void setConfiguration(final boolean configuration) { throw new YangParseException(moduleName, line, "Can not add config statement to choice case."); } @@ -192,7 +213,7 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im } @Override - public void addAugmentation(AugmentationSchemaBuilder augment) { + public void addAugmentation(final AugmentationSchemaBuilder augment) { augmentationBuilders.add(augment); } @@ -205,7 +226,7 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im } @Override - public boolean equals(Object obj) { + public boolean equals(final Object obj) { if (this == obj) { return true; } @@ -238,21 +259,21 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im return "case " + getQName().getLocalName(); } - public final class ChoiceCaseNodeImpl implements ChoiceCaseNode { + private static final class ChoiceCaseNodeImpl implements ChoiceCaseNode { private final QName qname; - private SchemaPath path; + private final SchemaPath path; private String description; private String reference; private Status status = Status.CURRENT; private boolean augmenting; private boolean addedByUses; private ConstraintDefinition constraints; - private final Set childNodes = new TreeSet<>(Comparators.SCHEMA_NODE_COMP); - private final Set augmentations = new HashSet<>(); - private final Set uses = new HashSet<>(); - private final List unknownNodes = new ArrayList<>(); + private ImmutableSet childNodes; + private ImmutableSet augmentations; + private ImmutableSet uses; + private ImmutableList unknownNodes; - private ChoiceCaseNodeImpl(QName qname, SchemaPath path) { + private ChoiceCaseNodeImpl(final QName qname, final SchemaPath path) { this.qname = qname; this.path = path; } @@ -292,10 +313,6 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im return constraints; } - private void setConstraints(ConstraintDefinition constraints) { - this.constraints = constraints; - } - @Override public boolean isAugmenting() { return augmenting; @@ -308,13 +325,7 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im @Override public List getUnknownSchemaNodes() { - return Collections.unmodifiableList(unknownNodes); - } - - private void addUnknownSchemaNodes(List unknownNodes) { - if (unknownNodes != null) { - this.unknownNodes.addAll(unknownNodes); - } + return unknownNodes; } /** @@ -328,13 +339,7 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im @Override public Set getChildNodes() { - return Collections.unmodifiableSet(childNodes); - } - - private void addChildNodes(Set childNodes) { - if (childNodes != null) { - this.childNodes.addAll(childNodes); - } + return childNodes; } @Override @@ -343,35 +348,23 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im } @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); } @Override public Set getUses() { - return Collections.unmodifiableSet(uses); - } - - private void addUses(Set uses) { - if (uses != null) { - this.uses.addAll(uses); - } + return uses; } @Override public Set getAvailableAugmentations() { - return Collections.unmodifiableSet(augmentations); - } - - private void addAvailableAugmentations(Set augmentations) { - if (augmentations != null) { - this.augmentations.addAll(augmentations); - } + return augmentations; } @Override @@ -384,7 +377,7 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im } @Override - public boolean equals(Object obj) { + public boolean equals(final Object obj) { if (this == obj) { return true; }