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%2Fparser%2Fbuilder%2Fimpl%2FChoiceCaseBuilder.java;h=e6c81ab7aa5399b21ac92040ffaa46b69f47b4cb;hb=154b5dde1af41aff2ae0cc6e08400153162a4a3c;hp=11a1b3114c7475d27d9e049600aa788b9d47783e;hpb=d04b927ef78082525c3b0738126b6eb12e4a7a74;p=controller.git diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/ChoiceCaseBuilder.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/ChoiceCaseBuilder.java index 11a1b3114c..e6c81ab7aa 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/ChoiceCaseBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/ChoiceCaseBuilder.java @@ -2,11 +2,11 @@ package org.opendaylight.controller.yang.parser.builder.impl; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.TreeMap; import org.opendaylight.controller.yang.common.QName; import org.opendaylight.controller.yang.model.api.AugmentationSchema; @@ -19,70 +19,88 @@ import org.opendaylight.controller.yang.model.api.Status; import org.opendaylight.controller.yang.model.api.TypeDefinition; import org.opendaylight.controller.yang.model.api.UnknownSchemaNode; import org.opendaylight.controller.yang.model.api.UsesNode; -import org.opendaylight.controller.yang.parser.builder.api.AbstractChildNodeBuilder; +import org.opendaylight.controller.yang.parser.builder.api.AbstractDataNodeContainerBuilder; +import org.opendaylight.controller.yang.parser.builder.api.AugmentationSchemaBuilder; +import org.opendaylight.controller.yang.parser.builder.api.AugmentationTargetBuilder; import org.opendaylight.controller.yang.parser.builder.api.DataSchemaNodeBuilder; import org.opendaylight.controller.yang.parser.builder.api.TypeDefinitionBuilder; import org.opendaylight.controller.yang.parser.builder.api.UsesNodeBuilder; +import org.opendaylight.controller.yang.parser.util.Comparators; import org.opendaylight.controller.yang.parser.util.YangParseException; -public final class ChoiceCaseBuilder extends AbstractChildNodeBuilder implements - DataSchemaNodeBuilder { +public final class ChoiceCaseBuilder extends AbstractDataNodeContainerBuilder implements DataSchemaNodeBuilder, + AugmentationTargetBuilder { + private boolean isBuilt; private final ChoiceCaseNodeImpl instance; - private final int line; + // SchemaNode args private SchemaPath schemaPath; private String description; private String reference; private Status status = Status.CURRENT; private final List addedUnknownNodes = new ArrayList(); + // DataSchemaNode args private boolean augmenting; private final ConstraintsBuilder constraints; + // DataNodeContainer args private final Set addedUsesNodes = new HashSet(); - private final Set augmentations = new HashSet(); + // AugmentationTarget args + private final Set addedAugmentations = new HashSet(); - ChoiceCaseBuilder(final QName qname, final int line) { - super(qname); - this.line = line; + ChoiceCaseBuilder(final int line, final QName qname) { + super(line, qname); instance = new ChoiceCaseNodeImpl(qname); constraints = new ConstraintsBuilder(line); } @Override public ChoiceCaseNode build() { - instance.setConstraints(constraints.build()); - instance.setPath(schemaPath); - instance.setDescription(description); - instance.setReference(reference); - instance.setStatus(status); - instance.setAugmenting(augmenting); - instance.setAvailableAugmentations(augmentations); + if (!isBuilt) { + instance.setConstraints(constraints.build()); + instance.setPath(schemaPath); + instance.setDescription(description); + instance.setReference(reference); + instance.setStatus(status); + instance.setAugmenting(augmenting); + + // CHILD NODES + final Map childs = new TreeMap(Comparators.QNAME_COMP); + for (DataSchemaNodeBuilder node : addedChildNodes) { + childs.put(node.getQName(), node.build()); + } + instance.setChildNodes(childs); - // CHILD NODES - final Map childs = new HashMap(); - for (DataSchemaNodeBuilder node : childNodes) { - childs.put(node.getQName(), node.build()); - } - instance.setChildNodes(childs); + // USES + final Set uses = new HashSet(); + for (UsesNodeBuilder builder : addedUsesNodes) { + uses.add(builder.build()); + } + instance.setUses(uses); - // USES - final Set uses = new HashSet(); - for (UsesNodeBuilder builder : addedUsesNodes) { - uses.add(builder.build()); - } - instance.setUses(uses); + // UNKNOWN NODES + final List unknownNodes = new ArrayList(); + for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { + unknownNodes.add(b.build()); + } + Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP); + instance.setUnknownSchemaNodes(unknownNodes); - // UNKNOWN NODES - final List unknownNodes = new ArrayList(); - for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { - unknownNodes.add(b.build()); + // AUGMENTATIONS + final Set augmentations = new HashSet(); + for (AugmentationSchemaBuilder builder : addedAugmentations) { + augmentations.add(builder.build()); + } + instance.setAvailableAugmentations(augmentations); + + isBuilt = true; } - instance.setUnknownSchemaNodes(unknownNodes); return instance; } @Override - public int getLine() { - return line; + public void rebuild() { + isBuilt = false; + build(); } public SchemaPath getPath() { @@ -151,15 +169,13 @@ public final class ChoiceCaseBuilder extends AbstractChildNodeBuilder implements } @Override - public void addTypedef(TypeDefinitionBuilder typedefBuilder) { - throw new YangParseException(line, - "Can not add type definition to choice case."); + public Set getTypeDefinitionBuilders() { + return Collections.emptySet(); } @Override - public void setConfiguration(boolean configuration) { - throw new YangParseException(line, - "Can not add config definition to choice case."); + public void addTypedef(TypeDefinitionBuilder typedefBuilder) { + throw new YangParseException(line, "Can not add type definition to choice case."); } @Override @@ -167,11 +183,54 @@ public final class ChoiceCaseBuilder extends AbstractChildNodeBuilder implements return constraints; } - public Set getAugmentations() { - return augmentations; + @Override + public void addAugmentation(AugmentationSchemaBuilder augment) { + addedAugmentations.add(augment); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((schemaPath == null) ? 0 : schemaPath.hashCode()); + return result; } - private final class ChoiceCaseNodeImpl implements ChoiceCaseNode { + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + ChoiceCaseBuilder other = (ChoiceCaseBuilder) obj; + if (schemaPath == null) { + if (other.schemaPath != null) { + return false; + } + } else if (!schemaPath.equals(other.schemaPath)) { + return false; + } + if (parent == null) { + if (other.parent != null) { + return false; + } + } else if (!parent.equals(other.parent)) { + return false; + } + return true; + } + + @Override + public String toString() { + return "case " + getQName().getLocalName(); + } + + public final class ChoiceCaseNodeImpl implements ChoiceCaseNode { private final QName qname; private SchemaPath path; private String description; @@ -254,6 +313,11 @@ public final class ChoiceCaseBuilder extends AbstractChildNodeBuilder implements this.augmenting = augmenting; } + @Override + public boolean isAddedByUses() { + return false; + } + @Override public List getUnknownSchemaNodes() { return unknownNodes; @@ -323,13 +387,16 @@ public final class ChoiceCaseBuilder extends AbstractChildNodeBuilder implements return augmentations; } - private void setAvailableAugmentations( - Set augmentations) { + private void setAvailableAugmentations(Set augmentations) { if (augmentations != null) { this.augmentations = augmentations; } } + public ChoiceCaseBuilder toBuilder() { + return ChoiceCaseBuilder.this; + } + @Override public int hashCode() { final int prime = 31; @@ -370,8 +437,7 @@ public final class ChoiceCaseBuilder extends AbstractChildNodeBuilder implements @Override public String toString() { - StringBuilder sb = new StringBuilder( - ChoiceCaseNodeImpl.class.getSimpleName()); + StringBuilder sb = new StringBuilder(ChoiceCaseNodeImpl.class.getSimpleName()); sb.append("["); sb.append("qname=" + qname); sb.append("]");