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=29c38dfa0e727eaaba4c61adf7320f8893bb90c8;hpb=0d05f8c08befb645e8159073b248f794f52822ea;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 29c38dfa0e..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,54 +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 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 @@ -76,14 +83,6 @@ public class AugmentationSchemaBuilderImpl implements AugmentationSchemaBuilder usesNodes.add(usesBuilder); } - /** - * Always returns null. - */ - @Override - public QName getQName() { - return null; - } - /** * Always returns null. */ @@ -94,37 +93,44 @@ public class AugmentationSchemaBuilderImpl implements AugmentationSchemaBuilder @Override public AugmentationSchema build() { - instance.setTargetPath(finalAugmentTarget); + if (!built) { + instance.setDescription(description); + instance.setReference(reference); + instance.setStatus(status); + instance.setTargetPath(finalAugmentTarget); - RevisionAwareXPath whenStmt; - if (whenCondition == null) { - whenStmt = null; - } else { - whenStmt = new RevisionAwareXPathImpl(whenCondition, false); - } - instance.setWhenCondition(whenStmt); + RevisionAwareXPath whenStmt; + if (whenCondition == null) { + whenStmt = null; + } else { + whenStmt = new RevisionAwareXPathImpl(whenCondition, false); + } + instance.setWhenCondition(whenStmt); - // CHILD NODES - final Map childs = new HashMap(); - for (DataSchemaNodeBuilder node : childNodes) { - childs.put(node.getQName(), node.build()); - } - instance.setChildNodes(childs); + // CHILD NODES + 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) { + usesNodeDefinitions.add(builder.build()); + } + instance.setUses(usesNodeDefinitions); - // USES - final Set usesNodeDefinitions = new HashSet(); - for (UsesNodeBuilder builder : usesNodes) { - usesNodeDefinitions.add(builder.build()); - } - 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; } @@ -146,30 +152,36 @@ public class AugmentationSchemaBuilderImpl implements AugmentationSchemaBuilder this.whenCondition = whenCondition; } + @Override + public Set getTypeDefinitionBuilders() { + return Collections.emptySet(); + } + @Override public void addTypedef(TypeDefinitionBuilder type) { - throw new UnsupportedOperationException( - "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 @@ -182,14 +194,22 @@ public class AugmentationSchemaBuilderImpl implements AugmentationSchemaBuilder 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 + ((augmentTargetStr == null) ? 0 : augmentTargetStr.hashCode()); + result = prime * result + ((whenCondition == null) ? 0 : whenCondition.hashCode()); + result = prime * result + ((childNodes == null) ? 0 : childNodes.hashCode()); return result; } @@ -219,20 +239,29 @@ public class AugmentationSchemaBuilderImpl implements AugmentationSchemaBuilder } else if (!whenCondition.equals(other.whenCondition)) { return false; } + if (childNodes == null) { + if (other.childNodes != null) { + return false; + } + } else if (!childNodes.equals(other.childNodes)) { + return false; + } return true; } + public String toString() { + return "augment " + augmentTargetStr; + } - private static class AugmentationSchemaImpl implements AugmentationSchema { + 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; @@ -258,7 +287,9 @@ public class AugmentationSchemaBuilderImpl implements AugmentationSchemaBuilder @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) { @@ -267,15 +298,13 @@ public class AugmentationSchemaBuilderImpl implements AugmentationSchemaBuilder } } + /** + * 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 @@ -290,8 +319,8 @@ public class AugmentationSchemaBuilderImpl implements AugmentationSchemaBuilder } /** - * 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() { @@ -325,6 +354,17 @@ public class AugmentationSchemaBuilderImpl implements AugmentationSchemaBuilder 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); @@ -346,10 +386,9 @@ public class AugmentationSchemaBuilderImpl implements AugmentationSchemaBuilder 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 + ((targetPath == null) ? 0 : targetPath.hashCode()); + result = prime * result + ((whenCondition == null) ? 0 : whenCondition.hashCode()); + result = prime * result + ((childNodes == null) ? 0 : childNodes.hashCode()); return result; } @@ -379,18 +418,22 @@ public class AugmentationSchemaBuilderImpl implements AugmentationSchemaBuilder } else if (!whenCondition.equals(other.whenCondition)) { return false; } + if (childNodes == null) { + if (other.childNodes != null) { + return false; + } + } else if (!childNodes.equals(other.childNodes)) { + return false; + } return true; } @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(); }