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=c97eb14ebefd889e560a9afd96f43b01e65aaa89;hb=9a591c38809720f0edc438f1f6bab857d1bef9a2;hp=dd82fbef442f9c1994adcec94d5ce7e02d3bc755;hpb=6f0eeb681698cb64eadd97ff88f92d0b31b545a1;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 dd82fbef44..c97eb14ebe 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 @@ -7,10 +7,7 @@ */ package org.opendaylight.yangtools.yang.parser.builder.impl; -import java.net.URI; import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; import java.util.List; import java.util.Set; @@ -18,36 +15,34 @@ import org.opendaylight.yangtools.yang.common.QName; 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.DerivableSchemaNode; 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.ConstraintsBuilder; import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder; +import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder; 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.ParserUtils; +import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder; +import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainer; +import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainerBuilder; import org.opendaylight.yangtools.yang.parser.util.YangParseException; +import com.google.common.base.Optional; 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 { +public final class ChoiceCaseBuilder extends AbstractDocumentedDataNodeContainerBuilder implements DataSchemaNodeBuilder, +AugmentationTargetBuilder { 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 ChoiceCaseNode originalNode; + private ChoiceCaseBuilder originalBuilder; private boolean addedByUses; private final ConstraintsBuilder constraints; // AugmentationTarget args @@ -56,32 +51,22 @@ 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; - constraints = new ConstraintsBuilder(moduleName, line); + this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null"); + constraints = new ConstraintsBuilderImpl(moduleName, line); } public ChoiceCaseBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path, final ChoiceCaseNode base) { - super(moduleName, line, qname); + super(moduleName, line, qname, Preconditions.checkNotNull(path, "Schema Path must not be null"), base); this.schemaPath = path; - constraints = new ConstraintsBuilder(moduleName, line, base.getConstraints()); + constraints = new ConstraintsBuilderImpl(moduleName, line, base.getConstraints()); - 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)); - + originalNode = base; + addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path, + qname)); augmentations.addAll(base.getAvailableAugmentations()); - usesNodes.addAll(base.getUses()); } @Override @@ -89,28 +74,19 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im if (instance != null) { return instance; } + buildChildren(); + instance = new ChoiceCaseNodeImpl(qname, schemaPath,this); - instance = new ChoiceCaseNodeImpl(qname, schemaPath); - - instance.description = description; - instance.reference = reference; - instance.status = status; instance.augmenting = augmenting; instance.addedByUses = addedByUses; - instance.constraints = constraints.build(); - - // CHILD NODES - for (DataSchemaNodeBuilder node : addedChildNodes) { - childNodes.add(node.build()); - } - instance.childNodes = ImmutableSet.copyOf(childNodes); + instance.constraints = constraints.toInstance(); - // USES - for (UsesNodeBuilder builder : addedUsesNodes) { - usesNodes.add(builder.build()); + // ORIGINAL NODE + if (originalNode == null && originalBuilder != null) { + originalNode = originalBuilder.build(); } - instance.uses = ImmutableSet.copyOf(usesNodes); + instance.original = originalNode; // UNKNOWN NODES for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { @@ -136,37 +112,6 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im public void setPath(final SchemaPath path) { this.schemaPath = path; } - - @Override - public String getDescription() { - return description; - } - - @Override - public void setDescription(final String description) { - this.description = description; - } - - @Override - public String getReference() { - return reference; - } - - @Override - public void setReference(final String reference) { - this.reference = reference; - } - - @Override - public Status getStatus() { - return status; - } - - @Override - public void setStatus(Status status) { - this.status = Preconditions.checkNotNull(status, "status cannot be null"); - } - @Override public boolean isAugmenting() { return augmenting; @@ -188,13 +133,19 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im } @Override - public Set getTypeDefinitionBuilders() { - return Collections.emptySet(); + public ChoiceCaseBuilder getOriginal() { + return originalBuilder; + } + + @Override + public void setOriginal(final SchemaNodeBuilder builder) { + Preconditions.checkArgument(builder instanceof ChoiceCaseBuilder, "Original of case cannot be " + builder); + this.originalBuilder = (ChoiceCaseBuilder) builder; } @Override public void addTypedef(final TypeDefinitionBuilder typedefBuilder) { - throw new YangParseException(moduleName, line, "Can not add type definition to choice case."); + throw new YangParseException(getModuleName(), typedefBuilder.getLine(), "Can not add type definition to choice case."); } @Override @@ -204,7 +155,7 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im @Override public void setConfiguration(final boolean configuration) { - throw new YangParseException(moduleName, line, "Can not add config statement to choice case."); + throw new YangParseException(getModuleName(), getLine(), "Can not add config statement to choice case."); } @Override @@ -244,11 +195,11 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im } else if (!schemaPath.equals(other.schemaPath)) { return false; } - if (parentBuilder == null) { - if (other.parentBuilder != null) { + if (getParent() == null) { + if (other.getParent() != null) { return false; } - } else if (!parentBuilder.equals(other.parentBuilder)) { + } else if (!getParent().equals(other.getParent())) { return false; } return true; @@ -259,21 +210,23 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im return "case " + getQName().getLocalName(); } - private static final class ChoiceCaseNodeImpl implements ChoiceCaseNode { + @Override + protected String getStatementName() { + return "choice"; + } + + private static final class ChoiceCaseNodeImpl extends AbstractDocumentedDataNodeContainer implements ChoiceCaseNode, DerivableSchemaNode { private final QName qname; private final SchemaPath path; - private String description; - private String reference; - private Status status = Status.CURRENT; private boolean augmenting; private boolean addedByUses; + private ChoiceCaseNode original; private ConstraintDefinition constraints; - private ImmutableSet childNodes; private ImmutableSet augmentations; - private ImmutableSet uses; private ImmutableList unknownNodes; - private ChoiceCaseNodeImpl(final QName qname, final SchemaPath path) { + private ChoiceCaseNodeImpl(final QName qname, final SchemaPath path,final ChoiceCaseBuilder builder) { + super(builder); this.qname = qname; this.path = path; } @@ -288,21 +241,6 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im return path; } - @Override - public String getDescription() { - return description; - } - - @Override - public String getReference() { - return reference; - } - - @Override - public Status getStatus() { - return status; - } - @Override public boolean isConfiguration() { return false; @@ -324,42 +262,13 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im } @Override - public List getUnknownSchemaNodes() { - return unknownNodes; - } - - /** - * Always returns an empty set, because case node can not contains type - * definitions. - */ - @Override - public Set> getTypeDefinitions() { - return Collections.emptySet(); + public Optional getOriginal() { + return Optional.fromNullable(original); } @Override - public Set getChildNodes() { - return childNodes; - } - - @Override - public Set getGroupings() { - return Collections.emptySet(); - } - - @Override - public DataSchemaNode getDataChildByName(final QName name) { - return getChildNode(childNodes, name); - } - - @Override - public DataSchemaNode getDataChildByName(final String name) { - return getChildNode(childNodes, name); - } - - @Override - public Set getUses() { - return uses; + public List getUnknownSchemaNodes() { + return unknownNodes; } @Override @@ -414,6 +323,7 @@ public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder im sb.append("]"); return sb.toString(); } + } }