X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fbuilder%2Futil%2FAbstractDocumentedDataNodeContainerBuilder.java;h=5bc45b2e3c93f5c44beb299cf3229980f6cb29da;hb=5eb73b6c47326147af391608ee22ab8f8ab2c87c;hp=cc734408e1e71531526ad6f92d3b77b202b3e498;hpb=3732594ea24d5f39f742631e0a38e3f917f3658a;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/util/AbstractDocumentedDataNodeContainerBuilder.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/util/AbstractDocumentedDataNodeContainerBuilder.java index cc734408e1..5bc45b2e3c 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/util/AbstractDocumentedDataNodeContainerBuilder.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/util/AbstractDocumentedDataNodeContainerBuilder.java @@ -6,16 +6,17 @@ */ package org.opendaylight.yangtools.yang.parser.builder.util; -import java.net.URI; -import java.util.Date; +import java.util.ArrayList; import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Set; -import java.util.TreeMap; import java.util.TreeSet; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.DocumentedNode; import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; @@ -34,8 +35,8 @@ import org.opendaylight.yangtools.yang.parser.util.YangParseException; public abstract class AbstractDocumentedDataNodeContainerBuilder extends AbstractDocumentedNodeBuilder implements DataNodeContainerBuilder { protected final QName qname; - private final Map childNodes = new TreeMap<>(); - private final Set addedChildNodes = new HashSet<>(); + private final Map childNodes = new LinkedHashMap<>(); + private final List addedChildNodes = new ArrayList<>(); private final Set groupings = new TreeSet<>(Comparators.SCHEMA_NODE_COMP); private final Set addedGroupings = new HashSet<>(); @@ -44,7 +45,7 @@ public abstract class AbstractDocumentedDataNodeContainerBuilder extends Abstrac private final Set addedTypedefs = new HashSet<>(); private final Set usesNodes = new HashSet<>(); - private final Set addedUsesNodes = new HashSet<>(); + private final List addedUsesNodes = new ArrayList<>(); protected AbstractDocumentedDataNodeContainerBuilder(final String moduleName, final int line, final QName qname) { super(moduleName, line); @@ -55,20 +56,23 @@ public abstract class AbstractDocumentedDataNodeContainerBuilder extends Abstrac super(moduleName, line); this.qname = qname; - URI ns = qname.getNamespace(); - Date rev = qname.getRevision(); - String pref = qname.getPrefix(); - // We do copy of child nodes with namespace change // FIXME: Copy should be part of builder API so impl we prevent // cyclic dependencies and each builder carries its own semantic for copy. - addedChildNodes.addAll(BuilderUtils.wrapChildNodes(moduleName, line, base.getChildNodes(), path, ns, rev, pref)); - addedGroupings.addAll(BuilderUtils.wrapGroupings(moduleName, line, base.getGroupings(), path, ns, rev, pref)); - addedTypedefs.addAll(BuilderUtils.wrapTypedefs(moduleName, line, base, path, ns, rev, pref)); + addedChildNodes.addAll(BuilderUtils.wrapChildNodes(moduleName, line, base.getChildNodes(), path, qname)); + addedGroupings.addAll(BuilderUtils.wrapGroupings(moduleName, line, base.getGroupings(), path, qname)); + addedTypedefs.addAll(BuilderUtils.wrapTypedefs(moduleName, line, base, path, qname)); // FIXME: unkownSchemaNodes should be available in DataNodeContainer -// addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path, ns, -// rev, pref)); + // addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, + // line, base.getUnknownSchemaNodes(), path, qname)); usesNodes.addAll(base.getUses()); + + if (base instanceof DocumentedNode) { + DocumentedNode node = (DocumentedNode) base; + setDescription(node.getDescription()); + setReference(node.getReference()); + setStatus(node.getStatus()); + } } @Override @@ -82,7 +86,7 @@ public abstract class AbstractDocumentedDataNodeContainerBuilder extends Abstrac } @Override - public final Set getChildNodeBuilders() { + public final List getChildNodeBuilders() { return addedChildNodes; } @@ -98,15 +102,28 @@ public abstract class AbstractDocumentedDataNodeContainerBuilder extends Abstrac @Override public final void addChildNode(final DataSchemaNodeBuilder child) { - QName childName = child.getQName(); + checkIsPresent(child); + addedChildNodes.add(child); + } + + @Override + public final void addChildNode(final int index, final DataSchemaNodeBuilder child) { + checkIsPresent(child); + if (index > addedChildNodes.size()) { + addedChildNodes.add(child); + } else { + addedChildNodes.add(index, child); + } + } + + private void checkIsPresent(final DataSchemaNodeBuilder child) { for (DataSchemaNodeBuilder addedChildNode : addedChildNodes) { - if (addedChildNode.getQName().equals(childName)) { + if (addedChildNode.getQName().equals(child.getQName())) { throw new YangParseException(child.getModuleName(), child.getLine(), String.format( "Can not add '%s' to '%s' in module '%s': node with same name already declared at line %d", child, this, getModuleName(), addedChildNode.getLine())); } } - addedChildNodes.add(child); } @Override @@ -118,14 +135,12 @@ public abstract class AbstractDocumentedDataNodeContainerBuilder extends Abstrac public final void addChildNode(final DataSchemaNode child) { checkNotSealed(); QName childName = child.getQName(); - for (DataSchemaNode childNode : childNodes.values()) { - if (childNode.getQName().equals(childName)) { - throw new YangParseException(getModuleName(), getLine(), String.format( - "Can not add '%s' to '%s' in module '%s': node with same name already declared", child, this, - getModuleName())); - } + if (childNodes.containsKey(childName)) { + throw new YangParseException(getModuleName(), getLine(), String.format( + "Can not add '%s' to '%s' in module '%s': node with same name already declared", child, this, + getModuleName())); } - childNodes.put(child.getQName(), child); + childNodes.put(childName, child); } @Override @@ -139,7 +154,7 @@ public abstract class AbstractDocumentedDataNodeContainerBuilder extends Abstrac } @Override - public final void addGrouping(final GroupingBuilder grouping) { + public void addGrouping(final GroupingBuilder grouping) { checkNotSealed(); QName groupingName = grouping.getQName(); for (GroupingBuilder addedGrouping : addedGroupings) { @@ -162,7 +177,7 @@ public abstract class AbstractDocumentedDataNodeContainerBuilder extends Abstrac } @Override - public final Set getUsesNodeBuilders() { + public final List getUsesNodeBuilders() { return addedUsesNodes; } @@ -214,25 +229,4 @@ public abstract class AbstractDocumentedDataNodeContainerBuilder extends Abstrac } } - @Deprecated - protected static DataSchemaNode getChildNode(final Set childNodes, final QName name) { - for (DataSchemaNode node : childNodes) { - if (node.getQName().equals(name)) { - return node; - } - } - return null; - } - - @Deprecated - protected static DataSchemaNode getChildNode(final Set childNodes, final String name) { - for (DataSchemaNode node : childNodes) { - if (node.getQName().getLocalName().equals(name)) { - return node; - } - } - return null; - } - - }