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%2FContainerSchemaNodeBuilder.java;h=c85c12fcd5f6bcbdd6c593749c9c226bc4c3050c;hb=88187167a1b7928602fd8d72cb7d4dc2b38dfa70;hp=e677d3c7a5c2d9412ec533b474e60e984febba2a;hpb=586e8148730acc468c1d82cbac370f51c4c11681;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/ContainerSchemaNodeBuilder.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/ContainerSchemaNodeBuilder.java index e677d3c7a5..c85c12fcd5 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/ContainerSchemaNodeBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/ContainerSchemaNodeBuilder.java @@ -9,11 +9,12 @@ 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 java.util.TreeSet; import org.opendaylight.controller.yang.common.QName; import org.opendaylight.controller.yang.model.api.AugmentationSchema; @@ -31,40 +32,70 @@ import org.opendaylight.controller.yang.parser.builder.api.AugmentationSchemaBui 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.GroupingBuilder; -import org.opendaylight.controller.yang.parser.builder.api.TypeDefinitionAwareBuilder; +import org.opendaylight.controller.yang.parser.builder.api.GroupingMember; 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; -public final class ContainerSchemaNodeBuilder extends AbstractDataNodeContainerBuilder - implements TypeDefinitionAwareBuilder, AugmentationTargetBuilder, - DataSchemaNodeBuilder { +public final class ContainerSchemaNodeBuilder extends AbstractDataNodeContainerBuilder implements + AugmentationTargetBuilder, DataSchemaNodeBuilder, GroupingMember { private boolean isBuilt; private final ContainerSchemaNodeImpl instance; - private final int line; - private final ConstraintsBuilder constraints; + + // SchemaNode args private SchemaPath schemaPath; private String description; private String reference; private Status status = Status.CURRENT; - private boolean presence; + // DataSchemaNode args private boolean augmenting; - private boolean configuration; + private boolean addedByUses; + private Boolean configuration; + private final ConstraintsBuilder constraints; + // DataNodeContainer args private Set> typedefs; private final Set addedTypedefs = new HashSet(); private Set usesNodes; private final Set addedUsesNodes = new HashSet(); + // AugmentationTarget args private Set augmentations; private final Set addedAugmentations = new HashSet(); - private List unknownNodes; - private final List addedUnknownNodes = new ArrayList(); + // ContainerSchemaNode args + private boolean presence; - public ContainerSchemaNodeBuilder(final QName qname, final int line) { - super(qname); - this.line = line; + public ContainerSchemaNodeBuilder(final int line, final QName qname, final SchemaPath schemaPath) { + super(line, qname); + this.schemaPath = schemaPath; instance = new ContainerSchemaNodeImpl(qname); constraints = new ConstraintsBuilder(line); } + public ContainerSchemaNodeBuilder(final ContainerSchemaNodeBuilder b) { + super(b.getLine(), b.getQName()); + instance = new ContainerSchemaNodeImpl(b.getQName()); + constraints = b.getConstraints(); + schemaPath = b.getPath(); + description = b.getDescription(); + reference = b.getReference(); + status = b.getStatus(); + presence = b.isPresence(); + augmenting = b.isAugmenting(); + addedByUses = b.isAddedByUses(); + configuration = b.isConfiguration(); + childNodes = b.getChildNodes(); + addedChildNodes.addAll(b.getChildNodeBuilders()); + groupings = b.getGroupings(); + addedGroupings.addAll(b.getGroupingBuilders()); + typedefs = b.typedefs; + addedTypedefs.addAll(b.getTypeDefinitionBuilders()); + usesNodes = b.usesNodes; + addedUsesNodes.addAll(b.getUsesNodes()); + augmentations = b.augmentations; + addedAugmentations.addAll(b.getAugmentations()); + unknownNodes = b.unknownNodes; + addedUnknownNodes.addAll(b.getUnknownNodeBuilders()); + } + @Override public ContainerSchemaNode build() { if (!isBuilt) { @@ -74,24 +105,31 @@ public final class ContainerSchemaNodeBuilder extends AbstractDataNodeContainerB instance.setStatus(status); instance.setPresenceContainer(presence); instance.setAugmenting(augmenting); + instance.setAddedByUses(addedByUses); + + // if this builder represents rpc input or output, it can has + // configuration value set to null + if (configuration == null) { + configuration = false; + } instance.setConfiguration(configuration); // CHILD NODES - final Map childs = new HashMap(); - if(childNodes == null) { + final Map childs = new TreeMap(Comparators.QNAME_COMP); + if (childNodes == null) { for (DataSchemaNodeBuilder node : addedChildNodes) { childs.put(node.getQName(), node.build()); } } else { - for(DataSchemaNode node : childNodes) { + for (DataSchemaNode node : childNodes) { childs.put(node.getQName(), node); } } instance.setChildNodes(childs); // GROUPINGS - if(groupings == null) { - groupings = new HashSet(); + if (groupings == null) { + groupings = new TreeSet(Comparators.SCHEMA_NODE_COMP); for (GroupingBuilder builder : addedGroupings) { groupings.add(builder.build()); } @@ -99,8 +137,8 @@ public final class ContainerSchemaNodeBuilder extends AbstractDataNodeContainerB instance.setGroupings(groupings); // TYPEDEFS - if(typedefs == null) { - typedefs = new HashSet>(); + if (typedefs == null) { + typedefs = new TreeSet>(Comparators.SCHEMA_NODE_COMP); for (TypeDefinitionBuilder entry : addedTypedefs) { typedefs.add(entry.build()); } @@ -108,7 +146,7 @@ public final class ContainerSchemaNodeBuilder extends AbstractDataNodeContainerB instance.setTypeDefinitions(typedefs); // USES - if(usesNodes == null) { + if (usesNodes == null) { usesNodes = new HashSet(); for (UsesNodeBuilder builder : addedUsesNodes) { usesNodes.add(builder.build()); @@ -117,7 +155,7 @@ public final class ContainerSchemaNodeBuilder extends AbstractDataNodeContainerB instance.setUses(usesNodes); // AUGMENTATIONS - if(augmentations == null) { + if (augmentations == null) { augmentations = new HashSet(); for (AugmentationSchemaBuilder builder : addedAugmentations) { augmentations.add(builder.build()); @@ -126,11 +164,12 @@ public final class ContainerSchemaNodeBuilder extends AbstractDataNodeContainerB instance.setAvailableAugmentations(augmentations); // UNKNOWN NODES - if(unknownNodes == null) { + if (unknownNodes == null) { unknownNodes = new ArrayList(); for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { unknownNodes.add(b.build()); } + Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP); } instance.setUnknownSchemaNodes(unknownNodes); @@ -149,12 +188,7 @@ public final class ContainerSchemaNodeBuilder extends AbstractDataNodeContainerB } @Override - public int getLine() { - return line; - } - - @Override - public Set getTypeDefinitions() { + public Set getTypeDefinitionBuilders() { return addedTypedefs; } @@ -232,12 +266,22 @@ public final class ContainerSchemaNodeBuilder extends AbstractDataNodeContainerB } @Override - public boolean isConfiguration() { + public boolean isAddedByUses() { + return addedByUses; + } + + @Override + public void setAddedByUses(final boolean addedByUses) { + this.addedByUses = addedByUses; + } + + @Override + public Boolean isConfiguration() { return configuration; } @Override - public void setConfiguration(boolean configuration) { + public void setConfiguration(Boolean configuration) { this.configuration = configuration; } @@ -267,22 +311,46 @@ public final class ContainerSchemaNodeBuilder extends AbstractDataNodeContainerB this.presence = presence; } - public List getUnknownNodes() { - return addedUnknownNodes; - } - @Override - public void addUnknownSchemaNode(UnknownSchemaNodeBuilder unknownNode) { - addedUnknownNodes.add(unknownNode); + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((schemaPath == null) ? 0 : schemaPath.hashCode()); + return result; } - public void setUnknownNodes(List unknownNodes) { - this.unknownNodes = unknownNodes; + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + ContainerSchemaNodeBuilder other = (ContainerSchemaNodeBuilder) 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 "container " + getQName().getLocalName(); + return "container " + qname.getLocalName(); } public final class ContainerSchemaNodeImpl implements ContainerSchemaNode { @@ -292,6 +360,7 @@ public final class ContainerSchemaNodeBuilder extends AbstractDataNodeContainerB private String reference; private Status status = Status.CURRENT; private boolean augmenting; + private boolean addedByUses; private boolean configuration; private ConstraintDefinition constraints; private Set augmentations = Collections.emptySet(); @@ -358,6 +427,15 @@ public final class ContainerSchemaNodeBuilder extends AbstractDataNodeContainerB this.augmenting = augmenting; } + @Override + public boolean isAddedByUses() { + return addedByUses; + } + + private void setAddedByUses(boolean addedByUses) { + this.addedByUses = addedByUses; + } + @Override public boolean isConfiguration() { return configuration; @@ -381,8 +459,7 @@ public final class ContainerSchemaNodeBuilder extends AbstractDataNodeContainerB return augmentations; } - private void setAvailableAugmentations( - Set augmentations) { + private void setAvailableAugmentations(Set augmentations) { if (augmentations != null) { this.augmentations = augmentations; } @@ -463,8 +540,7 @@ public final class ContainerSchemaNodeBuilder extends AbstractDataNodeContainerB return unknownNodes; } - private void setUnknownSchemaNodes( - List unknownSchemaNodes) { + private void setUnknownSchemaNodes(List unknownSchemaNodes) { if (unknownSchemaNodes != null) { this.unknownNodes = unknownSchemaNodes; } @@ -514,8 +590,7 @@ public final class ContainerSchemaNodeBuilder extends AbstractDataNodeContainerB @Override public String toString() { - StringBuilder sb = new StringBuilder( - ContainerSchemaNodeImpl.class.getSimpleName()); + StringBuilder sb = new StringBuilder(ContainerSchemaNodeImpl.class.getSimpleName()); sb.append("["); sb.append("qname=" + qname); sb.append("]");