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%2FChoiceBuilder.java;h=1b4283a46313dbf740c1f2c3b2f1e7594557cda4;hb=154b5dde1af41aff2ae0cc6e08400153162a4a3c;hp=a9e2b3b0feb8c09340901df26adfb6efc03a8dba;hpb=50d50e106bcbe761b05417e747c217c1f5b36534;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/ChoiceBuilder.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/ChoiceBuilder.java index a9e2b3b0fe..1b4283a463 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/ChoiceBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/ChoiceBuilder.java @@ -12,6 +12,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.TreeSet; import org.opendaylight.controller.yang.common.QName; import org.opendaylight.controller.yang.model.api.AugmentationSchema; @@ -21,56 +22,80 @@ import org.opendaylight.controller.yang.model.api.ConstraintDefinition; import org.opendaylight.controller.yang.model.api.SchemaPath; import org.opendaylight.controller.yang.model.api.Status; import org.opendaylight.controller.yang.model.api.UnknownSchemaNode; +import org.opendaylight.controller.yang.parser.builder.api.AbstractSchemaNodeBuilder; 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.ConfigNode; import org.opendaylight.controller.yang.parser.builder.api.DataSchemaNodeBuilder; +import org.opendaylight.controller.yang.parser.builder.api.GroupingMember; +import org.opendaylight.controller.yang.parser.util.Comparators; +import org.opendaylight.controller.yang.parser.util.ParserUtils; -public final class ChoiceBuilder implements DataSchemaNodeBuilder, AugmentationTargetBuilder { - private boolean built; +public final class ChoiceBuilder extends AbstractSchemaNodeBuilder implements DataSchemaNodeBuilder, + AugmentationTargetBuilder, GroupingMember, ConfigNode { + private boolean isBuilt; private final ChoiceNodeImpl instance; - private final int line; // SchemaNode args - private final QName qname; - private SchemaPath schemaPath; - private String description; - private String reference; - private Status status = Status.CURRENT; - private final List addedUnknownNodes = new ArrayList(); + private List unknownNodes; // DataSchemaNode args private boolean augmenting; - private boolean configuration; + private boolean addedByUses; + private Boolean configuration; private final ConstraintsBuilder constraints; // AugmentationTarget args private final Set addedAugmentations = new HashSet(); // ChoiceNode args - private final Set cases = new HashSet(); + private Set cases; + private final Set addedCases = new HashSet(); private String defaultCase; - public ChoiceBuilder(final QName qname, final int line) { - this.qname = qname; - this.line = line; + public ChoiceBuilder(final int line, final QName qname) { + super(line, qname); instance = new ChoiceNodeImpl(qname); constraints = new ConstraintsBuilder(line); } + public ChoiceBuilder(ChoiceBuilder b) { + super(b.getLine(), b.getQName()); + parent = b.getParent(); + instance = new ChoiceNodeImpl(qname); + constraints = b.getConstraints(); + schemaPath = b.getPath(); + description = b.getDescription(); + reference = b.getReference(); + status = b.getStatus(); + unknownNodes = b.unknownNodes; + addedUnknownNodes.addAll(b.getUnknownNodes()); + augmenting = b.isAugmenting(); + addedByUses = b.isAddedByUses(); + configuration = b.isConfiguration(); + addedAugmentations.addAll(b.getAugmentations()); + cases = b.cases; + addedCases.addAll(b.getCases()); + defaultCase = b.getDefaultCase(); + } + @Override public ChoiceNode build() { - if (!built) { + if (!isBuilt) { instance.setPath(schemaPath); instance.setDescription(description); instance.setReference(reference); instance.setStatus(status); instance.setAugmenting(augmenting); + instance.setAddedByUses(addedByUses); instance.setConfiguration(configuration); instance.setConstraints(constraints.build()); instance.setDefaultCase(defaultCase); // CASES - final Set choiceCases = new HashSet(); - for (ChoiceCaseBuilder caseBuilder : cases) { - choiceCases.add(caseBuilder.build()); + if (cases == null) { + cases = new TreeSet(Comparators.SCHEMA_NODE_COMP); + for (ChoiceCaseBuilder caseBuilder : addedCases) { + cases.add(caseBuilder.build()); + } } - instance.setCases(choiceCases); + instance.setCases(cases); // AUGMENTATIONS final Set augmentations = new HashSet(); @@ -80,95 +105,77 @@ public final class ChoiceBuilder implements DataSchemaNodeBuilder, AugmentationT instance.setAvailableAugmentations(augmentations); // UNKNOWN NODES - final List unknownNodes = new ArrayList(); - for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { - unknownNodes.add(b.build()); + if (unknownNodes == null) { + unknownNodes = new ArrayList(); + for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { + unknownNodes.add(b.build()); + } + Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP); } instance.setUnknownSchemaNodes(unknownNodes); - built = true; + isBuilt = true; } return instance; } @Override - public int getLine() { - return line; + public void rebuild() { + isBuilt = false; + build(); } public Set getCases() { - return cases; + return addedCases; } public void addChildNode(DataSchemaNodeBuilder childNode) { if (!(childNode instanceof ChoiceCaseBuilder)) { - ChoiceCaseBuilder caseBuilder = new ChoiceCaseBuilder( - childNode.getQName(), childNode.getLine()); + ChoiceCaseBuilder caseBuilder = new ChoiceCaseBuilder(childNode.getLine(), childNode.getQName()); + if(childNode.isAugmenting()) { + caseBuilder.setAugmenting(true); + childNode.setAugmenting(false); + } + caseBuilder.setPath(childNode.getPath()); + SchemaPath newPath = ParserUtils.createSchemaPath(childNode.getPath(), childNode.getQName().getLocalName()); + childNode.setPath(newPath); caseBuilder.addChildNode(childNode); - cases.add(caseBuilder); + addedCases.add(caseBuilder); } else { - cases.add((ChoiceCaseBuilder) childNode); + addedCases.add((ChoiceCaseBuilder) childNode); } } - @Override - public QName getQName() { - return qname; - } - - public SchemaPath getPath() { - return schemaPath; - } - - @Override - public void setPath(final SchemaPath schemaPath) { - this.schemaPath = schemaPath; - } - - public String getDescription() { - return description; + public void setCases(Set cases) { + this.cases = cases; } @Override - public void setDescription(final String description) { - this.description = description; - } - - public String getReference() { - return reference; + public boolean isAugmenting() { + return augmenting; } @Override - public void setReference(String reference) { - this.reference = reference; - } - - public Status getStatus() { - return status; + public void setAugmenting(boolean augmenting) { + this.augmenting = augmenting; } @Override - public void setStatus(Status status) { - if (status != null) { - this.status = status; - } - } - - public boolean isAugmenting() { - return augmenting; + public boolean isAddedByUses() { + return addedByUses; } @Override - public void setAugmenting(boolean augmenting) { - this.augmenting = augmenting; + public void setAddedByUses(final boolean addedByUses) { + this.addedByUses = addedByUses; } - public boolean isConfiguration() { + public Boolean isConfiguration() { return configuration; } @Override - public void setConfiguration(boolean configuration) { + public void setConfiguration(Boolean configuration) { this.configuration = configuration; } @@ -177,10 +184,6 @@ public final class ChoiceBuilder implements DataSchemaNodeBuilder, AugmentationT return constraints; } - public List getUnknownNodes() { - return addedUnknownNodes; - } - public Set getAugmentations() { return addedAugmentations; } @@ -190,9 +193,12 @@ public final class ChoiceBuilder implements DataSchemaNodeBuilder, AugmentationT addedAugmentations.add(augment); } - @Override - public void addUnknownSchemaNode(UnknownSchemaNodeBuilder unknownNode) { - addedUnknownNodes.add(unknownNode); + public List getUnknownNodes() { + return addedUnknownNodes; + } + + public void setUnknownNodes(List unknownNodes) { + this.unknownNodes = unknownNodes; } public String getDefaultCase() { @@ -203,14 +209,56 @@ public final class ChoiceBuilder implements DataSchemaNodeBuilder, AugmentationT this.defaultCase = defaultCase; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((schemaPath == null) ? 0 : schemaPath.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + ChoiceBuilder other = (ChoiceBuilder) 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 "choice " + qname.getLocalName(); + } - private final class ChoiceNodeImpl implements ChoiceNode { + public final class ChoiceNodeImpl implements ChoiceNode { private final QName qname; private SchemaPath path; private String description; private String reference; private Status status = Status.CURRENT; private boolean augmenting; + private boolean addedByUses; private boolean configuration; private ConstraintDefinition constraints; private Set cases = Collections.emptySet(); @@ -274,6 +322,15 @@ public final class ChoiceBuilder implements DataSchemaNodeBuilder, AugmentationT this.augmenting = augmenting; } + @Override + public boolean isAddedByUses() { + return addedByUses; + } + + private void setAddedByUses(boolean addedByUses) { + this.addedByUses = addedByUses; + } + @Override public boolean isConfiguration() { return configuration; @@ -297,8 +354,7 @@ public final class ChoiceBuilder implements DataSchemaNodeBuilder, AugmentationT return augmentations; } - private void setAvailableAugmentations( - Set availableAugmentations) { + private void setAvailableAugmentations(Set availableAugmentations) { if (availableAugmentations != null) { this.augmentations = availableAugmentations; } @@ -309,8 +365,7 @@ public final class ChoiceBuilder implements DataSchemaNodeBuilder, AugmentationT return unknownNodes; } - private void setUnknownSchemaNodes( - List unknownSchemaNodes) { + private void setUnknownSchemaNodes(List unknownSchemaNodes) { if (unknownSchemaNodes != null) { this.unknownNodes = unknownSchemaNodes; } @@ -327,6 +382,7 @@ public final class ChoiceBuilder implements DataSchemaNodeBuilder, AugmentationT } } + @Override public String getDefaultCase() { return defaultCase; } @@ -335,6 +391,10 @@ public final class ChoiceBuilder implements DataSchemaNodeBuilder, AugmentationT this.defaultCase = defaultCase; } + public ChoiceBuilder toBuilder() { + return ChoiceBuilder.this; + } + @Override public int hashCode() { final int prime = 31; @@ -375,8 +435,7 @@ public final class ChoiceBuilder implements DataSchemaNodeBuilder, AugmentationT @Override public String toString() { - StringBuilder sb = new StringBuilder( - ChoiceNodeImpl.class.getSimpleName()); + StringBuilder sb = new StringBuilder(ChoiceNodeImpl.class.getSimpleName()); sb.append("["); sb.append("qname=" + qname); sb.append("]");