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%2FAugmentationSchemaBuilderImpl.java;h=7fcee2ef52aff579ce707673d31c8c34171482bc;hb=refs%2Fchanges%2F79%2F579%2F2;hp=e5ba8b17ccfe1f872070e491cf9c6396d8623557;hpb=7e82c13539bf01ba2c00989ced01a96cb7a0214e;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/AugmentationSchemaBuilderImpl.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/AugmentationSchemaBuilderImpl.java index e5ba8b17cc..7fcee2ef52 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/AugmentationSchemaBuilderImpl.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/builder/impl/AugmentationSchemaBuilderImpl.java @@ -7,11 +7,14 @@ */ 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; @@ -21,56 +24,58 @@ import org.opendaylight.controller.yang.model.api.RevisionAwareXPath; import org.opendaylight.controller.yang.model.api.SchemaPath; 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.model.util.RevisionAwareXPathImpl; +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.DataSchemaNodeBuilder; import org.opendaylight.controller.yang.parser.builder.api.GroupingBuilder; 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.YangModelBuilderUtil; +import org.opendaylight.controller.yang.parser.util.Comparators; +import org.opendaylight.controller.yang.parser.util.ParserListenerUtils; import org.opendaylight.controller.yang.parser.util.YangParseException; -public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBuilder { +public final class AugmentationSchemaBuilderImpl extends AbstractDataNodeContainerBuilder implements + AugmentationSchemaBuilder { private boolean built; private final AugmentationSchemaImpl instance; - private final int line; + + private String whenCondition; + private String description; + private String reference; + private Status status = Status.CURRENT; + private final String augmentTargetStr; - private SchemaPath augmentTarget; + private SchemaPath dirtyAugmentTarget; private SchemaPath finalAugmentTarget; - private String whenCondition; - private final Set childNodes = new HashSet(); - private final Set groupings = new HashSet(); + private final Set usesNodes = new HashSet(); + private final List addedUnknownNodes = new ArrayList(); private boolean resolved; - AugmentationSchemaBuilderImpl(final String augmentTargetStr, final int line) { + AugmentationSchemaBuilderImpl(final int line, final String augmentTargetStr) { + super(line, null); this.augmentTargetStr = augmentTargetStr; - this.line = line; - final SchemaPath targetPath = YangModelBuilderUtil - .parseAugmentPath(augmentTargetStr); - augmentTarget = targetPath; + final SchemaPath targetPath = ParserListenerUtils.parseAugmentPath(augmentTargetStr); + dirtyAugmentTarget = targetPath; instance = new AugmentationSchemaImpl(targetPath); } @Override - public int getLine() { - return line; - } - - @Override - public void addChildNode(DataSchemaNodeBuilder childNode) { - childNodes.add(childNode); + public Set getGroupings() { + return Collections.emptySet(); } @Override - public Set getChildNodes() { - return childNodes; + public Set getGroupingBuilders() { + return Collections.emptySet(); } @Override public void addGrouping(GroupingBuilder grouping) { - groupings.add(grouping); + throw new YangParseException(line, "augment can not contains grouping statement"); } @Override @@ -78,14 +83,6 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu usesNodes.add(usesBuilder); } - /** - * Always returns null. - */ - @Override - public QName getQName() { - return null; - } - /** * Always returns null. */ @@ -97,6 +94,9 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu @Override public AugmentationSchema build() { if (!built) { + instance.setDescription(description); + instance.setReference(reference); + instance.setStatus(status); instance.setTargetPath(finalAugmentTarget); RevisionAwareXPath whenStmt; @@ -108,19 +108,12 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu instance.setWhenCondition(whenStmt); // CHILD NODES - final Map childs = new HashMap(); - for (DataSchemaNodeBuilder node : childNodes) { + final Map childs = new TreeMap(Comparators.QNAME_COMP); + for (DataSchemaNodeBuilder node : addedChildNodes) { childs.put(node.getQName(), node.build()); } instance.setChildNodes(childs); - // GROUPINGS - final Set groupingDefinitions = new HashSet(); - for (GroupingBuilder builder : groupings) { - groupingDefinitions.add(builder.build()); - } - instance.setGroupings(groupingDefinitions); - // USES final Set usesNodeDefinitions = new HashSet(); for (UsesNodeBuilder builder : usesNodes) { @@ -128,6 +121,14 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu } instance.setUses(usesNodeDefinitions); + // UNKNOWN NODES + List unknownNodes = new ArrayList(); + for (UnknownSchemaNodeBuilder b : addedUnknownNodes) { + unknownNodes.add(b.build()); + } + Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP); + instance.setUnknownSchemaNodes(unknownNodes); + built = true; } return instance; @@ -152,34 +153,35 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu } @Override - public Set getTypeDefinitions() { + public Set getTypeDefinitionBuilders() { return Collections.emptySet(); } @Override public void addTypedef(TypeDefinitionBuilder type) { - throw new YangParseException(line, - "Augmentation can not contains type definitions"); + throw new YangParseException(line, "Augmentation can not contains typedef statement."); } @Override public void setDescription(String description) { - instance.setDescription(description); + this.description = description; } @Override public void setReference(String reference) { - instance.setReference(reference); + this.reference = reference; } @Override public void setStatus(Status status) { - instance.setStatus(status); + if (status != null) { + this.status = status; + } } @Override public SchemaPath getTargetPath() { - return augmentTarget; + return dirtyAugmentTarget; } @Override @@ -192,17 +194,22 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu return augmentTargetStr; } + public List getUnknownNodes() { + return addedUnknownNodes; + } + + @Override + public void addUnknownSchemaNode(UnknownSchemaNodeBuilder unknownNode) { + addedUnknownNodes.add(unknownNode); + } + @Override public int hashCode() { final int prime = 17; int result = 1; - result = prime - * result - + ((augmentTargetStr == null) ? 0 : augmentTargetStr.hashCode()); - result = prime * result - + ((whenCondition == null) ? 0 : whenCondition.hashCode()); - result = prime * result - + ((childNodes == null) ? 0 : childNodes.hashCode()); + result = prime * result + ((augmentTargetStr == null) ? 0 : augmentTargetStr.hashCode()); + result = prime * result + ((whenCondition == null) ? 0 : whenCondition.hashCode()); + result = prime * result + ((childNodes == null) ? 0 : childNodes.hashCode()); return result; } @@ -242,16 +249,19 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu return true; } + public String toString() { + return "augment " + augmentTargetStr; + } + private final class AugmentationSchemaImpl implements AugmentationSchema { private SchemaPath targetPath; private RevisionAwareXPath whenCondition; private Map childNodes = Collections.emptyMap(); - private Set groupings = Collections.emptySet(); private Set uses = Collections.emptySet(); - private String description; private String reference; private Status status; + private List unknownNodes = Collections.emptyList(); private AugmentationSchemaImpl(SchemaPath targetPath) { this.targetPath = targetPath; @@ -277,7 +287,9 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu @Override public Set getChildNodes() { - return new HashSet(childNodes.values()); + final Set result = new TreeSet(Comparators.SCHEMA_NODE_COMP); + result.addAll(childNodes.values()); + return result; } private void setChildNodes(Map childNodes) { @@ -286,15 +298,13 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu } } + /** + * Always returns an empty set, because augment can not contains + * grouping statement. + */ @Override public Set getGroupings() { - return groupings; - } - - private void setGroupings(Set groupings) { - if (groupings != null) { - this.groupings = groupings; - } + return Collections.emptySet(); } @Override @@ -309,8 +319,8 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu } /** - * Always returns an empty set, because augmentation can not contains - * type definitions. + * Always returns an empty set, because augment can not contains type + * definitions. */ @Override public Set> getTypeDefinitions() { @@ -344,6 +354,17 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu this.status = status; } + @Override + public List getUnknownSchemaNodes() { + return unknownNodes; + } + + private void setUnknownSchemaNodes(List unknownSchemaNodes) { + if (unknownSchemaNodes != null) { + this.unknownNodes = unknownSchemaNodes; + } + } + @Override public DataSchemaNode getDataChildByName(QName name) { return childNodes.get(name); @@ -365,12 +386,9 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu public int hashCode() { final int prime = 17; int result = 1; - result = prime * result - + ((targetPath == null) ? 0 : targetPath.hashCode()); - result = prime * result - + ((whenCondition == null) ? 0 : whenCondition.hashCode()); - result = prime * result - + ((childNodes == null) ? 0 : childNodes.hashCode()); + result = prime * result + ((targetPath == null) ? 0 : targetPath.hashCode()); + result = prime * result + ((whenCondition == null) ? 0 : whenCondition.hashCode()); + result = prime * result + ((childNodes == null) ? 0 : childNodes.hashCode()); return result; } @@ -412,13 +430,10 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu @Override public String toString() { - StringBuilder sb = new StringBuilder( - AugmentationSchemaImpl.class.getSimpleName()); + StringBuilder sb = new StringBuilder(AugmentationSchemaImpl.class.getSimpleName()); sb.append("["); sb.append("targetPath=" + targetPath); - sb.append(", childNodes=" + childNodes.values()); - sb.append(", groupings=" + groupings); - sb.append(", uses=" + uses); + sb.append(", when=" + whenCondition); sb.append("]"); return sb.toString(); }