From: Robert Varga Date: Thu, 12 Nov 2020 18:01:30 +0000 (+0100) Subject: Rework NormalizedNode type hierarchy X-Git-Tag: v7.0.0~359 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=970923b5f47f7507ec78021965fa5df1a878af48;p=yangtools.git Rework NormalizedNode type hierarchy Rework the NormalizedNode model to split identifier and value, using overrides rather than generics. This cuts down complexity quite a bit and makes the interface much more friendly. This allows us to fix some of the sins in the overall NormalizedNode hierarchy: 0) Use to generics is minimized: - NormalizedNode, DataNodeContainer are no longer generic - other constructs either gained or lost an argument, with losses being more prevalent. 1) yang.data.api.OrderingAware provides an explicit tie to order-by statement 2) NormalizedNodeContainer is split into two concepts: - DistinctNodeContainer, allowing PathArgument lookups - OrderedNodeContainer, allowing offset-based lookups and implying OrderingAware.User 3) MapNode is likewise split into two nodes based on Ordering: - UserMapNode, which both DistinctNodeContainer and OrderedNodeContainer - SystemMapNode, which is a plain OrderingAware.System DistinctNodeContainer 3) LeafSet follow the same split as MapNode JIRA: YANGTOOLS-1022 Change-Id: I49c58850f565182826f5a8e1fc5b58cffb4a7d47 Signed-off-by: Robert Varga --- diff --git a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/JaxenDocument.java b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/JaxenDocument.java index 72eab6f275..f1b99dbcaa 100644 --- a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/JaxenDocument.java +++ b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/JaxenDocument.java @@ -20,17 +20,16 @@ import org.opendaylight.yangtools.yang.model.util.AbstractEffectiveModelContextP @NonNullByDefault final class JaxenDocument extends AbstractEffectiveModelContextProvider implements XPathDocument { private final DataSchemaContextNode schema; - private final NormalizedNode root; + private final NormalizedNode root; - JaxenDocument(final EffectiveModelContext context, final DataSchemaContextTree tree, - final NormalizedNode root) { + JaxenDocument(final EffectiveModelContext context, final DataSchemaContextTree tree, final NormalizedNode root) { super(context); this.root = requireNonNull(root); this.schema = requireNonNull(tree.getRoot().getChild(root.getIdentifier())); } @Override - public NormalizedNode getRootNode() { + public NormalizedNode getRootNode() { return root; } diff --git a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/JaxenSchemaContext.java b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/JaxenSchemaContext.java index d1383b6d09..5cded5c38c 100644 --- a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/JaxenSchemaContext.java +++ b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/JaxenSchemaContext.java @@ -43,7 +43,7 @@ final class JaxenSchemaContext implements XPathSchemaContext { } @Override - public XPathDocument createDocument(final NormalizedNode documentRoot) { + public XPathDocument createDocument(final NormalizedNode documentRoot) { return new JaxenDocument(context, tree, documentRoot); } } diff --git a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/LeafrefXPathStringParsingPathArgumentBuilder.java b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/LeafrefXPathStringParsingPathArgumentBuilder.java index 185a626dac..841937e7bb 100644 --- a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/LeafrefXPathStringParsingPathArgumentBuilder.java +++ b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/LeafrefXPathStringParsingPathArgumentBuilder.java @@ -15,7 +15,6 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import java.util.ArrayList; import java.util.List; -import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.checkerframework.checker.regex.qual.Regex; @@ -145,7 +144,7 @@ final class LeafrefXPathStringParsingPathArgumentBuilder implements Builder node = null; + NormalizedNode node = null; for (String pathComponent : pathComponents) { final Matcher matcher = NODE_IDENTIFIER_PATTERN.matcher(pathComponent); if (UP_ONE_LEVEL.equals(pathComponent)) { @@ -156,9 +155,7 @@ final class LeafrefXPathStringParsingPathArgumentBuilder implements Builder> possibleChild = dcn.getChild(new NodeIdentifier(nextQName())); - node = possibleChild.isPresent() ? possibleChild.get() : null; + node = ((DataContainerNode) node).childByArg(new NodeIdentifier(nextQName())); } } else { throw new IllegalArgumentException(String.format( @@ -168,7 +165,7 @@ final class LeafrefXPathStringParsingPathArgumentBuilder implements Builder schema; - private final NormalizedNode node; + private final NormalizedNode node; private NormalizedNodeContext(final ContextSupport contextSupport, final DataSchemaContextNode schema, - final NormalizedNode node, final @Nullable NormalizedNodeContext parent) { + final NormalizedNode node, final @Nullable NormalizedNodeContext parent) { super(contextSupport); this.schema = requireNonNull(schema); this.node = requireNonNull(node); @@ -61,7 +61,7 @@ final class NormalizedNodeContext extends Context { return new NormalizedNodeContext(contextSupport, document.getSchema(), document.getRootNode(), null); } - NormalizedNode getNode() { + NormalizedNode getNode() { return node; } @@ -77,7 +77,7 @@ final class NormalizedNodeContext extends Context { return schema; } - NormalizedNodeContext createChild(final NormalizedNode input) { + NormalizedNodeContext createChild(final NormalizedNode input) { DataSchemaContextNode childSchema = schema.getChild(input.getIdentifier()); if (childSchema == null) { /* This feels very much like a hack: but solves lookup of child nodes with predicates. @@ -99,8 +99,8 @@ final class NormalizedNodeContext extends Context { } Optional findChild(final PathArgument arg) { - return node instanceof DataContainerNode ? ((DataContainerNode)node).getChild(arg).map(this::createChild) - : Optional.empty(); + return node instanceof DataContainerNode + ? ((DataContainerNode)node).findChildByArg(arg).map(this::createChild) : Optional.empty(); } Optional findDescendant(final YangInstanceIdentifier path) { @@ -109,17 +109,15 @@ final class NormalizedNodeContext extends Context { } NormalizedNodeContext ctxWalk = this; - NormalizedNode dataWalk = node; + NormalizedNode dataWalk = node; for (PathArgument arg : path.getPathArguments()) { checkArgument(dataWalk instanceof DataContainerNode, "Path %s refers beyond node %s", path, dataWalk); - final Optional> optChild = - ((DataContainerNode)dataWalk).getChild(arg); - if (!optChild.isPresent()) { + dataWalk = ((DataContainerNode)dataWalk).childByArg(arg); + if (dataWalk == null) { return Optional.empty(); } - dataWalk = optChild.get(); ctxWalk = createChild(dataWalk); } @@ -127,24 +125,21 @@ final class NormalizedNodeContext extends Context { } Iterator iterateChildren(final DataContainerNode data) { - return Iterators.transform(((DataContainerNode) node).getValue().iterator(), this::createChild); + return Iterators.transform(((DataContainerNode) node).body().iterator(), this::createChild); } @Nullable Iterator iterateChildrenNamed(final DataContainerNode data, final QName qname) { - final NodeIdentifier arg = new NodeIdentifier(qname); - final Optional> maybeChild = data.getChild(arg); - if (!maybeChild.isPresent()) { + final DataContainerChild child = data.childByArg(new NodeIdentifier(qname)); + if (child == null) { return null; } - final NormalizedNode child = maybeChild.get(); - final Collection> collection; - + final Collection collection; // The child may be a structural node if (child instanceof MapNode) { - collection = ((MapNode)child).getValue(); + collection = ((MapNode)child).body(); } else if (child instanceof LeafSetNode) { - collection = ((LeafSetNode)child).getValue(); + collection = ((LeafSetNode)child).body(); } else { return Iterators.singletonIterator(createChild(child)); } diff --git a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/NormalizedNodeContextSupport.java b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/NormalizedNodeContextSupport.java index 7cec73cefc..ba927dafc7 100644 --- a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/NormalizedNodeContextSupport.java +++ b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/NormalizedNodeContextSupport.java @@ -42,7 +42,7 @@ final class NormalizedNodeContextSupport extends ContextSupport implements Effec NormalizedNodeContext createContext(final YangInstanceIdentifier path) { NormalizedNodeContext result = root; for (PathArgument arg : path.getPathArguments()) { - final Optional> node = NormalizedNodes.getDirectChild(result.getNode(), arg); + final Optional node = NormalizedNodes.getDirectChild(result.getNode(), arg); checkArgument(node.isPresent(), "Node %s has no child %s", result.getNode(), arg); result = result.createChild(node.get()); } diff --git a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/NormalizedNodeNavigator.java b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/NormalizedNodeNavigator.java index f8f27cf500..1a8b9714b9 100644 --- a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/NormalizedNodeNavigator.java +++ b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/NormalizedNodeNavigator.java @@ -53,11 +53,11 @@ final class NormalizedNodeNavigator extends DefaultNavigator return (NormalizedNodeContext) context; } - private static NormalizedNode contextNode(final Object context) { + private static NormalizedNode contextNode(final Object context) { return cast(context).getNode(); } - private QName resolveQName(final NormalizedNode node, final String prefix, final String localName) { + private QName resolveQName(final NormalizedNode node, final String prefix, final String localName) { final QNameModule module; if (prefix.isEmpty()) { module = node.getNodeType().getModule(); @@ -156,9 +156,9 @@ final class NormalizedNodeNavigator extends DefaultNavigator @Override public String getElementStringValue(final Object element) { - final NormalizedNode node = contextNode(element); + final NormalizedNode node = contextNode(element); if (node instanceof LeafNode || node instanceof LeafSetEntryNode) { - final Object value = node.getValue(); + final Object value = node.body(); // TODO: This is a rather poor approximation of what the codec infrastructure, but it should be sufficient // to work for now. Tracking SchemaPath will mean we will need to wrap each NormalizedNode with a @@ -210,7 +210,7 @@ final class NormalizedNodeNavigator extends DefaultNavigator @Override public Iterator getChildAxisIterator(final Object contextNode) { final NormalizedNodeContext ctx = cast(contextNode); - final NormalizedNode node = ctx.getNode(); + final NormalizedNode node = ctx.getNode(); return node instanceof DataContainerNode ? ctx.iterateChildren((DataContainerNode) node) : null; } @@ -218,7 +218,7 @@ final class NormalizedNodeNavigator extends DefaultNavigator public Iterator getChildAxisIterator(final Object contextNode, final String localName, final String namespacePrefix, final String namespaceURI) { final NormalizedNodeContext ctx = cast(contextNode); - final NormalizedNode node = ctx.getNode(); + final NormalizedNode node = ctx.getNode(); return node instanceof DataContainerNode ? ctx.iterateChildrenNamed((DataContainerNode)node, resolveQName(node, namespacePrefix, localName)) : null; diff --git a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/YangFunctionContext.java b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/YangFunctionContext.java index f93d0100fb..d7c1b06a7f 100644 --- a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/YangFunctionContext.java +++ b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/YangFunctionContext.java @@ -118,7 +118,7 @@ final class YangFunctionContext implements FunctionContext { return false; } - final Object nodeValue = currentNodeContext.getNode().getValue(); + final Object nodeValue = currentNodeContext.getNode().body(); if (!(nodeValue instanceof Set)) { return false; } @@ -139,7 +139,7 @@ final class YangFunctionContext implements FunctionContext { } // deref(node-set nodes) function as per https://tools.ietf.org/html/rfc7950#section-10.3.1 - private static NormalizedNode deref(final Context context, final List args) throws FunctionCallException { + private static NormalizedNode deref(final Context context, final List args) throws FunctionCallException { if (!args.isEmpty()) { throw new FunctionCallException("deref() takes only one argument: node-set nodes."); } @@ -147,7 +147,7 @@ final class YangFunctionContext implements FunctionContext { final NormalizedNodeContext currentNodeContext = verifyContext(context); final TypedDataSchemaNode correspondingSchemaNode = getCorrespondingTypedSchemaNode(currentNodeContext); - final Object nodeValue = currentNodeContext.getNode().getValue(); + final Object nodeValue = currentNodeContext.getNode().body(); final TypeDefinition type = correspondingSchemaNode.getType(); if (type instanceof InstanceIdentifierTypeDefinition) { return nodeValue instanceof YangInstanceIdentifier @@ -191,9 +191,9 @@ final class YangFunctionContext implements FunctionContext { final SchemaContext schemaContext = getSchemaContext(currentNodeContext); return correspondingSchemaNode.getType() instanceof IdentityrefTypeDefinition - && currentNodeContext.getNode().getValue() instanceof QName ? new SimpleImmutableEntry<>( + && currentNodeContext.getNode().body() instanceof QName ? new SimpleImmutableEntry<>( getIdentitySchemaNodeFromString((String) args.get(0), schemaContext, correspondingSchemaNode), - getIdentitySchemaNodeFromQName((QName) currentNodeContext.getNode().getValue(), schemaContext)) + getIdentitySchemaNodeFromQName((QName) currentNodeContext.getNode().body(), schemaContext)) : null; } @@ -211,7 +211,7 @@ final class YangFunctionContext implements FunctionContext { return DOUBLE_NAN; } - final Object nodeValue = currentNodeContext.getNode().getValue(); + final Object nodeValue = currentNodeContext.getNode().body(); if (!(nodeValue instanceof String)) { return DOUBLE_NAN; } @@ -300,14 +300,14 @@ final class YangFunctionContext implements FunctionContext { + " identity schema node in the module %s.", identityQName, module)); } - private static NormalizedNode getNodeReferencedByInstanceIdentifier(final YangInstanceIdentifier path, + private static NormalizedNode getNodeReferencedByInstanceIdentifier(final YangInstanceIdentifier path, final NormalizedNodeContext currentNodeContext) { final NormalizedNodeNavigator navigator = (NormalizedNodeNavigator) currentNodeContext.getNavigator(); - final NormalizedNode rootNode = navigator.getDocument().getRootNode(); + final NormalizedNode rootNode = navigator.getDocument().getRootNode(); final List pathArguments = path.getPathArguments(); if (pathArguments.get(0).getNodeType().equals(rootNode.getNodeType())) { final List relPath = pathArguments.subList(1, pathArguments.size()); - final Optional> possibleNode = NormalizedNodes.findNode(rootNode, relPath); + final Optional possibleNode = NormalizedNodes.findNode(rootNode, relPath); if (possibleNode.isPresent()) { return possibleNode.get(); } @@ -316,10 +316,10 @@ final class YangFunctionContext implements FunctionContext { return null; } - private static NormalizedNode getNodeReferencedByLeafref(final PathExpression xpath, + private static NormalizedNode getNodeReferencedByLeafref(final PathExpression xpath, final NormalizedNodeContext currentNodeContext, final SchemaContext schemaContext, final TypedDataSchemaNode correspondingSchemaNode, final Object nodeValue) { - final NormalizedNode referencedNode = xpath.isAbsolute() ? getNodeReferencedByAbsoluteLeafref(xpath, + final NormalizedNode referencedNode = xpath.isAbsolute() ? getNodeReferencedByAbsoluteLeafref(xpath, currentNodeContext, schemaContext, correspondingSchemaNode) : getNodeReferencedByRelativeLeafref(xpath, currentNodeContext, schemaContext, correspondingSchemaNode); @@ -327,24 +327,24 @@ final class YangFunctionContext implements FunctionContext { return getReferencedLeafSetEntryNode((LeafSetNode) referencedNode, nodeValue); } - if (referencedNode instanceof LeafNode && referencedNode.getValue().equals(nodeValue)) { + if (referencedNode instanceof LeafNode && referencedNode.body().equals(nodeValue)) { return referencedNode; } return null; } - private static NormalizedNode getNodeReferencedByAbsoluteLeafref(final PathExpression xpath, + private static NormalizedNode getNodeReferencedByAbsoluteLeafref(final PathExpression xpath, final NormalizedNodeContext currentNodeContext, final SchemaContext schemaContext, final TypedDataSchemaNode correspondingSchemaNode) { final LeafrefXPathStringParsingPathArgumentBuilder builder = new LeafrefXPathStringParsingPathArgumentBuilder( xpath.getOriginalString(), schemaContext, correspondingSchemaNode, currentNodeContext); final List pathArguments = builder.build(); final NormalizedNodeNavigator navigator = (NormalizedNodeNavigator) currentNodeContext.getNavigator(); - final NormalizedNode rootNode = navigator.getDocument().getRootNode(); + final NormalizedNode rootNode = navigator.getDocument().getRootNode(); if (pathArguments.get(0).getNodeType().equals(rootNode.getNodeType())) { final List relPath = pathArguments.subList(1, pathArguments.size()); - final Optional> possibleNode = NormalizedNodes.findNode(rootNode, relPath); + final Optional possibleNode = NormalizedNodes.findNode(rootNode, relPath); if (possibleNode.isPresent()) { return possibleNode.get(); } @@ -353,7 +353,7 @@ final class YangFunctionContext implements FunctionContext { return null; } - private static NormalizedNode getNodeReferencedByRelativeLeafref(final PathExpression xpath, + private static NormalizedNode getNodeReferencedByRelativeLeafref(final PathExpression xpath, final NormalizedNodeContext currentNodeContext, final SchemaContext schemaContext, final TypedDataSchemaNode correspondingSchemaNode) { NormalizedNodeContext relativeNodeContext = currentNodeContext; @@ -369,19 +369,14 @@ final class YangFunctionContext implements FunctionContext { final LeafrefXPathStringParsingPathArgumentBuilder builder = new LeafrefXPathStringParsingPathArgumentBuilder( xPathStringBuilder.toString(), schemaContext, correspondingSchemaNode, currentNodeContext); final List pathArguments = builder.build(); - final NormalizedNode relativeNode = relativeNodeContext.getNode(); - final Optional> possibleNode = NormalizedNodes.findNode(relativeNode, pathArguments); - if (possibleNode.isPresent()) { - return possibleNode.get(); - } - - return null; + final NormalizedNode relativeNode = relativeNodeContext.getNode(); + return NormalizedNodes.findNode(relativeNode, pathArguments).orElse(null); } private static LeafSetEntryNode getReferencedLeafSetEntryNode(final LeafSetNode referencedNode, final Object currentNodeValue) { - for (final LeafSetEntryNode entryNode : referencedNode.getValue()) { - if (currentNodeValue.equals(entryNode.getValue())) { + for (final LeafSetEntryNode entryNode : referencedNode.body()) { + if (currentNodeValue.equals(entryNode.body())) { return entryNode; } } diff --git a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/api/XPathDocument.java b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/api/XPathDocument.java index a930d0fc52..e30072e485 100644 --- a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/api/XPathDocument.java +++ b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/api/XPathDocument.java @@ -22,5 +22,5 @@ public interface XPathDocument { * * @return This document's root node. */ - @NonNull NormalizedNode getRootNode(); + @NonNull NormalizedNode getRootNode(); } diff --git a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/api/XPathNodesetResult.java b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/api/XPathNodesetResult.java index 7c1b3cc501..99f6b2ed83 100644 --- a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/api/XPathNodesetResult.java +++ b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/api/XPathNodesetResult.java @@ -19,7 +19,6 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; */ @Beta @Deprecated -public interface XPathNodesetResult - extends XPathResult>>> { +public interface XPathNodesetResult extends XPathResult>> { } diff --git a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/api/XPathSchemaContext.java b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/api/XPathSchemaContext.java index 4d357f3ff2..c4b5755811 100644 --- a/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/api/XPathSchemaContext.java +++ b/attic/yang-data-jaxen/src/main/java/org/opendaylight/yangtools/yang/data/jaxen/api/XPathSchemaContext.java @@ -46,5 +46,5 @@ public interface XPathSchemaContext { * @return A new {@link XPathDocument} on which queries may be executed. * @throws IllegalArgumentException if the document root is not known to this schema context. */ - @NonNull XPathDocument createDocument(@NonNull NormalizedNode documentRoot); + @NonNull XPathDocument createDocument(@NonNull NormalizedNode documentRoot); } diff --git a/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/BitIsSetXPathFunctionTest.java b/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/BitIsSetXPathFunctionTest.java index 021b76a14b..d756c9bdc8 100644 --- a/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/BitIsSetXPathFunctionTest.java +++ b/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/BitIsSetXPathFunctionTest.java @@ -34,7 +34,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.jaxen.api.XPathDocument; import org.opendaylight.yangtools.yang.data.jaxen.api.XPathSchemaContext; @@ -197,7 +197,8 @@ public class BitIsSetXPathFunctionTest { final LeafNode ordinaryLeafNode = Builders.leafBuilder() .withNodeIdentifier(new NodeIdentifier(ORDINARY_LEAF)).withValue("test-value").build(); - final MapNode myListNode = Builders.mapBuilder().withNodeIdentifier(new NodeIdentifier(MY_LIST)) + final SystemMapNode myListNode = Builders.mapBuilder() + .withNodeIdentifier(new NodeIdentifier(MY_LIST)) .withChild(Builders.mapEntryBuilder().withNodeIdentifier( NodeIdentifierWithPredicates.of(MY_LIST, FLAGS, keyLeafValue)) .withChild(ordinaryLeafNode).build()).build(); diff --git a/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/DerefXPathFunctionTest.java b/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/DerefXPathFunctionTest.java index 947cd0699b..43b867c6a4 100644 --- a/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/DerefXPathFunctionTest.java +++ b/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/DerefXPathFunctionTest.java @@ -32,9 +32,9 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithV import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.jaxen.api.XPathDocument; import org.opendaylight.yangtools.yang.data.jaxen.api.XPathSchemaContext; @@ -142,8 +142,8 @@ public class DerefXPathFunctionTest { final XPathSchemaContext jaxenSchemaContext = jaxenSchemaContextFactory.createContext(schemaContext); - final LeafSetNode referencedLeafListNode = Builders.leafSetBuilder().withNodeIdentifier( - new NodeIdentifier(REFERENCED_LEAFLIST)) + final SystemLeafSetNode referencedLeafListNode = Builders.leafSetBuilder() + .withNodeIdentifier(new NodeIdentifier(REFERENCED_LEAFLIST)) .withChild(Builders.leafSetEntryBuilder().withNodeIdentifier( new NodeWithValue<>(REFERENCED_LEAFLIST, "referenced-node-entry-value-a")) .withValue("referenced-node-entry-value-a").build()) @@ -173,10 +173,10 @@ public class DerefXPathFunctionTest { .getFunction(null, null, "deref"); Object derefResult = derefFunction.call(normalizedNodeContext, ImmutableList.of()); assertNotNull(derefResult); - assertTrue(derefResult instanceof NormalizedNode); + assertTrue(derefResult instanceof NormalizedNode); - final LeafSetEntryNode referencedLeafListNodeEntry = referencedLeafListNode.getChild( - new NodeWithValue<>(REFERENCED_LEAFLIST, "referenced-node-entry-value-b")).get(); + final LeafSetEntryNode referencedLeafListNodeEntry = referencedLeafListNode.childByArg( + new NodeWithValue<>(REFERENCED_LEAFLIST, "referenced-node-entry-value-b")); assertSame(referencedLeafListNodeEntry, derefResult); } @@ -188,7 +188,8 @@ public class DerefXPathFunctionTest { final LeafNode iidLeafNode = Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(IID_LEAF)) .withValue(iidPath).build(); - final MapNode myListNode = Builders.mapBuilder().withNodeIdentifier(new NodeIdentifier(MY_LIST)) + final SystemMapNode myListNode = Builders.mapBuilder() + .withNodeIdentifier(new NodeIdentifier(MY_LIST)) .withChild(Builders.mapEntryBuilder().withNodeIdentifier( NodeIdentifierWithPredicates.of(MY_LIST, keyValues)) .withChild(iidLeafNode) @@ -222,7 +223,8 @@ public class DerefXPathFunctionTest { final LeafNode ordinaryLeafBNode = Builders.leafBuilder().withNodeIdentifier( new NodeIdentifier(ORDINARY_LEAF_B)).withValue("value-b").build(); - final MapNode myListNode = Builders.mapBuilder().withNodeIdentifier(new NodeIdentifier(MY_LIST)) + final SystemMapNode myListNode = Builders.mapBuilder() + .withNodeIdentifier(new NodeIdentifier(MY_LIST)) .withChild(Builders.mapEntryBuilder().withNodeIdentifier( NodeIdentifierWithPredicates.of(MY_LIST, keyValues)) .withChild(referencedLeafNode).build()) @@ -243,7 +245,7 @@ public class DerefXPathFunctionTest { } // variant for a leafref that references a leaf-list - private static ContainerNode buildMyContainerNodeForLeafrefTest(final LeafSetNode referencedLeafListNode) { + private static ContainerNode buildMyContainerNodeForLeafrefTest(final SystemLeafSetNode referencedLeafListNode) { final LeafNode leafListLeafrefNode = Builders.leafBuilder().withNodeIdentifier( new NodeIdentifier(LEAFLIST_LEAFREF_LEAF)).withValue("referenced-node-entry-value-b").build(); @@ -259,15 +261,15 @@ public class DerefXPathFunctionTest { .withChild(ordinaryLeafBNode).build(); final Map keyValues = ImmutableMap.of(KEY_LEAF_A, "value-a", KEY_LEAF_B, "value-b"); - - final MapNode myListNode = Builders.mapBuilder().withNodeIdentifier(new NodeIdentifier(MY_LIST)) + final SystemMapNode myListNode = Builders.mapBuilder() + .withNodeIdentifier(new NodeIdentifier(MY_LIST)) .withChild(Builders.mapEntryBuilder().withNodeIdentifier( NodeIdentifierWithPredicates.of(MY_LIST, keyValues)) .withChild(referencedLeafListNode).build()) .build(); - final ContainerNode myContainerNode = Builders.containerBuilder().withNodeIdentifier( - new NodeIdentifier(MY_CONTAINER)) + final ContainerNode myContainerNode = Builders.containerBuilder() + .withNodeIdentifier(new NodeIdentifier(MY_CONTAINER)) .withChild(myListNode) .withChild(myInnerContainerNode).build(); return myContainerNode; diff --git a/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/DerivedFromXPathFunctionTest.java b/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/DerivedFromXPathFunctionTest.java index 1698004e87..54baeca70e 100644 --- a/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/DerivedFromXPathFunctionTest.java +++ b/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/DerivedFromXPathFunctionTest.java @@ -32,7 +32,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.jaxen.api.XPathDocument; import org.opendaylight.yangtools.yang.data.jaxen.api.XPathSchemaContext; @@ -275,7 +275,8 @@ public class DerivedFromXPathFunctionTest { final LeafNode idrefLeafNode = Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(IDREF_LEAF)) .withValue(idrefLeafValue).build(); - final MapNode myListNode = Builders.mapBuilder().withNodeIdentifier(new NodeIdentifier(MY_LIST)) + final SystemMapNode myListNode = Builders.mapBuilder() + .withNodeIdentifier(new NodeIdentifier(MY_LIST)) .withChild(Builders.mapEntryBuilder().withNodeIdentifier( NodeIdentifierWithPredicates.of(MY_LIST, KEY_LEAF, "key-value")) .withChild(idrefLeafNode).build()).build(); diff --git a/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/EnumValueXPathFunctionTest.java b/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/EnumValueXPathFunctionTest.java index 0a6edaebfb..cc4841a786 100644 --- a/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/EnumValueXPathFunctionTest.java +++ b/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/EnumValueXPathFunctionTest.java @@ -31,7 +31,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.jaxen.api.XPathDocument; import org.opendaylight.yangtools.yang.data.jaxen.api.XPathSchemaContext; @@ -166,7 +166,8 @@ public class EnumValueXPathFunctionTest { final LeafNode ordinaryLeafNode = Builders.leafBuilder() .withNodeIdentifier(new NodeIdentifier(ORDINARY_LEAF)).withValue("test-value").build(); - final MapNode alarmListNode = Builders.mapBuilder().withNodeIdentifier(new NodeIdentifier(ALARM)) + final SystemMapNode alarmListNode = Builders.mapBuilder() + .withNodeIdentifier(new NodeIdentifier(ALARM)) .withChild(Builders.mapEntryBuilder().withNodeIdentifier( NodeIdentifierWithPredicates.of(ALARM, SEVERITY, keyLeafValue)) .withChild(ordinaryLeafNode).build()).build(); diff --git a/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/JaxenTest.java b/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/JaxenTest.java index 48990a1dd1..57781c2234 100644 --- a/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/JaxenTest.java +++ b/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/JaxenTest.java @@ -91,9 +91,9 @@ public class JaxenTest { assertTrue(xpathResult instanceof XPathNodesetResult); XPathNodesetResult nodeset = (XPathNodesetResult) xpathResult; - Entry> entry = nodeset.getValue().iterator().next(); + Entry entry = nodeset.getValue().iterator().next(); assertNotNull(entry); - assertEquals("three", entry.getValue().getValue()); + assertEquals("three", entry.getValue().body()); convertNctx = new ConverterNamespaceContext(createPrefixes()); navigator = new NormalizedNodeNavigator(convertNctx, (JaxenDocument) xpathDocument); @@ -138,9 +138,9 @@ public class JaxenTest { assertTrue(xpathResult instanceof XPathNodesetResult); XPathNodesetResult nodeset = (XPathNodesetResult) xpathResult; - Entry> entry = nodeset.getValue().iterator().next(); + Entry entry = nodeset.getValue().iterator().next(); assertNotNull(entry); - assertEquals("two", entry.getValue().getValue()); + assertEquals("two", entry.getValue().body()); } @Test(expected = VerifyException.class) diff --git a/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/TestUtils.java b/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/TestUtils.java index 27aa868a72..8169228a39 100644 --- a/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/TestUtils.java +++ b/attic/yang-data-jaxen/src/test/java/org/opendaylight/yangtools/yang/data/jaxen/TestUtils.java @@ -14,7 +14,7 @@ import static org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes.ma import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; @@ -60,7 +60,7 @@ final class TestUtils { * * @return A test document instance. */ - public static NormalizedNode createNormalizedNodes() { + public static ContainerNode createNormalizedNodes() { return ImmutableContainerNodeBuilder .create() .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(ROOT_QNAME)) diff --git a/benchmarks/src/main/java/org/opendaylight/yangtools/yang/data/impl/tree/InMemoryDataTreeBenchmark.java b/benchmarks/src/main/java/org/opendaylight/yangtools/yang/data/impl/tree/InMemoryDataTreeBenchmark.java index 49e85b7c56..d944fc8c5d 100644 --- a/benchmarks/src/main/java/org/opendaylight/yangtools/yang/data/impl/tree/InMemoryDataTreeBenchmark.java +++ b/benchmarks/src/main/java/org/opendaylight/yangtools/yang/data/impl/tree/InMemoryDataTreeBenchmark.java @@ -17,6 +17,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.CursorAwareDataTreeModification; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; @@ -78,7 +79,7 @@ public class InMemoryDataTreeBenchmark { private static final MapNode TEN_ITEM_INNER_LIST = initInnerListItems(10); private static MapNode initInnerListItems(final int count) { - final CollectionNodeBuilder mapEntryBuilder = ImmutableNodes + final CollectionNodeBuilder mapEntryBuilder = ImmutableNodes .mapNodeBuilder(BenchmarkModel.INNER_LIST); for (int i = 0; i < count; ++i) { @@ -89,14 +90,14 @@ public class InMemoryDataTreeBenchmark { return mapEntryBuilder.build(); } - private static final NormalizedNode[] OUTER_LIST_ONE_ITEM_INNER_LIST = initOuterListItems(OUTER_LIST_100K, + private static final NormalizedNode[] OUTER_LIST_ONE_ITEM_INNER_LIST = initOuterListItems(OUTER_LIST_100K, ONE_ITEM_INNER_LIST); - private static final NormalizedNode[] OUTER_LIST_TWO_ITEM_INNER_LIST = initOuterListItems(OUTER_LIST_50K, + private static final NormalizedNode[] OUTER_LIST_TWO_ITEM_INNER_LIST = initOuterListItems(OUTER_LIST_50K, TWO_ITEM_INNER_LIST); - private static final NormalizedNode[] OUTER_LIST_TEN_ITEM_INNER_LIST = initOuterListItems(OUTER_LIST_10K, + private static final NormalizedNode[] OUTER_LIST_TEN_ITEM_INNER_LIST = initOuterListItems(OUTER_LIST_10K, TEN_ITEM_INNER_LIST); - private static NormalizedNode[] initOuterListItems(final int outerListItemsCount, final MapNode innerList) { + private static NormalizedNode[] initOuterListItems(final int outerListItemsCount, final MapNode innerList) { return Arrays.stream(OUTER_LIST_IDS).limit(outerListItemsCount) .map(id -> ImmutableNodes.mapEntryBuilder().withNodeIdentifier(id).withChild(innerList).build()) .collect(Collectors.toList()).toArray(new NormalizedNode[0]); diff --git a/common/util/src/main/java/org/opendaylight/yangtools/util/UnmodifiableMap.java b/common/util/src/main/java/org/opendaylight/yangtools/util/UnmodifiableMap.java new file mode 100644 index 0000000000..71587b022c --- /dev/null +++ b/common/util/src/main/java/org/opendaylight/yangtools/util/UnmodifiableMap.java @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.util; + +import static java.util.Objects.requireNonNull; + +import com.google.common.annotations.Beta; +import com.google.common.collect.ImmutableMap; +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import java.util.Set; +import org.eclipse.jdt.annotation.NonNull; +import org.gaul.modernizer_maven_annotations.SuppressModernizer; +import org.opendaylight.yangtools.concepts.Immutable; + +/** + * An unmodifiable view over a {@link Map}. Unlike the view returned via {@link Collections#unmodifiableMap(Map)}, this + * class checks its argument to ensure multiple encapsulation does not occur. + * + *

This class checks the argument so it prevents multiple encapsulation. Subclasses of + * {@link ImmutableMap} are also recognized and not encapsulated. + * + * @param the type of keys maintained by this map + * @param the type of mapped values + */ +@Beta +public final class UnmodifiableMap implements Map, Immutable { + private final @NonNull Map delegate; + + private UnmodifiableMap(@NonNull final Map delegate) { + this.delegate = requireNonNull(delegate); + } + + /** + * Create an unmodifiable view of the target {@link Map}. If the map is known to be unmodifiable, that same instance + * is returned. Otherwise an unmodifiable view of the map will be returned. + * + * @param map Target map + * @return An unmodifiable view of the map + * @throws NullPointerException if {@code map} is null + */ + @SuppressModernizer + public static @NonNull Map of(final @NonNull Map map) { + return map instanceof Immutable || map instanceof ImmutableMap || Collections.EMPTY_MAP == map + ? map : new UnmodifiableMap<>(map); + } + + @Override + public int size() { + return delegate.size(); + } + + @Override + public boolean isEmpty() { + return delegate.isEmpty(); + } + + @Override + public boolean containsKey(final Object key) { + return delegate.containsKey(key); + } + + @Override + public boolean containsValue(final Object value) { + return delegate.containsValue(value); + } + + @Override + public V get(final Object key) { + return delegate.get(key); + } + + @Override + public Set keySet() { + return Collections.unmodifiableSet(delegate.keySet()); + } + + @Override + public Collection values() { + return Collections.unmodifiableCollection(delegate.values()); + } + + @Override + public Set> entrySet() { + return Collections.unmodifiableSet(delegate.entrySet()); + } + + @Override + public int hashCode() { + return delegate.hashCode(); + } + + @Override + public boolean equals(final Object obj) { + return obj == this || obj instanceof Map && delegate.equals(obj); + } + + @Override + public String toString() { + return delegate.toString(); + } + + @Override + public V put(final K key, final V value) { + throw new UnsupportedOperationException(); + } + + @Override + public V remove(final Object key) { + throw new UnsupportedOperationException(); + } + + @Override + @SuppressWarnings("checkstyle:parameterName") + public void putAll(final Map m) { + throw new UnsupportedOperationException(); + } + + @Override + public void clear() { + throw new UnsupportedOperationException(); + } +} diff --git a/yang/rfc7952-data-api/src/main/java/org/opendaylight/yangtools/rfc7952/data/api/NormalizedMetadata.java b/yang/rfc7952-data-api/src/main/java/org/opendaylight/yangtools/rfc7952/data/api/NormalizedMetadata.java index 6edd0210fe..988436d592 100644 --- a/yang/rfc7952-data-api/src/main/java/org/opendaylight/yangtools/rfc7952/data/api/NormalizedMetadata.java +++ b/yang/rfc7952-data-api/src/main/java/org/opendaylight/yangtools/rfc7952/data/api/NormalizedMetadata.java @@ -23,7 +23,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; /** * RFC7952 metadata counterpart to a {@link NormalizedNode}. This interface is meant to be used as a companion to * a NormalizedNode instance, hence it does not support iterating over its structure like it is possible with - * {@link NormalizedNode#getValue()}. Children may be inquired through {@link #getChildren()}. + * {@link NormalizedNode#body()}. Children may be inquired through {@link #getChildren()}. * *

* This model of metadata does not have the RFC7952 restriction on metadata attachment to {@code list}s and diff --git a/yang/rfc7952-data-util/src/main/java/org/opendaylight/yangtools/rfc7952/data/util/ImmutableMetadataNormalizedAnydata.java b/yang/rfc7952-data-util/src/main/java/org/opendaylight/yangtools/rfc7952/data/util/ImmutableMetadataNormalizedAnydata.java index a0502adfcc..ae3208f46c 100644 --- a/yang/rfc7952-data-util/src/main/java/org/opendaylight/yangtools/rfc7952/data/util/ImmutableMetadataNormalizedAnydata.java +++ b/yang/rfc7952-data-util/src/main/java/org/opendaylight/yangtools/rfc7952/data/util/ImmutableMetadataNormalizedAnydata.java @@ -28,13 +28,13 @@ public final class ImmutableMetadataNormalizedAnydata extends ImmutableNormalize private final NormalizedMetadata metadata; public ImmutableMetadataNormalizedAnydata(final EffectiveModelContext schemaContext, - final DataSchemaNode contextNode, final NormalizedNode data, final NormalizedMetadata metadata) { + final DataSchemaNode contextNode, final NormalizedNode data, final NormalizedMetadata metadata) { super(schemaContext, contextNode, data); this.metadata = requireNonNull(metadata); } public static ImmutableNormalizedAnydata ofOptional(final EffectiveModelContext schemaContext, - final DataSchemaNode contextNode, final NormalizedNode data, + final DataSchemaNode contextNode, final NormalizedNode data, final Optional metadata) { return metadata.isPresent() ? new ImmutableMetadataNormalizedAnydata(schemaContext, contextNode, data, metadata.get()) diff --git a/yang/rfc7952-data-util/src/main/java/org/opendaylight/yangtools/rfc7952/data/util/NormalizedMetadataWriter.java b/yang/rfc7952-data-util/src/main/java/org/opendaylight/yangtools/rfc7952/data/util/NormalizedMetadataWriter.java index 136ca83b31..80ae0d6b12 100644 --- a/yang/rfc7952-data-util/src/main/java/org/opendaylight/yangtools/rfc7952/data/util/NormalizedMetadataWriter.java +++ b/yang/rfc7952-data-util/src/main/java/org/opendaylight/yangtools/rfc7952/data/util/NormalizedMetadataWriter.java @@ -99,7 +99,7 @@ public final class NormalizedMetadataWriter implements Closeable, Flushable { * @throws IllegalArgumentException if metadata does not match data * @throws IOException when thrown from the backing writer. */ - public @NonNull NormalizedMetadataWriter write(final NormalizedNode data, final NormalizedMetadata metadata) + public @NonNull NormalizedMetadataWriter write(final NormalizedNode data, final NormalizedMetadata metadata) throws IOException { final PathArgument dataId = data.getIdentifier(); final PathArgument metaId = metadata.getIdentifier(); diff --git a/yang/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MountPointChild.java b/yang/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MountPointChild.java index ef59821583..277482d60a 100644 --- a/yang/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MountPointChild.java +++ b/yang/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MountPointChild.java @@ -41,5 +41,5 @@ public interface MountPointChild { * @throws IOException if an underlying error occurs * @throws NullPointerException if any of the arguments is null */ - NormalizedNode normalizeTo(EffectiveModelContext schemaContext) throws IOException; + NormalizedNode normalizeTo(EffectiveModelContext schemaContext) throws IOException; } diff --git a/yang/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MountPointNode.java b/yang/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MountPointNode.java index 82db4f2130..697da8759f 100644 --- a/yang/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MountPointNode.java +++ b/yang/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MountPointNode.java @@ -8,10 +8,8 @@ package org.opendaylight.yangtools.rfc8528.data.api; import com.google.common.annotations.Beta; -import java.util.Collection; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.MixinNode; @@ -29,9 +27,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.MixinNode; * handle them, provided they get enough support from MountPointContext. */ @Beta -public interface MountPointNode extends MixinNode, DataContainerNode, - DataContainerChild>> { +public interface MountPointNode extends DataContainerNode, DataContainerChild, MixinNode { @Override + @Deprecated default QName getNodeType() { return getIdentifier().getLabel(); } diff --git a/yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/AbstractDynamicMountPointContextFactory.java b/yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/AbstractDynamicMountPointContextFactory.java index ed2d3e0e20..0f127a5b48 100644 --- a/yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/AbstractDynamicMountPointContextFactory.java +++ b/yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/AbstractDynamicMountPointContextFactory.java @@ -52,7 +52,7 @@ public abstract class AbstractDynamicMountPointContextFactory extends AbstractSi continue; } - final NormalizedNode libData; + final NormalizedNode libData; try { libData = entry.getValue().normalizeTo(optLibContext.get()); } catch (IOException e) { @@ -67,7 +67,7 @@ public abstract class AbstractDynamicMountPointContextFactory extends AbstractSi return new EmptyMountPointContext(schemaContext); } - final NormalizedNode mountData; + final NormalizedNode mountData; try { mountData = schemaMounts.normalizeTo(schemaContext); } catch (IOException e) { diff --git a/yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/AbstractMountPointContextFactory.java b/yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/AbstractMountPointContextFactory.java index bbe4f560fb..4f0553bd2e 100644 --- a/yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/AbstractMountPointContextFactory.java +++ b/yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/AbstractMountPointContextFactory.java @@ -14,7 +14,6 @@ import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.collect.ImmutableSet; import java.util.Iterator; -import java.util.Optional; import java.util.stream.Collectors; import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.yangtools.concepts.AbstractSimpleIdentifiable; @@ -103,19 +102,17 @@ public abstract class AbstractMountPointContextFactory extends AbstractDynamicMo final ContainerNode mountData) { checkArgument(SCHEMA_MOUNTS.equals(mountData.getIdentifier()), "Unexpected top-level container %s", mountData); - final Optional> optMountPoint = mountData.getChild(MOUNT_POINT); - if (optMountPoint.isEmpty()) { + final DataContainerChild mountPoint = mountData.childByArg(MOUNT_POINT); + if (mountPoint == null) { LOG.debug("mount-point list not present in {}", mountData); return new EmptyMountPointContext(schemaContext); } - - final DataContainerChild mountPoint = optMountPoint.get(); checkArgument(mountPoint instanceof MapNode, "mount-point list %s is not a MapNode", mountPoint); - return new ImmutableMountPointContext(schemaContext, ((MapNode) mountPoint).getValue().stream().map(entry -> { - final String moduleName = entry.getChild(MODULE).map(mod -> { + return new ImmutableMountPointContext(schemaContext, ((MapNode) mountPoint).body().stream().map(entry -> { + final String moduleName = entry.findChildByArg(MODULE).map(mod -> { checkArgument(mod instanceof LeafNode, "Unexpected module leaf %s", mod); - final Object value = mod.getValue(); + final Object value = mod.body(); checkArgument(value instanceof String, "Unexpected module leaf value %s", value); return (String) value; }).orElseThrow(() -> new IllegalArgumentException("Mount module missing in " + entry)); @@ -124,35 +121,35 @@ public abstract class AbstractMountPointContextFactory extends AbstractDynamicMo final QNameModule module = it.next().getQNameModule(); return new MountPointDefinition( - MountPointIdentifier.of(QName.create(module, entry.getChild(LABEL).map(lbl -> { + MountPointIdentifier.of(QName.create(module, entry.findChildByArg(LABEL).map(lbl -> { checkArgument(lbl instanceof LeafNode, "Unexpected label leaf %s", lbl); - final Object value = lbl.getValue(); + final Object value = lbl.body(); checkArgument(value instanceof String, "Unexpected label leaf value %s", value); return (String) value; }).orElseThrow(() -> new IllegalArgumentException("Mount module missing in " + entry)))), - entry.getChild(CONFIG).map(cfg -> { + entry.findChildByArg(CONFIG).map(cfg -> { checkArgument(cfg instanceof LeafNode, "Unexpected config leaf %s", cfg); - final Object value = cfg.getValue(); + final Object value = cfg.body(); checkArgument(value instanceof Boolean, "Unexpected config leaf value %s", cfg); return (Boolean) value; }).orElse(Boolean.TRUE), - getSchema(entry.getChild(SCHEMA_REF) + getSchema(entry.findChildByArg(SCHEMA_REF) .orElseThrow(() -> new IllegalArgumentException("Missing schema-ref choice in " + entry)))); }).collect(Collectors.toList()), this::createContextFactory); } - private static ImmutableSet getSchema(final DataContainerChild child) { + private static ImmutableSet getSchema(final DataContainerChild child) { checkArgument(child instanceof ChoiceNode, "Unexpected schema-ref choice %s", child); final ChoiceNode schemaRef = (ChoiceNode) child; - return schemaRef.getChild(SHARED_SCHEMA).map(sharedSchema -> { + return schemaRef.findChildByArg(SHARED_SCHEMA).map(sharedSchema -> { checkArgument(sharedSchema instanceof ContainerNode, "Unexpected shared-schema container %s", sharedSchema); - return ((ContainerNode) sharedSchema).getChild(PARENT_REFERENCE) + return ((ContainerNode) sharedSchema).findChildByArg(PARENT_REFERENCE) // FIXME: 7.0.0: parse XPaths. Do we have enough context for that? .map(parentRef -> ImmutableSet.of()) .orElseGet(ImmutableSet::of); }).orElseGet(() -> { - checkArgument(schemaRef.getChild(INLINE).isPresent(), "Unhandled schema-ref type in %s", schemaRef); + checkArgument(schemaRef.findChildByArg(INLINE).isPresent(), "Unhandled schema-ref type in %s", schemaRef); return ImmutableSet.of(); }); } diff --git a/yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/ImmutableMountPointNode.java b/yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/ImmutableMountPointNode.java index 794421dbe8..a95dc116bb 100644 --- a/yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/ImmutableMountPointNode.java +++ b/yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/ImmutableMountPointNode.java @@ -12,9 +12,8 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects.ToStringHelper; import java.util.Collection; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.concepts.AbstractSimpleIdentifiable; +import org.opendaylight.yangtools.concepts.AbstractIdentifiable; import org.opendaylight.yangtools.concepts.Immutable; import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext; import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier; @@ -24,9 +23,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; @Beta -public final class ImmutableMountPointNode extends AbstractSimpleIdentifiable +public final class ImmutableMountPointNode extends AbstractIdentifiable implements MountPointNode, Immutable { - private final @NonNull MountPointContext mountCtx; private final @NonNull ContainerNode delegate; @@ -48,13 +46,13 @@ public final class ImmutableMountPointNode extends AbstractSimpleIdentifiable> getValue() { - return delegate.getValue(); + public Collection body() { + return delegate.body(); } @Override - public Optional> getChild(final PathArgument child) { - return delegate.getChild(child); + public DataContainerChild childByArg(final PathArgument child) { + return delegate.childByArg(child); } @Override diff --git a/yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/MountPointNormalizedNodeWriter.java b/yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/MountPointNormalizedNodeWriter.java index 6decdc2bc4..1f2163348f 100644 --- a/yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/MountPointNormalizedNodeWriter.java +++ b/yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/MountPointNormalizedNodeWriter.java @@ -15,7 +15,6 @@ import java.io.IOException; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.rfc8528.data.api.MountPointNode; import org.opendaylight.yangtools.rfc8528.data.api.StreamWriterMountPointExtension; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; @@ -50,7 +49,7 @@ public abstract class MountPointNormalizedNodeWriter extends NormalizedNodeWrite void writeMountPoint(final MountPointNode node) throws IOException { try (MountPointNormalizedNodeWriter writer = forStreamWriter(mountWriter.startMountPoint( node.getIdentifier(), node.getMountPointContext()))) { - for (DataContainerChild child : node.getValue()) { + for (DataContainerChild child : node.body()) { writer.write(child); } } @@ -79,7 +78,7 @@ public abstract class MountPointNormalizedNodeWriter extends NormalizedNodeWrite } @Override - protected final boolean wasProcessedAsCompositeNode(final NormalizedNode node) throws IOException { + protected final boolean wasProcessedAsCompositeNode(final NormalizedNode node) throws IOException { if (node instanceof MountPointNode) { writeMountPoint((MountPointNode) node); return true; diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnydataNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnydataNode.java index 080c2364ee..3c52c5f24c 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnydataNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnydataNode.java @@ -25,6 +25,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent * @param Value type, uniquely identifying the object model used for values */ @Beta -public interface AnydataNode extends ForeignDataNode { - +public interface AnydataNode extends ForeignDataNode { + @Override + NodeIdentifier getIdentifier(); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnyxmlNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnyxmlNode.java index 30134a6aac..a0c7262d4a 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnyxmlNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnyxmlNode.java @@ -17,6 +17,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent * @param Value type, uniquely identifying the object model used for values */ @Beta -public interface AnyxmlNode extends ForeignDataNode { - +public interface AnyxmlNode extends ForeignDataNode { + @Override + NodeIdentifier getIdentifier(); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AugmentationNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AugmentationNode.java index c85a6ce715..843ae29a72 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AugmentationNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AugmentationNode.java @@ -7,9 +7,7 @@ */ package org.opendaylight.yangtools.yang.data.api.schema; -import java.util.Collection; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; /** @@ -22,9 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; *

* Augmentation node MUST NOT be direct child of other augmentation node. */ -public interface AugmentationNode extends MixinNode, DataContainerNode, - DataContainerChild>> { - +public interface AugmentationNode extends DataContainerNode, DataContainerChild, MixinNode { /** * Gets identifier of augmentation node. Returned identifier of augmentation node contains all possible * direct child QNames. diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ChoiceNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ChoiceNode.java index d5cc5b467f..43fa25ae34 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ChoiceNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ChoiceNode.java @@ -7,9 +7,7 @@ */ package org.opendaylight.yangtools.yang.data.api.schema; -import java.util.Collection; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; /** * Node representing data instance of choice. @@ -27,7 +25,6 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum * {@link org.opendaylight.yangtools.yang.model.api.CaseSchemaNode}, which are retrieved via * {@link org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode#getCases()}. */ -public interface ChoiceNode extends MixinNode, DataContainerNode, - DataContainerChild>> { +public interface ChoiceNode extends MixinNode, DataContainerNode, DataContainerChild { } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ContainerNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ContainerNode.java index d201d7db2f..db7cd44656 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ContainerNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ContainerNode.java @@ -7,9 +7,7 @@ */ package org.opendaylight.yangtools.yang.data.api.schema; -import java.util.Collection; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; /** * Data subtree with cardinality 0..1 in the context of parent node. @@ -21,7 +19,6 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum * Schema of this node is described by instance of * {@link org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode}. */ -public interface ContainerNode extends DataContainerNode, - DataContainerChild>> { +public interface ContainerNode extends DataContainerNode, DataContainerChild { } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DOMSourceAnyxmlNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DOMSourceAnyxmlNode.java index b5be957c13..00d56042bd 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DOMSourceAnyxmlNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DOMSourceAnyxmlNode.java @@ -14,16 +14,17 @@ import javax.xml.transform.dom.DOMSource; */ public interface DOMSourceAnyxmlNode extends AnyxmlNode { @Override - default Class getValueObjectModel() { + default Class bodyObjectModel() { return DOMSource.class; } /** - * Return value represented as a DOMSource. Returned source contains top level element - * that duplicates the anyxml node. + * {@inheritDoc} * - * @return anyxml node value represented as DOMSource. + *

+ * Returned value is a DOMSource representation. Returned source contains top level element that duplicates the + * anyxml node. */ @Override - DOMSource getValue(); + DOMSource body(); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DataContainerChild.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DataContainerChild.java index fb1d803c66..3d65a090a4 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DataContainerChild.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DataContainerChild.java @@ -7,8 +7,6 @@ */ package org.opendaylight.yangtools.yang.data.api.schema; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; - /** * Marker interface for direct children of {@link DataContainerNode}. * @@ -16,17 +14,16 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum * This interface should not be implemented directly, but rather using one of its subinterfaces: * *

    - *
  • {@link LeafNode} - *
  • {@link ContainerNode} - *
  • {@link ChoiceNode} - *
  • {@link MapNode} - *
  • {@link AugmentationNode} + *
  • {@link AugmentationNode}
  • + *
  • {@link ChoiceNode}
  • + *
  • {@link ContainerNode}
  • + *
  • {@link ForeignDataNode}
  • + *
  • {@link LeafNode}
  • + *
  • {@link LeafSetNode}
  • + *
  • {@link MapNode} and its specializations
  • + *
  • {@link UnkeyedListNode}
  • *
- * - * @param Path Argument Type which is used to identify node - * @param Value type */ -public interface DataContainerChild extends NormalizedNode { - @Override - K getIdentifier(); +public interface DataContainerChild extends NormalizedNode { + } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DataContainerNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DataContainerNode.java index d58126d144..93e8de1f2d 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DataContainerNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DataContainerNode.java @@ -7,37 +7,33 @@ */ package org.opendaylight.yangtools.yang.data.api.schema; -import java.util.Collection; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; /** * Abstract node which does not have value but contains valid {@link DataContainerChild} nodes. Schema of this node is * described by instance of {@link org.opendaylight.yangtools.yang.model.api.DataNodeContainer}. * + *

+ * NOTE: + * All implementations of this interface are assumed to be {@link OrderingAware.System}, i.e. order-independent. + * *

Implementation notes

* This interface should not be implemented directly, but rather implementing one of it's subclasses *
    - *
  • {@link ContainerNode} - *
  • {@link MapEntryNode} - *
  • {@link UnkeyedListEntryNode} - *
  • {@link ChoiceNode} - *
  • {@link AugmentationNode} + *
  • {@link AugmentationNode}
  • + *
  • {@link ChoiceNode}
  • + *
  • {@link ContainerNode}
  • + *
  • {@link MapEntryNode} and its specializations
  • + *
  • {@link UnkeyedListEntryNode}
  • *
* - * @param {@link PathArgument} which identifies instance of {@link DataContainerNode} + * @param {@link PathArgument} which identifies this instance {@link DataContainerNode} */ -public interface DataContainerNode extends - NormalizedNodeContainer> { - /** - * Returns iteration of all child nodes. Order of returned child nodes may be defined by subinterfaces. - * - *

- * Implementation Notes: - * All nodes returned in this iterable, MUST also be accessible via {@link #getChild(PathArgument)} using their - * associated identifier. - * - * @return Iteration of all child nodes - */ +public interface DataContainerNode + extends DistinctNodeContainer, OrderingAware.System { + @Override + int hashCode(); + @Override - Collection> getValue(); + boolean equals(Object obj); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DistinctNodeContainer.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DistinctNodeContainer.java new file mode 100644 index 0000000000..cd8bf5a9e2 --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DistinctNodeContainer.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.data.api.schema; + +import java.util.Collection; +import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; + +/** + * A {@link NormalizedNodeContainer} which contains directly-addressable children. It + * + *

+ * NormalizedNodeContainer does not have a value, but it has a child nodes. Definition of possible and valid child nodes + * is introduced in subclasses of this interface. + * + *

+ * This interface should not be used directly, but rather use of of derived subclasses such as + * {@link DataContainerNode}, {@link MapNode}, {@link LeafSetNode}. + * + * @param Path argument type + * @param Child path argument type + * @param Child Node type + */ +public interface DistinctNodeContainer + extends NormalizedNodeContainer { + /** + * {@inheritDoc} + * + *

+ * All nodes returned in this iterable, MUST also be accessible via {@link #childByArg(PathArgument)} using their + * associated identifier. + * + * @return Iteration of all child nodes + */ + @Override + Collection<@NonNull V> body(); + + /** + * Returns a child node identified by provided key. + * + * @param key Path argument identifying child node + * @return Matching child node, or null if no matching child exists + * @throws NullPointerException if {@code key} is null + */ + @Nullable V childByArg(K key); + + /** + * Attempts to find a child node identified by provided key. + * + * @param key Path argument identifying child node + * @return Optional with child node if child exists. {@link Optional#empty()} if child does not exist + * @throws NullPointerException if {@code key} is null + */ + default Optional findChildByArg(final K key) { + return Optional.ofNullable(childByArg(key)); + } +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DuplicateFinder.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DuplicateFinder.java index ad4190e687..cb6087a318 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DuplicateFinder.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DuplicateFinder.java @@ -13,14 +13,14 @@ import java.util.Map; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; final class DuplicateFinder { - private final Map, DuplicateEntry> identities = new IdentityHashMap<>(); - private final Map, DuplicateEntry> duplicates = new HashMap<>(); + private final Map identities = new IdentityHashMap<>(); + private final Map duplicates = new HashMap<>(); private DuplicateFinder() { // Hidden on purpose } - private void findDuplicates(final YangInstanceIdentifier path, final NormalizedNode node) { + private void findDuplicates(final YangInstanceIdentifier path, final NormalizedNode node) { final DuplicateEntry i = identities.get(node); if (i == null) { final DuplicateEntry d = duplicates.get(node); @@ -32,10 +32,10 @@ final class DuplicateFinder { d.addDuplicate(path); } - if (node instanceof NormalizedNodeContainer) { - final NormalizedNodeContainer container = (NormalizedNodeContainer) node; + if (node instanceof NormalizedNodeContainer) { + final NormalizedNodeContainer container = (NormalizedNodeContainer) node; - for (NormalizedNode c : container.getValue()) { + for (NormalizedNode c : container.body()) { findDuplicates(path.node(c.getIdentifier()), c); } } @@ -52,7 +52,7 @@ final class DuplicateFinder { * @param node Root node, may not be null. * @return List of entries */ - static Map, DuplicateEntry> findDuplicates(final NormalizedNode node) { + static Map findDuplicates(final NormalizedNode node) { final DuplicateFinder finder = new DuplicateFinder(); finder.findDuplicates(YangInstanceIdentifier.empty(), node); return finder.identities; diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ForeignDataNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ForeignDataNode.java index 0b9d7c4537..a4c3c88d1e 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ForeignDataNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ForeignDataNode.java @@ -10,7 +10,6 @@ package org.opendaylight.yangtools.yang.data.api.schema; import com.google.common.annotations.Beta; import javax.xml.transform.dom.DOMSource; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; /** * A NormalizedNode holding a value in some foreign object model. The object model is identified by a single class, @@ -20,16 +19,24 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum *

* This interface should not be implemented directly, but rather further specialized, like {@link AnyxmlNode}. * - * @param Local identifier of node * @param Value type, uniquely identifying the object model used for values */ @Beta -public interface ForeignDataNode extends DataContainerChild { +public interface ForeignDataNode extends DataContainerChild { /** - * Return the object model class, which identifies it. For example {@link DOMSourceAnyxmlNode} - * uses {@link DOMSource} as its value object model. + * {@inheritDoc} + * + *

+ * The body follows the object model exposed through {@link #bodyObjectModel()} + */ + @Override + V body(); + + /** + * Return the object model class, which identifies it. For example {@link DOMSourceAnyxmlNode} uses + * {@link DOMSource} as its value object model. * * @return Object model class */ - @NonNull Class getValueObjectModel(); + @NonNull Class bodyObjectModel(); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafNode.java index 8c62072892..7b9a5d4611 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafNode.java @@ -18,12 +18,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent * * @param Value type */ -public interface LeafNode extends DataContainerChild, ValueNode { - /** - * Returns value of this leaf node. - * - * @return Returned value of this leaf node. Value SHOULD meet criteria defined by schema. - */ +public interface LeafNode extends ValueNode, DataContainerChild { @Override - T getValue(); + NodeIdentifier getIdentifier(); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafSetEntryNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafSetEntryNode.java index 6a257f0124..86debe7c0c 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafSetEntryNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafSetEntryNode.java @@ -15,18 +15,16 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithV * * @param Value type */ -public interface LeafSetEntryNode extends NormalizedNode, ValueNode { +public interface LeafSetEntryNode extends ValueNode { /** - * Returns {@link NodeWithValue} which identifies this leaf set entry. Returned {@link NodeWithValue} contains same - * value as this node. + * {@inheritDoc} * + *

* Implementation note * Invocation of {@link NodeWithValue#getValue()} on returned instance of {@link NodeWithValue} must return the - * same value as invocation of {@link #getValue()}, such as following condition is always met: - * {@code true == this.getIdentifier().getValue().equals(this.getValue())}. - * - * @return {@link NodeWithValue} which identifies this leaf set entry. + * same value as invocation of {@code #body()}, such as following condition is always met: + * {@code true == this.getIdentifier().getValue().equals(this.body())}. */ @Override - NodeWithValue getIdentifier(); + NodeWithValue getIdentifier(); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafSetNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafSetNode.java index 77d45199e9..0fb10bbf51 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafSetNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafSetNode.java @@ -7,7 +7,6 @@ */ package org.opendaylight.yangtools.yang.data.api.schema; -import java.util.Collection; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; @@ -20,7 +19,8 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithV * * @param Type of leaf node values. */ -public interface LeafSetNode extends MixinNode, DataContainerChild>>, - NormalizedNodeContainer> { +public interface LeafSetNode + extends DistinctNodeContainer, LeafSetEntryNode>, DataContainerChild, + MixinNode { } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/MapEntryNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/MapEntryNode.java index 11a317087d..a26bf92047 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/MapEntryNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/MapEntryNode.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.yang.data.api.schema; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; /** @@ -20,8 +21,7 @@ public interface MapEntryNode extends DataContainerNodekey ( * {@link org.opendaylight.yangtools.yang.model.api.ListSchemaNode#getKeyDefinition()} * ) statement in YANG schema for associated list item and child {@link LeafNode}s - * values with {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier} - * as defined in the schema. + * values with {@link NodeIdentifier} as defined in the schema. * * @return identifier of this node in the context of parent node */ diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/MapNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/MapNode.java index fc602d5633..b67fe470fd 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/MapNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/MapNode.java @@ -7,20 +7,44 @@ */ package org.opendaylight.yangtools.yang.data.api.schema; +import com.google.common.annotations.Beta; import java.util.Collection; +import java.util.Map; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; /** - * Containment node, which contains {@link MapEntryNode} of the same type, which may - * be quickly retrieved using key. + * Containment node, which contains {@link MapEntryNode} of the same type, which may be quickly retrieved using a key. * *

- * This node maps to the list node in YANG schema, schema and semantics of this node, - * its children and key construction is defined by YANG list - * statement and its key and ordered-by substatements. + * This node maps to the list node in YANG schema, schema and semantics of this node, its children and key construction + * is defined by YANG {@code list} statement and its {@code key} and {@code ordered-by} substatements. */ -public interface MapNode extends MixinNode, DataContainerChild>, - NormalizedNodeContainer { +public interface MapNode + extends DistinctNodeContainer, DataContainerChild, + MixinNode { + /** + * Return a {@link Map} view of this node. Note that the iteration order of the returned is map is not defined in + * this interface. + * + * @return Map view of this node. + */ + @Beta + @NonNull Map asMap(); + @Override + default Collection<@NonNull MapEntryNode> body() { + return asMap().values(); + } + + @Override + default int size() { + return asMap().size(); + } + + @Override + default boolean isEmpty() { + return asMap().isEmpty(); + } } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizableAnydata.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizableAnydata.java index 415c9140df..34002f9150 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizableAnydata.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizableAnydata.java @@ -13,7 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; /** - * An {@link AnydataNode#getValueObjectModel() anydata value object model} which can be normalized to + * An {@link AnydataNode#bodyObjectModel() anydata value object model} which can be normalized to * {@link NormalizedAnydata} when provided with proper context. */ @Beta diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedAnydata.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedAnydata.java index f7c683f5d5..f1fdcf42f3 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedAnydata.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedAnydata.java @@ -31,7 +31,7 @@ public interface NormalizedAnydata extends Immutable, EffectiveModelContextProvi DataSchemaNode getContextNode(); - NormalizedNode getData(); + NormalizedNode getData(); default void writeTo(final NormalizedNodeStreamWriter writer) throws IOException { writeTo(writer, true); diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNode.java index f00cf1184d..116482afc3 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNode.java @@ -18,9 +18,6 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum * *

* See subinterfaces of this interface for concretization of node. - * - * @param Local identifier of node - * @param Value of node */ /* * FIXME: 7.0.0: NormalizedNode represents the perfectly-compliant view of the data, as evaluated by an implementation, @@ -47,32 +44,30 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum * do not agree on details. Furthermore things get way more complicated when we have a cross-schema * boundary -- like RFC8528. Hence we cannot really have a reasonably-structured concept of unverified * data. Nevertheless, this interface should be named 'NormalizedData'. - * - * FIXME: YANGTOOLS-1074: eliminate Identifiable and K type argument - * FIXME: YANGTOOLS-1074: eliminate V type argument */ -public interface NormalizedNode extends Identifiable { +public interface NormalizedNode extends Identifiable { /** * QName of the node as defined in YANG schema. * * @return QName of this node, non-null. */ - // FIXME: YANGTOOLS-1074: eliminate this method - QName getNodeType(); + // FIXME: YANGTOOLS-1074: eliminate this method: the problem is that it down not with with AugmentationIdentifier + // At least we need a 'QNameModule namespace()' method, as that is the common contract. + @Deprecated(forRemoval = true) + default @NonNull QName getNodeType() { + return getIdentifier().getNodeType(); + } - /** - * Locally unique identifier of the node. - * - * @return Node identifier, non-null. - */ @Override - K getIdentifier(); + // We override here, so that NormalizedNode.getIdentifier() has fewer implementations + PathArgument getIdentifier(); /** - * Value of node. + * Returns the body of this node. While the return value specifies {@link Object}, this method's return value has + * further semantics. The returned object must be a well-published contract, such as {@code String}, + * {@code Collection} or {@code DOMSource}. * - * @return Value of the node, may be null. + * @return Returned value of this node. */ - // FIXME: YANGTOOLS-1074: eliminate this method - @NonNull V getValue(); + @NonNull Object body(); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNodeContainer.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNodeContainer.java index 01f1965503..bf7086555d 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNodeContainer.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNodeContainer.java @@ -8,55 +8,46 @@ package org.opendaylight.yangtools.yang.data.api.schema; import java.util.Collection; -import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; /** - * Node which is not leaf, but has child {@link NormalizedNode}s as its value. + * Node which is not leaf, but has child {@link NormalizedNode}s as its value. It provides iteration over its child + * nodes via {@link #body()}. More convenient access to child nodes are provided by {@link DistinctNodeContainer} and + * {@link OrderedNodeContainer}. * - *

- * NormalizedNodeContainer does not have a value, but it has a child nodes. Definition of possible and valid child nodes - * is introduced in subclasses of this interface. - * - *

- * This interface should not be used directly, but rather use of of derived subclasses such as - * {@link DataContainerNode}, {@link MapNode}, {@link LeafSetNode}. - * - * @param Node Identifier type - * @param Child Node Identifier type + * @param Path argument type * @param Child Node type */ -public interface NormalizedNodeContainer> extends NormalizedNode> { - +public interface NormalizedNodeContainer + extends NormalizedNode, OrderingAware { @Override I getIdentifier(); /** - * Returns immutable iteration of child nodes of this node. + * {@inheritDoc} + * + *

+ * Returns iteration of all child nodes. Order of returned child nodes may be defined by subinterfaces. */ @Override - Collection getValue(); + Collection<@NonNull V> body(); /** - * Return the logical size of this container, i.e. the number of children in contains. - * - *

- * Default implementation defers to the collection returned by {@link #getValue()}. Implementations are strongly - * encouraged to provide a more efficient implementation of this method. + * Return the logical size of this container body. The default implementation defers to {@code body().size()}. * - * @return Number of child nodes in this container. + * @return Size of this container's body. */ - // FIXME: 7.0.0: consider making this method non-default, but then it will conflict in OrderedLeafSet default int size() { - return getValue().size(); + return body().size(); } /** - * Returns child node identified by provided key. + * Determine whether this container body is empty. The default implementation defers to {@code body().isEmpty()}. * - * @param child Path argument identifying child node - * @return Optional with child node if child exists. {@link Optional#empty()} if child does not exist. + * @return True if this container has an empty body. */ - Optional getChild(K child); + default boolean isEmpty() { + return body().isEmpty(); + } } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNodes.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNodes.java index 08661bf0d0..4b3861007b 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNodes.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNodes.java @@ -46,43 +46,43 @@ public final class NormalizedNodes { * @param node A normalized node subtree, may not be null * @return A Map of NormalizedNode/DuplicateEntry relationships. */ - public static Map, DuplicateEntry> findDuplicates(final @NonNull NormalizedNode node) { + public static Map findDuplicates(final @NonNull NormalizedNode node) { return Maps.filterValues(DuplicateFinder.findDuplicates(node), input -> !input.getDuplicates().isEmpty()); } - public static Optional> findNode(final YangInstanceIdentifier rootPath, - final NormalizedNode rootNode, final YangInstanceIdentifier childPath) { + public static Optional findNode(final YangInstanceIdentifier rootPath, + final NormalizedNode rootNode, final YangInstanceIdentifier childPath) { final Optional relativePath = childPath.relativeTo(rootPath); return relativePath.isPresent() ? findNode(rootNode, relativePath.get()) : Optional.empty(); } - public static Optional> findNode(final Optional> parent, + public static Optional findNode(final Optional parent, final Iterable relativePath) { final Iterator pathIterator = requireNonNull(relativePath, "Relative path must not be null") .iterator(); - Optional> currentNode = requireNonNull(parent, "Parent must not be null"); + Optional currentNode = requireNonNull(parent, "Parent must not be null"); while (currentNode.isPresent() && pathIterator.hasNext()) { currentNode = getDirectChild(currentNode.get(), pathIterator.next()); } return currentNode; } - public static Optional> findNode(final Optional> parent, + public static Optional findNode(final Optional parent, final PathArgument pathArg) { return parent.flatMap(node -> getDirectChild(node, pathArg)); } - public static Optional> findNode(final Optional> parent, + public static Optional findNode(final Optional parent, final PathArgument... relativePath) { return findNode(parent, Arrays.asList(relativePath)); } - public static Optional> findNode(final @Nullable NormalizedNode parent, + public static Optional findNode(final @Nullable NormalizedNode parent, final PathArgument pathArg) { return parent == null ? Optional.empty() : getDirectChild(parent, pathArg); } - public static Optional> findNode(final NormalizedNode parent, + public static Optional findNode(final NormalizedNode parent, final Iterable relativePath) { return findNode(Optional.ofNullable(parent), relativePath); } @@ -93,38 +93,38 @@ public final class NormalizedNodes { * @deprecated Use {@link #findNode(NormalizedNode, Descendant)} instead. */ @Deprecated(forRemoval = true) - public static Optional> findNode(final NormalizedNode parent, + public static Optional findNode(final NormalizedNode parent, final SchemaPath relativePath) { checkArgument(!relativePath.isAbsolute(), "%s is not a relative path", relativePath); return findNode(Optional.ofNullable(parent), Iterables.transform(relativePath.getPathFromRoot(), NodeIdentifier::new)); } - public static Optional> findNode(final NormalizedNode parent, final Descendant path) { + public static Optional findNode(final NormalizedNode parent, final Descendant path) { return findNode(Optional.ofNullable(parent), Iterables.transform(path.getNodeIdentifiers(), NodeIdentifier::new)); } - public static Optional> findNode(final NormalizedNode parent, + public static Optional findNode(final NormalizedNode parent, final PathArgument... relativePath) { return findNode(parent, Arrays.asList(relativePath)); } - public static Optional> findNode(final NormalizedNode tree, + public static Optional findNode(final NormalizedNode tree, final YangInstanceIdentifier path) { return findNode(Optional.of(requireNonNull(tree, "Tree must not be null")), requireNonNull(path, "Path must not be null").getPathArguments()); } @SuppressWarnings({ "unchecked", "rawtypes" }) - public static Optional> getDirectChild(final NormalizedNode node, + public static Optional getDirectChild(final NormalizedNode node, final PathArgument pathArg) { if (node instanceof DataContainerNode) { - return (Optional) ((DataContainerNode) node).getChild(pathArg); + return (Optional) ((DataContainerNode) node).findChildByArg(pathArg); } else if (node instanceof MapNode && pathArg instanceof NodeIdentifierWithPredicates) { - return (Optional) ((MapNode) node).getChild((NodeIdentifierWithPredicates) pathArg); + return (Optional) ((MapNode) node).findChildByArg((NodeIdentifierWithPredicates) pathArg); } else if (node instanceof LeafSetNode && pathArg instanceof NodeWithValue) { - return (Optional) ((LeafSetNode) node).getChild((NodeWithValue) pathArg); + return (Optional) ((LeafSetNode) node).findChildByArg((NodeWithValue) pathArg); } // Anything else, including ValueNode return Optional.empty(); @@ -136,27 +136,24 @@ public final class NormalizedNodes { * @param node Data subtree root * @return String containing a human-readable form of the subtree. */ - public static String toStringTree(final NormalizedNode node) { + public static String toStringTree(final NormalizedNode node) { final StringBuilder builder = new StringBuilder(); toStringTree(builder, node, 0); return builder.toString(); } - private static void toStringTree(final StringBuilder builder, final NormalizedNode node, final int offset) { + private static void toStringTree(final StringBuilder builder, final NormalizedNode node, final int offset) { final String prefix = " ".repeat(offset); builder.append(prefix).append(toStringTree(node.getIdentifier())); if (node instanceof NormalizedNodeContainer) { - final NormalizedNodeContainer container = (NormalizedNodeContainer) node; - builder.append(" {\n"); - for (NormalizedNode child : container.getValue()) { + for (NormalizedNode child : ((NormalizedNodeContainer) node).body()) { toStringTree(builder, child, offset + STRINGTREE_INDENT); } - builder.append(prefix).append('}'); } else { - builder.append(' ').append(node.getValue()); + builder.append(' ').append(node.body()); } builder.append('\n'); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OrderedMapNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OrderedMapNode.java deleted file mode 100644 index bfe6dae702..0000000000 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OrderedMapNode.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.data.api.schema; - -/** - * Map node which preserves user-supplied ordering. - * - *

- * This node represents a data instance of list with - * ordered-by user; substatement and key definition. - * - *

- * Except preserving user-ordering all other semantics and behaviour is same as - * in {@link MapNode}. - */ -public interface OrderedMapNode extends MapNode, OrderedNodeContainer { - -} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OrderedNodeContainer.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OrderedNodeContainer.java index 4516d77c72..d222f9e7d6 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OrderedNodeContainer.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OrderedNodeContainer.java @@ -7,17 +7,17 @@ */ package org.opendaylight.yangtools.yang.data.api.schema; -import java.util.Collection; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; /** - * Normalized Node container which preserves user supplied ordering - * and allows addressing of child elements by position. + * A {@link NormalizedNodeContainer} which preserves user supplied ordering and allows addressing of child elements by + * position. All implementations of this interface must also implement {@link OrderingAware.User}. * * @param child type */ -public interface OrderedNodeContainer> extends MixinNode, - NormalizedNode> { +public interface OrderedNodeContainer + extends NormalizedNodeContainer, MixinNode, OrderingAware.User { /** * Returns child node by position. * @@ -25,12 +25,16 @@ public interface OrderedNodeContainer> extends Mi * @return Child Node * @throws IndexOutOfBoundsException Out of bound Exception */ - V getChild(int position); + // FIXME: 7.0.0: rename to 'childAt(int)' + @NonNull V getChild(int position); - /** - * Returns count of child nodes. - * - * @return count of child nodes. - */ - int getSize(); + // FIXME: 7.0.0: do we really mean 'List' for body? + // @Override + // List body(); + + @Override + int hashCode(); + + @Override + boolean equals(Object obj); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OrderingAware.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OrderingAware.java new file mode 100644 index 0000000000..9a977b74b9 --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OrderingAware.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.data.api.schema; + +import com.google.common.annotations.Beta; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.opendaylight.yangtools.concepts.ItemOrder.Ordered; +import org.opendaylight.yangtools.concepts.ItemOrder.Unordered; +import org.opendaylight.yangtools.yang.common.Ordering; + +/** + * Marker interfaces for {@link NormalizedNodeContainer}s which have distinct ordering requirements. + */ +@Beta +@NonNullByDefault +public interface OrderingAware { + /** + * Marker interface for NormalizedNodeContainer implementations which correspond to {@code ordered-by system}. These + * follow the {@link Unordered} contract. + */ + public interface System extends OrderingAware, Unordered { + @Override + default Ordering ordering() { + return Ordering.SYSTEM; + } + } + + /** + * Marker interface for NormalizedNodeContainer implementations which correspond to {@code ordered-by user}. These + * follow the {@link Ordered} contract. + */ + public interface User extends OrderingAware, Ordered { + @Override + default Ordering ordering() { + return Ordering.USER; + } + } + + /** + * Ordering items within this object. + * + * @return This object's item ordering. + */ + Ordering ordering(); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/SystemLeafSetNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/SystemLeafSetNode.java new file mode 100644 index 0000000000..9ec7133a49 --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/SystemLeafSetNode.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.data.api.schema; + +/** + * Node representing set of simple leaf nodes. Node containing instances of {@link LeafSetEntryNode}. + * + *

+ * Schema and semantics of this node are described by instance of + * {@link org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode}. + * + * @param Type of leaf node values. + */ +public interface SystemLeafSetNode extends LeafSetNode, OrderingAware.System { + @Override + int hashCode(); + + @Override + boolean equals(Object obj); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/SystemMapNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/SystemMapNode.java new file mode 100644 index 0000000000..7c39f7674a --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/SystemMapNode.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.data.api.schema; + +/** + * {@link MapNode} which additionally preserves user-supplied ordering. This node represents a data instance of + * a {@code list} with {@code ordered-by user;} substatement and a {@code key} definition. + */ +public interface SystemMapNode extends MapNode, OrderingAware.System { + @Override + int hashCode(); + + @Override + boolean equals(Object obj); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/UnkeyedListNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/UnkeyedListNode.java index 63ab2cd167..139de92b8e 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/UnkeyedListNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/UnkeyedListNode.java @@ -7,23 +7,14 @@ */ package org.opendaylight.yangtools.yang.data.api.schema; -import java.util.Collection; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; - /** - * Containment node, which contains {@link UnkeyedListEntryNode} of the same type, which may - * be quickly retrieved using key. - * - *

- * This node maps to the list statement in YANG schema, - * which did not define key substatement. + * Containment node, which contains {@link UnkeyedListEntryNode} of the same type, which may be quickly retrieved using + * key. This node maps to the list statement in YANG schema, which did not define {@code key} substatement. * *

- * Ordering of the elements is user-defined during construction of instance of this - * interface. Ordered view of elements (iteration) - * is provided by {@link #getValue()} call. + * Ordering of the elements is user-defined during construction of instance of this interface. Ordered view of elements + * (iteration) is provided by {@link #body()} call. */ -public interface UnkeyedListNode extends DataContainerChild>, - OrderedNodeContainer { +public interface UnkeyedListNode extends OrderedNodeContainer, DataContainerChild { } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OrderedLeafSetNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/UserLeafSetNode.java similarity index 50% rename from yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OrderedLeafSetNode.java rename to yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/UserLeafSetNode.java index 062ea08aaf..e6522a1790 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OrderedLeafSetNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/UserLeafSetNode.java @@ -8,18 +8,11 @@ package org.opendaylight.yangtools.yang.data.api.schema; /** - * Leaf set node which preserves user-supplied ordering. - * - *

- * This node represents a data instance of leaf-list with - * ordered-by user; substatement. - * - *

- * Except preserving user-ordering all other semantics and behaviour is same - * as in {@link LeafSetNode}. + * {@link LeafSetNode} which preserves user-supplied ordering. This node represents a data instance of + * a {@code leaf-list} with a {@code ordered-by user;} substatement. * * @param Value type of Leaf entries */ -public interface OrderedLeafSetNode extends LeafSetNode, OrderedNodeContainer> { +public interface UserLeafSetNode extends LeafSetNode, OrderedNodeContainer> { } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/UserMapNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/UserMapNode.java new file mode 100644 index 0000000000..34f50fb015 --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/UserMapNode.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.data.api.schema; + +import java.util.Map; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; + +/** + * {@link MapNode} which additionally preserves user-supplied ordering. This node represents a data instance of + * a {@code list} with {@code ordered-by user;} substatement and a {@code key} definition. + */ +public interface UserMapNode extends MapNode, OrderedNodeContainer { + /** + * {@inheritDoc} + * + *

+ * The implementation is required to define a user-visible iteration order, which must match {@link #getChild(int)}. + */ + @Override + Map asMap(); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ValueNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ValueNode.java index 1556d8bbec..1decdc691c 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ValueNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ValueNode.java @@ -7,24 +7,20 @@ */ package org.opendaylight.yangtools.yang.data.api.schema; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; - /** * Interface holding the common trait of {@link LeafSetEntryNode} and {@link LeafNode}, which both hold a value. * - * @param Local identifier of node - * @param Value of node + * @param Value of node, which needs to be a well-published simple value type. */ -public interface ValueNode extends NormalizedNode { +public interface ValueNode extends NormalizedNode { /** - * Returns value of held by this node. + * {@inheritDoc} * + *

* Implementation note - * Invocation of {@link #getValue()} must provide the same value as value in {@link #getIdentifier()}. - * {@code true == this.getIdentifier().getValue().equals(this.getValue())}. - * - * @return Returned value of this node. Value SHOULD meet criteria defined by schema. + * Invocation of {@code body()} must provide the same value as value in {@link #getIdentifier()}. + * {@code true == this.getIdentifier().getValue().equals(this.body())}. */ @Override - V getValue(); + V body(); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/YangModeledAnyXmlNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/YangModeledAnyXmlNode.java index 255071869f..d910f5dd58 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/YangModeledAnyXmlNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/YangModeledAnyXmlNode.java @@ -8,19 +8,18 @@ package org.opendaylight.yangtools.yang.data.api.schema; import com.google.common.annotations.Beta; -import java.util.Collection; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; /** * AnyXML node with schema of contained XML data. + * + * @deprecated This interface is wrong abstraction. It should be expressed as {@link NormalizableAnydata} equivalent. */ @Beta -public interface YangModeledAnyXmlNode extends DataContainerNode, - DataContainerChild>> { - +@Deprecated +public interface YangModeledAnyXmlNode extends DataContainerNode, DataContainerChild { /** * Returns the schema corresponding to the node's datea. * diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/package-info.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/package-info.java index 12a2e50381..17e633ba06 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/package-info.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/package-info.java @@ -60,7 +60,7 @@ * node, which can occur only once per parent node; its leaves are MapEntryNode * nodes. *

    - *
  • {@link org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode} - + *
  • {@link org.opendaylight.yangtools.yang.data.api.schema.UserMapNode} - * Special node, which can occur only once per parent node; its leaves are * MapEntryNode nodes.
  • *
diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeWriter.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeWriter.java index 87aa4d680b..d57e545ecd 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeWriter.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeWriter.java @@ -17,7 +17,6 @@ import java.io.Closeable; import java.io.Flushable; import java.io.IOException; import java.util.Collection; -import java.util.Optional; import java.util.Set; import javax.xml.stream.XMLStreamReader; import javax.xml.transform.dom.DOMSource; @@ -29,16 +28,17 @@ import org.opendaylight.yangtools.yang.data.api.schema.AnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedLeafSetNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; import org.opendaylight.yangtools.yang.data.api.schema.YangModeledAnyXmlNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -99,7 +99,7 @@ public class NormalizedNodeWriter implements Closeable, Flushable { * @return NormalizedNodeWriter this * @throws IOException when thrown from the backing writer. */ - public NormalizedNodeWriter write(final NormalizedNode node) throws IOException { + public NormalizedNodeWriter write(final NormalizedNode node) throws IOException { if (wasProcessedAsCompositeNode(node)) { return this; } @@ -134,24 +134,24 @@ public class NormalizedNodeWriter implements Closeable, Flushable { return children instanceof Collection ? ((Collection) children).size() : UNKNOWN_SIZE; } - protected boolean wasProcessAsSimpleNode(final NormalizedNode node) throws IOException { + protected boolean wasProcessAsSimpleNode(final NormalizedNode node) throws IOException { if (node instanceof LeafSetEntryNode) { final LeafSetEntryNode nodeAsLeafList = (LeafSetEntryNode)node; writer.startLeafSetEntryNode(nodeAsLeafList.getIdentifier()); - writer.scalarValue(nodeAsLeafList.getValue()); + writer.scalarValue(nodeAsLeafList.body()); writer.endNode(); return true; } else if (node instanceof LeafNode) { final LeafNode nodeAsLeaf = (LeafNode)node; writer.startLeafNode(nodeAsLeaf.getIdentifier()); - writer.scalarValue(nodeAsLeaf.getValue()); + writer.scalarValue(nodeAsLeaf.body()); writer.endNode(); return true; } else if (node instanceof AnyxmlNode) { final AnyxmlNode anyxmlNode = (AnyxmlNode)node; - final Class model = anyxmlNode.getValueObjectModel(); + final Class model = anyxmlNode.bodyObjectModel(); if (writer.startAnyxmlNode(anyxmlNode.getIdentifier(), model)) { - final Object value = node.getValue(); + final Object value = node.body(); if (DOMSource.class.isAssignableFrom(model)) { verify(value instanceof DOMSource, "Inconsistent anyxml node %s", anyxmlNode); writer.domSourceValue((DOMSource) value); @@ -165,9 +165,9 @@ public class NormalizedNodeWriter implements Closeable, Flushable { LOG.debug("Ignoring unhandled anyxml node {}", anyxmlNode); } else if (node instanceof AnydataNode) { final AnydataNode anydata = (AnydataNode) node; - final Class model = anydata.getValueObjectModel(); + final Class model = anydata.bodyObjectModel(); if (writer.startAnydataNode(anydata.getIdentifier(), model)) { - writer.scalarValue(anydata.getValue()); + writer.scalarValue(anydata.body()); writer.endNode(); return true; } @@ -185,8 +185,8 @@ public class NormalizedNodeWriter implements Closeable, Flushable { * @return True * @throws IOException when the writer reports it */ - protected boolean writeChildren(final Iterable> children) throws IOException { - for (final NormalizedNode child : children) { + protected boolean writeChildren(final Iterable children) throws IOException { + for (final NormalizedNode child : children) { write(child); } @@ -195,63 +195,63 @@ public class NormalizedNodeWriter implements Closeable, Flushable { } protected boolean writeMapEntryNode(final MapEntryNode node) throws IOException { - writer.startMapEntryNode(node.getIdentifier(), childSizeHint(node.getValue())); - return writeChildren(node.getValue()); + writer.startMapEntryNode(node.getIdentifier(), childSizeHint(node.body())); + return writeChildren(node.body()); } - protected boolean wasProcessedAsCompositeNode(final NormalizedNode node) throws IOException { + protected boolean wasProcessedAsCompositeNode(final NormalizedNode node) throws IOException { if (node instanceof ContainerNode) { final ContainerNode n = (ContainerNode) node; - writer.startContainerNode(n.getIdentifier(), childSizeHint(n.getValue())); - return writeChildren(n.getValue()); + writer.startContainerNode(n.getIdentifier(), childSizeHint(n.body())); + return writeChildren(n.body()); } if (node instanceof YangModeledAnyXmlNode) { final YangModeledAnyXmlNode n = (YangModeledAnyXmlNode) node; - writer.startYangModeledAnyXmlNode(n.getIdentifier(), childSizeHint(n.getValue())); - return writeChildren(n.getValue()); + writer.startYangModeledAnyXmlNode(n.getIdentifier(), childSizeHint(n.body())); + return writeChildren(n.body()); } if (node instanceof MapEntryNode) { return writeMapEntryNode((MapEntryNode) node); } if (node instanceof UnkeyedListEntryNode) { final UnkeyedListEntryNode n = (UnkeyedListEntryNode) node; - writer.startUnkeyedListItem(n.getIdentifier(), childSizeHint(n.getValue())); - return writeChildren(n.getValue()); + writer.startUnkeyedListItem(n.getIdentifier(), childSizeHint(n.body())); + return writeChildren(n.body()); } if (node instanceof ChoiceNode) { final ChoiceNode n = (ChoiceNode) node; - writer.startChoiceNode(n.getIdentifier(), childSizeHint(n.getValue())); - return writeChildren(n.getValue()); + writer.startChoiceNode(n.getIdentifier(), childSizeHint(n.body())); + return writeChildren(n.body()); } if (node instanceof AugmentationNode) { final AugmentationNode n = (AugmentationNode) node; writer.startAugmentationNode(n.getIdentifier()); - return writeChildren(n.getValue()); + return writeChildren(n.body()); } if (node instanceof UnkeyedListNode) { final UnkeyedListNode n = (UnkeyedListNode) node; - writer.startUnkeyedList(n.getIdentifier(), childSizeHint(n.getValue())); - return writeChildren(n.getValue()); + writer.startUnkeyedList(n.getIdentifier(), childSizeHint(n.body())); + return writeChildren(n.body()); } - if (node instanceof OrderedMapNode) { - final OrderedMapNode n = (OrderedMapNode) node; - writer.startOrderedMapNode(n.getIdentifier(), childSizeHint(n.getValue())); - return writeChildren(n.getValue()); + if (node instanceof UserMapNode) { + final UserMapNode n = (UserMapNode) node; + writer.startOrderedMapNode(n.getIdentifier(), childSizeHint(n.body())); + return writeChildren(n.body()); } - if (node instanceof MapNode) { - final MapNode n = (MapNode) node; - writer.startMapNode(n.getIdentifier(), childSizeHint(n.getValue())); - return writeChildren(n.getValue()); + if (node instanceof SystemMapNode) { + final SystemMapNode n = (SystemMapNode) node; + writer.startMapNode(n.getIdentifier(), childSizeHint(n.body())); + return writeChildren(n.body()); } - if (node instanceof OrderedLeafSetNode) { - final LeafSetNode n = (LeafSetNode) node; - writer.startOrderedLeafSet(n.getIdentifier(), childSizeHint(n.getValue())); - return writeChildren(n.getValue()); + if (node instanceof UserLeafSetNode) { + final UserLeafSetNode n = (UserLeafSetNode) node; + writer.startOrderedLeafSet(n.getIdentifier(), childSizeHint(n.body())); + return writeChildren(n.body()); } - if (node instanceof LeafSetNode) { - final LeafSetNode n = (LeafSetNode) node; - writer.startLeafSet(n.getIdentifier(), childSizeHint(n.getValue())); - return writeChildren(n.getValue()); + if (node instanceof SystemLeafSetNode) { + final SystemLeafSetNode n = (SystemLeafSetNode) node; + writer.startLeafSet(n.getIdentifier(), childSizeHint(n.body())); + return writeChildren(n.body()); } return false; @@ -267,21 +267,21 @@ public class NormalizedNodeWriter implements Closeable, Flushable { @Override protected boolean writeMapEntryNode(final MapEntryNode node) throws IOException { final NormalizedNodeStreamWriter nnWriter = getWriter(); - nnWriter.startMapEntryNode(node.getIdentifier(), childSizeHint(node.getValue())); + nnWriter.startMapEntryNode(node.getIdentifier(), childSizeHint(node.body())); final Set qnames = node.getIdentifier().keySet(); // Write out all the key children for (final QName qname : qnames) { - final Optional> child = node.getChild(new NodeIdentifier(qname)); - if (child.isPresent()) { - write(child.get()); + final DataContainerChild child = node.childByArg(new NodeIdentifier(qname)); + if (child != null) { + write(child); } else { LOG.info("No child for key element {} found", qname); } } // Write all the rest - return writeChildren(Iterables.filter(node.getValue(), input -> { + return writeChildren(Iterables.filter(node.body(), input -> { if (input instanceof AugmentationNode) { return true; } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/ReusableStreamReceiver.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/ReusableStreamReceiver.java index ac13cccea3..ff395cce19 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/ReusableStreamReceiver.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/ReusableStreamReceiver.java @@ -42,7 +42,7 @@ public interface ReusableStreamReceiver extends NormalizedNodeStreamWriter { * * @return Result of streaming. */ - NormalizedNode getResult(); + NormalizedNode getResult(); /** * Reset this writer to initial state. diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractAvailableLeafCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractAvailableLeafCandidateNode.java index 71ee5b79d0..ce0245b0a3 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractAvailableLeafCandidateNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractAvailableLeafCandidateNode.java @@ -11,12 +11,12 @@ import java.util.Optional; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; abstract class AbstractAvailableLeafCandidateNode extends AbstractLeafCandidateNode { - AbstractAvailableLeafCandidateNode(final NormalizedNode dataAfter) { + AbstractAvailableLeafCandidateNode(final NormalizedNode dataAfter) { super(dataAfter); } @Override - public final Optional> getDataAfter() { + public final Optional getDataAfter() { return dataOptional(); } } \ No newline at end of file diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractDataTreeCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractDataTreeCandidateNode.java index 89b1d05ff4..6e79569b2c 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractDataTreeCandidateNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractDataTreeCandidateNode.java @@ -12,13 +12,13 @@ import static java.util.Objects.requireNonNull; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; abstract class AbstractDataTreeCandidateNode implements DataTreeCandidateNode { - private final NormalizedNodeContainer> data; + private final DistinctNodeContainer data; - AbstractDataTreeCandidateNode(final NormalizedNodeContainer> data) { + AbstractDataTreeCandidateNode(final DistinctNodeContainer data) { this.data = requireNonNull(data); } @@ -27,11 +27,11 @@ abstract class AbstractDataTreeCandidateNode implements DataTreeCandidateNode { return data.getIdentifier(); } - final @NonNull Optional> dataOptional() { + final @NonNull Optional dataOptional() { return Optional.of(data); } - final NormalizedNodeContainer> data() { + final DistinctNodeContainer data() { return data; } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractLeafCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractLeafCandidateNode.java index 65ee8f897d..4cd2b936b5 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractLeafCandidateNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractLeafCandidateNode.java @@ -10,26 +10,26 @@ package org.opendaylight.yangtools.yang.data.api.schema.tree; import static java.util.Objects.requireNonNull; import java.util.Collection; -import java.util.Collections; +import java.util.List; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; abstract class AbstractLeafCandidateNode implements DataTreeCandidateNode { - private final NormalizedNode data; + private final NormalizedNode data; - AbstractLeafCandidateNode(final NormalizedNode data) { + AbstractLeafCandidateNode(final NormalizedNode data) { this.data = requireNonNull(data); } - final @NonNull Optional> dataOptional() { + final @NonNull Optional dataOptional() { return Optional.of(data); } @Override public final Collection getChildNodes() { - return Collections.emptyList(); + return List.of(); } @Override diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractRecursiveCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractRecursiveCandidateNode.java index a98b0fe48a..bfa6a24073 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractRecursiveCandidateNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractRecursiveCandidateNode.java @@ -11,33 +11,32 @@ import com.google.common.collect.Collections2; import java.util.Collection; import java.util.Optional; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; abstract class AbstractRecursiveCandidateNode extends AbstractDataTreeCandidateNode { - AbstractRecursiveCandidateNode(final NormalizedNodeContainer> data) { + AbstractRecursiveCandidateNode(final DistinctNodeContainer data) { super(data); } @Override public final Optional getModifiedChild(final PathArgument identifier) { - return data().getChild(identifier).map(this::createChild); + return data().findChildByArg(identifier).map(this::createChild); } @Override public final Collection getChildNodes() { - return Collections2.transform(data().getValue(), this::createChild); + return Collections2.transform(data().body(), this::createChild); } - abstract DataTreeCandidateNode createContainer( - NormalizedNodeContainer> childData); + abstract DataTreeCandidateNode createContainer(DistinctNodeContainer childData); - abstract DataTreeCandidateNode createLeaf(NormalizedNode childData); + abstract DataTreeCandidateNode createLeaf(NormalizedNode childData); @SuppressWarnings("unchecked") - private DataTreeCandidateNode createChild(final NormalizedNode childData) { - if (childData instanceof NormalizedNodeContainer) { - return createContainer((NormalizedNodeContainer>) childData); + private DataTreeCandidateNode createChild(final NormalizedNode childData) { + if (childData instanceof DistinctNodeContainer) { + return createContainer((DistinctNodeContainer) childData); } return createLeaf(childData); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractWriteCandidate.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractWriteCandidate.java index b85a4eb966..f82003e019 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractWriteCandidate.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/AbstractWriteCandidate.java @@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.data.api.schema.tree; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; abstract class AbstractWriteCandidate extends AbstractAvailableLeafCandidateNode { - AbstractWriteCandidate(final NormalizedNode dataAfter) { + AbstractWriteCandidate(final NormalizedNode dataAfter) { super(dataAfter); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidateNode.java index 25b9f693ec..ac1b48a710 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidateNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidateNode.java @@ -58,7 +58,7 @@ public interface DataTreeCandidateNode { * @return Node data as they will be present in the tree after * the modification is applied. */ - @NonNull Optional> getDataAfter(); + @NonNull Optional getDataAfter(); /** * Return the before-image of data corresponding to the node. @@ -66,5 +66,5 @@ public interface DataTreeCandidateNode { * @return Node data as they were present in the tree before * the modification was applied. */ - @NonNull Optional> getDataBefore(); + @NonNull Optional getDataBefore(); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidateNodes.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidateNodes.java index 6b1636572c..c9dff225f7 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidateNodes.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidateNodes.java @@ -20,6 +20,7 @@ import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; @@ -45,10 +46,9 @@ public final class DataTreeCandidateNodes { * @param node Unchanged normalized node * @return An empty DataTreeCandidateNode */ - public static @NonNull DataTreeCandidateNode unmodified(final NormalizedNode node) { - if (node instanceof NormalizedNodeContainer) { - return new RecursiveUnmodifiedCandidateNode( - (NormalizedNodeContainer>) node); + public static @NonNull DataTreeCandidateNode unmodified(final NormalizedNode node) { + if (node instanceof DistinctNodeContainer) { + return new RecursiveUnmodifiedCandidateNode((DistinctNodeContainer) node); } return new UnmodifiedLeafCandidateNode(node); } @@ -60,7 +60,7 @@ public final class DataTreeCandidateNodes { * @return An empty DataTreeCandidateNode * @throws NullPointerException if {@code node} is null */ - public static @NonNull DataTreeCandidateNode written(final NormalizedNode node) { + public static @NonNull DataTreeCandidateNode written(final NormalizedNode node) { return new NormalizedNodeDataTreeCandidateNode(node); } @@ -73,14 +73,14 @@ public final class DataTreeCandidateNodes { * @return Collection of changes */ public static @NonNull Collection containerDelta( - final @Nullable NormalizedNodeContainer> oldData, - final @Nullable NormalizedNodeContainer> newData) { + final @Nullable DistinctNodeContainer oldData, + final @Nullable DistinctNodeContainer newData) { if (newData == null) { return oldData == null ? ImmutableList.of() - : Collections2.transform(oldData.getValue(), DataTreeCandidateNodes::deleteNode); + : Collections2.transform(oldData.body(), DataTreeCandidateNodes::deleteNode); } if (oldData == null) { - return Collections2.transform(newData.getValue(), DataTreeCandidateNodes::writeNode); + return Collections2.transform(newData.body(), DataTreeCandidateNodes::writeNode); } /* @@ -92,14 +92,13 @@ public final class DataTreeCandidateNodes { * iterate over old data and looking up each child in new data. */ final Collection result = new ArrayList<>(); - for (NormalizedNode child : newData.getValue()) { + for (NormalizedNode child : newData.body()) { final DataTreeCandidateNode node; - final Optional> maybeOldChild = oldData.getChild(child.getIdentifier()); - - if (maybeOldChild.isPresent()) { + final NormalizedNode oldChild = oldData.childByArg(child.getIdentifier()); + if (oldChild != null) { // This does not find children which have not in fact been modified, as doing that // reliably would require us running a full equals() on the two nodes. - node = replaceNode(maybeOldChild.get(), child); + node = replaceNode(oldChild, child); } else { node = writeNode(child); } @@ -108,8 +107,8 @@ public final class DataTreeCandidateNodes { } // Process removals next, looking into new data to see if we processed it - for (NormalizedNode child : oldData.getValue()) { - if (newData.getChild(child.getIdentifier()).isEmpty()) { + for (NormalizedNode child : oldData.body()) { + if (newData.childByArg(child.getIdentifier()) == null) { result.add(deleteNode(child)); } } @@ -126,18 +125,18 @@ public final class DataTreeCandidateNodes { * @return A {@link DataTreeCandidateNode} describing the change, or empty if the node is not present */ public static @NonNull Optional containerDelta( - final @Nullable NormalizedNodeContainer> oldData, - final @Nullable NormalizedNodeContainer> newData, + final @Nullable DistinctNodeContainer oldData, + final @Nullable DistinctNodeContainer newData, final @NonNull PathArgument child) { - final Optional> maybeNewChild = getChild(newData, child); - final Optional> maybeOldChild = getChild(oldData, child); - if (maybeOldChild.isPresent()) { - final NormalizedNode oldChild = maybeOldChild.get(); - return Optional.of(maybeNewChild.isPresent() ? replaceNode(oldChild, maybeNewChild.get()) - : deleteNode(oldChild)); + final NormalizedNode newChild = getChild(newData, child); + final NormalizedNode oldChild = getChild(oldData, child); + if (oldChild != null) { + return Optional.of(newChild != null ? replaceNode(oldChild, newChild) : deleteNode(oldChild)); + } else if (newChild != null) { + return Optional.of(DataTreeCandidateNodes.writeNode(newChild)); + } else { + return Optional.empty(); } - - return maybeNewChild.map(DataTreeCandidateNodes::writeNode); } /** @@ -222,38 +221,36 @@ public final class DataTreeCandidateNodes { } } - private static Optional> getChild( - final NormalizedNodeContainer> container, - final PathArgument identifier) { - return container == null ? Optional.empty() : container.getChild(identifier); + private static @Nullable NormalizedNode getChild( + final DistinctNodeContainer container, final PathArgument identifier) { + return container == null ? null : container.childByArg(identifier); } @SuppressWarnings("unchecked") - private static @NonNull DataTreeCandidateNode deleteNode(final NormalizedNode data) { + private static @NonNull DataTreeCandidateNode deleteNode(final NormalizedNode data) { if (data instanceof NormalizedNodeContainer) { return new RecursiveDeleteCandidateNode( - (NormalizedNodeContainer>) data); + (DistinctNodeContainer) data); } return new DeleteLeafCandidateNode(data); } @SuppressWarnings("unchecked") - private static @NonNull DataTreeCandidateNode replaceNode(final NormalizedNode oldData, - final NormalizedNode newData) { - if (oldData instanceof NormalizedNodeContainer) { + private static @NonNull DataTreeCandidateNode replaceNode(final NormalizedNode oldData, + final NormalizedNode newData) { + if (oldData instanceof DistinctNodeContainer) { return new RecursiveReplaceCandidateNode( - (NormalizedNodeContainer>) oldData, - (NormalizedNodeContainer>) newData); + (DistinctNodeContainer) oldData, + (DistinctNodeContainer) newData); } return new ReplaceLeafCandidateNode(oldData, newData); } @SuppressWarnings("unchecked") - private static @NonNull DataTreeCandidateNode writeNode(final NormalizedNode data) { - if (data instanceof NormalizedNodeContainer) { - return new RecursiveWriteCandidateNode( - (NormalizedNodeContainer>) data); + private static @NonNull DataTreeCandidateNode writeNode(final NormalizedNode data) { + if (data instanceof DistinctNodeContainer) { + return new RecursiveWriteCandidateNode((DistinctNodeContainer) data); } return new WriteLeafCandidateNode(data); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidates.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidates.java index f386541bd0..bcd8ff80b0 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidates.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidates.java @@ -41,7 +41,7 @@ public final class DataTreeCandidates { } public static @NonNull DataTreeCandidate fromNormalizedNode(final YangInstanceIdentifier rootPath, - final NormalizedNode node) { + final NormalizedNode node) { return new DefaultDataTreeCandidate(rootPath, new NormalizedNodeDataTreeCandidateNode(node)); } @@ -115,8 +115,8 @@ public final class DataTreeCandidates { final List input) { final DataTreeCandidateNode last = input.get(input.size() - 1); ModificationType nodeModification = last.getModificationType(); - Optional> dataBefore = first.getDataBefore(); - Optional> dataAfter = last.getDataAfter(); + Optional dataBefore = first.getDataBefore(); + Optional dataAfter = last.getDataAfter(); switch (nodeModification) { case DELETE: ModificationType previous = first.getModificationType(); @@ -211,7 +211,7 @@ public final class DataTreeCandidates { for (Iterator iterator = childNodes.iterator(); iterator.hasNext(); ) { cleanUpTree(finalNode, (TerminalDataTreeCandidateNode) iterator.next()); } - Optional> dataBefore = finalNode.getDataBefore(identifier); + Optional dataBefore = finalNode.getDataBefore(identifier); switch (nodeModification) { case UNMODIFIED: diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeFactory.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeFactory.java index 2a3055ae57..4f7279d0ff 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeFactory.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeFactory.java @@ -8,7 +8,7 @@ package org.opendaylight.yangtools.yang.data.api.schema.tree; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; +import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; /** @@ -58,5 +58,5 @@ public interface DataTreeFactory { * @throws IllegalArgumentException if a mismatch between the arguments is detected */ @NonNull DataTree create(DataTreeConfiguration treeConfig, EffectiveModelContext initialSchemaContext, - NormalizedNodeContainer initialRoot) throws DataValidationFailedException; + DistinctNodeContainer initialRoot) throws DataValidationFailedException; } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeModification.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeModification.java index 685755bec1..586648cb77 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeModification.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeModification.java @@ -31,7 +31,7 @@ public interface DataTreeModification extends DataTreeSnapshot { * @param path Node path * @param data Data to be merged */ - void merge(YangInstanceIdentifier path, NormalizedNode data); + void merge(YangInstanceIdentifier path, NormalizedNode data); /** * Replace the data at specified path with supplied data. @@ -39,7 +39,7 @@ public interface DataTreeModification extends DataTreeSnapshot { * @param path Node path * @param data New node data */ - void write(YangInstanceIdentifier path, NormalizedNode data); + void write(YangInstanceIdentifier path, NormalizedNode data); /** * Finish creation of a modification, making it ready for application diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeModificationCursor.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeModificationCursor.java index 964ec83cf0..b64a62d302 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeModificationCursor.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeModificationCursor.java @@ -36,7 +36,7 @@ public interface DataTreeModificationCursor extends DataTreeSnapshotCursor { * @throws BackendFailedException when implementation-specific errors occurs * while servicing the request. */ - void merge(PathArgument child, NormalizedNode data); + void merge(PathArgument child, NormalizedNode data); /** * Replace the data at specified path with supplied data. @@ -46,5 +46,5 @@ public interface DataTreeModificationCursor extends DataTreeSnapshotCursor { * @throws BackendFailedException when implementation-specific errors occurs * while servicing the request. */ - void write(PathArgument child, NormalizedNode data); + void write(PathArgument child, NormalizedNode data); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeSnapshot.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeSnapshot.java index 3197e9814b..a471d777b5 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeSnapshot.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeSnapshot.java @@ -24,7 +24,7 @@ public interface DataTreeSnapshot extends EffectiveModelContextProvider { * @param path Path of the node * @return Optional result encapsulating the presence and value of the node */ - Optional> readNode(YangInstanceIdentifier path); + Optional readNode(YangInstanceIdentifier path); /** * Create a new data tree modification based on this snapshot, using the diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeSnapshotCursor.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeSnapshotCursor.java index 83f9b216e7..36bd4531c3 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeSnapshotCursor.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeSnapshotCursor.java @@ -92,7 +92,7 @@ public interface DataTreeSnapshotCursor extends AutoCloseable { * servicing the request. * @throws IllegalArgumentException when specified path does not identify a valid child. */ - Optional> readNode(@NonNull PathArgument child); + Optional readNode(@NonNull PathArgument child); /** * Close this cursor. Attempting any further operations on the cursor will lead diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DeleteLeafCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DeleteLeafCandidateNode.java index 73179c09ff..f71451db51 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DeleteLeafCandidateNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DeleteLeafCandidateNode.java @@ -11,7 +11,7 @@ import java.util.Optional; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; final class DeleteLeafCandidateNode extends AbstractLeafCandidateNode { - DeleteLeafCandidateNode(final NormalizedNode data) { + DeleteLeafCandidateNode(final NormalizedNode data) { super(data); } @@ -21,12 +21,12 @@ final class DeleteLeafCandidateNode extends AbstractLeafCandidateNode { } @Override - public Optional> getDataAfter() { + public Optional getDataAfter() { return Optional.empty(); } @Override - public Optional> getDataBefore() { + public Optional getDataBefore() { return dataOptional(); } } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/EmptyDataTreeCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/EmptyDataTreeCandidateNode.java index a582ecbcdb..18ab68b206 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/EmptyDataTreeCandidateNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/EmptyDataTreeCandidateNode.java @@ -43,12 +43,12 @@ final class EmptyDataTreeCandidateNode implements DataTreeCandidateNode { } @Override - public Optional> getDataAfter() { + public Optional getDataAfter() { return Optional.empty(); } @Override - public Optional> getDataBefore() { + public Optional getDataBefore() { return Optional.empty(); } } \ No newline at end of file diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/NormalizedNodeDataTreeCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/NormalizedNodeDataTreeCandidateNode.java index 40fb660374..c7674d0582 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/NormalizedNodeDataTreeCandidateNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/NormalizedNodeDataTreeCandidateNode.java @@ -15,22 +15,22 @@ import java.util.Collection; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; /** * Utility implementation of {@link DataTreeCandidateNode} which acts as if * the {@link NormalizedNode} passed to it at creation time were freshly written. */ final class NormalizedNodeDataTreeCandidateNode implements DataTreeCandidateNode { - private final NormalizedNode data; + private final NormalizedNode data; /** * Create a new instance backed by supplied data. * * @param data Backing {@link NormalizedNode} data. */ - NormalizedNodeDataTreeCandidateNode(final @NonNull NormalizedNode data) { + NormalizedNodeDataTreeCandidateNode(final @NonNull NormalizedNode data) { this.data = requireNonNull(data); } @@ -41,20 +41,19 @@ final class NormalizedNodeDataTreeCandidateNode implements DataTreeCandidateNode @Override public Collection getChildNodes() { - if (data instanceof NormalizedNodeContainer) { - return Collections2.transform(((NormalizedNodeContainer) data).getValue(), + if (data instanceof DistinctNodeContainer) { + return Collections2.transform(((DistinctNodeContainer) data).body(), input -> input == null ? null : new NormalizedNodeDataTreeCandidateNode(input)); } return ImmutableList.of(); } @Override + @SuppressWarnings({ "rawtypes", "unchecked" }) public Optional getModifiedChild(final PathArgument childIdentifier) { - if (data instanceof NormalizedNodeContainer) { - @SuppressWarnings({ "rawtypes", "unchecked" }) - final Optional> child = - ((NormalizedNodeContainer)data).getChild(childIdentifier); - return child.map(NormalizedNodeDataTreeCandidateNode::new); + if (data instanceof DistinctNodeContainer) { + return ((Optional<@NonNull NormalizedNode>) ((DistinctNodeContainer)data).findChildByArg(childIdentifier)) + .map(NormalizedNodeDataTreeCandidateNode::new); } return Optional.empty(); } @@ -65,12 +64,12 @@ final class NormalizedNodeDataTreeCandidateNode implements DataTreeCandidateNode } @Override - public Optional> getDataAfter() { + public Optional getDataAfter() { return Optional.of(data); } @Override - public Optional> getDataBefore() { + public Optional getDataBefore() { return Optional.empty(); } } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/RecursiveDeleteCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/RecursiveDeleteCandidateNode.java index a36ef915cb..f5cc4ce841 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/RecursiveDeleteCandidateNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/RecursiveDeleteCandidateNode.java @@ -9,11 +9,11 @@ package org.opendaylight.yangtools.yang.data.api.schema.tree; import java.util.Optional; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; final class RecursiveDeleteCandidateNode extends AbstractRecursiveCandidateNode { - RecursiveDeleteCandidateNode(final NormalizedNodeContainer> data) { + RecursiveDeleteCandidateNode(final DistinctNodeContainer data) { super(data); } @@ -23,23 +23,22 @@ final class RecursiveDeleteCandidateNode extends AbstractRecursiveCandidateNode } @Override - public Optional> getDataAfter() { + public Optional getDataAfter() { return Optional.empty(); } @Override - public Optional> getDataBefore() { + public Optional getDataBefore() { return dataOptional(); } @Override - DataTreeCandidateNode createContainer( - final NormalizedNodeContainer> childData) { + DataTreeCandidateNode createContainer(final DistinctNodeContainer childData) { return new RecursiveDeleteCandidateNode(childData); } @Override - DataTreeCandidateNode createLeaf(final NormalizedNode childData) { + DataTreeCandidateNode createLeaf(final NormalizedNode childData) { return new DeleteLeafCandidateNode(childData); } } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/RecursiveReplaceCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/RecursiveReplaceCandidateNode.java index 4330893dc5..3b0d99c8d4 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/RecursiveReplaceCandidateNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/RecursiveReplaceCandidateNode.java @@ -12,14 +12,14 @@ import static java.util.Objects.requireNonNull; import java.util.Collection; import java.util.Optional; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; final class RecursiveReplaceCandidateNode extends AbstractDataTreeCandidateNode { - private final NormalizedNodeContainer> oldData; + private final DistinctNodeContainer oldData; - RecursiveReplaceCandidateNode(final NormalizedNodeContainer> oldData, - final NormalizedNodeContainer> newData) { + RecursiveReplaceCandidateNode(final DistinctNodeContainer oldData, + final DistinctNodeContainer newData) { super(newData); this.oldData = requireNonNull(oldData); } @@ -30,12 +30,12 @@ final class RecursiveReplaceCandidateNode extends AbstractDataTreeCandidateNode } @Override - public Optional> getDataAfter() { + public Optional getDataAfter() { return dataOptional(); } @Override - public Optional> getDataBefore() { + public Optional getDataBefore() { return Optional.of(oldData); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/RecursiveUnmodifiedCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/RecursiveUnmodifiedCandidateNode.java index d3f5bfe53c..8394d7dd9f 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/RecursiveUnmodifiedCandidateNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/RecursiveUnmodifiedCandidateNode.java @@ -9,11 +9,11 @@ package org.opendaylight.yangtools.yang.data.api.schema.tree; import java.util.Optional; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; final class RecursiveUnmodifiedCandidateNode extends AbstractRecursiveCandidateNode { - RecursiveUnmodifiedCandidateNode(final NormalizedNodeContainer> data) { + RecursiveUnmodifiedCandidateNode(final DistinctNodeContainer data) { super(data); } @@ -23,23 +23,22 @@ final class RecursiveUnmodifiedCandidateNode extends AbstractRecursiveCandidateN } @Override - public Optional> getDataAfter() { + public Optional getDataAfter() { return dataOptional(); } @Override - public Optional> getDataBefore() { + public Optional getDataBefore() { return dataOptional(); } @Override - DataTreeCandidateNode createContainer( - final NormalizedNodeContainer> childData) { + DataTreeCandidateNode createContainer(final DistinctNodeContainer childData) { return new RecursiveUnmodifiedCandidateNode(childData); } @Override - DataTreeCandidateNode createLeaf(final NormalizedNode childData) { + DataTreeCandidateNode createLeaf(final NormalizedNode childData) { return new UnmodifiedLeafCandidateNode(childData); } } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/RecursiveWriteCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/RecursiveWriteCandidateNode.java index 0cd155c08d..f6a389aa4b 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/RecursiveWriteCandidateNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/RecursiveWriteCandidateNode.java @@ -9,11 +9,11 @@ package org.opendaylight.yangtools.yang.data.api.schema.tree; import java.util.Optional; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; final class RecursiveWriteCandidateNode extends AbstractRecursiveCandidateNode { - RecursiveWriteCandidateNode(final NormalizedNodeContainer> data) { + RecursiveWriteCandidateNode(final DistinctNodeContainer data) { super(data); } @@ -23,23 +23,22 @@ final class RecursiveWriteCandidateNode extends AbstractRecursiveCandidateNode { } @Override - public Optional> getDataAfter() { + public Optional getDataAfter() { return dataOptional(); } @Override - public Optional> getDataBefore() { + public Optional getDataBefore() { return Optional.empty(); } @Override - DataTreeCandidateNode createContainer( - final NormalizedNodeContainer> childData) { + DataTreeCandidateNode createContainer(final DistinctNodeContainer childData) { return new RecursiveWriteCandidateNode(childData); } @Override - DataTreeCandidateNode createLeaf(final NormalizedNode childData) { + DataTreeCandidateNode createLeaf(final NormalizedNode childData) { return new WriteLeafCandidateNode(childData); } } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/ReplaceLeafCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/ReplaceLeafCandidateNode.java index 6804264e75..921bdd8623 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/ReplaceLeafCandidateNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/ReplaceLeafCandidateNode.java @@ -13,15 +13,15 @@ import java.util.Optional; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; final class ReplaceLeafCandidateNode extends AbstractWriteCandidate { - private final NormalizedNode oldData; + private final NormalizedNode oldData; - ReplaceLeafCandidateNode(final NormalizedNode oldData, final NormalizedNode newData) { + ReplaceLeafCandidateNode(final NormalizedNode oldData, final NormalizedNode newData) { super(newData); this.oldData = requireNonNull(oldData); } @Override - public Optional> getDataBefore() { + public Optional getDataBefore() { return Optional.of(oldData); } } \ No newline at end of file diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/SynchronizedDataTreeModification.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/SynchronizedDataTreeModification.java index 8737bf2854..1e7e7fa4d5 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/SynchronizedDataTreeModification.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/SynchronizedDataTreeModification.java @@ -31,7 +31,7 @@ public final class SynchronizedDataTreeModification implements DataTreeModificat } @Override - public synchronized Optional> readNode(final YangInstanceIdentifier path) { + public synchronized Optional readNode(final YangInstanceIdentifier path) { return delegate.readNode(path); } @@ -46,12 +46,12 @@ public final class SynchronizedDataTreeModification implements DataTreeModificat } @Override - public synchronized void merge(final YangInstanceIdentifier path, final NormalizedNode data) { + public synchronized void merge(final YangInstanceIdentifier path, final NormalizedNode data) { delegate.merge(path, data); } @Override - public synchronized void write(final YangInstanceIdentifier path, final NormalizedNode data) { + public synchronized void write(final YangInstanceIdentifier path, final NormalizedNode data) { delegate.write(path, data); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/TerminalDataTreeCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/TerminalDataTreeCandidateNode.java index 671a6afbe7..f4f4802a9c 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/TerminalDataTreeCandidateNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/TerminalDataTreeCandidateNode.java @@ -21,23 +21,23 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; class TerminalDataTreeCandidateNode implements DataTreeCandidateNode { private ModificationType modificationType; private final PathArgument identifier; - private final NormalizedNode before; - private NormalizedNode after; + private final NormalizedNode before; + private NormalizedNode after; private final HashMap childNodes = new HashMap<>(); private TerminalDataTreeCandidateNode parentNode; - TerminalDataTreeCandidateNode(PathArgument identifier, NormalizedNode data, + TerminalDataTreeCandidateNode(PathArgument identifier, NormalizedNode data, TerminalDataTreeCandidateNode parentNode) { this(identifier, data); this.parentNode = requireNonNull(parentNode); } - TerminalDataTreeCandidateNode(PathArgument identifier, NormalizedNode data) { + TerminalDataTreeCandidateNode(PathArgument identifier, NormalizedNode data) { this(identifier, ModificationType.UNMODIFIED, data, data); } TerminalDataTreeCandidateNode(PathArgument identifier, ModificationType modificationType, - NormalizedNode before, NormalizedNode after) { + NormalizedNode before, NormalizedNode after) { this.modificationType = modificationType; this.identifier = identifier; this.before = before; @@ -66,20 +66,20 @@ class TerminalDataTreeCandidateNode implements DataTreeCandidateNode { } @Override - public Optional> getDataAfter() { + public Optional getDataAfter() { return Optional.ofNullable(after); } - @NonNull Optional> getDataAfter(PathArgument id) { + @NonNull Optional getDataAfter(PathArgument id) { return getNode(id).flatMap(TerminalDataTreeCandidateNode::getDataAfter); } @Override - public Optional> getDataBefore() { + public Optional getDataBefore() { return Optional.ofNullable(before); } - @NonNull Optional> getDataBefore(PathArgument id) { + @NonNull Optional getDataBefore(PathArgument id) { Optional node = getNode(id); if (node.isPresent()) { return node.get().getDataBefore(); @@ -87,7 +87,7 @@ class TerminalDataTreeCandidateNode implements DataTreeCandidateNode { return Optional.empty(); } - void setAfter(NormalizedNode after) { + void setAfter(NormalizedNode after) { this.after = after; } @@ -141,7 +141,7 @@ class TerminalDataTreeCandidateNode implements DataTreeCandidateNode { return findNode(id); } - void setData(PathArgument id, NormalizedNode node) { + void setData(PathArgument id, NormalizedNode node) { TerminalDataTreeCandidateNode terminalDataTreeCandidateNode = getNode(id).get(); terminalDataTreeCandidateNode.setAfter(node); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/UnmodifiedLeafCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/UnmodifiedLeafCandidateNode.java index 40ed176c6c..0f4842c7d7 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/UnmodifiedLeafCandidateNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/UnmodifiedLeafCandidateNode.java @@ -11,7 +11,7 @@ import java.util.Optional; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; final class UnmodifiedLeafCandidateNode extends AbstractAvailableLeafCandidateNode { - UnmodifiedLeafCandidateNode(final NormalizedNode data) { + UnmodifiedLeafCandidateNode(final NormalizedNode data) { super(data); } @@ -21,7 +21,7 @@ final class UnmodifiedLeafCandidateNode extends AbstractAvailableLeafCandidateNo } @Override - public Optional> getDataBefore() { + public Optional getDataBefore() { return dataOptional(); } } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/WriteLeafCandidateNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/WriteLeafCandidateNode.java index 7f5e020d4d..5959953424 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/WriteLeafCandidateNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/WriteLeafCandidateNode.java @@ -11,12 +11,12 @@ import java.util.Optional; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; final class WriteLeafCandidateNode extends AbstractWriteCandidate { - WriteLeafCandidateNode(final NormalizedNode data) { + WriteLeafCandidateNode(final NormalizedNode data) { super(data); } @Override - public Optional> getDataBefore() { + public Optional getDataBefore() { return Optional.empty(); } } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractContainerNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractContainerNode.java index bd2a01698f..bfa719d25a 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractContainerNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractContainerNode.java @@ -7,24 +7,23 @@ */ package org.opendaylight.yangtools.yang.data.api.schema.tree.spi; -import java.util.Optional; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; /** * A TreeNode capable of holding child nodes. The fact that any of the children * changed is tracked by the subtree version. */ abstract class AbstractContainerNode extends AbstractTreeNode { - protected AbstractContainerNode(final NormalizedNode data, final Version version) { + protected AbstractContainerNode(final NormalizedNode data, final Version version) { super(data, version); } @SuppressWarnings("unchecked") - protected final NormalizedNodeContainer> castData() { - return (NormalizedNodeContainer>) getData(); + protected final DistinctNodeContainer castData() { + return (DistinctNodeContainer) getData(); } protected final @Nullable TreeNode getChildFromData(final PathArgument childId) { @@ -32,9 +31,9 @@ abstract class AbstractContainerNode extends AbstractTreeNode { return getChildFromData(castData(), childId, getVersion()); } - static TreeNode getChildFromData(final NormalizedNodeContainer> data, + static TreeNode getChildFromData(final DistinctNodeContainer data, final PathArgument childId, final Version version) { - final Optional> child = data.getChild(childId); - return child.isPresent() ? TreeNodeFactory.createTreeNode(child.get(), version) : null; + final NormalizedNode child = data.childByArg(childId); + return child != null ? TreeNodeFactory.createTreeNode(child, version) : null; } } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractModifiedContainerNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractModifiedContainerNode.java index df4d058b00..f16d46eab2 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractModifiedContainerNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractModifiedContainerNode.java @@ -22,7 +22,7 @@ abstract class AbstractModifiedContainerNode extends AbstractContainerNode { private final Map children; private final Version subtreeVersion; - protected AbstractModifiedContainerNode(final NormalizedNode data, final Version version, + protected AbstractModifiedContainerNode(final NormalizedNode data, final Version version, final Map children, final Version subtreeVersion) { super(data, version); this.subtreeVersion = requireNonNull(subtreeVersion); diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractMutableContainerNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractMutableContainerNode.java index 958a6073d5..774bb86e7d 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractMutableContainerNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractMutableContainerNode.java @@ -13,8 +13,8 @@ import static java.util.Objects.requireNonNull; import java.util.Map; import org.opendaylight.yangtools.util.MapAdaptor; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; /** * Abstract base for container-based {@link MutableTreeNode}s. It tracks modified nodes in a map and deals with @@ -23,7 +23,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; abstract class AbstractMutableContainerNode implements MutableTreeNode { private final Version version; private Map children; - private NormalizedNode data; + private NormalizedNode data; private Version subtreeVersion; protected AbstractMutableContainerNode(final AbstractContainerNode parent, @@ -43,8 +43,8 @@ abstract class AbstractMutableContainerNode implements MutableTreeNode { } @SuppressWarnings("unchecked") - protected final NormalizedNodeContainer> getData() { - return (NormalizedNodeContainer>) data; + protected final DistinctNodeContainer getData() { + return (DistinctNodeContainer) data; } @Override @@ -63,7 +63,7 @@ abstract class AbstractMutableContainerNode implements MutableTreeNode { } @Override - public final void setData(final NormalizedNode data) { + public final void setData(final NormalizedNode data) { this.data = requireNonNull(data); } @@ -81,7 +81,7 @@ abstract class AbstractMutableContainerNode implements MutableTreeNode { */ if (!version.equals(subtreeVersion)) { final Map newChildren = MapAdaptor.getDefaultInstance().optimize(children); - final int dataSize = getData().size(); + final int dataSize = getData().body().size(); final int childrenSize = newChildren.size(); if (dataSize != childrenSize) { verify(dataSize > childrenSize, "Detected %s modified children, data has only %s", diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractTreeNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractTreeNode.java index 4d463c5306..86c12d58d5 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractTreeNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractTreeNode.java @@ -20,10 +20,10 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; */ @NonNullByDefault abstract class AbstractTreeNode implements TreeNode { - private final NormalizedNode data; + private final NormalizedNode data; private final Version version; - protected AbstractTreeNode(final NormalizedNode data, final Version version) { + protected AbstractTreeNode(final NormalizedNode data, final Version version) { this.data = requireNonNull(data); this.version = requireNonNull(version); } @@ -39,7 +39,7 @@ abstract class AbstractTreeNode implements TreeNode { } @Override - public final NormalizedNode getData() { + public final NormalizedNode getData() { return data; } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/LazyContainerNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/LazyContainerNode.java index 511b2975ba..3a91cd800a 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/LazyContainerNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/LazyContainerNode.java @@ -19,11 +19,11 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; * instantiating a child node from data node. Resulting node is not cached. */ final class LazyContainerNode extends AbstractModifiedContainerNode { - LazyContainerNode(final NormalizedNode data, final Version version, final Version subtreeVersion) { + LazyContainerNode(final NormalizedNode data, final Version version, final Version subtreeVersion) { this(data, version, MapAdaptor.getDefaultInstance().initialSnapshot(1), subtreeVersion); } - LazyContainerNode(final NormalizedNode data, final Version version, + LazyContainerNode(final NormalizedNode data, final Version version, final Map children, final Version subtreeVersion) { super(data, version, children, subtreeVersion); } @@ -31,7 +31,7 @@ final class LazyContainerNode extends AbstractModifiedContainerNode { @Override public MutableTreeNode mutable() { final Map snapshot = snapshotChildren(); - if (snapshot.size() == castData().size()) { + if (snapshot.size() == castData().body().size()) { return new MaterializedMutableContainerNode(this, snapshot); } return new LazyMutableContainerNode(this, snapshot); @@ -46,7 +46,7 @@ final class LazyContainerNode extends AbstractModifiedContainerNode { @Override protected ToStringHelper addToStringAttributes(final ToStringHelper helper) { // Modified children add added by superclass. Here we filter the other children. - return super.addToStringAttributes(helper).add("untouched", Collections2.filter(castData().getValue(), + return super.addToStringAttributes(helper).add("untouched", Collections2.filter(castData().body(), input -> getModifiedChild(input.getIdentifier()) == null)); } } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/MaterializedContainerNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/MaterializedContainerNode.java index d7c5fa7d6d..b87179c338 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/MaterializedContainerNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/MaterializedContainerNode.java @@ -15,7 +15,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; * A fully-modified node -- we know we have all children, so it performs lookups only. */ final class MaterializedContainerNode extends AbstractModifiedContainerNode { - protected MaterializedContainerNode(final NormalizedNode data, final Version version, + protected MaterializedContainerNode(final NormalizedNode data, final Version version, final Map children, final Version subtreeVersion) { super(data, version, children, subtreeVersion); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/MutableTreeNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/MutableTreeNode.java index 9a95f3f6ce..e1d4f378df 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/MutableTreeNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/MutableTreeNode.java @@ -24,7 +24,7 @@ public interface MutableTreeNode extends StoreTreeNode { * @param data New data component, may not be null. * @throws NullPointerException if {@code data} is null */ - void setData(NormalizedNode data); + void setData(NormalizedNode data); /** * Set the new subtree version. This is typically invoked when the user diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/SimpleContainerNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/SimpleContainerNode.java index d5a7c581f9..ec086d2c12 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/SimpleContainerNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/SimpleContainerNode.java @@ -15,7 +15,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; * A container node which has not seen a modification. All nodes underneath it share the same subtree version. */ final class SimpleContainerNode extends AbstractContainerNode { - protected SimpleContainerNode(final NormalizedNode data, final Version version) { + protected SimpleContainerNode(final NormalizedNode data, final Version version) { super(data, version); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/TreeNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/TreeNode.java index 41711e5382..689c49c85c 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/TreeNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/TreeNode.java @@ -54,7 +54,7 @@ public interface TreeNode extends Identifiable, StoreTreeNode getData(); + NormalizedNode getData(); /** * Get a mutable, isolated copy of the node. diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/TreeNodeFactory.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/TreeNodeFactory.java index b4839d24eb..bacc520890 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/TreeNodeFactory.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/TreeNodeFactory.java @@ -7,8 +7,8 @@ */ package org.opendaylight.yangtools.yang.data.api.schema.tree.spi; +import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.OrderedNodeContainer; /** @@ -27,18 +27,15 @@ public final class TreeNodeFactory { * @param version data node version * @return new AbstractTreeNode instance, covering the data tree provided */ - public static TreeNode createTreeNode(final NormalizedNode data, final Version version) { - if (data instanceof NormalizedNodeContainer) { + public static TreeNode createTreeNode(final NormalizedNode data, final Version version) { + if (data instanceof DistinctNodeContainer) { @SuppressWarnings("unchecked") - final NormalizedNodeContainer> container = - (NormalizedNodeContainer>) data; + final DistinctNodeContainer container = + (DistinctNodeContainer) data; return new SimpleContainerNode(container, version); } if (data instanceof OrderedNodeContainer) { - @SuppressWarnings("unchecked") - final OrderedNodeContainer> container = - (OrderedNodeContainer>) data; - return new SimpleContainerNode(container, version); + return new SimpleContainerNode(data, version); } return new ValueNode(data, version); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/ValueNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/ValueNode.java index c2180b8ec9..559e3dee8f 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/ValueNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/ValueNode.java @@ -21,7 +21,7 @@ import org.slf4j.LoggerFactory; final class ValueNode extends AbstractTreeNode { private static final Logger LOG = LoggerFactory.getLogger(ValueNode.class); - protected ValueNode(final NormalizedNode data, final Version version) { + protected ValueNode(final NormalizedNode data, final Version version) { super(data, version); } diff --git a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNodesTest.java b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNodesTest.java index 422fbacf88..2d653ecb64 100644 --- a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNodesTest.java +++ b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNodesTest.java @@ -5,19 +5,21 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.yangtools.yang.data.api.schema; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doCallRealMethod; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import com.google.common.collect.ImmutableSet; -import java.util.Collections; +import java.util.List; import java.util.Optional; import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.junit.MockitoJUnitRunner; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; @@ -26,6 +28,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +@RunWith(MockitoJUnitRunner.StrictStubs.class) public class NormalizedNodesTest { @Test @@ -40,25 +43,30 @@ public class NormalizedNodesTest { final DataContainerNode mockedDataContainerNode = mock(DataContainerNode.class); final ContainerNode mockedContainerNode = mock(ContainerNode.class); - doReturn(Optional.of(mockedContainerNode)).when(mockedDataContainerNode).getChild(any(PathArgument.class)); + doReturn(mockedContainerNode).when(mockedDataContainerNode).childByArg(any(PathArgument.class)); + doCallRealMethod().when(mockedDataContainerNode).findChildByArg(any(PathArgument.class)); + assertEquals(mockedContainerNode, NormalizedNodes.getDirectChild(mockedDataContainerNode, mockedPathArgument) .get()); - final MapNode mockedMapNode = mock(MapNode.class); + final SystemMapNode mockedMapNode = mock(SystemMapNode.class); final QName listQName = QName.create("test-ns", "test-list"); final QName listKeyQName = QName.create("test-ns", "test-list-key"); final NodeIdentifierWithPredicates nodeIdentifierWithPredicates = NodeIdentifierWithPredicates.of(listQName, listKeyQName, "str-value"); final MapEntryNode mockedMapEntryNode = mock(MapEntryNode.class); - doReturn(Optional.of(mockedMapEntryNode)).when(mockedMapNode).getChild(any(NodeIdentifierWithPredicates.class)); + doReturn(mockedMapEntryNode).when(mockedMapNode).childByArg(any(NodeIdentifierWithPredicates.class)); + doCallRealMethod().when(mockedMapNode).findChildByArg(any(NodeIdentifierWithPredicates.class)); + assertEquals(mockedMapEntryNode, NormalizedNodes.getDirectChild(mockedMapNode, nodeIdentifierWithPredicates) .get()); assertEquals(Optional.empty(), NormalizedNodes.getDirectChild(mockedMapNode, mockedPathArgument)); - final LeafSetNode mockedLeafSetNode = mock(LeafSetNode.class); + final SystemLeafSetNode mockedLeafSetNode = mock(SystemLeafSetNode.class); final QName leafListQName = QName.create("test-ns", "test-leaf-list"); final NodeWithValue nodeWithValue = new NodeWithValue<>(leafListQName, "str-value"); - doReturn(Optional.of(mockedLeafSetEntryNode)).when(mockedLeafSetNode).getChild(any(NodeWithValue.class)); + doReturn(mockedLeafSetEntryNode).when(mockedLeafSetNode).childByArg(any(NodeWithValue.class)); + doCallRealMethod().when(mockedLeafSetNode).findChildByArg(any(NodeWithValue.class)); assertEquals(mockedLeafSetEntryNode, NormalizedNodes.getDirectChild(mockedLeafSetNode, nodeWithValue).get()); } @@ -67,8 +75,10 @@ public class NormalizedNodesTest { final DataContainerNode mockedDataContainerNode = mock(DataContainerNode.class); final ContainerNode mockedContainerNode = mock(ContainerNode.class); final LeafNode mockedLeafNode = mock(LeafNode.class); - doReturn(Optional.of(mockedContainerNode)).when(mockedDataContainerNode).getChild(any(PathArgument.class)); - doReturn(Optional.of(mockedLeafNode)).when(mockedContainerNode).getChild(any(PathArgument.class)); + doReturn(mockedContainerNode).when(mockedDataContainerNode).childByArg(any(PathArgument.class)); + doCallRealMethod().when(mockedDataContainerNode).findChildByArg(any(PathArgument.class)); + doReturn(mockedLeafNode).when(mockedContainerNode).childByArg(any(PathArgument.class)); + doCallRealMethod().when(mockedContainerNode).findChildByArg(any(PathArgument.class)); final QName node1QName = QName.create("test-ns", "2016-09-16", "node1"); final QName node2Qname = QName.create("test-ns", "2016-09-16", "node2"); @@ -98,7 +108,7 @@ public class NormalizedNodesTest { final QName leafNodeQName = QName.create("test-ns", "2016-09-16", "leaf-node"); final NodeIdentifier leafNodeId = new NodeIdentifier(leafNodeQName); doReturn(leafNodeId).when(mockedLeafNode).getIdentifier(); - doReturn("str-value-1").when(mockedLeafNode).getValue(); + doReturn("str-value-1").when(mockedLeafNode).body(); String stringTree = NormalizedNodes.toStringTree(mockedLeafNode); assertNotNull(stringTree); @@ -109,18 +119,18 @@ public class NormalizedNodesTest { final AugmentationIdentifier augNodeId = new AugmentationIdentifier(ImmutableSet.of(listQName)); doReturn(augNodeId).when(mockedAugmentationNode).getIdentifier(); - final MapNode mockedMapNode = mock(MapNode.class); + final SystemMapNode mockedMapNode = mock(SystemMapNode.class); final NodeIdentifier listNodeId = new NodeIdentifier(listQName); doReturn(listNodeId).when(mockedMapNode).getIdentifier(); - doReturn(Collections.singletonList(mockedMapNode)).when(mockedAugmentationNode).getValue(); + doReturn(List.of(mockedMapNode)).when(mockedAugmentationNode).body(); final MapEntryNode mockedMapEntryNode = mock(MapEntryNode.class); final NodeIdentifierWithPredicates listEntryNodeId = NodeIdentifierWithPredicates.of(listQName, leafNodeQName, "key-leaf-value"); doReturn(listEntryNodeId).when(mockedMapEntryNode).getIdentifier(); - doReturn(Collections.singletonList(mockedMapEntryNode)).when(mockedMapNode).getValue(); + doReturn(List.of(mockedMapEntryNode)).when(mockedMapNode).body(); - doReturn(Collections.singletonList(mockedLeafNode)).when(mockedMapEntryNode).getValue(); + doReturn(List.of(mockedLeafNode)).when(mockedMapEntryNode).body(); stringTree = NormalizedNodes.toStringTree(mockedAugmentationNode); assertNotNull(stringTree); diff --git a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeWriterTest.java b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeWriterTest.java index 8d68d76a9a..9e9859118a 100644 --- a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeWriterTest.java +++ b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeWriterTest.java @@ -16,10 +16,8 @@ import static org.mockito.Mockito.doCallRealMethod; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; -import com.google.common.collect.ImmutableSet; import java.io.IOException; import java.net.URI; -import java.util.Optional; import java.util.Set; import javax.xml.transform.dom.DOMSource; import org.junit.Before; @@ -36,14 +34,14 @@ import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedLeafSetNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; import org.opendaylight.yangtools.yang.data.api.schema.YangModeledAnyXmlNode; public class NormalizedNodeWriterTest { @@ -74,57 +72,51 @@ public class NormalizedNodeWriterTest { () -> orderedNormalizedNodeWriter.write(mock(NormalizedNode.class))); assertTrue(ex.getMessage().startsWith("It wasn't possible to serialize node")); - final NormalizedNode mockedLeafSetEntryNode = mock(LeafSetEntryNode.class); + final LeafSetEntryNode mockedLeafSetEntryNode = mock(LeafSetEntryNode.class); doReturn(new NodeWithValue<>(myLeafList, "leaflist-value-1")).when(mockedLeafSetEntryNode).getIdentifier(); - doReturn("leaflist-value-1").when(mockedLeafSetEntryNode).getValue(); + doReturn("leaflist-value-1").when(mockedLeafSetEntryNode).body(); assertNotNull(orderedNormalizedNodeWriter.write(mockedLeafSetEntryNode)); - final NormalizedNode mockedLeafNode = mock(LeafNode.class); - doReturn("leaf-value-1").when(mockedLeafNode).getValue(); + final LeafNode mockedLeafNode = mock(LeafNode.class); + doReturn("leaf-value-1").when(mockedLeafNode).body(); assertNotNull(orderedNormalizedNodeWriter.write(mockedLeafNode)); final DOMSourceAnyxmlNode mockedAnyXmlNode = mock(DOMSourceAnyxmlNode.class); - doCallRealMethod().when(mockedAnyXmlNode).getValueObjectModel(); - doReturn(new DOMSource()).when(mockedAnyXmlNode).getValue(); + doCallRealMethod().when(mockedAnyXmlNode).bodyObjectModel(); + doReturn(new DOMSource()).when(mockedAnyXmlNode).body(); assertNotNull(orderedNormalizedNodeWriter.write(mockedAnyXmlNode)); - final NormalizedNode mockedContainerNode = mock(ContainerNode.class); + final NormalizedNode mockedContainerNode = mock(ContainerNode.class); assertNotNull(orderedNormalizedNodeWriter.write(mockedContainerNode)); - final NormalizedNode mockedYangModeledAnyXmlNode = mock(YangModeledAnyXmlNode.class); + final NormalizedNode mockedYangModeledAnyXmlNode = mock(YangModeledAnyXmlNode.class); assertNotNull(orderedNormalizedNodeWriter.write(mockedYangModeledAnyXmlNode)); final MapEntryNode mockedMapEntryNode = mock(MapEntryNode.class); doReturn(NodeIdentifierWithPredicates.of(myKeyedList, myKeyLeaf, "list-key-value-1")) .when(mockedMapEntryNode).getIdentifier(); - doReturn(Optional.empty()).when(mockedMapEntryNode).getChild(any(NodeIdentifier.class)); + doReturn(null).when(mockedMapEntryNode).childByArg(any(NodeIdentifier.class)); assertNotNull(orderedNormalizedNodeWriter.write(mockedMapEntryNode)); final UnkeyedListEntryNode mockedUnkeyedListEntryNode = mock(UnkeyedListEntryNode.class); assertNotNull(orderedNormalizedNodeWriter.write(mockedUnkeyedListEntryNode)); - final ChoiceNode mockedChoiceNode = mock(ChoiceNode.class); - assertNotNull(orderedNormalizedNodeWriter.write(mockedChoiceNode)); + assertNotNull(orderedNormalizedNodeWriter.write(mock(ChoiceNode.class))); - final AugmentationNode mockedAugmentationNode = mock(AugmentationNode.class); - assertNotNull(orderedNormalizedNodeWriter.write(mockedAugmentationNode)); + assertNotNull(orderedNormalizedNodeWriter.write(mock(AugmentationNode.class))); final UnkeyedListNode mockedUnkeyedListNode = mock(UnkeyedListNode.class); - final Set value = ImmutableSet.builder().add(mockedUnkeyedListEntryNode).build(); - doReturn(value).when(mockedUnkeyedListNode).getValue(); + final Set value = Set.of(mockedUnkeyedListEntryNode); + doReturn(value).when(mockedUnkeyedListNode).body(); assertNotNull(orderedNormalizedNodeWriter.write(mockedUnkeyedListNode)); - final OrderedMapNode mockedOrderedMapNode = mock(OrderedMapNode.class); - assertNotNull(orderedNormalizedNodeWriter.write(mockedOrderedMapNode)); + assertNotNull(orderedNormalizedNodeWriter.write(mock(UserMapNode.class))); - final MapNode mockedMapNode = mock(MapNode.class); - assertNotNull(orderedNormalizedNodeWriter.write(mockedMapNode)); + assertNotNull(orderedNormalizedNodeWriter.write(mock(SystemMapNode.class))); - final OrderedLeafSetNode mockedOrderedLeafSetNode = mock(OrderedLeafSetNode.class); - assertNotNull(orderedNormalizedNodeWriter.write(mockedOrderedLeafSetNode)); + assertNotNull(orderedNormalizedNodeWriter.write(mock(UserLeafSetNode.class))); - final LeafSetNode mockedLeafSetNode = mock(LeafSetNode.class); - assertNotNull(orderedNormalizedNodeWriter.write(mockedLeafSetNode)); + assertNotNull(orderedNormalizedNodeWriter.write(mock(SystemLeafSetNode.class))); orderedNormalizedNodeWriter.flush(); orderedNormalizedNodeWriter.close(); diff --git a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidateNodesTest.java b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidateNodesTest.java index 9f268cb470..0203ec6ebe 100644 --- a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidateNodesTest.java +++ b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidateNodesTest.java @@ -30,7 +30,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; public class DataTreeCandidateNodesTest { @Test public void testFromNormalizedNode() { - final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class); + final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class); final DataTreeCandidateNode dataTreeCandidateNode = DataTreeCandidateNodes.written(mockedNormalizedNode); assertNotNull(dataTreeCandidateNode); } @@ -41,7 +41,7 @@ public class DataTreeCandidateNodesTest { final DataTreeModificationCursor mockedCursor = mock(DataTreeModificationCursor.class); doReturn(ModificationType.WRITE).when(mockedDataTreeCandidateNode).getModificationType(); - final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class); + final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class); doReturn(Optional.of(mockedNormalizedNode)).when(mockedDataTreeCandidateNode).getDataAfter(); DataTreeCandidateNodes.applyToCursor(mockedCursor, mockedDataTreeCandidateNode); verify(mockedCursor, times(1)).write(isNull(), any(NormalizedNode.class)); @@ -69,7 +69,7 @@ public class DataTreeCandidateNodesTest { final DataTreeCandidateNode mockedChildNode2 = mock(DataTreeCandidateNode.class); doReturn(ModificationType.WRITE).when(mockedChildNode2).getModificationType(); - final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class); + final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class); doReturn(Optional.of(mockedNormalizedNode)).when(mockedChildNode2).getDataAfter(); final DataTreeCandidateNode mockedChildNode3 = mock(DataTreeCandidateNode.class); @@ -106,7 +106,7 @@ public class DataTreeCandidateNodesTest { final DataTreeModificationCursor mockedCursor = mock(DataTreeModificationCursor.class); doReturn(ModificationType.WRITE).when(mockedDataTreeCandidateNode).getModificationType(); - final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class); + final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class); doReturn(Optional.of(mockedNormalizedNode)).when(mockedDataTreeCandidateNode).getDataAfter(); DataTreeCandidateNodes.applyRootedNodeToCursor(mockedCursor, mockedRootPath, mockedDataTreeCandidateNode); verify(mockedCursor, times(1)).write(isNull(), any(NormalizedNode.class)); diff --git a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidatesAggregateTest.java b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidatesAggregateTest.java index 3c60f43d6e..5965f29a70 100644 --- a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidatesAggregateTest.java +++ b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidatesAggregateTest.java @@ -21,6 +21,7 @@ import org.junit.Test; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; public class DataTreeCandidatesAggregateTest { @@ -33,9 +34,9 @@ public class DataTreeCandidatesAggregateTest { @Test public void testLeafUnmodifiedUnmodified() { - NormalizedNode normalizedNode1 = normalizedNode("value1"); - NormalizedNode normalizedNode2 = normalizedNode("value1"); - NormalizedNode normalizedNode3 = normalizedNode("value1"); + NormalizedNode normalizedNode1 = normalizedNode("value1"); + NormalizedNode normalizedNode2 = normalizedNode("value1"); + NormalizedNode normalizedNode3 = normalizedNode("value1"); DataTreeCandidateNode node1 = dataTreeCandidateNode(normalizedNode1, normalizedNode2, ModificationType.UNMODIFIED); @@ -48,15 +49,15 @@ public class DataTreeCandidatesAggregateTest { DataTreeCandidate aggregationResult = DataTreeCandidates.aggregate(Arrays.asList(candidate1, candidate2)); assertEquals(ModificationType.UNMODIFIED, aggregationResult.getRootNode().getModificationType()); - assertEquals("value1", aggregationResult.getRootNode().getDataBefore().get().getValue()); - assertEquals("value1", aggregationResult.getRootNode().getDataAfter().get().getValue()); + assertEquals("value1", aggregationResult.getRootNode().getDataBefore().get().body()); + assertEquals("value1", aggregationResult.getRootNode().getDataAfter().get().body()); } @Test public void testLeaftUnmodifiedWrite() { - NormalizedNode normalizedNode1 = normalizedNode("value1"); - NormalizedNode normalizedNode2 = normalizedNode("value1"); - NormalizedNode normalizedNode3 = normalizedNode("value2"); + NormalizedNode normalizedNode1 = normalizedNode("value1"); + NormalizedNode normalizedNode2 = normalizedNode("value1"); + NormalizedNode normalizedNode3 = normalizedNode("value2"); DataTreeCandidateNode node1 = dataTreeCandidateNode(normalizedNode1, normalizedNode2, ModificationType.UNMODIFIED); @@ -69,14 +70,14 @@ public class DataTreeCandidatesAggregateTest { DataTreeCandidate aggregationResult = DataTreeCandidates.aggregate(Arrays.asList(candidate1, candidate2)); assertEquals(ModificationType.WRITE, aggregationResult.getRootNode().getModificationType()); - assertEquals("value1", aggregationResult.getRootNode().getDataBefore().get().getValue()); - assertEquals("value2", aggregationResult.getRootNode().getDataAfter().get().getValue()); + assertEquals("value1", aggregationResult.getRootNode().getDataBefore().get().body()); + assertEquals("value2", aggregationResult.getRootNode().getDataAfter().get().body()); } @Test public void testLeafUnmodifiedDelete() { - NormalizedNode normalizedNode1 = normalizedNode("value1"); - NormalizedNode normalizedNode2 = normalizedNode("value1"); + NormalizedNode normalizedNode1 = normalizedNode("value1"); + NormalizedNode normalizedNode2 = normalizedNode("value1"); DataTreeCandidateNode node1 = dataTreeCandidateNode(normalizedNode1, normalizedNode2, ModificationType.UNMODIFIED); @@ -89,7 +90,7 @@ public class DataTreeCandidatesAggregateTest { DataTreeCandidate aggregationResult = DataTreeCandidates.aggregate(Arrays.asList(candidate1, candidate2)); assertEquals(ModificationType.DELETE, aggregationResult.getRootNode().getModificationType()); - assertEquals("value1", aggregationResult.getRootNode().getDataBefore().get().getValue()); + assertEquals("value1", aggregationResult.getRootNode().getDataBefore().get().body()); assertEquals(Optional.empty(), aggregationResult.getRootNode().getDataAfter()); } @@ -123,8 +124,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testLeafWriteUnmodified() { - NormalizedNode normalizedNode1 = normalizedNode("value1"); - NormalizedNode normalizedNode2 = normalizedNode("value2"); + NormalizedNode normalizedNode1 = normalizedNode("value1"); + NormalizedNode normalizedNode2 = normalizedNode("value2"); DataTreeCandidateNode node1 = dataTreeCandidateNode(normalizedNode1, normalizedNode2, ModificationType.WRITE); @@ -137,15 +138,15 @@ public class DataTreeCandidatesAggregateTest { DataTreeCandidate aggregationResult = DataTreeCandidates.aggregate(Arrays.asList(candidate1, candidate2)); assertEquals(ModificationType.WRITE, aggregationResult.getRootNode().getModificationType()); - assertEquals("value1", aggregationResult.getRootNode().getDataBefore().get().getValue()); - assertEquals("value2", aggregationResult.getRootNode().getDataAfter().get().getValue()); + assertEquals("value1", aggregationResult.getRootNode().getDataBefore().get().body()); + assertEquals("value2", aggregationResult.getRootNode().getDataAfter().get().body()); } @Test public void testLeafWriteWrite() { - NormalizedNode normalizedNode1 = normalizedNode("value1"); - NormalizedNode normalizedNode2 = normalizedNode("value2"); - NormalizedNode normalizedNode3 = normalizedNode("value3"); + NormalizedNode normalizedNode1 = normalizedNode("value1"); + NormalizedNode normalizedNode2 = normalizedNode("value2"); + NormalizedNode normalizedNode3 = normalizedNode("value3"); DataTreeCandidateNode node1 = dataTreeCandidateNode(normalizedNode1, normalizedNode2, ModificationType.WRITE); @@ -158,13 +159,13 @@ public class DataTreeCandidatesAggregateTest { DataTreeCandidate aggregationResult = DataTreeCandidates.aggregate(Arrays.asList(candidate1, candidate2)); assertEquals(ModificationType.WRITE, aggregationResult.getRootNode().getModificationType()); - assertEquals("value1", aggregationResult.getRootNode().getDataBefore().get().getValue()); - assertEquals("value3", aggregationResult.getRootNode().getDataAfter().get().getValue()); + assertEquals("value1", aggregationResult.getRootNode().getDataBefore().get().body()); + assertEquals("value3", aggregationResult.getRootNode().getDataAfter().get().body()); } @Test public void testLeafWriteDeleteWithoutChanges() { - NormalizedNode normalizedNode = normalizedNode("value1"); + NormalizedNode normalizedNode = normalizedNode("value1"); DataTreeCandidateNode node1 = dataTreeCandidateNode(null, normalizedNode, ModificationType.WRITE); @@ -183,8 +184,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testLeafWriteDelete() { - NormalizedNode normalizedNode1 = normalizedNode("value1"); - NormalizedNode normalizedNode2 = normalizedNode("value2"); + NormalizedNode normalizedNode1 = normalizedNode("value1"); + NormalizedNode normalizedNode2 = normalizedNode("value2"); DataTreeCandidateNode node1 = dataTreeCandidateNode(normalizedNode1, normalizedNode2, ModificationType.WRITE); @@ -197,13 +198,13 @@ public class DataTreeCandidatesAggregateTest { DataTreeCandidate aggregationResult = DataTreeCandidates.aggregate(Arrays.asList(candidate1, candidate2)); assertEquals(ModificationType.DELETE, aggregationResult.getRootNode().getModificationType()); - assertEquals("value1", aggregationResult.getRootNode().getDataBefore().get().getValue()); + assertEquals("value1", aggregationResult.getRootNode().getDataBefore().get().body()); assertEquals(Optional.empty(), aggregationResult.getRootNode().getDataAfter()); } @Test public void testLeafDeleteUnmodified() { - NormalizedNode normalizedNode = normalizedNode("value"); + NormalizedNode normalizedNode = normalizedNode("value"); DataTreeCandidateNode node1 = dataTreeCandidateNode(normalizedNode, null, ModificationType.DELETE); @@ -216,14 +217,14 @@ public class DataTreeCandidatesAggregateTest { DataTreeCandidate aggregationResult = DataTreeCandidates.aggregate(Arrays.asList(candidate1, candidate2)); assertEquals(ModificationType.DELETE, aggregationResult.getRootNode().getModificationType()); - assertEquals("value", aggregationResult.getRootNode().getDataBefore().get().getValue()); + assertEquals("value", aggregationResult.getRootNode().getDataBefore().get().body()); assertEquals(Optional.empty(), aggregationResult.getRootNode().getDataAfter()); } @Test public void testLeafDeleteWrite() { - NormalizedNode normalizedNode1 = normalizedNode("value1"); - NormalizedNode normalizedNode2 = normalizedNode("value2"); + NormalizedNode normalizedNode1 = normalizedNode("value1"); + NormalizedNode normalizedNode2 = normalizedNode("value2"); DataTreeCandidateNode node1 = dataTreeCandidateNode(normalizedNode1, null, ModificationType.DELETE); @@ -236,13 +237,13 @@ public class DataTreeCandidatesAggregateTest { DataTreeCandidate aggregationResult = DataTreeCandidates.aggregate(Arrays.asList(candidate1, candidate2)); assertEquals(ModificationType.WRITE, aggregationResult.getRootNode().getModificationType()); - assertEquals("value1", aggregationResult.getRootNode().getDataBefore().get().getValue()); - assertEquals("value2", aggregationResult.getRootNode().getDataAfter().get().getValue()); + assertEquals("value1", aggregationResult.getRootNode().getDataBefore().get().body()); + assertEquals("value2", aggregationResult.getRootNode().getDataAfter().get().body()); } @Test public void testLeafDeleteDelete() { - NormalizedNode normalizedNode1 = normalizedNode("value1"); + NormalizedNode normalizedNode1 = normalizedNode("value1"); DataTreeCandidateNode node1 = dataTreeCandidateNode(normalizedNode1, null, ModificationType.DELETE); @@ -258,7 +259,7 @@ public class DataTreeCandidatesAggregateTest { @Test public void testLeafDeleteDisappear() { - NormalizedNode normalizedNode1 = normalizedNode("value1"); + NormalizedNode normalizedNode1 = normalizedNode("value1"); DataTreeCandidateNode node1 = dataTreeCandidateNode(normalizedNode1, null, ModificationType.DELETE); @@ -274,7 +275,7 @@ public class DataTreeCandidatesAggregateTest { @Test public void testLeafDeleteSubtreeModified() { - NormalizedNode normalizedNode1 = normalizedNode("value1"); + NormalizedNode normalizedNode1 = normalizedNode("value1"); DataTreeCandidateNode node1 = dataTreeCandidateNode(normalizedNode1, null, ModificationType.DELETE); @@ -290,8 +291,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testUnmodifiedUnmodified() throws NoSuchFieldException { - NormalizedNode parentNode = normalizedNode("container"); - NormalizedNode childNode = normalizedNode("child"); + NormalizedNode parentNode = normalizedNode("container"); + NormalizedNode childNode = normalizedNode("child"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode, parentNode, ModificationType.UNMODIFIED); @@ -314,8 +315,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testUnmodifiedDelete() { - NormalizedNode parentNode = normalizedNode("container"); - NormalizedNode childNode = normalizedNode("child"); + NormalizedNode parentNode = normalizedNode("container"); + NormalizedNode childNode = normalizedNode("child"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode, parentNode, ModificationType.UNMODIFIED); @@ -338,10 +339,10 @@ public class DataTreeCandidatesAggregateTest { @Test public void testUnmodifiedWrite() { - NormalizedNode parentNode1 = normalizedNode("container1"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode parentNode2 = normalizedNode("container2"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container1"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode parentNode2 = normalizedNode("container2"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, parentNode1, ModificationType.UNMODIFIED); @@ -364,8 +365,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testUnmodifiedSubtreeModifiedWithoutDataBefore() { - NormalizedNode parentNode = normalizedNode("container"); - NormalizedNode childNode = normalizedNode("child"); + NormalizedNode parentNode = normalizedNode("container"); + NormalizedNode childNode = normalizedNode("child"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(null, null, ModificationType.UNMODIFIED); @@ -388,10 +389,10 @@ public class DataTreeCandidatesAggregateTest { //FIXME @Test public void testUnmodifiedSubtreeModified() { - NormalizedNode parentNode1 = normalizedNode("container1"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode parentNode2 = normalizedNode("container1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container1"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode parentNode2 = normalizedNode("container1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, parentNode1, ModificationType.UNMODIFIED); @@ -414,10 +415,10 @@ public class DataTreeCandidatesAggregateTest { @Test public void testUnmodifiedAppearedWithDataBefore() { - NormalizedNode parentNode1 = normalizedNode("container1"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode parentNode2 = normalizedNode("container1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container1"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode parentNode2 = normalizedNode("container1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, parentNode1, ModificationType.UNMODIFIED); @@ -440,8 +441,8 @@ public class DataTreeCandidatesAggregateTest { //FIXME @Test public void testUnmodifiedAppeared() { - NormalizedNode parentNode = normalizedNode("container"); - NormalizedNode childNode = normalizedNode("child"); + NormalizedNode parentNode = normalizedNode("container"); + NormalizedNode childNode = normalizedNode("child"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(null, null, ModificationType.UNMODIFIED); @@ -464,8 +465,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testUnmodifiedDisappearWithoutDataBefore() { - NormalizedNode parentNode = normalizedNode("container"); - NormalizedNode childNode = normalizedNode("child"); + NormalizedNode parentNode = normalizedNode("container"); + NormalizedNode childNode = normalizedNode("child"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(null, null, ModificationType.UNMODIFIED); @@ -487,8 +488,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testUnmodifiedDisappear() { - NormalizedNode parentNode1 = normalizedNode("container1"); - NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode parentNode1 = normalizedNode("container1"); + NormalizedNode childNode1 = normalizedNode("child1"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, parentNode1, ModificationType.UNMODIFIED); @@ -511,8 +512,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testDeleteUnmodified() { - NormalizedNode parentNode = normalizedNode("container"); - NormalizedNode childNode = normalizedNode("child"); + NormalizedNode parentNode = normalizedNode("container"); + NormalizedNode childNode = normalizedNode("child"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode, null, ModificationType.DELETE); @@ -535,10 +536,10 @@ public class DataTreeCandidatesAggregateTest { @Test public void testDeleteWrite() { - NormalizedNode parentNode1 = normalizedNode("container1"); - NormalizedNode parentNode2 = normalizedNode("container2"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container1"); + NormalizedNode parentNode2 = normalizedNode("container2"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, null, ModificationType.DELETE); @@ -561,10 +562,10 @@ public class DataTreeCandidatesAggregateTest { @Test public void testDeleteAppear() { - NormalizedNode parentNode1 = normalizedNode("container1"); - NormalizedNode parentNode2 = normalizedNode("container2"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container1"); + NormalizedNode parentNode2 = normalizedNode("container2"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, null, ModificationType.DELETE); @@ -587,8 +588,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testWriteUnmodified() { - NormalizedNode parentNode = normalizedNode("container"); - NormalizedNode childNode = normalizedNode("child"); + NormalizedNode parentNode = normalizedNode("container"); + NormalizedNode childNode = normalizedNode("child"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(null, parentNode, ModificationType.WRITE); @@ -611,8 +612,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testWriteDeleteWithoutChanges() { - NormalizedNode parentNode = normalizedNode("container"); - NormalizedNode childNode = normalizedNode("child"); + NormalizedNode parentNode = normalizedNode("container"); + NormalizedNode childNode = normalizedNode("child"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(null, parentNode, ModificationType.WRITE); @@ -635,10 +636,10 @@ public class DataTreeCandidatesAggregateTest { @Test public void testWriteDelete() { - NormalizedNode parentNode1 = normalizedNode("container1"); - NormalizedNode parentNode2 = normalizedNode("container2"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container1"); + NormalizedNode parentNode2 = normalizedNode("container2"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, parentNode2, ModificationType.WRITE); @@ -661,10 +662,10 @@ public class DataTreeCandidatesAggregateTest { @Test public void testWriteWrite() { - NormalizedNode parentNode1 = normalizedNode("container1"); - NormalizedNode parentNode2 = normalizedNode("container2"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container1"); + NormalizedNode parentNode2 = normalizedNode("container2"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(null, parentNode1, ModificationType.WRITE); @@ -687,12 +688,12 @@ public class DataTreeCandidatesAggregateTest { @Test public void testWriteSubtreeModified() { - NormalizedNode parentNode = normalizedNode("container"); - NormalizedNode parentNode1 = normalizedNode("container1"); - NormalizedNode parentNode2 = normalizedNode("container1"); - NormalizedNode childNode = normalizedNode("child"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode = normalizedNode("container"); + NormalizedNode parentNode1 = normalizedNode("container1"); + NormalizedNode parentNode2 = normalizedNode("container1"); + NormalizedNode childNode = normalizedNode("child"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode, parentNode1, ModificationType.WRITE); @@ -715,11 +716,11 @@ public class DataTreeCandidatesAggregateTest { @Test public void testWriteAppear() { - NormalizedNode parentNode1 = normalizedNode("container1"); - NormalizedNode parentNode2 = normalizedNode("container2"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); - NormalizedNode childNode3 = normalizedNode("child3"); + NormalizedNode parentNode1 = normalizedNode("container1"); + NormalizedNode parentNode2 = normalizedNode("container2"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode childNode3 = normalizedNode("child3"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, parentNode2, ModificationType.WRITE); @@ -741,8 +742,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testWriteDisappearWithoutChanges() { - NormalizedNode parentNode = normalizedNode("container"); - NormalizedNode childNode = normalizedNode("child"); + NormalizedNode parentNode = normalizedNode("container"); + NormalizedNode childNode = normalizedNode("child"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(null, parentNode, ModificationType.WRITE); @@ -765,10 +766,10 @@ public class DataTreeCandidatesAggregateTest { @Test public void testWriteDisappear() { - NormalizedNode parentNode1 = normalizedNode("container1"); - NormalizedNode parentNode2 = normalizedNode("container2"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container1"); + NormalizedNode parentNode2 = normalizedNode("container2"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, parentNode2, ModificationType.WRITE); @@ -791,10 +792,10 @@ public class DataTreeCandidatesAggregateTest { @Test public void testSubtreeModifiedUnmodified() { - NormalizedNode parentNode1 = normalizedNode("container1"); - NormalizedNode parentNode2 = normalizedNode("container1"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container1"); + NormalizedNode parentNode2 = normalizedNode("container1"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, parentNode2, ModificationType.SUBTREE_MODIFIED); @@ -817,10 +818,10 @@ public class DataTreeCandidatesAggregateTest { @Test public void testSubtreeModifiedDelete() { - NormalizedNode parentNode1 = normalizedNode("container1"); - NormalizedNode parentNode2 = normalizedNode("container1"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container1"); + NormalizedNode parentNode2 = normalizedNode("container1"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, parentNode2, ModificationType.SUBTREE_MODIFIED); @@ -843,11 +844,11 @@ public class DataTreeCandidatesAggregateTest { @Test public void testSubtreeModifiedWrite() { - NormalizedNode parentNode1 = normalizedNode("container"); - NormalizedNode parentNode2 = normalizedNode("value2"); - NormalizedNode childNode = normalizedNode("childNode"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container"); + NormalizedNode parentNode2 = normalizedNode("value2"); + NormalizedNode childNode = normalizedNode("childNode"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, parentNode1, ModificationType.SUBTREE_MODIFIED); @@ -870,10 +871,10 @@ public class DataTreeCandidatesAggregateTest { @Test public void testSubtreeModifiedSubtreeModified() { - NormalizedNode parentNode1 = normalizedNode("container"); - NormalizedNode childNode = normalizedNode("childNode"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container"); + NormalizedNode childNode = normalizedNode("childNode"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, parentNode1, ModificationType.SUBTREE_MODIFIED); @@ -896,11 +897,11 @@ public class DataTreeCandidatesAggregateTest { @Test public void testSubtreeModifiedAppear() { - NormalizedNode parentNode1 = normalizedNode("container"); - NormalizedNode parentNode2 = normalizedNode("value2"); - NormalizedNode childNode = normalizedNode("childNode"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container"); + NormalizedNode parentNode2 = normalizedNode("value2"); + NormalizedNode childNode = normalizedNode("childNode"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, parentNode1, ModificationType.SUBTREE_MODIFIED); @@ -922,9 +923,9 @@ public class DataTreeCandidatesAggregateTest { @Test public void testSubtreeModifiedDisappear() { - NormalizedNode parentNode1 = normalizedNode("container"); - NormalizedNode childNode = normalizedNode("childNode"); - NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode parentNode1 = normalizedNode("container"); + NormalizedNode childNode = normalizedNode("childNode"); + NormalizedNode childNode1 = normalizedNode("child1"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, parentNode1, ModificationType.SUBTREE_MODIFIED); @@ -947,8 +948,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testAppearedUnmodified() { - NormalizedNode parentNode1 = normalizedNode("container"); - NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode parentNode1 = normalizedNode("container"); + NormalizedNode childNode1 = normalizedNode("child1"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(null, parentNode1, ModificationType.APPEARED); @@ -971,8 +972,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testAppearedDelete() { - NormalizedNode parentNode1 = normalizedNode("container"); - NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode parentNode1 = normalizedNode("container"); + NormalizedNode childNode1 = normalizedNode("child1"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(null, parentNode1, ModificationType.APPEARED); @@ -995,10 +996,10 @@ public class DataTreeCandidatesAggregateTest { @Test public void testAppearedWriteWithoutChanges() { - NormalizedNode parentNode1 = normalizedNode("container"); - NormalizedNode parentNode2 = normalizedNode("value2"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container"); + NormalizedNode parentNode2 = normalizedNode("value2"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(null, parentNode1, ModificationType.APPEARED); @@ -1021,9 +1022,9 @@ public class DataTreeCandidatesAggregateTest { @Test public void testAppearedSubtreeModified() { - NormalizedNode parentNode1 = normalizedNode("container"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(null, parentNode1, ModificationType.APPEARED); @@ -1046,8 +1047,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testAppearedAppeared() { - NormalizedNode parentNode1 = normalizedNode("container"); - NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode parentNode1 = normalizedNode("container"); + NormalizedNode childNode1 = normalizedNode("child1"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(null, parentNode1, ModificationType.APPEARED); @@ -1069,8 +1070,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testAppearedDisappeared() { - NormalizedNode parentNode1 = normalizedNode("container"); - NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode parentNode1 = normalizedNode("container"); + NormalizedNode childNode1 = normalizedNode("child1"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(null, parentNode1, ModificationType.APPEARED); @@ -1093,8 +1094,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testDisappearedUnmodified() { - NormalizedNode parentNode1 = normalizedNode("container"); - NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode parentNode1 = normalizedNode("container"); + NormalizedNode childNode1 = normalizedNode("child1"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, null, ModificationType.DISAPPEARED); @@ -1117,8 +1118,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testDisappearedDelete() { - NormalizedNode parentNode1 = normalizedNode("container"); - NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode parentNode1 = normalizedNode("container"); + NormalizedNode childNode1 = normalizedNode("child1"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, null, ModificationType.DISAPPEARED); @@ -1140,10 +1141,10 @@ public class DataTreeCandidatesAggregateTest { @Test public void testDisappearedWrite() { - NormalizedNode parentNode1 = normalizedNode("container1"); - NormalizedNode parentNode2 = normalizedNode("container2"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container1"); + NormalizedNode parentNode2 = normalizedNode("container2"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, null, ModificationType.DISAPPEARED); @@ -1166,9 +1167,9 @@ public class DataTreeCandidatesAggregateTest { @Test public void testDisappearedSubtreeModified() { - NormalizedNode parentNode1 = normalizedNode("container"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, null, ModificationType.DISAPPEARED); @@ -1190,10 +1191,10 @@ public class DataTreeCandidatesAggregateTest { @Test public void testDisappearedAppeared() { - NormalizedNode parentNode1 = normalizedNode("container"); - NormalizedNode parentNode2 = normalizedNode("container"); - NormalizedNode childNode1 = normalizedNode("child1"); - NormalizedNode childNode2 = normalizedNode("child2"); + NormalizedNode parentNode1 = normalizedNode("container"); + NormalizedNode parentNode2 = normalizedNode("container"); + NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode childNode2 = normalizedNode("child2"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, null, ModificationType.DISAPPEARED); @@ -1216,8 +1217,8 @@ public class DataTreeCandidatesAggregateTest { @Test public void testDisappearedDisappear() { - NormalizedNode parentNode1 = normalizedNode("container"); - NormalizedNode childNode1 = normalizedNode("child1"); + NormalizedNode parentNode1 = normalizedNode("container"); + NormalizedNode childNode1 = normalizedNode("child1"); TerminalDataTreeCandidateNode node1 = dataTreeCandidateNode(parentNode1, null, ModificationType.DISAPPEARED); @@ -1237,14 +1238,14 @@ public class DataTreeCandidatesAggregateTest { () -> DataTreeCandidates.aggregate(Arrays.asList(candidate1, candidate2))); } - private static NormalizedNode normalizedNode(final String value) { - NormalizedNode node = mock(NormalizedNode.class); - doReturn(value).when(node).getValue(); + private static LeafNode normalizedNode(final String value) { + LeafNode node = mock(LeafNode.class); + doReturn(value).when(node).body(); return node; } - private static TerminalDataTreeCandidateNode dataTreeCandidateNode(final NormalizedNode before, - final NormalizedNode after, + private static TerminalDataTreeCandidateNode dataTreeCandidateNode(final NormalizedNode before, + final NormalizedNode after, final ModificationType modification) { TerminalDataTreeCandidateNode dataTreeCandidateNode = mock(TerminalDataTreeCandidateNode.class); doReturn(null).when(dataTreeCandidateNode).getIdentifier(); diff --git a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidatesTest.java b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidatesTest.java index 9a1658b2c6..ec6bab5a59 100644 --- a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidatesTest.java +++ b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidatesTest.java @@ -49,7 +49,7 @@ public class DataTreeCandidatesTest { @Test public void testFromNormalizedNode() { final YangInstanceIdentifier mockedRootPath = mock(YangInstanceIdentifier.class); - final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class); + final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class); final DataTreeCandidate dataTreeCandidate = DataTreeCandidates.fromNormalizedNode(mockedRootPath, mockedNormalizedNode); @@ -135,7 +135,7 @@ public class DataTreeCandidatesTest { doReturn(mockedDataTreeCandidateNode).when(mockedDataTreeCandidate).getRootNode(); final YangInstanceIdentifier mockedRootPath = mock(YangInstanceIdentifier.class); doReturn(mockedRootPath).when(mockedDataTreeCandidate).getRootPath(); - final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class); + final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class); doReturn(Optional.of(mockedNormalizedNode)).when(mockedDataTreeCandidateNode).getDataAfter(); doReturn(ModificationType.WRITE).when(mockedDataTreeCandidateNode).getModificationType(); @@ -163,7 +163,7 @@ public class DataTreeCandidatesTest { final DataTreeCandidateNode mockedChildNode2 = mock(DataTreeCandidateNode.class); doReturn(ModificationType.WRITE).when(mockedChildNode2).getModificationType(); - final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class); + final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class); doReturn(Optional.of(mockedNormalizedNode)).when(mockedChildNode2).getDataAfter(); final PathArgument mockedPathArgument2 = mock(PathArgument.class); doReturn(mockedPathArgument2).when(mockedChildNode2).getIdentifier(); diff --git a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/NormalizedNodeDataTreeCandidateNodeTest.java b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/NormalizedNodeDataTreeCandidateNodeTest.java index d7463ae60d..5c535237d2 100644 --- a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/NormalizedNodeDataTreeCandidateNodeTest.java +++ b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/NormalizedNodeDataTreeCandidateNodeTest.java @@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.data.api.schema.tree; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doCallRealMethod; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; @@ -19,14 +20,14 @@ import java.util.List; import java.util.Optional; import org.junit.Test; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; public class NormalizedNodeDataTreeCandidateNodeTest { @Test public void testNormalizedNodeDataTreeCandidateNode() { - final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class); + final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class); final NormalizedNodeDataTreeCandidateNode normalizedNodeDataTreeCandidateNode = new NormalizedNodeDataTreeCandidateNode(mockedNormalizedNode); @@ -44,22 +45,22 @@ public class NormalizedNodeDataTreeCandidateNodeTest { assertEquals(Optional.of(mockedNormalizedNode), normalizedNodeDataTreeCandidateNode.getDataAfter()); assertEquals(Optional.empty(), normalizedNodeDataTreeCandidateNode.getDataBefore()); - final NormalizedNodeContainer mockedNormalizedNodeContainer = mock(NormalizedNodeContainer.class); + final DistinctNodeContainer mockedNormalizedNodeContainer = mock(DistinctNodeContainer.class); final NormalizedNodeDataTreeCandidateNode normalizedNodeDataTreeCandidateNode2 = new NormalizedNodeDataTreeCandidateNode(mockedNormalizedNodeContainer); - final NormalizedNode mockedChildNormNode1 = mock(NormalizedNode.class); - final NormalizedNode mockedChildNormNode2 = mock(NormalizedNode.class); - final Collection> mockedChildNodes = Arrays.asList(mockedChildNormNode1, + final NormalizedNode mockedChildNormNode1 = mock(NormalizedNode.class); + final NormalizedNode mockedChildNormNode2 = mock(NormalizedNode.class); + final Collection mockedChildNodes = Arrays.asList(mockedChildNormNode1, mockedChildNormNode2, null); - doReturn(mockedChildNodes).when(mockedNormalizedNodeContainer).getValue(); + doReturn(mockedChildNodes).when(mockedNormalizedNodeContainer).body(); final Collection childNodes2 = normalizedNodeDataTreeCandidateNode2.getChildNodes(); assertEquals(3, childNodes2.size()); - doReturn(Optional.empty()).when(mockedNormalizedNodeContainer).getChild(any(PathArgument.class)); + doReturn(null).when(mockedNormalizedNodeContainer).childByArg(any(PathArgument.class)); + doCallRealMethod().when(mockedNormalizedNodeContainer).findChildByArg(any(PathArgument.class)); assertEquals(Optional.empty(), normalizedNodeDataTreeCandidateNode2.getModifiedChild(mockedPathArgument)); - doReturn(Optional.of(mockedChildNormNode1)).when(mockedNormalizedNodeContainer).getChild( - any(PathArgument.class)); + doReturn(mockedChildNormNode1).when(mockedNormalizedNodeContainer).childByArg(any(PathArgument.class)); assertTrue(normalizedNodeDataTreeCandidateNode2.getModifiedChild(mockedPathArgument).isPresent()); } } diff --git a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/DuplicityTest.java b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/DuplicityTest.java index c9fe7cd499..2071ac43d3 100644 --- a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/DuplicityTest.java +++ b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/DuplicityTest.java @@ -24,9 +24,9 @@ public class DuplicityTest { public void testDuplicate() { final LeafNode leafNode = mock(LeafNode.class); final ContainerNode containerNode = mock(ContainerNode.class); - final Map, DuplicateEntry> normalizedNodeDuplicateEntryMapNode = NormalizedNodes + final Map normalizedNodeDuplicateEntryMapNode = NormalizedNodes .findDuplicates(leafNode); - final Map, DuplicateEntry> normalizedNodeDuplicateEntryMapContainer = NormalizedNodes + final Map normalizedNodeDuplicateEntryMapContainer = NormalizedNodes .findDuplicates(containerNode); assertEquals(0, normalizedNodeDuplicateEntryMapNode.size()); assertEquals(0, normalizedNodeDuplicateEntryMapContainer.size()); diff --git a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/TreeNodeFactoryTest.java b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/TreeNodeFactoryTest.java index a26e381214..49759672f1 100644 --- a/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/TreeNodeFactoryTest.java +++ b/yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/TreeNodeFactoryTest.java @@ -15,11 +15,11 @@ import org.mockito.Mockito; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; public class TreeNodeFactoryTest { - private static void checkTreeNode(final TreeNode node, final NormalizedNode data, final Version version) { + private static void checkTreeNode(final TreeNode node, final NormalizedNode data, final Version version) { assertSame(data, node.getData()); assertSame(version, node.getSubtreeVersion()); assertSame(version, node.getVersion()); @@ -37,7 +37,7 @@ public class TreeNodeFactoryTest { @Test public void testOrderedNodeContainer() { - final OrderedMapNode data = Mockito.mock(OrderedMapNode.class); + final UserMapNode data = Mockito.mock(UserMapNode.class); final Version version = Version.initial(); final TreeNode node = TreeNodeFactory.createTreeNode(data, version); diff --git a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/AbstractDataTreeCandidateNode.java b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/AbstractDataTreeCandidateNode.java index e828e7cfaf..b03aa10c78 100644 --- a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/AbstractDataTreeCandidateNode.java +++ b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/AbstractDataTreeCandidateNode.java @@ -40,7 +40,7 @@ abstract class AbstractDataTreeCandidateNode implements DataTreeCandidateNode { } @Override - public final Optional> getDataBefore() { + public final Optional getDataBefore() { throw new UnsupportedOperationException("Before-image not available after serialization"); } } diff --git a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/AbstractNormalizedNodeDataOutput.java b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/AbstractNormalizedNodeDataOutput.java index 62adaf21a5..fea4fd5594 100755 --- a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/AbstractNormalizedNodeDataOutput.java +++ b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/AbstractNormalizedNodeDataOutput.java @@ -145,7 +145,7 @@ abstract class AbstractNormalizedNodeDataOutput implements NormalizedNodeDataOut } @Override - public final void writeNormalizedNode(final NormalizedNode node) throws IOException { + public final void writeNormalizedNode(final NormalizedNode node) throws IOException { ensureHeaderWritten(); if (normalizedNodeWriter == null) { normalizedNodeWriter = NormalizedNodeWriter.forStreamWriter(this); diff --git a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/DeletedDataTreeCandidateNode.java b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/DeletedDataTreeCandidateNode.java index c3e6b9b570..9e9d9d1f5d 100644 --- a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/DeletedDataTreeCandidateNode.java +++ b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/DeletedDataTreeCandidateNode.java @@ -41,7 +41,7 @@ abstract class DeletedDataTreeCandidateNode extends AbstractDataTreeCandidateNod } @Override - public final Optional> getDataAfter() { + public final Optional getDataAfter() { return Optional.empty(); } diff --git a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/ForwardingNormalizedNodeDataInput.java b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/ForwardingNormalizedNodeDataInput.java index cfb171f82d..20aaed7ffc 100644 --- a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/ForwardingNormalizedNodeDataInput.java +++ b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/ForwardingNormalizedNodeDataInput.java @@ -29,12 +29,12 @@ abstract class ForwardingNormalizedNodeDataInput extends ForwardingDataInput imp } @Override - public final NormalizedNode readNormalizedNode() throws IOException { + public final NormalizedNode readNormalizedNode() throws IOException { return delegate().readNormalizedNode(); } @Override - public final NormalizedNode readNormalizedNode(final ReusableStreamReceiver receiver) throws IOException { + public final NormalizedNode readNormalizedNode(final ReusableStreamReceiver receiver) throws IOException { return delegate().readNormalizedNode(receiver); } diff --git a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/ModifiedDataTreeCandidateNode.java b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/ModifiedDataTreeCandidateNode.java index 4b156f22af..2d24dc3ee5 100644 --- a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/ModifiedDataTreeCandidateNode.java +++ b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/ModifiedDataTreeCandidateNode.java @@ -49,7 +49,7 @@ abstract class ModifiedDataTreeCandidateNode extends AbstractDataTreeCandidateNo } @Override - public final Optional> getDataAfter() { + public final Optional getDataAfter() { throw new UnsupportedOperationException("After-image not available after serialization"); } diff --git a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeDataInput.java b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeDataInput.java index 5e4c4cda90..c7c73793f0 100644 --- a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeDataInput.java +++ b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeDataInput.java @@ -45,7 +45,7 @@ public interface NormalizedNodeDataInput extends DataInput { * @throws IOException if an error occurs * @throws IllegalStateException if the dictionary has been detached */ - default NormalizedNode readNormalizedNode() throws IOException { + default NormalizedNode readNormalizedNode() throws IOException { return readNormalizedNode(ReusableImmutableNormalizedNodeStreamWriter.create()); } @@ -57,7 +57,7 @@ public interface NormalizedNodeDataInput extends DataInput { * @throws IOException if an error occurs * @throws IllegalStateException if the dictionary has been detached */ - default NormalizedNode readNormalizedNode(final ReusableStreamReceiver receiver) throws IOException { + default NormalizedNode readNormalizedNode(final ReusableStreamReceiver receiver) throws IOException { try { streamNormalizedNode(receiver); return receiver.getResult(); @@ -85,7 +85,7 @@ public interface NormalizedNodeDataInput extends DataInput { */ NormalizedNodeStreamVersion getVersion() throws IOException; - default Optional> readOptionalNormalizedNode() throws IOException { + default Optional readOptionalNormalizedNode() throws IOException { return readBoolean() ? Optional.of(readNormalizedNode()) : Optional.empty(); } diff --git a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeDataOutput.java b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeDataOutput.java index c2db375b04..30fc024400 100644 --- a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeDataOutput.java +++ b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeDataOutput.java @@ -28,7 +28,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; public interface NormalizedNodeDataOutput extends AutoCloseable, DataOutput { void writeQName(QName qname) throws IOException; - void writeNormalizedNode(NormalizedNode normalizedNode) throws IOException; + void writeNormalizedNode(NormalizedNode normalizedNode) throws IOException; void writePathArgument(PathArgument pathArgument) throws IOException; @@ -42,7 +42,7 @@ public interface NormalizedNodeDataOutput extends AutoCloseable, DataOutput { @Override void close() throws IOException; - default void writeOptionalNormalizedNode(final @Nullable NormalizedNode normalizedNode) throws IOException { + default void writeOptionalNormalizedNode(final @Nullable NormalizedNode normalizedNode) throws IOException { if (normalizedNode != null) { writeBoolean(true); writeNormalizedNode(normalizedNode); diff --git a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeStreamVersion.java b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeStreamVersion.java index 6f0949d48a..f2f89e3937 100644 --- a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeStreamVersion.java +++ b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeStreamVersion.java @@ -68,7 +68,7 @@ public enum NormalizedNodeStreamVersion { }, /** * First shipping is Magnesium. Does not support {@link BigInteger} mirroring it being superseded by {@link Uint64} - * in {@link ValueNode#getValue()}. + * in {@link ValueNode#body()}. */ MAGNESIUM { @Override diff --git a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/UnmodifiedRootDataTreeCandidateNode.java b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/UnmodifiedRootDataTreeCandidateNode.java index cbc94600b8..82c1a709d1 100644 --- a/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/UnmodifiedRootDataTreeCandidateNode.java +++ b/yang/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/UnmodifiedRootDataTreeCandidateNode.java @@ -27,7 +27,7 @@ final class UnmodifiedRootDataTreeCandidateNode extends AbstractDataTreeCandidat } @Override - public Optional> getDataAfter() { + public Optional getDataAfter() { throw new UnsupportedOperationException("After-image not available after serialization"); } diff --git a/yang/yang-data-codec-binfmt/src/test/java/org/opendaylight/yangtools/yang/data/codec/binfmt/AbstractSerializationTest.java b/yang/yang-data-codec-binfmt/src/test/java/org/opendaylight/yangtools/yang/data/codec/binfmt/AbstractSerializationTest.java index fe9da1f94e..40b134bcca 100644 --- a/yang/yang-data-codec-binfmt/src/test/java/org/opendaylight/yangtools/yang/data/codec/binfmt/AbstractSerializationTest.java +++ b/yang/yang-data-codec-binfmt/src/test/java/org/opendaylight/yangtools/yang/data/codec/binfmt/AbstractSerializationTest.java @@ -24,7 +24,7 @@ public abstract class AbstractSerializationTest { @Parameter(0) public NormalizedNodeStreamVersion version; - final > T assertEquals(final T node, final int expectedSize) { + final T assertEquals(final T node, final int expectedSize) { final ByteArrayOutputStream baos = new ByteArrayOutputStream(); try (NormalizedNodeDataOutput nnout = version.newDataOutput(ByteStreams.newDataOutput(baos))) { nnout.writeNormalizedNode(node); @@ -35,7 +35,7 @@ public abstract class AbstractSerializationTest { final byte[] bytes = baos.toByteArray(); Assert.assertEquals(expectedSize, bytes.length); - final NormalizedNode deser; + final NormalizedNode deser; try { deser = NormalizedNodeDataInput.newDataInput(ByteStreams.newDataInput(bytes)).readNormalizedNode(); } catch (IOException e) { @@ -46,7 +46,7 @@ public abstract class AbstractSerializationTest { } final T assertEquals(final T value, final int expectedSize) { - return assertEquals(ImmutableNodes.leafNode(TestModel.TEST_QNAME, value), expectedSize).getValue(); + return assertEquals(ImmutableNodes.leafNode(TestModel.TEST_QNAME, value), expectedSize).body(); } final T assertEquals(final T arg, final int expectedSize) { diff --git a/yang/yang-data-codec-binfmt/src/test/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeStreamReaderWriterTest.java b/yang/yang-data-codec-binfmt/src/test/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeStreamReaderWriterTest.java index d4c96687c9..29b3f66f84 100644 --- a/yang/yang-data-codec-binfmt/src/test/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeStreamReaderWriterTest.java +++ b/yang/yang-data-codec-binfmt/src/test/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeStreamReaderWriterTest.java @@ -51,8 +51,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; @@ -122,7 +122,7 @@ public class NormalizedNodeStreamReaderWriterTest { ByteArrayOutputStream bos = new ByteArrayOutputStream(); NormalizedNodeDataOutput nnout = version.newDataOutput(ByteStreams.newDataOutput(bos)); - NormalizedNode testContainer = createTestContainer(); + NormalizedNode testContainer = createTestContainer(); nnout.writeNormalizedNode(testContainer); QName toaster = QName.create("http://netconfcentral.org/ns/toaster","2009-11-20","toaster"); @@ -141,14 +141,14 @@ public class NormalizedNodeStreamReaderWriterTest { NormalizedNodeDataInput nnin = NormalizedNodeDataInput.newDataInput(ByteStreams.newDataInput(bytes)); - NormalizedNode node = nnin.readNormalizedNode(); + NormalizedNode node = nnin.readNormalizedNode(); Assert.assertEquals(testContainer, node); node = nnin.readNormalizedNode(); Assert.assertEquals(toasterContainer, node); } - private NormalizedNode createTestContainer() { + private NormalizedNode createTestContainer() { byte[] bytes1 = {1, 2, 3}; LeafSetEntryNode entry1 = ImmutableLeafSetEntryNodeBuilder.create().withNodeIdentifier( new NodeWithValue<>(TestModel.BINARY_LEAF_LIST_QNAME, bytes1)).withValue(bytes1).build(); @@ -196,7 +196,7 @@ public class NormalizedNodeStreamReaderWriterTest { NormalizedNodeDataOutput writer = version.newDataOutput( ByteStreams.newDataOutput(bos)); - NormalizedNode testContainer = TestModel.createBaseTestContainerBuilder(uint64).build(); + NormalizedNode testContainer = TestModel.createBaseTestContainerBuilder(uint64).build(); writer.writeNormalizedNode(testContainer); YangInstanceIdentifier path = YangInstanceIdentifier.builder(TestModel.TEST_PATH) @@ -210,7 +210,7 @@ public class NormalizedNodeStreamReaderWriterTest { NormalizedNodeDataInput reader = NormalizedNodeDataInput.newDataInput(ByteStreams.newDataInput(bytes)); - NormalizedNode node = reader.readNormalizedNode(); + NormalizedNode node = reader.readNormalizedNode(); Assert.assertEquals(testContainer, node); YangInstanceIdentifier newPath = reader.readYangInstanceIdentifier(); @@ -237,7 +237,7 @@ public class NormalizedNodeStreamReaderWriterTest { @Test public void testWithSerializable() { - NormalizedNode input = TestModel.createTestContainer(uint64); + NormalizedNode input = TestModel.createTestContainer(uint64); SampleNormalizedNodeSerializable serializable = new SampleNormalizedNodeSerializable(version, input); SampleNormalizedNodeSerializable clone = clone(serializable); Assert.assertEquals(input, clone.getInput()); @@ -254,7 +254,7 @@ public class NormalizedNodeStreamReaderWriterTest { assertEquals("http://www.w3.org/TR/html4/", xmlNode.getNamespaceURI()); - NormalizedNode anyXmlContainer = ImmutableContainerNodeBuilder.create().withNodeIdentifier( + NormalizedNode anyXmlContainer = ImmutableContainerNodeBuilder.create().withNodeIdentifier( new YangInstanceIdentifier.NodeIdentifier(TestModel.TEST_QNAME)).withChild( Builders.anyXmlBuilder().withNodeIdentifier(new NodeIdentifier(TestModel.ANY_XML_QNAME)) .withValue(new DOMSource(xmlNode)).build()).build(); @@ -271,18 +271,17 @@ public class NormalizedNodeStreamReaderWriterTest { ContainerNode deserialized = (ContainerNode)nnin.readNormalizedNode(); - Optional> child = - deserialized.getChild(new NodeIdentifier(TestModel.ANY_XML_QNAME)); + Optional child = deserialized.findChildByArg(new NodeIdentifier(TestModel.ANY_XML_QNAME)); assertEquals("AnyXml child present", true, child.isPresent()); StreamResult xmlOutput = new StreamResult(new StringWriter()); Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - transformer.transform(((DOMSourceAnyxmlNode)child.get()).getValue(), xmlOutput); + transformer.transform(((DOMSourceAnyxmlNode)child.get()).body(), xmlOutput); assertEquals("XML", xml, xmlOutput.getWriter().toString()); assertEquals("http://www.w3.org/TR/html4/", - ((DOMSourceAnyxmlNode)child.get()).getValue().getNode().getNamespaceURI()); + ((DOMSourceAnyxmlNode)child.get()).body().getNode().getNamespaceURI()); } @Test @@ -324,7 +323,7 @@ public class NormalizedNodeStreamReaderWriterTest { */ @Test public void testHugeEntries() throws IOException { - final CollectionNodeBuilder mapBuilder = Builders.mapBuilder() + final CollectionNodeBuilder mapBuilder = Builders.mapBuilder() .withNodeIdentifier(new NodeIdentifier(TestModel.TEST_QNAME)); final DataContainerNodeBuilder entryBuilder = Builders.mapEntryBuilder().withChild(ImmutableNodes.leafNode(TestModel.DESC_QNAME, (byte) 42)); @@ -338,7 +337,7 @@ public class NormalizedNodeStreamReaderWriterTest { .build()); } - final MapNode expected = mapBuilder.build(); + final SystemMapNode expected = mapBuilder.build(); final ByteArrayOutputStream bos = new ByteArrayOutputStream(); try (NormalizedNodeDataOutput nnout = version.newDataOutput(ByteStreams.newDataOutput(bos))) { diff --git a/yang/yang-data-codec-binfmt/src/test/java/org/opendaylight/yangtools/yang/data/codec/binfmt/SampleNormalizedNodeSerializable.java b/yang/yang-data-codec-binfmt/src/test/java/org/opendaylight/yangtools/yang/data/codec/binfmt/SampleNormalizedNodeSerializable.java index c7666e566d..71784c9526 100644 --- a/yang/yang-data-codec-binfmt/src/test/java/org/opendaylight/yangtools/yang/data/codec/binfmt/SampleNormalizedNodeSerializable.java +++ b/yang/yang-data-codec-binfmt/src/test/java/org/opendaylight/yangtools/yang/data/codec/binfmt/SampleNormalizedNodeSerializable.java @@ -19,15 +19,15 @@ public class SampleNormalizedNodeSerializable implements Serializable { private static final long serialVersionUID = 1L; private transient NormalizedNodeStreamVersion version; - private NormalizedNode input; + private NormalizedNode input; public SampleNormalizedNodeSerializable(final NormalizedNodeStreamVersion version, - final NormalizedNode input) { + final NormalizedNode input) { this.version = requireNonNull(version); this.input = input; } - public NormalizedNode getInput() { + public NormalizedNode getInput() { return input; } diff --git a/yang/yang-data-codec-binfmt/src/test/java/org/opendaylight/yangtools/yang/data/codec/binfmt/TestModel.java b/yang/yang-data-codec-binfmt/src/test/java/org/opendaylight/yangtools/yang/data/codec/binfmt/TestModel.java index 0e8463e1cf..38ee8e7603 100644 --- a/yang/yang-data-codec-binfmt/src/test/java/org/opendaylight/yangtools/yang/data/codec/binfmt/TestModel.java +++ b/yang/yang-data-codec-binfmt/src/test/java/org/opendaylight/yangtools/yang/data/codec/binfmt/TestModel.java @@ -29,8 +29,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; @@ -124,7 +124,7 @@ public final class TestModel { final LeafSetEntryNode puma = ImmutableLeafSetEntryNodeBuilder.create().withNodeIdentifier( new NodeWithValue<>(SHOE_QNAME, "puma")).withValue("puma").build(); - final LeafSetNode shoes = ImmutableLeafSetNodeBuilder.create().withNodeIdentifier( + final SystemLeafSetNode shoes = ImmutableLeafSetNodeBuilder.create().withNodeIdentifier( new NodeIdentifier(SHOE_QNAME)).withChild(nike).withChild(puma).build(); // Test a leaf-list where each entry contains an identity @@ -136,7 +136,7 @@ public final class TestModel { TEST_QNAME, "capability"), DESC_QNAME)) .withValue(DESC_QNAME).build(); - final LeafSetNode capabilities = + final SystemLeafSetNode capabilities = ImmutableLeafSetNodeBuilder .create() .withNodeIdentifier( @@ -163,7 +163,7 @@ public final class TestModel { .withNodeIdentifier( new NodeWithValue<>(QName.create( TEST_QNAME, "number"), 15)).withValue(15).build(); - final LeafSetNode numbers = + final SystemLeafSetNode numbers = ImmutableLeafSetNodeBuilder .create() .withNodeIdentifier( diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/AbstractYT1027Test.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/AbstractYT1027Test.java index faa90b1d75..3b7655c1d3 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/AbstractYT1027Test.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/AbstractYT1027Test.java @@ -141,7 +141,7 @@ public abstract class AbstractYT1027Test { abstract String expectedUint64(); - final NormalizedNode fromJSON(final String input) throws IOException { + final NormalizedNode fromJSON(final String input) throws IOException { final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); final JsonParserStream jsonParser = JsonParserStream.create(streamWriter, codecFactory()); @@ -149,7 +149,7 @@ public abstract class AbstractYT1027Test { return result.getResult(); } - private String toJSON(final NormalizedNode input) throws IOException { + private String toJSON(final NormalizedNode input) throws IOException { final Writer writer = new StringWriter(); final NormalizedNodeStreamWriter jsonStream = JSONNormalizedNodeStreamWriter.createExclusiveWriter( codecFactory(), SchemaPath.ROOT, null, JsonWriterFactory.createJsonWriter(writer, 2)); diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/AnyXmlSupportTest.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/AnyXmlSupportTest.java index cf7bc529e4..cc4a160d59 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/AnyXmlSupportTest.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/AnyXmlSupportTest.java @@ -24,13 +24,11 @@ import java.io.InputStream; import java.io.StringReader; import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; -import java.util.Optional; import javax.xml.transform.dom.DOMSource; import org.junit.Test; import org.opendaylight.yangtools.util.xml.UntrustedXML; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; @@ -58,7 +56,7 @@ public class AnyXmlSupportTest extends AbstractComplexJsonTest { final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); final JsonParserStream jsonParser = JsonParserStream.create(streamWriter, lhotkaCodecFactory); jsonParser.parse(new JsonReader(new StringReader(inputJson))); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); // lf12-any check @@ -93,7 +91,7 @@ public class AnyXmlSupportTest extends AbstractComplexJsonTest { final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); final JsonParserStream jsonParser = JsonParserStream.create(streamWriter, lhotkaCodecFactory); jsonParser.parse(new JsonReader(new StringReader(inputJson))); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); // lf12-any check @@ -152,10 +150,10 @@ public class AnyXmlSupportTest extends AbstractComplexJsonTest { assertNotNull(result.getResult()); assertTrue(result.getResult() instanceof ContainerNode); - final Optional> data = ((ContainerNode) result.getResult()) - .getChild(new NodeIdentifier(QName.create("bug8927.test", "2017-01-01", "foo"))); - assertTrue(data.isPresent()); - final String jsonOutput = normalizedNodesToJsonString(data.get(), schemaContext, SchemaPath.ROOT); + final DataContainerChild data = ((ContainerNode) result.getResult()) + .childByArg(new NodeIdentifier(QName.create("bug8927.test", "2017-01-01", "foo"))); + assertNotNull(data); + final String jsonOutput = normalizedNodesToJsonString(data, schemaContext, SchemaPath.ROOT); final JsonParser parser = new JsonParser(); final JsonElement expextedJson = parser.parse(new FileReader( new File(getClass().getResource(expectedJsonFile).toURI()), StandardCharsets.UTF_8)); @@ -163,14 +161,13 @@ public class AnyXmlSupportTest extends AbstractComplexJsonTest { assertEquals(expextedJson, serializedJson); } - private static DOMSource getParsedAnyXmlValue(final NormalizedNode transformedInput, final QName anyxmlName) { + private static DOMSource getParsedAnyXmlValue(final NormalizedNode transformedInput, final QName anyxmlName) { assertTrue(transformedInput instanceof ContainerNode); final ContainerNode cont1 = (ContainerNode) transformedInput; - final DataContainerChild child = cont1.getChild(new NodeIdentifier(anyxmlName)) - .get(); + final DataContainerChild child = cont1.childByArg(new NodeIdentifier(anyxmlName)); assertTrue(child instanceof DOMSourceAnyxmlNode); final DOMSourceAnyxmlNode anyXmlNode = (DOMSourceAnyxmlNode) child; - return anyXmlNode.getValue(); + return anyXmlNode.body(); } private static void verifyTransformedAnyXmlNodeValue(final DOMSource expectedValue, final DOMSource actualValue) { diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug4501Test.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug4501Test.java index c34813d9fb..0f589de962 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug4501Test.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug4501Test.java @@ -17,13 +17,11 @@ import com.google.gson.stream.JsonReader; import java.io.IOException; import java.io.StringReader; import java.net.URISyntaxException; -import java.util.Optional; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; @@ -55,14 +53,14 @@ public class Bug4501Test { final JsonParserStream jsonParser = JsonParserStream.create(streamWriter, JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(schemaContext)); jsonParser.parse(new JsonReader(new StringReader(inputJson))); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertTrue(transformedInput instanceof UnkeyedListNode); final UnkeyedListNode hop = (UnkeyedListNode) transformedInput; - final Optional> lrsBits = hop.getChild(0).getChild( + final DataContainerChild lrsBits = hop.getChild(0).childByArg( NodeIdentifier.create(QName.create("foo", "lrs-bits"))); - assertEquals(ImmutableSet.of("lookup", "rloc-probe", "strict"), lrsBits.get().getValue()); + assertEquals(ImmutableSet.of("lookup", "rloc-probe", "strict"), lrsBits.body()); } @Test diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug4969Test.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug4969Test.java index f3b4e1f832..686ee083a5 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug4969Test.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug4969Test.java @@ -15,12 +15,10 @@ import com.google.gson.stream.JsonReader; import java.io.IOException; import java.io.StringReader; import java.net.URISyntaxException; -import java.util.Optional; import java.util.Set; import org.junit.Test; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -48,28 +46,28 @@ public class Bug4969Test { final JsonParserStream jsonParser = JsonParserStream.create(streamWriter, JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(context)); jsonParser.parse(new JsonReader(new StringReader(inputJson))); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertTrue(transformedInput instanceof ContainerNode); ContainerNode root = (ContainerNode) transformedInput; - final Optional> ref1 = root.getChild(NodeIdentifier.create( + final DataContainerChild ref1 = root.childByArg(NodeIdentifier.create( QName.create("foo", "2016-01-22", "ref1"))); - final Optional> ref2 = root.getChild(NodeIdentifier.create( + final DataContainerChild ref2 = root.childByArg(NodeIdentifier.create( QName.create("foo", "2016-01-22", "ref2"))); - final Optional> ref3 = root.getChild(NodeIdentifier.create( + final DataContainerChild ref3 = root.childByArg(NodeIdentifier.create( QName.create("foo", "2016-01-22", "ref3"))); - final Optional> ref4 = root.getChild(NodeIdentifier.create( + final DataContainerChild ref4 = root.childByArg(NodeIdentifier.create( QName.create("foo", "2016-01-22", "ref4"))); - assertTrue(ref1.isPresent()); - assertTrue(ref2.isPresent()); - assertTrue(ref3.isPresent()); - assertTrue(ref4.isPresent()); + assertNotNull(ref1); + assertNotNull(ref2); + assertNotNull(ref3); + assertNotNull(ref4); - final Object value1 = ref1.get().getValue(); - final Object value2 = ref2.get().getValue(); - final Object value3 = ref3.get().getValue(); - final Object value4 = ref4.get().getValue(); + final Object value1 = ref1.body(); + final Object value2 = ref2.body(); + final Object value3 = ref3.body(); + final Object value4 = ref4.body(); assertTrue(value1 instanceof Set); assertTrue(value2 instanceof Set); @@ -108,7 +106,7 @@ public class Bug4969Test { final JsonParserStream jsonParser = JsonParserStream.create(streamWriter, JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(context)); jsonParser.parse(new JsonReader(new StringReader(inputJson))); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } } diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug5446Test.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug5446Test.java index 94b999d341..41a34b3db9 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug5446Test.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug5446Test.java @@ -29,9 +29,7 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; -import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; @@ -61,7 +59,7 @@ public class Bug5446Test { @Test public void test() throws IOException, JsonIOException, JsonSyntaxException, URISyntaxException { - final DataContainerChild rootNode = createRootNode(); + final ContainerNode rootNode = createRootNode(); final Writer writer = new StringWriter(); final String jsonOutput = normalizedNodeToJsonStreamTransformation(writer, rootNode); @@ -75,7 +73,7 @@ public class Bug5446Test { } private static String normalizedNodeToJsonStreamTransformation(final Writer writer, - final NormalizedNode inputStructure) throws IOException { + final NormalizedNode inputStructure) throws IOException { final NormalizedNodeStreamWriter jsonStream = JSONNormalizedNodeStreamWriter.createExclusiveWriter( JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(schemaContext), SchemaPath.ROOT, null, diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug6112Test.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug6112Test.java index b6d159c5a7..a420661ae3 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug6112Test.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug6112Test.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.data.codec.gson; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.opendaylight.yangtools.yang.data.codec.gson.TestUtils.loadTextFile; @@ -15,14 +16,12 @@ import com.google.gson.stream.JsonReader; import java.io.IOException; import java.io.StringReader; import java.net.URISyntaxException; -import java.util.Optional; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Uint8; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -45,7 +44,7 @@ public class Bug6112Test { schemaContext = null; } - private static NormalizedNode readJson(final String jsonPath) throws IOException, URISyntaxException { + private static NormalizedNode readJson(final String jsonPath) throws IOException, URISyntaxException { final String inputJson = loadTextFile(jsonPath); final NormalizedNodeResult result = new NormalizedNodeResult(); @@ -58,14 +57,14 @@ public class Bug6112Test { @Test public void testUnionIdentityrefInput() throws IOException, URISyntaxException { - final NormalizedNode transformedInput = readJson("/bug-6112/json/data-identityref.json"); + final NormalizedNode transformedInput = readJson("/bug-6112/json/data-identityref.json"); assertTrue(transformedInput instanceof ContainerNode); ContainerNode root = (ContainerNode) transformedInput; - Optional> leafValue = root.getChild(NodeIdentifier.create( + DataContainerChild leafValue = root.childByArg(NodeIdentifier.create( QName.create("union:identityref:test", "2016-07-12", "leaf-value"))); - assertTrue(leafValue.isPresent()); - Object value = leafValue.get().getValue(); + assertNotNull(leafValue); + Object value = leafValue.body(); assertTrue(value instanceof QName); QName identityref = (QName) value; assertEquals(QName.create("union:identityref:test", "2016-07-12", "ident-one"), identityref); @@ -73,13 +72,13 @@ public class Bug6112Test { @Test public void testUnionUint8Input() throws IOException, URISyntaxException { - final NormalizedNode transformedInput = readJson("/bug-6112/json/data-uint8.json"); + final NormalizedNode transformedInput = readJson("/bug-6112/json/data-uint8.json"); assertTrue(transformedInput instanceof ContainerNode); ContainerNode root = (ContainerNode) transformedInput; - Optional> leafValue = root.getChild(NodeIdentifier.create( + DataContainerChild leafValue = root.childByArg(NodeIdentifier.create( QName.create("union:identityref:test", "2016-07-12", "leaf-value"))); - assertTrue(leafValue.isPresent()); - assertEquals(Uint8.valueOf(1), leafValue.get().getValue()); + assertNotNull(leafValue); + assertEquals(Uint8.valueOf(1), leafValue.body()); } } diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug7246Test.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug7246Test.java index 945862c64e..960ccdce46 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug7246Test.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug7246Test.java @@ -21,8 +21,7 @@ import java.nio.charset.StandardCharsets; import org.junit.Test; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; -import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; @@ -44,7 +43,7 @@ public class Bug7246Test { .parse(new FileReader(new File(getClass().getResource("/bug7246/json/expected-output.json").toURI()), StandardCharsets.UTF_8)); - final DataContainerChild inputStructure = ImmutableContainerNodeBuilder.create() + final ContainerNode inputStructure = ImmutableContainerNodeBuilder.create() .withNodeIdentifier(new NodeIdentifier(qN("my-name"))) .withChild(ImmutableNodes.leafNode(new NodeIdentifier(qN("my-name")), "my-value")).build(); final SchemaPath rootPath = SchemaPath.create(true, qN("my-name"), qN("input")); @@ -61,7 +60,7 @@ public class Bug7246Test { } private static String normalizedNodeToJsonStreamTransformation(final EffectiveModelContext schemaContext, - final SchemaPath path, final Writer writer, final NormalizedNode inputStructure) + final SchemaPath path, final Writer writer, final NormalizedNode inputStructure) throws IOException { final NormalizedNodeStreamWriter jsonStream = JSONNormalizedNodeStreamWriter.createExclusiveWriter( diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug8083Test.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug8083Test.java index 0aa170864d..ba6ede5e17 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug8083Test.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/Bug8083Test.java @@ -103,13 +103,13 @@ public class Bug8083Test { final JsonParserStream jsonParser = JsonParserStream.create(streamWriter, JSONCodecFactorySupplier.RFC7951.getShared(FULL_SCHEMA_CONTEXT)); jsonParser.parse(new JsonReader(new StringReader(inputJson))); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertTrue(transformedInput instanceof ContainerNode); final ContainerNode container = (ContainerNode) transformedInput; - final NormalizedNode child = container.getChild(new NodeIdentifier(FOO_QNAME)).get(); + final NormalizedNode child = container.childByArg(new NodeIdentifier(FOO_QNAME)); assertTrue(child instanceof LeafNode); - assertEquals(TEST_IID, child.getValue()); + assertEquals(TEST_IID, child.body()); } @Test @@ -123,7 +123,7 @@ public class Bug8083Test { final JsonParserStream jsonParser = JsonParserStream.create(streamWriter, JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(schemaContext)); jsonParser.parse(new JsonReader(new StringReader(inputJson))); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } @@ -138,7 +138,7 @@ public class Bug8083Test { final JsonParserStream jsonParser = JsonParserStream.create(streamWriter, JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(schemaContext)); jsonParser.parse(new JsonReader(new StringReader(inputJson))); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } @@ -153,7 +153,7 @@ public class Bug8083Test { final JsonParserStream jsonParser = JsonParserStream.create(streamWriter, JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(schemaContext)); jsonParser.parse(new JsonReader(new StringReader(inputJson))); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonStreamToNormalizedNodeTest.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonStreamToNormalizedNodeTest.java index 26d74cee10..6146779275 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonStreamToNormalizedNodeTest.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonStreamToNormalizedNodeTest.java @@ -180,7 +180,7 @@ public class JsonStreamToNormalizedNodeTest extends AbstractComplexJsonTest { final JsonParserStream jsonParser = JsonParserStream.createLenient(streamWriter, JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(schemaContext)); jsonParser.parse(new JsonReader(new StringReader(inputJson))); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } @@ -193,7 +193,7 @@ public class JsonStreamToNormalizedNodeTest extends AbstractComplexJsonTest { final SchemaNode parentNode = schemaContext.findDataChildByName(CONT_1).get(); final JsonParserStream jsonParser = JsonParserStream.create(streamWriter, lhotkaCodecFactory, parentNode); jsonParser.parse(new JsonReader(new StringReader(inputJson))); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } @@ -206,7 +206,7 @@ public class JsonStreamToNormalizedNodeTest extends AbstractComplexJsonTest { final SchemaNode parentNode = schemaContext.findDataChildByName(CONT_1).get(); final JsonParserStream jsonParser = JsonParserStream.create(streamWriter, lhotkaCodecFactory, parentNode); jsonParser.parse(new JsonReader(new StringReader(inputJson))); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } @@ -229,7 +229,7 @@ public class JsonStreamToNormalizedNodeTest extends AbstractComplexJsonTest { final NodeIdentifier augmentChoice2Id = new NodeIdentifier(augmentChoice2QName); final NodeIdentifier containerId = new NodeIdentifier(containerQName); - final NormalizedNode cont1Normalized = + final NormalizedNode cont1Normalized = containerBuilder().withNodeIdentifier(new NodeIdentifier(parentNode.getQName())) .withChild(augmentationBuilder().withNodeIdentifier(aug1Id) .withChild(choiceBuilder().withNodeIdentifier(augmentChoice1Id) @@ -245,18 +245,18 @@ public class JsonStreamToNormalizedNodeTest extends AbstractComplexJsonTest { final JsonParserStream jsonParser = JsonParserStream.create(streamWriter, lhotkaCodecFactory); jsonParser.parse(new JsonReader(new StringReader(inputJson))); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); assertEquals(cont1Normalized, transformedInput); } private static void verifyTransformationToNormalizedNode(final String inputJson, - final NormalizedNode awaitedStructure) { + final NormalizedNode awaitedStructure) { final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); final JsonParserStream jsonParser = JsonParserStream.create(streamWriter, lhotkaCodecFactory); jsonParser.parse(new JsonReader(new StringReader(inputJson))); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertEquals("Transformation of json input to normalized node wasn't successful.", awaitedStructure, transformedInput); } diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/NormalizedNodeToJsonStreamTest.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/NormalizedNodeToJsonStreamTest.java index 06e9db25db..e6483dc3c8 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/NormalizedNodeToJsonStreamTest.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/NormalizedNodeToJsonStreamTest.java @@ -289,7 +289,7 @@ public class NormalizedNodeToJsonStreamTest extends AbstractComplexJsonTest { assertNotNull(cont2); } - private static String normalizedNodeToJsonStreamTransformation(final NormalizedNode inputStructure) + private static String normalizedNodeToJsonStreamTransformation(final NormalizedNode inputStructure) throws IOException { final Writer writer = new StringWriter(); final NormalizedNodeStreamWriter jsonStream = JSONNormalizedNodeStreamWriter.createExclusiveWriter( diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/StreamToNormalizedNodeTest.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/StreamToNormalizedNodeTest.java index 929237cdc4..d98ea28de0 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/StreamToNormalizedNodeTest.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/StreamToNormalizedNodeTest.java @@ -18,7 +18,6 @@ import java.net.URISyntaxException; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.LoggingNormalizedNodeStreamWriter; @@ -84,15 +83,14 @@ public class StreamToNormalizedNodeTest extends AbstractComplexJsonTest { } // Finally build the node - final NormalizedNode parsedData = result.getResult(); + final NormalizedNode parsedData = result.getResult(); LOG.debug("Parsed NormalizedNodes: {}", parsedData); /* * This is the serialization part. */ // We want to write the first child out - final DataContainerChild firstChild = - (DataContainerChild) parsedData; + final DataContainerChild firstChild = (DataContainerChild) parsedData; LOG.debug("Serializing first child: {}", firstChild); // String holder diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/TestUtils.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/TestUtils.java index 9915ef856b..eb28ebb4eb 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/TestUtils.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/TestUtils.java @@ -64,7 +64,7 @@ public final class TestUtils { xmlParser.parse(reader); } - static String normalizedNodesToJsonString(final NormalizedNode data, + static String normalizedNodesToJsonString(final NormalizedNode data, final EffectiveModelContext schemaContext, final SchemaPath rootPath) throws IOException { final Writer writer = new StringWriter(); final NormalizedNodeStreamWriter jsonStream = JSONNormalizedNodeStreamWriter.createExclusiveWriter( diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/TestingNormalizedNodeStructuresCreator.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/TestingNormalizedNodeStructuresCreator.java index e9a25f578e..12c02cd16a 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/TestingNormalizedNodeStructuresCreator.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/TestingNormalizedNodeStructuresCreator.java @@ -24,8 +24,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; @@ -40,8 +40,7 @@ public final class TestingNormalizedNodeStructuresCreator { throw new UnsupportedOperationException(); } - @SafeVarargs - static ContainerNode cont1Node(final DataContainerChild... children) { + static ContainerNode cont1Node(final DataContainerChild... children) { return Builders.containerBuilder() .withNodeIdentifier(new NodeIdentifier(QName.create(COMPLEX_JSON, "cont1"))) .withValue(Arrays.asList(children)) @@ -107,8 +106,7 @@ public final class TestingNormalizedNodeStructuresCreator { .build(); } - @SafeVarargs - private static ChoiceNode choc11Node(final DataContainerChild... children) { + private static ChoiceNode choc11Node(final DataContainerChild... children) { return Builders.choiceBuilder() .withNodeIdentifier(new NodeIdentifier(QName.create(COMPLEX_JSON, "choc11"))) .withValue(Arrays.asList(children)) @@ -169,7 +167,7 @@ public final class TestingNormalizedNodeStructuresCreator { .build(); } - private static MapNode childLst11() { + private static SystemMapNode childLst11() { return Builders.mapBuilder() .withNodeIdentifier(new NodeIdentifier(QName.create(COMPLEX_JSON, "lst11"))) .withChild(Builders.mapEntryBuilder().withNodeIdentifier( @@ -200,7 +198,7 @@ public final class TestingNormalizedNodeStructuresCreator { ); } - private static LeafSetNode childLflst11() { + private static SystemLeafSetNode childLflst11() { return Builders.leafSetBuilder() .withNodeIdentifier(new NodeIdentifier(QName.create(COMPLEX_JSON, "lflst11"))) .withChild(Builders.leafSetEntryBuilder() @@ -212,7 +210,7 @@ public final class TestingNormalizedNodeStructuresCreator { .build(); } - private static LeafSetNode childLflst11Multiline() { + private static SystemLeafSetNode childLflst11Multiline() { return Builders.leafSetBuilder() .withNodeIdentifier(new NodeIdentifier(QName.create(COMPLEX_JSON, "lflst11"))) .withChild(Builders.leafSetEntryBuilder() diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/YangModeledAnyXmlSupportTest.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/YangModeledAnyXmlSupportTest.java index 4307478783..11f0fe8993 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/YangModeledAnyXmlSupportTest.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/YangModeledAnyXmlSupportTest.java @@ -32,9 +32,7 @@ import org.junit.BeforeClass; import org.junit.Test; import org.opendaylight.yangtools.util.xml.UntrustedXML; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; -import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; @@ -94,17 +92,15 @@ public class YangModeledAnyXmlSupportTest { final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); final JsonParserStream jsonParser = JsonParserStream.create(streamWriter, lhotkaCodecFactory); jsonParser.parse(new JsonReader(new StringReader(inputJson))); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertEquals(data, transformedInput); } @Test public void normalizedNodesToJsonTest() throws IOException, URISyntaxException, SAXException { - final DataContainerChild baz = data; - final Writer writer = new StringWriter(); - final String jsonOutput = normalizedNodeToJsonStreamTransformation(writer, baz); + final String jsonOutput = normalizedNodeToJsonStreamTransformation(writer, data); final JsonParser parser = new JsonParser(); final JsonElement serializedJson = parser.parse(jsonOutput); @@ -115,7 +111,7 @@ public class YangModeledAnyXmlSupportTest { } private static String normalizedNodeToJsonStreamTransformation(final Writer writer, - final NormalizedNode inputStructure) throws IOException { + final NormalizedNode inputStructure) throws IOException { final NormalizedNodeStreamWriter jsonStream = JSONNormalizedNodeStreamWriter.createExclusiveWriter( lhotkaCodecFactory, SchemaPath.ROOT, null, JsonWriterFactory.createJsonWriter(writer, 2)); diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnyXmlWithParamsParsingTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnyXmlWithParamsParsingTest.java index 2111e1b65c..31c2137105 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnyXmlWithParamsParsingTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnyXmlWithParamsParsingTest.java @@ -23,7 +23,6 @@ import org.junit.Test; import org.opendaylight.yangtools.util.xml.UntrustedXML; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; @@ -61,14 +60,11 @@ public class AnyXmlWithParamsParsingTest { final XmlParserStream xmlParser = XmlParserStream.create(writer, SCHEMA, SCHEMA_NODE); xmlParser.traverse(new DOMSource(doc.getDocumentElement())); - final NormalizedNode parsed = resultHolder.getResult(); - - final DataContainerChild editCfg = ((ContainerNode) parsed) - .getChild(getNodeId(parsed, "edit-content")).get(); + final NormalizedNode parsed = resultHolder.getResult(); + final DataContainerChild editCfg = ((ContainerNode) parsed).childByArg(getNodeId(parsed, "edit-content")); final DOMSource anyXmlParsedDom = ((DOMSourceAnyxmlNode) ((ChoiceNode) editCfg) - .getChild(getNodeId(parsed, "config")).get()) - .getValue(); + .childByArg(getNodeId(parsed, "config"))).body(); assertNotNull(anyXmlParsedDom); final String anyXmlParsedDomString = toStringDom(anyXmlParsedDom); @@ -83,7 +79,7 @@ public class AnyXmlWithParamsParsingTest { "interface-configurations xmlns=\"http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg\"")); } - private static NodeIdentifier getNodeId(final NormalizedNode parsed, final String localName) { + private static NodeIdentifier getNodeId(final NormalizedNode parsed, final String localName) { return new NodeIdentifier(QName.create(parsed.getNodeType(), localName)); } diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnydataNormalizeToContainerTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnydataNormalizeToContainerTest.java index b65b22b71e..6bd2298bed 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnydataNormalizeToContainerTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnydataNormalizeToContainerTest.java @@ -59,13 +59,13 @@ public class AnydataNormalizeToContainerTest extends AbstractAnydataTest { final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, SCHEMA_CONTEXT, anyDataSchemaNode); xmlParser.parse(reader); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); assertTrue(transformedInput instanceof AnydataNode); AnydataNode anydataNode = (AnydataNode) transformedInput; //Normalize anydata content to specific container element - DOMSourceAnydata domSourceAnydata = (DOMSourceAnydata) anydataNode.getValue(); + DOMSourceAnydata domSourceAnydata = (DOMSourceAnydata) anydataNode.body(); NormalizedAnydata normalizedAnydata = domSourceAnydata.normalizeTo(SCHEMA_CONTEXT, containerSchemaNode); assertNotNull(normalizedAnydata); } diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnydataParseTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnydataParseTest.java index fc67047f70..833c5240ad 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnydataParseTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnydataParseTest.java @@ -35,7 +35,7 @@ public class AnydataParseTest extends AbstractAnydataTest { SCHEMA_CONTEXT.findDataChildByName(FOO_QNAME).get(), true); xmlParser.parse(reader); - final NormalizedNode parsed = result.getResult(); + final NormalizedNode parsed = result.getResult(); assertTrue(parsed instanceof AnydataNode); } } diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnydataSerializeTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnydataSerializeTest.java index b3acfb8605..fea162dbea 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnydataSerializeTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnydataSerializeTest.java @@ -99,7 +99,7 @@ public class AnydataSerializeTest extends AbstractAnydataTest { final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, SCHEMA_CONTEXT, anyDataSchemaNode); xmlParser.parse(reader); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); assertTrue(transformedInput instanceof AnydataNode); AnydataNode anydataNode = (AnydataNode) transformedInput; @@ -115,7 +115,7 @@ public class AnydataSerializeTest extends AbstractAnydataTest { normalizedNodeWriter.flush(); final String serializedXml = writer.toString(); - final String deserializeXml = getXmlFromDOMSource(((DOMSourceAnydata) anydataNode.getValue()).getSource()); + final String deserializeXml = getXmlFromDOMSource(((DOMSourceAnydata) anydataNode.body()).getSource()); assertFalse(serializedXml.isEmpty()); // Check if is Serialize Node same as Deserialize Node @@ -183,13 +183,13 @@ public class AnydataSerializeTest extends AbstractAnydataTest { xmlParser.flush(); //Get Result - final NormalizedNode node = normalizedResult.getResult(); + final NormalizedNode node = normalizedResult.getResult(); assertTrue(node instanceof AnydataNode); final AnydataNode anydataResult = (AnydataNode) node; //Get Result in formatted String - assertTrue(anydataResult.getValue() instanceof DOMSourceAnydata); - final String serializedXml = getXmlFromDOMSource(((DOMSourceAnydata)anydataResult.getValue()).getSource()); + assertTrue(anydataResult.body() instanceof DOMSourceAnydata); + final String serializedXml = getXmlFromDOMSource(((DOMSourceAnydata)anydataResult.body()).getSource()); final String expectedXml = toString(doc.getDocumentElement()); //Looking for difference in Serialized xml and in Loaded XML diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5396Test.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5396Test.java index d61749f49d..34d6362f56 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5396Test.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5396Test.java @@ -14,7 +14,6 @@ import static org.junit.Assert.fail; import java.io.InputStream; import java.net.URI; -import java.util.Optional; import javax.xml.stream.XMLStreamReader; import org.junit.Before; import org.junit.Test; @@ -23,7 +22,6 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; @@ -81,10 +79,9 @@ public class Bug5396Test { assertTrue(result.getResult() instanceof ContainerNode); final ContainerNode rootContainer = (ContainerNode) result.getResult(); - Optional> myLeaf = rootContainer.getChild(new NodeIdentifier( + DataContainerChild myLeaf = rootContainer.childByArg(new NodeIdentifier( QName.create(fooModuleQName, "my-leaf"))); - assertTrue(myLeaf.orElse(null) instanceof LeafNode); - - assertEquals(expectedValue, myLeaf.get().getValue()); + assertTrue(myLeaf instanceof LeafNode); + assertEquals(expectedValue, myLeaf.body()); } } diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5446Test.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5446Test.java index b47d3d34b3..0aed2b6339 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5446Test.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5446Test.java @@ -14,7 +14,6 @@ import java.io.InputStream; import java.io.StringWriter; import java.net.URI; import java.util.Base64; -import java.util.Optional; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import javax.xml.transform.OutputKeys; @@ -33,7 +32,6 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; @@ -60,15 +58,11 @@ public class Bug5446Test extends XMLTestCase { final ContainerNode docNode = createDocNode(); - Optional> root = docNode.getChild(new NodeIdentifier(ROOT_QNAME)); - assertTrue(root.orElse(null) instanceof ContainerNode); + DataContainerChild root = docNode.childByArg(new NodeIdentifier(ROOT_QNAME)); + DataContainerChild child = ((ContainerNode) root).childByArg(new NodeIdentifier(IP_ADDRESS_QNAME)); + LeafNode ipAdress = (LeafNode) child; - Optional> child = ((ContainerNode) root.orElse(null)) - .getChild(new NodeIdentifier(IP_ADDRESS_QNAME)); - assertTrue(child.orElse(null) instanceof LeafNode); - LeafNode ipAdress = (LeafNode) child.get(); - - Object value = ipAdress.getValue(); + Object value = ipAdress.body(); assertTrue(value instanceof byte[]); assertEquals("fwAAAQ==", Base64.getEncoder().encodeToString((byte[]) value)); @@ -106,7 +100,7 @@ public class Bug5446Test extends XMLTestCase { normalizedNodeStreamWriter = XMLStreamNormalizedNodeStreamWriter.create(writer, context); normalizedNodeWriter = NormalizedNodeWriter.forStreamWriter(normalizedNodeStreamWriter); - for (NormalizedNode child : normalized.getValue()) { + for (NormalizedNode child : normalized.body()) { normalizedNodeWriter.write(child); } diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8083Test.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8083Test.java index a534ca068b..3bffe7aaf6 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8083Test.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8083Test.java @@ -42,7 +42,7 @@ public class Bug8083Test { final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topCont); xmlParser.parse(reader); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } @@ -62,7 +62,7 @@ public class Bug8083Test { final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topCont); xmlParser.parse(reader); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } @@ -82,7 +82,7 @@ public class Bug8083Test { final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topCont); xmlParser.parse(reader); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } } diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8675Test.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8675Test.java index 78555e7378..8dc315ae8d 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8675Test.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8675Test.java @@ -63,7 +63,7 @@ public class Bug8675Test { final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelContainer); xmlParser.parse(reader); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } @@ -83,7 +83,7 @@ public class Bug8675Test { final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelContainer); xmlParser.parse(reader); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } @@ -102,7 +102,7 @@ public class Bug8675Test { final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelList); xmlParser.parse(reader); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } @@ -121,7 +121,7 @@ public class Bug8675Test { final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelAnyXml); xmlParser.parse(reader); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } @@ -140,7 +140,7 @@ public class Bug8675Test { final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelLeaf); xmlParser.parse(reader); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } @@ -159,7 +159,7 @@ public class Bug8675Test { final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelLeafList); xmlParser.parse(reader); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } } diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8803Test.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8803Test.java index 5ad11ca48e..079caacd3a 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8803Test.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8803Test.java @@ -77,7 +77,7 @@ public class Bug8803Test { final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, SCHEMA_CONTEXT, topContSchema); xmlParser.parse(reader); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); // serialization diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug890Test.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug890Test.java index f881f85121..c95f1c4e81 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug890Test.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug890Test.java @@ -24,7 +24,6 @@ import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; @@ -73,18 +72,17 @@ public class Bug890Test { assertTrue(result.getResult() instanceof ContainerNode); final ContainerNode rootContainer = (ContainerNode) result.getResult(); - Optional> myLeaf = - rootContainer.getChild(new NodeIdentifier(OUTGOING_LABELS_QNAME)); - assertTrue(myLeaf.orElse(null) instanceof ContainerNode); + DataContainerChild myLeaf = rootContainer.childByArg(new NodeIdentifier(OUTGOING_LABELS_QNAME)); + assertTrue(myLeaf instanceof ContainerNode); - ContainerNode outgoingLabelsContainer = (ContainerNode)myLeaf.get(); - Optional> outgoingLabelsList = - outgoingLabelsContainer.getChild(new NodeIdentifier(OUTGOING_LABELS_QNAME)); - assertTrue(outgoingLabelsList.orElse(null) instanceof MapNode); - MapNode outgoingLabelsMap = (MapNode) outgoingLabelsList.get(); + ContainerNode outgoingLabelsContainer = (ContainerNode)myLeaf; + DataContainerChild outgoingLabelsList = + outgoingLabelsContainer.childByArg(new NodeIdentifier(OUTGOING_LABELS_QNAME)); + assertTrue(outgoingLabelsList instanceof MapNode); + MapNode outgoingLabelsMap = (MapNode) outgoingLabelsList; assertEquals(2, outgoingLabelsMap.size()); - Collection labels = outgoingLabelsMap.getValue(); + Collection labels = outgoingLabelsMap.body(); NodeIdentifierWithPredicates firstNodeId = NodeIdentifierWithPredicates.of(OUTGOING_LABELS_QNAME, INDEX_QNAME, 0); NodeIdentifierWithPredicates secondNodeId = diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/DOMSourceXMLStreamReaderTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/DOMSourceXMLStreamReaderTest.java index 14b6168173..6e715b467e 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/DOMSourceXMLStreamReaderTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/DOMSourceXMLStreamReaderTest.java @@ -87,7 +87,7 @@ public class DOMSourceXMLStreamReaderTest { final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, SCHEMA_CONTEXT, outerContainerSchema); xmlParser.parse(domXMLReader); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); // serialization diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodeXmlTranslationTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodeXmlTranslationTest.java index 96efcd3a00..9e6d5f5a15 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodeXmlTranslationTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodeXmlTranslationTest.java @@ -55,8 +55,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; @@ -130,8 +131,8 @@ public class NormalizedNodeXmlTranslationTest { final DataContainerNodeBuilder b = containerBuilder(); b.withNodeIdentifier(getNodeIdentifier("container")); - final CollectionNodeBuilder listBuilder = Builders.mapBuilder().withNodeIdentifier( - getNodeIdentifier("list")); + final CollectionNodeBuilder listBuilder = + Builders.mapBuilder().withNodeIdentifier(getNodeIdentifier("list")); final DataContainerNodeBuilder list1Builder = Builders .mapEntryBuilder().withNodeIdentifier(NodeIdentifierWithPredicates.of( @@ -150,7 +151,7 @@ public class NormalizedNodeXmlTranslationTest { booleanBuilder.withValue(Boolean.FALSE); b.withChild(booleanBuilder.build()); - final ListNodeBuilder> leafListBuilder = Builders.leafSetBuilder() + final ListNodeBuilder> leafListBuilder = Builders.leafSetBuilder() .withNodeIdentifier(getNodeIdentifier("leafList")); final NormalizedNodeBuilder> leafList1Builder = Builders @@ -271,7 +272,7 @@ public class NormalizedNodeXmlTranslationTest { final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schema, containerNode); xmlParser.parse(reader); - final NormalizedNode built = result.getResult(); + final NormalizedNode built = result.getResult(); assertNotNull(built); if (expectedNode != null) { diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodesToXmlTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodesToXmlTest.java index f376098071..b69ec8b7cd 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodesToXmlTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodesToXmlTest.java @@ -51,9 +51,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; @@ -170,7 +170,7 @@ public class NormalizedNodesToXmlTest { new XMLTestCase() {}.assertXMLEqual(diff, true); } - private NormalizedNode buildOuterContainerNode() { + private NormalizedNode buildOuterContainerNode() { // my-container-1 MapNode myKeyedListNode = Builders.mapBuilder().withNodeIdentifier(new NodeIdentifier(myKeyedList)) .withChild(Builders.mapEntryBuilder().withNodeIdentifier( @@ -189,7 +189,8 @@ public class NormalizedNodesToXmlTest { LeafNode myLeaf1Node = Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(myLeaf1)) .withValue("value1").build(); - LeafSetNode myLeafListNode = Builders.leafSetBuilder().withNodeIdentifier(new NodeIdentifier(myLeafList)) + SystemLeafSetNode myLeafListNode = Builders.leafSetBuilder() + .withNodeIdentifier(new NodeIdentifier(myLeafList)) .withChild(Builders.leafSetEntryBuilder().withNodeIdentifier( new NodeWithValue<>(myLeafList, "lflvalue1")).withValue("lflvalue1").build()) .withChild(Builders.leafSetEntryBuilder().withNodeIdentifier( diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemaOrderedNormalizedNodeWriterTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemaOrderedNormalizedNodeWriterTest.java index 8b737321a4..10bdf9eb8b 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemaOrderedNormalizedNodeWriterTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemaOrderedNormalizedNodeWriterTest.java @@ -23,9 +23,9 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; @@ -110,11 +110,11 @@ public class SchemaOrderedNormalizedNodeWriterTest { rule1Names.add(ImmutableNodes.mapEntry(createQName(FOO_NAMESPACE, RULE_NODE), createQName(FOO_NAMESPACE, NAME_NODE), "rule4")); - DataContainerChild rules1 = Builders.orderedMapBuilder() + UserMapNode rules1 = Builders.orderedMapBuilder() .withNodeIdentifier(getNodeIdentifier(FOO_NAMESPACE, RULE_NODE)) .withValue(rule1Names) .build(); - DataContainerChild rules2 = Builders.orderedMapBuilder() + UserMapNode rules2 = Builders.orderedMapBuilder() .withNodeIdentifier(getNodeIdentifier(FOO_NAMESPACE, RULE_NODE)) .withValue(rule2Names) .build(); @@ -135,11 +135,11 @@ public class SchemaOrderedNormalizedNodeWriterTest { policyNodes.add(pn1); policyNodes.add(pn2); - DataContainerChild policy = Builders.orderedMapBuilder() + UserMapNode policy = Builders.orderedMapBuilder() .withNodeIdentifier(getNodeIdentifier(FOO_NAMESPACE, POLICY_NODE)) .withValue(policyNodes) .build(); - NormalizedNode root = Builders.containerBuilder() + ContainerNode root = Builders.containerBuilder() .withNodeIdentifier(getNodeIdentifier(FOO_NAMESPACE, "root")) .withChild(policy).build(); nnw.write(root); @@ -157,12 +157,12 @@ public class SchemaOrderedNormalizedNodeWriterTest { try (NormalizedNodeWriter nnw = new SchemaOrderedNormalizedNodeWriter(writer, schemaContext, SchemaPath.ROOT)) { - DataContainerChild cont = Builders.containerBuilder() + ContainerNode cont = Builders.containerBuilder() .withNodeIdentifier(getNodeIdentifier(ORDER_NAMESPACE, "cont")) .withChild(ImmutableNodes.leafNode(createQName(ORDER_NAMESPACE, "content"), "content1")) .build(); - NormalizedNode root = Builders.containerBuilder() + ContainerNode root = Builders.containerBuilder() .withNodeIdentifier(getNodeIdentifier(ORDER_NAMESPACE, "root")) .withChild(cont) .withChild(ImmutableNodes.leafNode(createQName(ORDER_NAMESPACE, "id"), "id1")) diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemalessXMLStreamNormalizedNodeStreamWriterTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemalessXMLStreamNormalizedNodeStreamWriterTest.java index d2daa1f086..f733e7f7c6 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemalessXMLStreamNormalizedNodeStreamWriterTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemalessXMLStreamNormalizedNodeStreamWriterTest.java @@ -53,12 +53,13 @@ import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; @@ -182,7 +183,7 @@ public class SchemalessXMLStreamNormalizedNodeStreamWriterTest { XMLAssert.assertXMLEqual(diff, true); } - private NormalizedNode buildOuterContainerNode() { + private NormalizedNode buildOuterContainerNode() { // my-container-1 MapNode myKeyedListNode = Builders.mapBuilder().withNodeIdentifier(new NodeIdentifier(myKeyedList)) .withChild(Builders.mapEntryBuilder().withNodeIdentifier( @@ -198,7 +199,7 @@ public class SchemalessXMLStreamNormalizedNodeStreamWriterTest { .withChild(Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(myLeafInList2)) .withValue("listleafvalue22").build()).build()).build(); - OrderedMapNode myOrderedListNode = Builders.orderedMapBuilder().withNodeIdentifier( + UserMapNode myOrderedListNode = Builders.orderedMapBuilder().withNodeIdentifier( new NodeIdentifier(myOrderedList)).withChild(Builders.mapEntryBuilder().withNodeIdentifier( NodeIdentifierWithPredicates.of(myOrderedList, myKeyLeafInOrderedList, "olistkeyvalue1")) .withChild(Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(myLeafInOrderedList1)) @@ -226,13 +227,15 @@ public class SchemalessXMLStreamNormalizedNodeStreamWriterTest { LeafNode myLeaf1Node = Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(myLeaf1)) .withValue("value1").build(); - LeafSetNode myLeafListNode = Builders.leafSetBuilder().withNodeIdentifier(new NodeIdentifier(myLeafList)) + SystemLeafSetNode myLeafListNode = Builders.leafSetBuilder() + .withNodeIdentifier(new NodeIdentifier(myLeafList)) .withChild(Builders.leafSetEntryBuilder().withNodeIdentifier( new NodeWithValue<>(myLeafList, "lflvalue1")).withValue("lflvalue1").build()) .withChild(Builders.leafSetEntryBuilder().withNodeIdentifier( new NodeWithValue<>(myLeafList, "lflvalue2")).withValue("lflvalue2").build()).build(); - LeafSetNode myOrderedLeafListNode = Builders.orderedLeafSetBuilder().withNodeIdentifier( + UserLeafSetNode myOrderedLeafListNode = Builders.orderedLeafSetBuilder() + .withNodeIdentifier( new NodeIdentifier(myOrderedLeafList)) .withChild(Builders.leafSetEntryBuilder().withNodeIdentifier( new NodeWithValue<>(myOrderedLeafList, "olflvalue1")).withValue("olflvalue1").build()) diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/StrictParsingModeTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/StrictParsingModeTest.java index c50593102e..c973e90e0f 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/StrictParsingModeTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/StrictParsingModeTest.java @@ -49,7 +49,7 @@ public class StrictParsingModeTest { final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelContainer, false); xmlParser.parse(reader); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlToNormalizedNodesTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlToNormalizedNodesTest.java index 74eb0f4ccd..93e3d64700 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlToNormalizedNodesTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlToNormalizedNodesTest.java @@ -38,9 +38,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; @@ -116,10 +116,10 @@ public class XmlToNormalizedNodesTest { xmlParser.flush(); xmlParser.close(); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); - final NormalizedNode expectedNormalizedNode = buildOuterContainerNode(); + final NormalizedNode expectedNormalizedNode = buildOuterContainerNode(); assertNotNull(expectedNormalizedNode); assertEquals(expectedNormalizedNode, transformedInput); @@ -138,7 +138,7 @@ public class XmlToNormalizedNodesTest { final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, parentContainerSchema); xmlParser.parse(reader); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); } @@ -280,7 +280,7 @@ public class XmlToNormalizedNodesTest { } } - private static NormalizedNode buildOuterContainerNode() { + private static NormalizedNode buildOuterContainerNode() { // my-container-1 MapNode myKeyedListNode = Builders.mapBuilder().withNodeIdentifier(new NodeIdentifier(MY_KEYED_LIST)) .withChild(Builders.mapEntryBuilder().withNodeIdentifier( @@ -299,7 +299,8 @@ public class XmlToNormalizedNodesTest { LeafNode myLeaf1Node = Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(MY_LEAF_1)) .withValue("value1").build(); - LeafSetNode myLeafListNode = Builders.leafSetBuilder().withNodeIdentifier(new NodeIdentifier(MY_LEAFLIST)) + SystemLeafSetNode myLeafListNode = Builders.leafSetBuilder() + .withNodeIdentifier(new NodeIdentifier(MY_LEAFLIST)) .withChild(Builders.leafSetEntryBuilder().withNodeIdentifier( new NodeWithValue<>(MY_LEAFLIST, "lflvalue1")).withValue("lflvalue1").build()) .withChild(Builders.leafSetEntryBuilder().withNodeIdentifier( diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YT1108Test.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YT1108Test.java index 75242ef3e4..6e69ba3fd2 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YT1108Test.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YT1108Test.java @@ -122,7 +122,7 @@ public class YT1108Test { new XMLTestCase() {}.assertXMLEqual(diff, true); } - private DOMResult convertNormalizedNodeToXml(NormalizedNode normalizedNode) + private DOMResult convertNormalizedNodeToXml(NormalizedNode normalizedNode) throws XMLStreamException, IOException { final DOMResult domResult = new DOMResult(UntrustedXML.newDocumentBuilder().newDocument()); @@ -138,7 +138,7 @@ public class YT1108Test { return domResult; } - private NormalizedNode buildLeafContainerNodeWithIdentityRefLeaf() { + private NormalizedNode buildLeafContainerNodeWithIdentityRefLeaf() { return Builders.containerBuilder() .withNodeIdentifier(NodeIdentifier.create(fooLeafContainer)) .withChild(Builders.leafBuilder() @@ -148,7 +148,7 @@ public class YT1108Test { .build(); } - private NormalizedNode buildLeafContainerNodeWithUnionIdentityRefLeaf() { + private NormalizedNode buildLeafContainerNodeWithUnionIdentityRefLeaf() { return Builders.containerBuilder() .withNodeIdentifier(NodeIdentifier.create(fooLeafContainer)) .withChild(Builders.leafBuilder() diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLDeserializationTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLDeserializationTest.java index 2ef94daa30..1a3b465f04 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLDeserializationTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLDeserializationTest.java @@ -23,7 +23,6 @@ import org.opendaylight.yangtools.util.xml.UntrustedXML; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; @@ -92,24 +91,22 @@ public class YangModeledAnyXMLDeserializationTest { final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, yangModeledAnyXML); xmlParser.parse(reader); - final NormalizedNode output = result.getResult(); + final NormalizedNode output = result.getResult(); assertTrue(output instanceof YangModeledAnyXmlNode); final YangModeledAnyXmlNode yangModeledAnyXmlNode = (YangModeledAnyXmlNode) output; - Collection> value = yangModeledAnyXmlNode.getValue(); + Collection value = yangModeledAnyXmlNode.body(); assertEquals(2, value.size()); - Optional> child = yangModeledAnyXmlNode - .getChild(new NodeIdentifier(myContainer1)); - assertTrue(child.orElse(null) instanceof ContainerNode); - ContainerNode myContainerNode1 = (ContainerNode) child.get(); + DataContainerChild child = yangModeledAnyXmlNode.childByArg(new NodeIdentifier(myContainer1)); + assertTrue(child instanceof ContainerNode); + ContainerNode myContainerNode1 = (ContainerNode) child; - Optional> child2 = myContainerNode1.getChild(new NodeIdentifier( - myLeaf1)); - assertTrue(child2.orElse(null) instanceof LeafNode); - LeafNode leafNode1 = (LeafNode) child2.get(); + DataContainerChild child2 = myContainerNode1.childByArg(new NodeIdentifier(myLeaf1)); + assertTrue(child2 instanceof LeafNode); + LeafNode leafNode1 = (LeafNode) child2; - Object leafNode1Value = leafNode1.getValue(); + Object leafNode1Value = leafNode1.body(); assertEquals("value1", leafNode1Value); } @@ -129,7 +126,7 @@ public class YangModeledAnyXMLDeserializationTest { final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, myAnyXmlData); xmlParser.parse(reader); - final NormalizedNode output = result.getResult(); + final NormalizedNode output = result.getResult(); assertTrue(output instanceof YangModeledAnyXmlNode); final YangModeledAnyXmlNode yangModeledAnyXmlNode = (YangModeledAnyXmlNode) output; @@ -137,28 +134,25 @@ public class YangModeledAnyXMLDeserializationTest { DataSchemaNode expectedSchemaOfAnyXmlData = schemaContext.findDataChildByName(myContainer2).get(); assertEquals(expectedSchemaOfAnyXmlData, schemaOfAnyXmlData); - Collection> value = yangModeledAnyXmlNode.getValue(); + Collection value = yangModeledAnyXmlNode.body(); assertEquals(2, value.size()); - Optional> child2 = yangModeledAnyXmlNode - .getChild(new NodeIdentifier(innerContainer)); - assertTrue(child2.orElse(null) instanceof ContainerNode); - ContainerNode innerContainerNode = (ContainerNode) child2.get(); + DataContainerChild child2 = yangModeledAnyXmlNode.childByArg(new NodeIdentifier(innerContainer)); + assertTrue(child2 instanceof ContainerNode); + ContainerNode innerContainerNode = (ContainerNode) child2; - Optional> child3 = innerContainerNode - .getChild(new NodeIdentifier(myLeaf2)); - assertTrue(child3.orElse(null) instanceof LeafNode); - LeafNode leafNode2 = (LeafNode) child3.get(); + DataContainerChild child3 = innerContainerNode.childByArg(new NodeIdentifier(myLeaf2)); + assertTrue(child3 instanceof LeafNode); + LeafNode leafNode2 = (LeafNode) child3; - Object leafNode2Value = leafNode2.getValue(); + Object leafNode2Value = leafNode2.body(); assertEquals("any-xml-leaf-2-value", leafNode2Value); - Optional> child4 = yangModeledAnyXmlNode - .getChild(new NodeIdentifier(myLeaf3)); - assertTrue(child4.orElse(null) instanceof LeafNode); - LeafNode leafNode3 = (LeafNode) child4.get(); + DataContainerChild child4 = yangModeledAnyXmlNode.childByArg(new NodeIdentifier(myLeaf3)); + assertTrue(child4 instanceof LeafNode); + LeafNode leafNode3 = (LeafNode) child4; - Object leafNode3Value = leafNode3.getValue(); + Object leafNode3Value = leafNode3.body(); assertEquals("any-xml-leaf-3-value", leafNode3Value); } diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLSerializationTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLSerializationTest.java index 1335cd155b..bc9a8f112a 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLSerializationTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLSerializationTest.java @@ -14,7 +14,6 @@ import java.io.InputStream; import java.io.StringWriter; import java.net.URI; import java.util.Collection; -import java.util.Optional; import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamWriter; @@ -37,7 +36,6 @@ import org.opendaylight.yangtools.util.xml.UntrustedXML; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -105,17 +103,16 @@ public class YangModeledAnyXMLSerializationTest extends XMLTestCase { final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, SCHEMA_CONTEXT, bazCont); xmlParser.parse(reader); - final NormalizedNode transformedInput = result.getResult(); + final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); assertTrue(transformedInput instanceof ContainerNode); ContainerNode bazContainer = (ContainerNode) transformedInput; assertEquals(bazContainer.getNodeType(), bazQName); - Optional> bazContainerChild = bazContainer.getChild( - new NodeIdentifier(myAnyXMLDataBaz)); - assertTrue(bazContainerChild.orElse(null) instanceof YangModeledAnyXmlNode); - YangModeledAnyXmlNode yangModeledAnyXmlNode = (YangModeledAnyXmlNode) bazContainerChild.get(); + DataContainerChild bazContainerChild = bazContainer.childByArg(new NodeIdentifier(myAnyXMLDataBaz)); + assertTrue(bazContainerChild instanceof YangModeledAnyXmlNode); + YangModeledAnyXmlNode yangModeledAnyXmlNode = (YangModeledAnyXmlNode) bazContainerChild; DataSchemaNode schemaOfAnyXmlData = yangModeledAnyXmlNode.getSchemaOfAnyXmlData(); SchemaNode myContainer2SchemaNode = SchemaContextUtil.findDataSchemaNode(SCHEMA_CONTEXT, diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefValidation.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefValidation.java index 5a1ce76049..6eb2d493ea 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefValidation.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefValidation.java @@ -53,15 +53,15 @@ public final class LeafRefValidation { private final Set validatedLeafRefCtx = new HashSet<>(); private final List errorsMessages = new ArrayList<>(); - private final NormalizedNode root; + private final NormalizedNode root; - private LeafRefValidation(final NormalizedNode root) { + private LeafRefValidation(final NormalizedNode root) { this.root = root; } public static void validate(final DataTreeCandidate tree, final LeafRefContext rootLeafRefCtx) throws LeafRefDataValidationFailedException { - final Optional> root = tree.getRootNode().getDataAfter(); + final Optional root = tree.getRootNode().getDataAfter(); if (root.isPresent()) { new LeafRefValidation(root.get()).validateChildren(rootLeafRefCtx, tree.getRootNode().getChildNodes()); } @@ -130,7 +130,7 @@ public final class LeafRefValidation { final QName childQName = childNode.getIdentifier().getNodeType(); LeafRefContext childReferencingCtx = referencingCtx.getReferencingChildByName(childQName); if (childReferencingCtx == null) { - final NormalizedNode data = childNode.getDataAfter().get(); + final NormalizedNode data = childNode.getDataAfter().get(); if (data instanceof MapEntryNode || data instanceof UnkeyedListEntryNode) { childReferencingCtx = referencingCtx; } @@ -148,7 +148,7 @@ public final class LeafRefValidation { final QName childQName = childNode.getIdentifier().getNodeType(); LeafRefContext childReferencedByCtx = referencedByCtx.getReferencedChildByName(childQName); if (childReferencedByCtx == null) { - final NormalizedNode data = childNode.getDataAfter().get(); + final NormalizedNode data = childNode.getDataAfter().get(); if (data instanceof MapEntryNode || data instanceof UnkeyedListEntryNode) { childReferencedByCtx = referencedByCtx; } @@ -157,7 +157,7 @@ public final class LeafRefValidation { return childReferencedByCtx; } - private void validateNodeData(final NormalizedNode node, final LeafRefContext referencedByCtx, + private void validateNodeData(final NormalizedNode node, final LeafRefContext referencedByCtx, final LeafRefContext referencingCtx, final ModificationType modificationType, final YangInstanceIdentifier current) { if (node instanceof LeafNode) { @@ -190,7 +190,7 @@ public final class LeafRefValidation { final LeafRefContext referencingCtx, final ModificationType modificationType, final YangInstanceIdentifier current) { if (referencedByCtx != null || referencingCtx != null) { - for (final NormalizedNode leafSetEntry : node.getValue()) { + for (final NormalizedNode leafSetEntry : node.body()) { if (referencedByCtx != null && referencedByCtx.isReferenced()) { validateLeafRefTargetNodeData(leafSetEntry, referencedByCtx, modificationType); } @@ -204,7 +204,7 @@ public final class LeafRefValidation { private void validateChoiceNodeData(final ChoiceNode node, final LeafRefContext referencedByCtx, final LeafRefContext referencingCtx, final ModificationType modificationType, final YangInstanceIdentifier current) { - for (final DataContainerChild child : node.getValue()) { + for (final DataContainerChild child : node.body()) { final QName qname = child.getNodeType(); final LeafRefContext childReferencedByCtx = referencedByCtx == null ? null : findReferencedByCtxUnderChoice(referencedByCtx, qname); @@ -220,7 +220,7 @@ public final class LeafRefValidation { private void validateDataContainerNodeData(final DataContainerNode node, final LeafRefContext referencedByCtx, final LeafRefContext referencingCtx, final ModificationType modificationType, final YangInstanceIdentifier current) { - for (final DataContainerChild child : node.getValue()) { + for (final DataContainerChild child : node.body()) { if (child instanceof AugmentationNode) { validateNodeData(child, referencedByCtx, referencingCtx, modificationType, current.node( child.getIdentifier())); @@ -234,9 +234,9 @@ public final class LeafRefValidation { private void validateMapNodeData(final MapNode node, final LeafRefContext referencedByCtx, final LeafRefContext referencingCtx, final ModificationType modificationType, final YangInstanceIdentifier current) { - for (final MapEntryNode mapEntry : node.getValue()) { + for (final MapEntryNode mapEntry : node.asMap().values()) { final YangInstanceIdentifier mapEntryIdentifier = current.node(mapEntry.getIdentifier()); - for (final DataContainerChild child : mapEntry.getValue()) { + for (final DataContainerChild child : mapEntry.body()) { if (child instanceof AugmentationNode) { validateNodeData(child, referencedByCtx, referencingCtx, modificationType, current.node( child.getIdentifier())); @@ -248,7 +248,7 @@ public final class LeafRefValidation { } } - private void validateChildNodeData(final DataContainerChild child, final LeafRefContext referencedByCtx, + private void validateChildNodeData(final DataContainerChild child, final LeafRefContext referencedByCtx, final LeafRefContext referencingCtx, final ModificationType modificationType, final YangInstanceIdentifier current) { final QName qname = child.getNodeType(); @@ -284,16 +284,16 @@ public final class LeafRefValidation { return null; } - private void validateLeafRefTargetNodeData(final NormalizedNode leaf, final LeafRefContext + private void validateLeafRefTargetNodeData(final NormalizedNode leaf, final LeafRefContext referencedByCtx, final ModificationType modificationType) { if (!validatedLeafRefCtx.add(referencedByCtx)) { LOG.trace("Operation [{}] validate data of leafref TARGET node: name[{}] = value[{}] -> SKIP: Already " - + "validated", modificationType, referencedByCtx.getNodeName(), leaf.getValue()); + + "validated", modificationType, referencedByCtx.getNodeName(), leaf.body()); return; } LOG.trace("Operation [{}] validate data of leafref TARGET node: name[{}] = value[{}]", modificationType, - referencedByCtx.getNodeName(), leaf.getValue()); + referencedByCtx.getNodeName(), leaf.body()); final Set leafRefs = referencedByCtx.getAllReferencedByLeafRefCtxs().values().stream() .filter(LeafRefContext::isReferencing).collect(Collectors.toSet()); if (leafRefs.isEmpty()) { @@ -325,42 +325,42 @@ public final class LeafRefValidation { return computeValues(root, createPath(context.getLeafRefNodePath()), null); } - private void validateLeafRefNodeData(final NormalizedNode leaf, final LeafRefContext referencingCtx, + private void validateLeafRefNodeData(final NormalizedNode leaf, final LeafRefContext referencingCtx, final ModificationType modificationType, final YangInstanceIdentifier current) { final Set values = computeValues(root, createPath(referencingCtx.getAbsoluteLeafRefTargetPath()), current); - if (values.contains(leaf.getValue())) { + if (values.contains(leaf.body())) { LOG.debug("Operation [{}] validate data of LEAFREF node: name[{}] = value[{}] {}", modificationType, - referencingCtx.getNodeName(), leaf.getValue(), SUCCESS); + referencingCtx.getNodeName(), leaf.body(), SUCCESS); return; } LOG.debug("Operation [{}] validate data of LEAFREF node: name[{}] = value[{}] {}", modificationType, - referencingCtx.getNodeName(), leaf.getValue(), FAILED); + referencingCtx.getNodeName(), leaf.body(), FAILED); LOG.debug("Invalid leafref value [{}] allowed values {} of LEAFREF node: {} leafRef target path: {}", - leaf.getValue(), values, leaf.getNodeType(), referencingCtx.getAbsoluteLeafRefTargetPath()); + leaf.body(), values, leaf.getNodeType(), referencingCtx.getAbsoluteLeafRefTargetPath()); errorsMessages.add(String.format("Invalid leafref value [%s] allowed values %s of LEAFREF node: %s leafRef " - + "target path: %s", leaf.getValue(), values, leaf.getNodeType(), + + "target path: %s", leaf.body(), values, leaf.getNodeType(), referencingCtx.getAbsoluteLeafRefTargetPath())); } - private Set computeValues(final NormalizedNode node, final Deque path, + private Set computeValues(final NormalizedNode node, final Deque path, final YangInstanceIdentifier current) { final HashSet values = new HashSet<>(); addValues(values, node, ImmutableList.of(), path, current); return values; } - private void addValues(final Set values, final NormalizedNode node, + private void addValues(final Set values, final NormalizedNode node, final List nodePredicates, final Deque path, final YangInstanceIdentifier current) { if (node instanceof ValueNode) { - values.add(node.getValue()); + values.add(node.body()); return; } if (node instanceof LeafSetNode) { - for (final NormalizedNode entry : ((LeafSetNode) node).getValue()) { - values.add(entry.getValue()); + for (final NormalizedNode entry : ((LeafSetNode) node).body()) { + values.add(entry.body()); } return; } @@ -375,7 +375,7 @@ public final class LeafRefValidation { processChildNode(values, (DataContainerNode) node, pathArgument, next.getQNamePredicates(), path, current); } else if (node instanceof MapNode) { - Stream entries = ((MapNode) node).getValue().stream(); + Stream entries = ((MapNode) node).body().stream(); if (!nodePredicates.isEmpty() && current != null) { entries = entries.filter(createMapEntryPredicate(nodePredicates, current)); } @@ -388,19 +388,19 @@ public final class LeafRefValidation { private void processChildNode(final Set values, final DataContainerNode parent, final PathArgument arg, final List nodePredicates, final Deque path, final YangInstanceIdentifier current) { - final Optional> child = parent.getChild(arg); - if (!child.isPresent()) { + final DataContainerChild child = parent.childByArg(arg); + if (child == null) { // FIXME: YANGTOOLS-901. We have SchemaContext nearby, hence we should be able to cache how to get // to the leaf with with specified QName, without having to iterate through Choices/Augmentations. // That perhaps means we should not have QNameWithPredicates, but NodeIdentifierWithPredicates as // the path specification. - for (final DataContainerChild mixin : parent.getValue()) { + for (final DataContainerChild mixin : parent.body()) { if (mixin instanceof AugmentationNode || mixin instanceof ChoiceNode) { addValues(values, mixin, nodePredicates, path, current); } } } else { - addNextValues(values, child.get(), nodePredicates, path, current); + addNextValues(values, child, nodePredicates, path, current); } } @@ -423,7 +423,7 @@ public final class LeafRefValidation { }; } - private void addNextValues(final Set values, final NormalizedNode node, + private void addNextValues(final Set values, final NormalizedNode node, final List nodePredicates, final Deque path, final YangInstanceIdentifier current) { final QNameWithPredicate element = path.pop(); @@ -443,9 +443,9 @@ public final class LeafRefValidation { }).orElse(ImmutableSet.of()); } - private static Optional> findParentNode( - final Optional> root, final YangInstanceIdentifier path) { - Optional> currentNode = root; + private static Optional findParentNode( + final Optional root, final YangInstanceIdentifier path) { + Optional currentNode = root; final Iterator pathIterator = path.getPathArguments().iterator(); while (pathIterator.hasNext()) { final PathArgument childPathArgument = pathIterator.next(); diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/AbstractMountPointChild.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/AbstractMountPointChild.java index df1b1cd987..c2cc991b46 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/AbstractMountPointChild.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/AbstractMountPointChild.java @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; @Beta public abstract class AbstractMountPointChild implements MountPointChild { @Override - public final NormalizedNode normalizeTo(final EffectiveModelContext schemaContext) throws IOException { + public final NormalizedNode normalizeTo(final EffectiveModelContext schemaContext) throws IOException { final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); writeTo(streamWriter, new EmptyMountPointContext(schemaContext)); diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/Builders.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/Builders.java index 304f8525c1..5627655a43 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/Builders.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/Builders.java @@ -20,12 +20,13 @@ import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; import org.opendaylight.yangtools.yang.data.api.schema.YangModeledAnyXmlNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; @@ -50,12 +51,12 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMa import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeSchemaAwareBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeSchemaAwareBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedLeafSetNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedLeafSetNodeSchemaAwareBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedMapNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedMapNodeSchemaAwareBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListEntryNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUserLeafSetNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUserLeafSetNodeSchemaAwareBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUserMapNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUserMapNodeSchemaAwareBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableYangModeledAnyXmlNodeBuilder; import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; @@ -79,10 +80,12 @@ public final class Builders { return ImmutableLeafNodeSchemaAwareBuilder.create(schema); } + // FIXME: 7.0.0: add generic arguments public static NormalizedNodeBuilder> leafSetEntryBuilder() { return ImmutableLeafSetEntryNodeBuilder.create(); } + // FIXME: 7.0.0: add generic arguments public static NormalizedNodeBuilder> leafSetEntryBuilder( final LeafListSchemaNode schema) { return ImmutableLeafSetEntryNodeSchemaAwareBuilder.create(schema); @@ -107,28 +110,33 @@ public final class Builders { return ImmutableAnydataNodeBuilder.create(objectModel); } - public static ListNodeBuilder> orderedLeafSetBuilder() { - return ImmutableOrderedLeafSetNodeBuilder.create(); + public static ListNodeBuilder> orderedLeafSetBuilder() { + return ImmutableUserLeafSetNodeBuilder.create(); } - public static ListNodeBuilder> orderedLeafSetBuilder(final LeafListSchemaNode schema) { - return ImmutableOrderedLeafSetNodeSchemaAwareBuilder.create(schema); + public static ListNodeBuilder> orderedLeafSetBuilder(final LeafListSchemaNode schema) { + return ImmutableUserLeafSetNodeSchemaAwareBuilder.create(schema); } - public static ListNodeBuilder> leafSetBuilder() { + public static ListNodeBuilder> orderedLeafSetBuilder(final LeafListSchemaNode schema, + final UserLeafSetNode node) { + return ImmutableUserLeafSetNodeSchemaAwareBuilder.create(schema, node); + } + + public static ListNodeBuilder> leafSetBuilder() { return ImmutableLeafSetNodeBuilder.create(); } - public static ListNodeBuilder> leafSetBuilder(final LeafSetNode node) { + public static ListNodeBuilder> leafSetBuilder(final SystemLeafSetNode node) { return ImmutableLeafSetNodeBuilder.create(node); } - public static ListNodeBuilder> leafSetBuilder(final LeafListSchemaNode schema) { + public static ListNodeBuilder> leafSetBuilder(final LeafListSchemaNode schema) { return ImmutableLeafSetNodeSchemaAwareBuilder.create(schema); } - public static ListNodeBuilder> leafSetBuilder(final LeafListSchemaNode schema, - final LeafSetNode node) { + public static ListNodeBuilder> leafSetBuilder(final LeafListSchemaNode schema, + final SystemLeafSetNode node) { return ImmutableLeafSetNodeSchemaAwareBuilder.create(schema, node); } @@ -164,32 +172,32 @@ public final class Builders { return ImmutableMapEntryNodeSchemaAwareBuilder.create(schema); } - public static CollectionNodeBuilder orderedMapBuilder() { - return ImmutableOrderedMapNodeBuilder.create(); + public static CollectionNodeBuilder orderedMapBuilder() { + return ImmutableUserMapNodeBuilder.create(); } - public static CollectionNodeBuilder orderedMapBuilder(final ListSchemaNode schema) { - return ImmutableOrderedMapNodeSchemaAwareBuilder.create(schema); + public static CollectionNodeBuilder orderedMapBuilder(final ListSchemaNode schema) { + return ImmutableUserMapNodeSchemaAwareBuilder.create(schema); } public static CollectionNodeBuilder unkeyedListBuilder() { return ImmutableUnkeyedListNodeBuilder.create(); } - public static CollectionNodeBuilder mapBuilder() { + public static CollectionNodeBuilder mapBuilder() { return ImmutableMapNodeBuilder.create(); } - public static CollectionNodeBuilder mapBuilder(final MapNode node) { + public static CollectionNodeBuilder mapBuilder(final SystemMapNode node) { return ImmutableMapNodeBuilder.create(node); } - public static CollectionNodeBuilder mapBuilder(final ListSchemaNode schema) { + public static CollectionNodeBuilder mapBuilder(final ListSchemaNode schema) { return ImmutableMapNodeSchemaAwareBuilder.create(schema); } - public static CollectionNodeBuilder mapBuilder(final ListSchemaNode schema, - final MapNode node) { + public static CollectionNodeBuilder mapBuilder(final ListSchemaNode schema, + final SystemMapNode node) { return ImmutableMapNodeSchemaAwareBuilder.create(schema, node); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableMountPointNormalizedNodeStreamWriter.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableMountPointNormalizedNodeStreamWriter.java index ca433835a2..38bc412163 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableMountPointNormalizedNodeStreamWriter.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableMountPointNormalizedNodeStreamWriter.java @@ -50,7 +50,7 @@ public abstract class ImmutableMountPointNormalizedNodeStreamWriter extends Immu public void close() throws IOException { super.close(); - final NormalizedNode data = mountResult.getResult(); + final NormalizedNode data = mountResult.getResult(); if (!(data instanceof ContainerNode)) { throw new IOException("Unhandled mount data " + data); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNodes.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNodes.java index c734ee84f0..b075bcd3c4 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNodes.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNodes.java @@ -21,10 +21,10 @@ import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableChoiceNodeBuilder; @@ -32,8 +32,8 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableCo import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedMapNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUserMapNodeBuilder; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; @@ -45,15 +45,16 @@ public final class ImmutableNodes { // Hidden on purpose } - public static @NonNull CollectionNodeBuilder mapNodeBuilder() { + public static @NonNull CollectionNodeBuilder mapNodeBuilder() { return ImmutableMapNodeBuilder.create(); } - public static @NonNull CollectionNodeBuilder mapNodeBuilder(final QName name) { + public static @NonNull CollectionNodeBuilder mapNodeBuilder(final QName name) { return mapNodeBuilder(NodeIdentifier.create(name)); } - public static @NonNull CollectionNodeBuilder mapNodeBuilder(final NodeIdentifier name) { + public static @NonNull CollectionNodeBuilder mapNodeBuilder( + final NodeIdentifier name) { return ImmutableMapNodeBuilder.create().withNodeIdentifier(name); } @@ -63,7 +64,7 @@ public final class ImmutableNodes { * @param name QName which will be used as node identifier * @return An unordered Map node */ - public static @NonNull MapNode mapNode(final QName name) { + public static @NonNull SystemMapNode mapNode(final QName name) { return mapNode(NodeIdentifier.create(name)); } @@ -73,7 +74,7 @@ public final class ImmutableNodes { * @param name QName which will be used as node identifier * @return An unordered Map node */ - public static @NonNull MapNode mapNode(final NodeIdentifier name) { + public static @NonNull SystemMapNode mapNode(final NodeIdentifier name) { return mapNodeBuilder(name).build(); } @@ -83,7 +84,7 @@ public final class ImmutableNodes { * @param name QName which will be used as node identifier * @return An ordered Map node */ - public static @NonNull OrderedMapNode orderedMapNode(final QName name) { + public static @NonNull UserMapNode orderedMapNode(final QName name) { return orderedMapNode(NodeIdentifier.create(name)); } @@ -93,8 +94,8 @@ public final class ImmutableNodes { * @param name Node identifier * @return An ordered Map node */ - public static @NonNull OrderedMapNode orderedMapNode(final NodeIdentifier name) { - return ImmutableOrderedMapNodeBuilder.create().withNodeIdentifier(name).build(); + public static @NonNull UserMapNode orderedMapNode(final NodeIdentifier name) { + return ImmutableUserMapNodeBuilder.create().withNodeIdentifier(name).build(); } /** @@ -203,8 +204,7 @@ public final class ImmutableNodes { * @param id instance identifier to convert to node structure starting from root * @return serialized normalized node for provided instance Id */ - public static @NonNull NormalizedNode fromInstanceId(final SchemaContext ctx, - final YangInstanceIdentifier id) { + public static @NonNull NormalizedNode fromInstanceId(final SchemaContext ctx, final YangInstanceIdentifier id) { return fromInstanceId(ctx, id, Optional.empty()); } @@ -217,8 +217,8 @@ public final class ImmutableNodes { * instance identifier * @return serialized normalized node for provided instance Id with overridden last child. */ - public static @NonNull NormalizedNode fromInstanceId(final SchemaContext ctx, final YangInstanceIdentifier id, - final NormalizedNode deepestElement) { + public static @NonNull NormalizedNode fromInstanceId(final SchemaContext ctx, final YangInstanceIdentifier id, + final NormalizedNode deepestElement) { return fromInstanceId(ctx, id, Optional.of(deepestElement)); } @@ -232,8 +232,8 @@ public final class ImmutableNodes { * @return serialized normalized node for provided instance Id with (optionally) overridden last child * and (optionally) marked with specific operation attribute. */ - public static @NonNull NormalizedNode fromInstanceId(final SchemaContext ctx, final YangInstanceIdentifier id, - final Optional> deepestElement) { + public static @NonNull NormalizedNode fromInstanceId(final SchemaContext ctx, final YangInstanceIdentifier id, + final Optional deepestElement) { final PathArgument topLevelElement; final InstanceIdToNodes instanceIdToNodes; final Iterator it = id.getPathArguments().iterator(); diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNormalizedNodeStreamWriter.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNormalizedNodeStreamWriter.java index d8b9dc438e..ef31757cf8 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNormalizedNodeStreamWriter.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNormalizedNodeStreamWriter.java @@ -37,10 +37,10 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLe import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedLeafSetNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedMapNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListEntryNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUserLeafSetNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUserMapNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableYangModeledAnyXmlNodeBuilder; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -152,7 +152,7 @@ public class ImmutableNormalizedNodeStreamWriter implements NormalizedNodeStream public void startLeafSetEntryNode(final NodeWithValue name) { final NormalizedNodeBuilder current = current(); checkArgument(current instanceof ImmutableLeafSetNodeBuilder - || current instanceof ImmutableOrderedLeafSetNodeBuilder || current instanceof NormalizedNodeResultBuilder, + || current instanceof ImmutableUserLeafSetNodeBuilder || current instanceof NormalizedNodeResultBuilder, "LeafSetEntryNode is not valid for parent %s", current); enter(name, leafsetEntryNodeBuilder()); nextSchema = null; @@ -219,7 +219,7 @@ public class ImmutableNormalizedNodeStreamWriter implements NormalizedNodeStream @Override public void startMapEntryNode(final NodeIdentifierWithPredicates identifier, final int childSizeHint) { final NormalizedNodeBuilder current = current(); - checkArgument(current instanceof ImmutableMapNodeBuilder || current instanceof ImmutableOrderedMapNodeBuilder + checkArgument(current instanceof ImmutableMapNodeBuilder || current instanceof ImmutableUserMapNodeBuilder || current instanceof NormalizedNodeResultBuilder); enter(identifier, UNKNOWN_SIZE == childSizeHint ? ImmutableMapEntryNodeBuilder.create() @@ -229,8 +229,8 @@ public class ImmutableNormalizedNodeStreamWriter implements NormalizedNodeStream @Override public void startOrderedMapNode(final NodeIdentifier name, final int childSizeHint) { checkDataNodeContainer(); - enter(name, UNKNOWN_SIZE == childSizeHint ? ImmutableOrderedMapNodeBuilder.create() - : ImmutableOrderedMapNodeBuilder.create(childSizeHint)); + enter(name, UNKNOWN_SIZE == childSizeHint ? ImmutableUserMapNodeBuilder.create() + : ImmutableUserMapNodeBuilder.create(childSizeHint)); } @Override @@ -277,7 +277,7 @@ public class ImmutableNormalizedNodeStreamWriter implements NormalizedNodeStream public void endNode() { final NormalizedNodeBuilder finishedBuilder = builders.poll(); checkState(finishedBuilder != null, "Node which should be closed does not exists."); - final NormalizedNode product = finishedBuilder.build(); + final NormalizedNode product = finishedBuilder.build(); nextSchema = null; writeChild(product); @@ -299,7 +299,7 @@ public class ImmutableNormalizedNodeStreamWriter implements NormalizedNodeStream * @throws IllegalStateException if there is no open builder */ @SuppressWarnings({ "rawtypes", "unchecked" }) - protected final void writeChild(final NormalizedNode child) { + protected final void writeChild(final NormalizedNode child) { final NormalizedNodeContainerBuilder current = currentContainer(); checkState(current != null, "Reached top level node, which could not be closed in this writer."); current.addChild(requireNonNull(child)); diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToCompositeNodes.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToCompositeNodes.java index 1b85302faf..b18ad9f416 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToCompositeNodes.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToCompositeNodes.java @@ -37,8 +37,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; @@ -68,8 +68,8 @@ abstract class InstanceIdToCompositeNodes extends Instan @Override @SuppressWarnings("unchecked") - final NormalizedNode create(final PathArgument first, final Iterator others, - final Optional> lastChild) { + final NormalizedNode create(final PathArgument first, final Iterator others, + final Optional lastChild) { if (!isMixin()) { final QName type = getIdentifier().getNodeType(); if (type != null) { @@ -86,7 +86,7 @@ abstract class InstanceIdToCompositeNodes extends Instan final InstanceIdToNodes childOp = getChildOperation(childPath); builder.addChild(childOp.create(childPath, others, lastChild)); } else if (lastChild.isPresent()) { - builder.withValue(ImmutableList.copyOf((Collection) lastChild.get().getValue())); + builder.withValue(ImmutableList.copyOf((Collection) lastChild.get().body())); } return builder.build(); @@ -242,7 +242,26 @@ abstract class InstanceIdToCompositeNodes extends Instan } } - static final class OrderedLeafListMixinNormalization extends UnorderedLeafListMixinNormalization { + private abstract static class LeafListMixinNormalization extends InstanceIdToCompositeNodes { + private final InstanceIdToNodes innerOp; + + LeafListMixinNormalization(final LeafListSchemaNode potential) { + super(NodeIdentifier.create(potential.getQName())); + innerOp = new InstanceIdToSimpleNodes.LeafListEntryNormalization(potential); + } + + @Override + final InstanceIdToNodes getChild(final PathArgument child) { + return child instanceof NodeWithValue ? innerOp : null; + } + + @Override + final boolean isMixin() { + return true; + } + } + + static final class OrderedLeafListMixinNormalization extends LeafListMixinNormalization { OrderedLeafListMixinNormalization(final LeafListSchemaNode potential) { super(potential); } @@ -253,28 +272,15 @@ abstract class InstanceIdToCompositeNodes extends Instan } } - static class UnorderedLeafListMixinNormalization extends InstanceIdToCompositeNodes { - private final InstanceIdToNodes innerOp; - + static class UnorderedLeafListMixinNormalization extends LeafListMixinNormalization { UnorderedLeafListMixinNormalization(final LeafListSchemaNode potential) { - super(NodeIdentifier.create(potential.getQName())); - innerOp = new InstanceIdToSimpleNodes.LeafListEntryNormalization(potential); + super(potential); } @Override ListNodeBuilder createBuilder(final PathArgument compositeNode) { return Builders.leafSetBuilder().withNodeIdentifier(getIdentifier()); } - - @Override - final InstanceIdToNodes getChild(final PathArgument child) { - return child instanceof NodeWithValue ? innerOp : null; - } - - @Override - final boolean isMixin() { - return true; - } } static final class AugmentationNormalization @@ -326,7 +332,7 @@ abstract class InstanceIdToCompositeNodes extends Instan } @Override - CollectionNodeBuilder createBuilder(final PathArgument compositeNode) { + CollectionNodeBuilder createBuilder(final PathArgument compositeNode) { return Builders.orderedMapBuilder().withNodeIdentifier(getIdentifier()); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodes.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodes.java index e852dd1de0..8590557411 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodes.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodes.java @@ -16,6 +16,7 @@ import java.util.List; import java.util.Optional; import javax.xml.transform.dom.DOMSource; import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.concepts.AbstractSimpleIdentifiable; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; @@ -55,7 +56,7 @@ abstract class InstanceIdToNodes extends AbstractSimpleI * @param child child identifier * @return transformation strategy for a specific child */ - abstract InstanceIdToNodes getChild(PathArgument child); + abstract @Nullable InstanceIdToNodes getChild(PathArgument child); /** * Convert instance identifier into a NormalizedNode structure. @@ -65,8 +66,8 @@ abstract class InstanceIdToNodes extends AbstractSimpleI * @param operation Optional modify operation to be set on the last child * @return NormalizedNode structure corresponding to submitted instance ID */ - abstract @NonNull NormalizedNode create(PathArgument first, Iterator others, - Optional> deepestChild); + abstract @NonNull NormalizedNode create(PathArgument first, Iterator others, + Optional deepestChild); abstract boolean isMixin(); @@ -116,16 +117,16 @@ abstract class InstanceIdToNodes extends AbstractSimpleI } @Override - NormalizedNode create(final PathArgument first, final Iterator others, - final Optional> deepestChild) { + NormalizedNode create(final PathArgument first, final Iterator others, + final Optional deepestChild) { checkState(deepestChild.isPresent(), "Cannot instantiate anydata node without a value"); - final NormalizedNode child = deepestChild.get(); + final NormalizedNode child = deepestChild.get(); checkState(child instanceof AnydataNode, "Invalid child %s", child); return createAnydata((AnydataNode) child); } private AnydataNode createAnydata(final AnydataNode child) { - return Builders.anydataBuilder(child.getValueObjectModel()).withValue(child.getValue()) + return Builders.anydataBuilder(child.bodyObjectModel()).withValue(child.body()) .withNodeIdentifier(getIdentifier()).build(); } } @@ -136,15 +137,15 @@ abstract class InstanceIdToNodes extends AbstractSimpleI } @Override - NormalizedNode create(final PathArgument first, final Iterator others, - final Optional> deepestChild) { + NormalizedNode create(final PathArgument first, final Iterator others, + final Optional deepestChild) { final NormalizedNodeBuilder builder = Builders.anyXmlBuilder() .withNodeIdentifier(getIdentifier()); if (deepestChild.isPresent()) { - final NormalizedNode child = deepestChild.get(); + final NormalizedNode child = deepestChild.get(); checkState(child instanceof DOMSourceAnyxmlNode, "Invalid child %s", child); - builder.withValue(((DOMSourceAnyxmlNode) child).getValue()); + builder.withValue(((DOMSourceAnyxmlNode) child).body()); } return builder.build(); @@ -157,7 +158,7 @@ abstract class InstanceIdToNodes extends AbstractSimpleI findChoice(Iterables.filter(parent.getChildNodes(), ChoiceSchemaNode.class), child)); } - static InstanceIdToNodes fromSchemaAndQNameChecked(final DataNodeContainer schema, final QName child) { + static @Nullable InstanceIdToNodes fromSchemaAndQNameChecked(final DataNodeContainer schema, final QName child) { final Optional potential = findChildSchemaNode(schema, child); checkArgument(potential.isPresent(), "Supplied QName %s is not valid according to schema %s, potential children nodes: %s", child, schema, @@ -171,7 +172,7 @@ abstract class InstanceIdToNodes extends AbstractSimpleI return fromDataSchemaNode(result); } - private static ChoiceSchemaNode findChoice(final Iterable choices, final QName child) { + private static @Nullable ChoiceSchemaNode findChoice(final Iterable choices, final QName child) { for (final ChoiceSchemaNode choice : choices) { for (final CaseSchemaNode caze : choice.getCases()) { if (findChildSchemaNode(caze, child).isPresent()) { @@ -190,7 +191,7 @@ abstract class InstanceIdToNodes extends AbstractSimpleI * otherwise returns a SchemaPathUtil for child as * call for {@link #fromDataSchemaNode(org.opendaylight.yangtools.yang.model.api.DataSchemaNode)}. */ - private static InstanceIdToNodes fromAugmentation(final DataNodeContainer parent, + private static @Nullable InstanceIdToNodes fromAugmentation(final DataNodeContainer parent, final AugmentationTarget parentAug, final DataSchemaNode child) { for (final AugmentationSchemaNode aug : parentAug.getAvailableAugmentations()) { final Optional potential = aug.findDataChildByName(child.getQName()); @@ -201,7 +202,7 @@ abstract class InstanceIdToNodes extends AbstractSimpleI return fromDataSchemaNode(child); } - static InstanceIdToNodes fromDataSchemaNode(final DataSchemaNode potential) { + static @Nullable InstanceIdToNodes fromDataSchemaNode(final DataSchemaNode potential) { if (potential instanceof ContainerLike) { return new InstanceIdToCompositeNodes.ContainerTransformation((ContainerLike) potential); } else if (potential instanceof ListSchemaNode) { diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToSimpleNodes.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToSimpleNodes.java index f4f4d1792d..0d66db347b 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToSimpleNodes.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToSimpleNodes.java @@ -31,13 +31,13 @@ abstract class InstanceIdToSimpleNodes extends InstanceI } @Override - final NormalizedNode create(final PathArgument first, final Iterator others, - final Optional> deepestChild) { - final NormalizedNodeBuilder> builder = getBuilder(first); + final NormalizedNode create(final PathArgument first, final Iterator others, + final Optional deepestChild) { + final NormalizedNodeBuilder builder = + getBuilder(first); if (deepestChild.isPresent()) { - builder.withValue(deepestChild.get().getValue()); + builder.withValue(deepestChild.orElseThrow().body()); } return builder.build(); @@ -53,8 +53,8 @@ abstract class InstanceIdToSimpleNodes extends InstanceI return false; } - abstract NormalizedNodeBuilder> getBuilder(PathArgument node); + abstract NormalizedNodeBuilder getBuilder( + PathArgument node); static final class LeafNormalization extends InstanceIdToSimpleNodes { LeafNormalization(final LeafSchemaNode potential) { diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InterningLeafSetNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InterningLeafSetNodeBuilder.java index bfa14598f1..5a9073b1f8 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InterningLeafSetNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InterningLeafSetNodeBuilder.java @@ -9,7 +9,9 @@ package org.opendaylight.yangtools.yang.data.impl.schema; import static java.util.Objects.requireNonNull; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetNodeBuilder; import org.opendaylight.yangtools.yang.data.util.LeafsetEntryInterner; @@ -28,12 +30,12 @@ final class InterningLeafSetNodeBuilder extends ImmutableLeafSetNodeBuilder ListNodeBuilder> create(final DataSchemaNode schema) { + static ListNodeBuilder> create(final @Nullable DataSchemaNode schema) { final LeafsetEntryInterner interner = getInterner(schema); if (interner != null) { return new InterningLeafSetNodeBuilder<>(interner); @@ -42,7 +44,8 @@ final class InterningLeafSetNodeBuilder extends ImmutableLeafSetNodeBuilder ListNodeBuilder> create(final DataSchemaNode schema, final int sizeHint) { + static ListNodeBuilder> create(final @Nullable DataSchemaNode schema, + final int sizeHint) { final LeafsetEntryInterner interner = getInterner(schema); if (interner != null) { return new InterningLeafSetNodeBuilder<>(interner, sizeHint); @@ -52,7 +55,7 @@ final class InterningLeafSetNodeBuilder extends ImmutableLeafSetNodeBuilder> withChild(final LeafSetEntryNode child) { + public ImmutableLeafSetNodeBuilder withChild(final LeafSetEntryNode child) { return super.withChild(interner.intern(child)); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/NormalizedNodeResult.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/NormalizedNodeResult.java index 6751515059..ea4923a954 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/NormalizedNodeResult.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/NormalizedNodeResult.java @@ -24,9 +24,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; */ public class NormalizedNodeResult { private boolean finished = false; - private NormalizedNode result; + private NormalizedNode result; - public NormalizedNode getResult() { + public NormalizedNode getResult() { return result; } @@ -34,7 +34,7 @@ public class NormalizedNodeResult { return finished; } - void setResult(final NormalizedNode result) { + void setResult(final NormalizedNode result) { if (finished) { throw new ResultAlreadySetException("Normalized Node result was already set.", this.result); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ResultAlreadySetException.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ResultAlreadySetException.java index 81f510b614..e6eff72b41 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ResultAlreadySetException.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ResultAlreadySetException.java @@ -12,19 +12,19 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; public class ResultAlreadySetException extends IllegalStateException { private static final long serialVersionUID = 1L; - private final transient NormalizedNode resultData; + private final transient NormalizedNode resultData; - public ResultAlreadySetException(final String message, final NormalizedNode resultData) { + public ResultAlreadySetException(final String message, final NormalizedNode resultData) { this(message, resultData, null); } - public ResultAlreadySetException(final String message, final NormalizedNode resultData, + public ResultAlreadySetException(final String message, final NormalizedNode resultData, final Throwable cause) { super(message, cause); this.resultData = resultData; } - public NormalizedNode getResultData() { + public NormalizedNode getResultData() { return resultData; } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ReusableImmutableNormalizedNodeStreamWriter.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ReusableImmutableNormalizedNodeStreamWriter.java index fc49467004..106ac02805 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ReusableImmutableNormalizedNodeStreamWriter.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ReusableImmutableNormalizedNodeStreamWriter.java @@ -44,7 +44,7 @@ public final class ReusableImmutableNormalizedNodeStreamWriter extends Immutable } @Override - public NormalizedNode getResult() { + public NormalizedNode getResult() { return builder.result().getResult(); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/SchemaOrderedNormalizedNodeWriter.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/SchemaOrderedNormalizedNodeWriter.java index 4f2c4a524c..f556d5d7f6 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/SchemaOrderedNormalizedNodeWriter.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/SchemaOrderedNormalizedNodeWriter.java @@ -65,7 +65,7 @@ public class SchemaOrderedNormalizedNodeWriter extends NormalizedNodeWriter { } @Override - public SchemaOrderedNormalizedNodeWriter write(final NormalizedNode node) throws IOException { + public SchemaOrderedNormalizedNodeWriter write(final NormalizedNode node) throws IOException { if (Objects.equals(root, schemaContext)) { currentSchemaNode = schemaContext.getDataChildByName(node.getNodeType()); } else { @@ -82,7 +82,7 @@ public class SchemaOrderedNormalizedNodeWriter extends NormalizedNodeWriter { * @return NormalizedNodeWriter this * @throws IOException when thrown from the backing writer. */ - public SchemaOrderedNormalizedNodeWriter write(final Collection> nodes) throws IOException { + public SchemaOrderedNormalizedNodeWriter write(final Collection nodes) throws IOException { currentSchemaNode = root; if (writeChildren(nodes, currentSchemaNode, false)) { return this; @@ -91,7 +91,7 @@ public class SchemaOrderedNormalizedNodeWriter extends NormalizedNodeWriter { throw new IllegalStateException("It wasn't possible to serialize nodes " + nodes); } - private SchemaOrderedNormalizedNodeWriter write(final NormalizedNode node, final SchemaNode dataSchemaNode) + private SchemaOrderedNormalizedNodeWriter write(final NormalizedNode node, final SchemaNode dataSchemaNode) throws IOException { //Set current schemaNode @@ -112,22 +112,22 @@ public class SchemaOrderedNormalizedNodeWriter extends NormalizedNodeWriter { throw new IllegalStateException("It wasn't possible to serialize node " + node); } - private void write(final List> nodes, final SchemaNode dataSchemaNode) throws IOException { - for (final NormalizedNode node : nodes) { + private void write(final List nodes, final SchemaNode dataSchemaNode) throws IOException { + for (final NormalizedNode node : nodes) { write(node, dataSchemaNode); } } @Override - protected boolean writeChildren(final Iterable> children) throws IOException { + protected boolean writeChildren(final Iterable children) throws IOException { return writeChildren(children, currentSchemaNode, true); } - private boolean writeChildren(final Iterable> children, - final SchemaNode parentSchemaNode, final boolean endParent) throws IOException { + private boolean writeChildren(final Iterable children, final SchemaNode parentSchemaNode, + final boolean endParent) throws IOException { //Augmentations cannot be gotten with node.getChild so create our own structure with augmentations resolved - final ArrayListMultimap> qNameToNodes = ArrayListMultimap.create(); - for (final NormalizedNode child : children) { + final ArrayListMultimap qNameToNodes = ArrayListMultimap.create(); + for (final NormalizedNode child : children) { if (child instanceof AugmentationNode) { qNameToNodes.putAll(resolveAugmentations(child)); } else { @@ -152,7 +152,7 @@ public class SchemaOrderedNormalizedNodeWriter extends NormalizedNodeWriter { } } } else { - for (final NormalizedNode child : children) { + for (final NormalizedNode child : children) { writeLeaf(child); } } @@ -162,7 +162,7 @@ public class SchemaOrderedNormalizedNodeWriter extends NormalizedNodeWriter { return true; } - private SchemaOrderedNormalizedNodeWriter writeLeaf(final NormalizedNode node) throws IOException { + private SchemaOrderedNormalizedNodeWriter writeLeaf(final NormalizedNode node) throws IOException { if (wasProcessAsSimpleNode(node)) { return this; } @@ -170,9 +170,9 @@ public class SchemaOrderedNormalizedNodeWriter extends NormalizedNodeWriter { throw new IllegalStateException("It wasn't possible to serialize node " + node); } - private ArrayListMultimap> resolveAugmentations(final NormalizedNode child) { - final ArrayListMultimap> resolvedAugs = ArrayListMultimap.create(); - for (final NormalizedNode node : ((AugmentationNode) child).getValue()) { + private ArrayListMultimap resolveAugmentations(final NormalizedNode child) { + final ArrayListMultimap resolvedAugs = ArrayListMultimap.create(); + for (final NormalizedNode node : ((AugmentationNode) child).body()) { if (node instanceof AugmentationNode) { resolvedAugs.putAll(resolveAugmentations(node)); } else { diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/SchemaUtils.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/SchemaUtils.java index 63a98c54a8..71c5eba6df 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/SchemaUtils.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/SchemaUtils.java @@ -340,13 +340,11 @@ public final class SchemaUtils { return realChildNodes; } - public static Optional detectCase(final ChoiceSchemaNode schema, - final DataContainerChild child) { + public static Optional detectCase(final ChoiceSchemaNode schema, final DataContainerChild child) { for (final CaseSchemaNode choiceCaseNode : schema.getCases()) { if (child instanceof AugmentationNode - && belongsToCaseAugment(choiceCaseNode, (AugmentationIdentifier) child.getIdentifier())) { - return Optional.of(choiceCaseNode); - } else if (choiceCaseNode.findDataChildByName(child.getNodeType()).isPresent()) { + && belongsToCaseAugment(choiceCaseNode, (AugmentationIdentifier) child.getIdentifier()) + || choiceCaseNode.findDataChildByName(child.getNodeType()).isPresent()) { return Optional.of(choiceCaseNode); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/CollectionNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/CollectionNodeBuilder.java index 2a149ab84d..a5dac8b4bb 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/CollectionNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/CollectionNodeBuilder.java @@ -13,7 +13,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -public interface CollectionNodeBuilder, R extends NormalizedNode> +public interface CollectionNodeBuilder extends NormalizedNodeContainerBuilder { @Override diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/DataContainerNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/DataContainerNodeBuilder.java index 6b3730ad15..03a3d14e94 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/DataContainerNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/DataContainerNodeBuilder.java @@ -14,15 +14,14 @@ import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode; public interface DataContainerNodeBuilder> - extends NormalizedNodeContainerBuilder, R> { - + extends NormalizedNodeContainerBuilder { @Override - DataContainerNodeBuilder withValue(Collection> value); + DataContainerNodeBuilder withValue(Collection value); @Override DataContainerNodeBuilder withNodeIdentifier(I nodeIdentifier); - @NonNull DataContainerNodeBuilder withChild(DataContainerChild child); + @NonNull DataContainerNodeBuilder withChild(DataContainerChild child); @NonNull DataContainerNodeBuilder withoutChild(PathArgument key); } \ No newline at end of file diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/ListNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/ListNodeBuilder.java index 0563fbe9ac..0fda7c72b0 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/ListNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/ListNodeBuilder.java @@ -8,15 +8,12 @@ package org.opendaylight.yangtools.yang.data.impl.schema.builder.api; import java.util.Collection; -import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; -public interface ListNodeBuilder - extends CollectionNodeBuilder, LeafSetNode> { - +public interface ListNodeBuilder> extends CollectionNodeBuilder, V> { @Override ListNodeBuilder withNodeIdentifier(NodeIdentifier nodeIdentifier); @@ -29,5 +26,5 @@ public interface ListNodeBuilder @Override ListNodeBuilder withoutChild(PathArgument key); - @NonNull ListNodeBuilder withChildValue(T child); + ListNodeBuilder withChildValue(T child); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/NormalizedNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/NormalizedNodeBuilder.java index e4d528a2b8..d9d255b425 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/NormalizedNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/NormalizedNodeBuilder.java @@ -12,7 +12,7 @@ import org.opendaylight.yangtools.concepts.Builder; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -public interface NormalizedNodeBuilder> extends Builder { +public interface NormalizedNodeBuilder extends Builder { @NonNull NormalizedNodeBuilder withValue(V value); diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/NormalizedNodeContainerBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/NormalizedNodeContainerBuilder.java index b85f678816..f51f7aed3e 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/NormalizedNodeContainerBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/api/NormalizedNodeContainerBuilder.java @@ -13,8 +13,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; public interface NormalizedNodeContainerBuilder, P extends NormalizedNode> - extends NormalizedNodeBuilder, P> { + CV extends NormalizedNode, P extends NormalizedNode> extends NormalizedNodeBuilder, P> { @Override NormalizedNodeContainerBuilder withNodeIdentifier(K nodeIdentifier); diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableDataContainerNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableDataContainerNodeBuilder.java index dc8cf1e33c..e491f3c556 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableDataContainerNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableDataContainerNodeBuilder.java @@ -12,6 +12,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.util.ModifiableMapPhase; import org.opendaylight.yangtools.util.UnmodifiableMapPhase; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; @@ -68,7 +69,7 @@ abstract class AbstractImmutableDataContainerNodeBuilder node) { + protected AbstractImmutableDataContainerNodeBuilder(final AbstractImmutableDataContainerNode node) { this.nodeIdentifier = node.getIdentifier(); /* @@ -86,7 +87,7 @@ abstract class AbstractImmutableDataContainerNodeBuilder getChild(final PathArgument child) { + protected final @Nullable DataContainerChild getChild(final PathArgument child) { return LazyLeafOperations.getChild(value, child); } @@ -113,17 +114,16 @@ abstract class AbstractImmutableDataContainerNodeBuilder withValue( - final Collection> withValue) { + public DataContainerNodeBuilder withValue(final Collection withValue) { // TODO Replace or putAll ? - for (final DataContainerChild dataContainerChild : withValue) { + for (final DataContainerChild dataContainerChild : withValue) { withChild(dataContainerChild); } return this; } @Override - public DataContainerNodeBuilder withChild(final DataContainerChild child) { + public DataContainerNodeBuilder withChild(final DataContainerChild child) { checkDirty(); LazyLeafOperations.putChild(value, child); return this; @@ -143,14 +143,12 @@ abstract class AbstractImmutableDataContainerNodeBuilder addChild( - final DataContainerChild child) { + public DataContainerNodeBuilder addChild(final DataContainerChild child) { return withChild(child); } @Override - public NormalizedNodeContainerBuilder, R> - removeChild(final PathArgument key) { + public NormalizedNodeContainerBuilder removeChild(final PathArgument key) { return withoutChild(key); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableNormalizedNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableNormalizedNodeBuilder.java index 338b4c71cc..bd8618049c 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableNormalizedNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableNormalizedNodeBuilder.java @@ -10,14 +10,15 @@ package org.opendaylight.yangtools.yang.data.impl.schema.builder.impl; import static com.google.common.base.Preconditions.checkState; import static java.util.Objects.requireNonNull; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder; -abstract class AbstractImmutableNormalizedNodeBuilder> +abstract class AbstractImmutableNormalizedNodeBuilder implements NormalizedNodeBuilder { - private I nodeIdentifier; - private V value; + private @Nullable I nodeIdentifier = null; + private @Nullable V value = null; protected final I getNodeIdentifier() { checkState(nodeIdentifier != null, "Identifier has not been set"); diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAnyXmlNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAnyXmlNodeBuilder.java index 18aa8151e8..8ac0b9eaa5 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAnyXmlNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAnyXmlNodeBuilder.java @@ -21,17 +21,28 @@ public class ImmutableAnyXmlNodeBuilder return new ImmutableAnyXmlNodeBuilder(); } + @Override + public ImmutableAnyXmlNodeBuilder withValue(final DOMSource withValue) { + super.withValue(withValue); + return this; + } + @Override public DOMSourceAnyxmlNode build() { return new ImmutableXmlNode(getNodeIdentifier(), getValue()); } private static final class ImmutableXmlNode - extends AbstractImmutableNormalizedSimpleValueNode + extends AbstractImmutableNormalizedSimpleValueNode implements DOMSourceAnyxmlNode { ImmutableXmlNode(final NodeIdentifier nodeIdentifier, final DOMSource value) { super(nodeIdentifier, value); } + + @Override + protected Class implementedType() { + return DOMSourceAnyxmlNode.class; + } } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAnyXmlNodeSchemaAwareBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAnyXmlNodeSchemaAwareBuilder.java index c48e3e5c5a..18df8dc948 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAnyXmlNodeSchemaAwareBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAnyXmlNodeSchemaAwareBuilder.java @@ -15,7 +15,6 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNo import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode; public final class ImmutableAnyXmlNodeSchemaAwareBuilder extends ImmutableAnyXmlNodeBuilder { - private ImmutableAnyXmlNodeSchemaAwareBuilder(final AnyxmlSchemaNode schema) { super.withNodeIdentifier(NodeIdentifier.create(schema.getQName())); } @@ -26,13 +25,12 @@ public final class ImmutableAnyXmlNodeSchemaAwareBuilder extends ImmutableAnyXml } @Override - public NormalizedNodeBuilder withValue(final DOMSource withValue) { + public ImmutableAnyXmlNodeBuilder withValue(final DOMSource withValue) { return super.withValue(withValue); } @Override - public NormalizedNodeBuilder withNodeIdentifier( - final NodeIdentifier withNodeIdentifier) { + public ImmutableAnyXmlNodeBuilder withNodeIdentifier(final NodeIdentifier withNodeIdentifier) { throw new UnsupportedOperationException("Node identifier created from schema"); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAnydataNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAnydataNodeBuilder.java index 2d45aae3a5..d6cb26a52d 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAnydataNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAnydataNodeBuilder.java @@ -19,14 +19,13 @@ import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableN @Beta public class ImmutableAnydataNodeBuilder extends AbstractImmutableNormalizedNodeBuilder> { - private final Class objectModel; + private final @NonNull Class objectModel; ImmutableAnydataNodeBuilder(final Class objectModel) { this.objectModel = requireNonNull(objectModel); } - public static @NonNull NormalizedNodeBuilder> create( - final Class objectModel) { + public static NormalizedNodeBuilder> create(final Class objectModel) { return new ImmutableAnydataNodeBuilder<>(objectModel); } @@ -36,8 +35,9 @@ public class ImmutableAnydataNodeBuilder } private static final class ImmutableAnydataNode - extends AbstractImmutableNormalizedSimpleValueNode implements AnydataNode { - private final @NonNull Class objectModel; + extends AbstractImmutableNormalizedSimpleValueNode, V> + implements AnydataNode { + private final Class objectModel; protected ImmutableAnydataNode(final NodeIdentifier nodeIdentifier, final V value, final Class objectModel) { super(nodeIdentifier, value); @@ -45,8 +45,13 @@ public class ImmutableAnydataNodeBuilder } @Override - public Class getValueObjectModel() { + public Class bodyObjectModel() { return objectModel; } + + @Override + protected Class> implementedType() { + return (Class) AnydataNode.class; + } } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAugmentationNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAugmentationNodeBuilder.java index 912cdc487a..3fdb663e02 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAugmentationNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAugmentationNodeBuilder.java @@ -51,7 +51,7 @@ public class ImmutableAugmentationNodeBuilder @Override public DataContainerNodeBuilder withChild( - final DataContainerChild child) { + final DataContainerChild child) { // Check nested augments DataValidationException.checkLegalData(!(child instanceof AugmentationNode), "Unable to add: %s, as a child for: %s, Nested augmentations are not permitted", child.getNodeType(), @@ -71,11 +71,17 @@ public class ImmutableAugmentationNodeBuilder } private static final class ImmutableAugmentationNode - extends AbstractImmutableDataContainerNode implements AugmentationNode { + extends AbstractImmutableDataContainerNode + implements AugmentationNode { ImmutableAugmentationNode(final AugmentationIdentifier nodeIdentifier, final Map children) { super(children, nodeIdentifier); } + + @Override + protected Class implementedType() { + return AugmentationNode.class; + } } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAugmentationNodeSchemaAwareBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAugmentationNodeSchemaAwareBuilder.java index eea80cbb6d..4639ba85f6 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAugmentationNodeSchemaAwareBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAugmentationNodeSchemaAwareBuilder.java @@ -17,7 +17,6 @@ import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; public class ImmutableAugmentationNodeSchemaAwareBuilder extends ImmutableAugmentationNodeBuilder { - private final DataNodeContainerValidator validator; protected ImmutableAugmentationNodeSchemaAwareBuilder(final AugmentationSchemaNode schema) { @@ -33,7 +32,7 @@ public class ImmutableAugmentationNodeSchemaAwareBuilder extends ImmutableAugmen @Override public DataContainerNodeBuilder withChild( - final DataContainerChild child) { + final DataContainerChild child) { return super.withChild(validator.validateChild(child)); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeBuilder.java index 80be092d32..1ebb566f82 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeBuilder.java @@ -50,11 +50,15 @@ public class ImmutableChoiceNodeBuilder extends AbstractImmutableDataContainerNo return new ImmutableChoiceNode(getNodeIdentifier(), buildValue()); } - private static final class ImmutableChoiceNode extends AbstractImmutableDataContainerNode - implements ChoiceNode { - + private static final class ImmutableChoiceNode + extends AbstractImmutableDataContainerNode implements ChoiceNode { ImmutableChoiceNode(final NodeIdentifier nodeIdentifier, final Map children) { super(children, nodeIdentifier); } + + @Override + protected Class implementedType() { + return ChoiceNode.class; + } } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeSchemaAwareBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeSchemaAwareBuilder.java index 2b56fb19b2..6ab9c3440b 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeSchemaAwareBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeSchemaAwareBuilder.java @@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.data.impl.schema.builder.impl; import static java.util.Objects.requireNonNull; import java.util.Optional; -import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; @@ -22,9 +22,9 @@ import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode; import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; public class ImmutableChoiceNodeSchemaAwareBuilder extends ImmutableChoiceNodeBuilder { - private final ChoiceSchemaNode schema; - private DataNodeContainerValidator validator; + + private @Nullable DataNodeContainerValidator validator = null; protected ImmutableChoiceNodeSchemaAwareBuilder(final ChoiceSchemaNode schema) { this.schema = requireNonNull(schema, "Schema was null"); @@ -38,7 +38,7 @@ public class ImmutableChoiceNodeSchemaAwareBuilder extends ImmutableChoiceNodeBu } @Override - public DataContainerNodeBuilder withChild(final DataContainerChild child) { + public DataContainerNodeBuilder withChild(final DataContainerChild child) { if (validator == null) { Optional detectedCaseOpt = SchemaUtils.detectCase(schema, child); DataValidationException.checkLegalChild(detectedCaseOpt.isPresent(), child.getIdentifier(), schema); @@ -54,7 +54,7 @@ public class ImmutableChoiceNodeSchemaAwareBuilder extends ImmutableChoiceNodeBu return super.build(); } - public static @NonNull DataContainerNodeBuilder create(final ChoiceSchemaNode schema) { + public static DataContainerNodeBuilder create(final ChoiceSchemaNode schema) { return new ImmutableChoiceNodeSchemaAwareBuilder(schema); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeBuilder.java index caa1e7d080..2df7230c4c 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeBuilder.java @@ -17,7 +17,6 @@ import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableD public class ImmutableContainerNodeBuilder extends AbstractImmutableDataContainerNodeBuilder { - protected ImmutableContainerNodeBuilder() { } @@ -38,8 +37,7 @@ public class ImmutableContainerNodeBuilder return new ImmutableContainerNodeBuilder(sizeHint); } - public static @NonNull DataContainerNodeBuilder create( - final ContainerNode node) { + public static @NonNull DataContainerNodeBuilder create(final ContainerNode node) { if (!(node instanceof ImmutableContainerNode)) { throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass())); } @@ -51,11 +49,15 @@ public class ImmutableContainerNodeBuilder return new ImmutableContainerNode(getNodeIdentifier(), buildValue()); } - protected static final class ImmutableContainerNode extends AbstractImmutableDataContainerNode - implements ContainerNode { - + protected static final class ImmutableContainerNode + extends AbstractImmutableDataContainerNode implements ContainerNode { ImmutableContainerNode(final NodeIdentifier nodeIdentifier, final Map children) { super(children, nodeIdentifier); } + + @Override + protected Class implementedType() { + return ContainerNode.class; + } } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeSchemaAwareBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeSchemaAwareBuilder.java index 6e4a52a07b..843eede9e8 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeSchemaAwareBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeSchemaAwareBuilder.java @@ -48,7 +48,7 @@ public final class ImmutableContainerNodeSchemaAwareBuilder extends ImmutableCon } @Override - public DataContainerNodeBuilder withChild(final DataContainerChild child) { + public DataContainerNodeBuilder withChild(final DataContainerChild child) { validator.validateChild(child.getIdentifier()); return super.withChild(child); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafNodeBuilder.java index 96c2413040..1229b04460 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafNodeBuilder.java @@ -35,15 +35,19 @@ public class ImmutableLeafNodeBuilder return createNode(getNodeIdentifier(), getValue()); } - private static final class ImmutableLeafNode - extends AbstractImmutableNormalizedSimpleValueNode implements LeafNode { + private static class ImmutableLeafNode + extends AbstractImmutableNormalizedSimpleValueNode, T> implements LeafNode { ImmutableLeafNode(final NodeIdentifier nodeIdentifier, final T value) { super(nodeIdentifier, value); } + + @Override + protected final Class> implementedType() { + return (Class) LeafNode.class; + } } - private static final class ImmutableBinaryLeafNode - extends AbstractImmutableNormalizedSimpleValueNode implements LeafNode { + private static final class ImmutableBinaryLeafNode extends ImmutableLeafNode { ImmutableBinaryLeafNode(final NodeIdentifier nodeIdentifier, final byte[] value) { super(nodeIdentifier, value); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafSetEntryNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafSetEntryNodeBuilder.java index f0068ece78..8cf0f76cf9 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafSetEntryNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafSetEntryNodeBuilder.java @@ -28,12 +28,18 @@ public class ImmutableLeafSetEntryNodeBuilder } private static final class ImmutableLeafSetEntryNode - extends AbstractImmutableNormalizedSimpleValueNode implements LeafSetEntryNode { + extends AbstractImmutableNormalizedSimpleValueNode, T> + implements LeafSetEntryNode { ImmutableLeafSetEntryNode(final NodeWithValue nodeIdentifier, final T value) { super(nodeIdentifier, value); checkArgument(Objects.deepEquals(nodeIdentifier.getValue(), value), "Node identifier contains different value: %s than value itself: %s", nodeIdentifier, value); } + + @Override + protected Class> implementedType() { + return (Class) LeafSetEntryNode.class; + } } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafSetEntryNodeSchemaAwareBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafSetEntryNodeSchemaAwareBuilder.java index e388aca40c..1621b892a4 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafSetEntryNodeSchemaAwareBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafSetEntryNodeSchemaAwareBuilder.java @@ -28,15 +28,15 @@ public final class ImmutableLeafSetEntryNodeSchemaAwareBuilder extends Immuta } @Override - public NormalizedNodeBuilder> withValue(final T withValue) { + public ImmutableLeafSetEntryNodeBuilder withValue(final T withValue) { super.withNodeIdentifier(new NodeWithValue<>(schema.getQName(), withValue)); // TODO check value type using TypeProvider ? - return super.withValue(withValue); + super.withValue(withValue); + return this; } @Override - public NormalizedNodeBuilder> withNodeIdentifier( - final NodeWithValue withNodeIdentifier) { + public ImmutableLeafSetEntryNodeBuilder withNodeIdentifier(final NodeWithValue withNodeIdentifier) { throw new UnsupportedOperationException("Node identifier created from schema"); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafSetNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafSetNodeBuilder.java index 0edc0b9f25..c01217a8b5 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafSetNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafSetNodeBuilder.java @@ -11,7 +11,6 @@ import com.google.common.collect.Maps; import java.util.Collection; import java.util.HashMap; import java.util.Map; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.util.MapAdaptor; import org.opendaylight.yangtools.util.UnmodifiableCollection; @@ -19,16 +18,15 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableNormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableNormalizedValueNode; -public class ImmutableLeafSetNodeBuilder implements ListNodeBuilder> { +public class ImmutableLeafSetNodeBuilder implements ListNodeBuilder> { private static final int DEFAULT_CAPACITY = 4; - private final Map> value; + private final Map, LeafSetEntryNode> value; + private NodeIdentifier nodeIdentifier; protected ImmutableLeafSetNodeBuilder() { @@ -48,15 +46,15 @@ public class ImmutableLeafSetNodeBuilder implements ListNodeBuilder @NonNull ListNodeBuilder> create() { + public static @NonNull ListNodeBuilder> create() { return new ImmutableLeafSetNodeBuilder<>(); } - public static @NonNull ListNodeBuilder> create(final int sizeHint) { + public static @NonNull ListNodeBuilder> create(final int sizeHint) { return new ImmutableLeafSetNodeBuilder<>(sizeHint); } - public static @NonNull ListNodeBuilder> create(final LeafSetNode node) { + public static @NonNull ListNodeBuilder> create(final SystemLeafSetNode node) { if (!(node instanceof ImmutableLeafSetNode)) { throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass())); } @@ -65,30 +63,30 @@ public class ImmutableLeafSetNodeBuilder implements ListNodeBuilder> withChild(final LeafSetEntryNode child) { + public ImmutableLeafSetNodeBuilder withChild(final LeafSetEntryNode child) { this.value.put(child.getIdentifier(), child); return this; } @Override - public ListNodeBuilder> withoutChild(final PathArgument key) { + public ImmutableLeafSetNodeBuilder withoutChild(final PathArgument key) { this.value.remove(key); return this; } @Override - public LeafSetNode build() { + public SystemLeafSetNode build() { return new ImmutableLeafSetNode<>(nodeIdentifier, MapAdaptor.getDefaultInstance().optimize(value)); } @Override - public ListNodeBuilder> withNodeIdentifier(final NodeIdentifier withNodeIdentifier) { + public ImmutableLeafSetNodeBuilder withNodeIdentifier(final NodeIdentifier withNodeIdentifier) { this.nodeIdentifier = withNodeIdentifier; return this; } @Override - public ListNodeBuilder> withValue(final Collection> withValue) { + public ImmutableLeafSetNodeBuilder withValue(final Collection> withValue) { for (final LeafSetEntryNode leafSetEntry : withValue) { withChild(leafSetEntry); } @@ -96,27 +94,39 @@ public class ImmutableLeafSetNodeBuilder implements ListNodeBuilder> withChildValue(final T childValue) { + public ImmutableLeafSetNodeBuilder withChildValue(final T childValue) { return withChild(ImmutableLeafSetEntryNodeBuilder.create() .withNodeIdentifier(new NodeWithValue<>(nodeIdentifier.getNodeType(), childValue)) .withValue(childValue).build()); } - protected static final class ImmutableLeafSetNode extends - AbstractImmutableNormalizedValueNode>> implements - LeafSetNode { - private final Map> children; + @Override + public ImmutableLeafSetNodeBuilder addChild(final LeafSetEntryNode child) { + return withChild(child); + } + + @Override + public ImmutableLeafSetNodeBuilder removeChild(final PathArgument key) { + return withoutChild(key); + } + + protected static final class ImmutableLeafSetNode + extends AbstractImmutableNormalizedValueNode, + Collection<@NonNull LeafSetEntryNode>> + implements SystemLeafSetNode { + + private final Map, LeafSetEntryNode> children; ImmutableLeafSetNode(final NodeIdentifier nodeIdentifier, - final Map> children) { + final Map, LeafSetEntryNode> children) { super(nodeIdentifier, UnmodifiableCollection.create(children.values())); this.children = children; } @Override - public Optional> getChild(final NodeWithValue child) { - return Optional.ofNullable(children.get(child)); + public LeafSetEntryNode childByArg(final NodeWithValue child) { + return children.get(child); } @Override @@ -124,27 +134,19 @@ public class ImmutableLeafSetNodeBuilder implements ListNodeBuilder> implementedType() { + return (Class) SystemLeafSetNode.class; + } + @Override protected int valueHashCode() { return children.hashCode(); } @Override - protected boolean valueEquals(final AbstractImmutableNormalizedNode other) { + protected boolean valueEquals(final SystemLeafSetNode other) { return children.equals(((ImmutableLeafSetNode) other).children); } } - - @Override - public NormalizedNodeContainerBuilder, LeafSetNode> addChild( - final LeafSetEntryNode child) { - return withChild(child); - } - - @Override - public NormalizedNodeContainerBuilder, LeafSetNode> - removeChild(final PathArgument key) { - return withoutChild(key); - } - } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafSetNodeSchemaAwareBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafSetNodeSchemaAwareBuilder.java index b913c7fcd7..5766142bc7 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafSetNodeSchemaAwareBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableLeafSetNodeSchemaAwareBuilder.java @@ -14,13 +14,12 @@ import java.util.Collections; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataValidationException; import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; public final class ImmutableLeafSetNodeSchemaAwareBuilder extends ImmutableLeafSetNodeBuilder { - private final LeafListSchemaNode schema; private ImmutableLeafSetNodeSchemaAwareBuilder(final LeafListSchemaNode schema) { @@ -35,12 +34,12 @@ public final class ImmutableLeafSetNodeSchemaAwareBuilder extends ImmutableLe super.withNodeIdentifier(new NodeIdentifier(schema.getQName())); } - public static @NonNull ListNodeBuilder> create(final LeafListSchemaNode schema) { + public static @NonNull ListNodeBuilder> create(final LeafListSchemaNode schema) { return new ImmutableLeafSetNodeSchemaAwareBuilder<>(schema); } - public static @NonNull ListNodeBuilder> create(final LeafListSchemaNode schema, - final LeafSetNode node) { + public static @NonNull ListNodeBuilder> create(final LeafListSchemaNode schema, + final SystemLeafSetNode node) { if (!(node instanceof ImmutableLeafSetNode)) { throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass())); } @@ -49,13 +48,13 @@ public final class ImmutableLeafSetNodeSchemaAwareBuilder extends ImmutableLe } @Override - public ListNodeBuilder> withChildValue(final T childValue) { + public ImmutableLeafSetNodeBuilder withChildValue(final T childValue) { // TODO check value type return super.withChildValue(childValue); } @Override - public ListNodeBuilder> withChild(final LeafSetEntryNode child) { + public ImmutableLeafSetNodeBuilder withChild(final LeafSetEntryNode child) { checkArgument(schema.getQName().equals(child.getNodeType()), "Incompatible node type, should be: %s, is: %s", schema.getQName(), child.getNodeType()); // TODO check value type using TypeProvider ? @@ -65,7 +64,7 @@ public final class ImmutableLeafSetNodeSchemaAwareBuilder extends ImmutableLe } @Override - public ListNodeBuilder> withNodeIdentifier(final NodeIdentifier withNodeIdentifier) { + public ImmutableLeafSetNodeBuilder withNodeIdentifier(final NodeIdentifier withNodeIdentifier) { throw new UnsupportedOperationException("Node identifier created from schema"); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapEntryNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapEntryNodeBuilder.java index 33fd8a8ef1..2135c78c4d 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapEntryNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapEntryNodeBuilder.java @@ -43,7 +43,7 @@ public class ImmutableMapEntryNodeBuilder protected ImmutableMapEntryNodeBuilder(final ImmutableMapEntryNode node) { super(node); this.childrenQNamesToPaths = new LinkedHashMap<>(); - fillQnames(node.getValue(), childrenQNamesToPaths); + fillQnames(node.body(), childrenQNamesToPaths); } public static @NonNull DataContainerNodeBuilder create() { @@ -64,9 +64,8 @@ public class ImmutableMapEntryNodeBuilder return new ImmutableMapEntryNodeBuilder((ImmutableMapEntryNode)node); } - private static void fillQnames(final Iterable> iterable, - final Map out) { - for (final DataContainerChild childId : iterable) { + private static void fillQnames(final Iterable iterable, final Map out) { + for (final DataContainerChild childId : iterable) { final PathArgument identifier = childId.getIdentifier(); // Augmentation nodes cannot be keys, and do not have to be present in childrenQNamesToPaths map @@ -80,7 +79,7 @@ public class ImmutableMapEntryNodeBuilder @Override public DataContainerNodeBuilder withValue( - final Collection> withValue) { + final Collection withValue) { fillQnames(withValue, childrenQNamesToPaths); return super.withValue(withValue); } @@ -91,7 +90,7 @@ public class ImmutableMapEntryNodeBuilder @Override public DataContainerNodeBuilder withChild( - final DataContainerChild child) { + final DataContainerChild child) { // Augmentation nodes cannot be keys, and do not have to be present in childrenQNamesToPaths map if (!isAugment(child.getIdentifier())) { childrenQNamesToPaths.put(child.getNodeType(), child.getIdentifier()); @@ -103,7 +102,7 @@ public class ImmutableMapEntryNodeBuilder @Override public MapEntryNode build() { for (final Entry key : getNodeIdentifier().entrySet()) { - final DataContainerChild childNode = getChild(childrenQNamesToPaths.get(key.getKey())); + final DataContainerChild childNode = getChild(childrenQNamesToPaths.get(key.getKey())); // We have enough information to fill-in missing leaf nodes, so let's do that if (childNode == null) { @@ -112,7 +111,7 @@ public class ImmutableMapEntryNodeBuilder withChild(leaf); } else { DataValidationException.checkListKey(getNodeIdentifier(), key.getKey(), key.getValue(), - childNode.getValue()); + childNode.body()); } } @@ -120,11 +119,17 @@ public class ImmutableMapEntryNodeBuilder } private static final class ImmutableMapEntryNode - extends AbstractImmutableDataContainerNode implements MapEntryNode { + extends AbstractImmutableDataContainerNode + implements MapEntryNode { ImmutableMapEntryNode(final NodeIdentifierWithPredicates nodeIdentifier, final Map children) { super(children, nodeIdentifier); } + + @Override + protected Class implementedType() { + return MapEntryNode.class; + } } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapEntryNodeSchemaAwareBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapEntryNodeSchemaAwareBuilder.java index 557b7a57cf..f5cb003f05 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapEntryNodeSchemaAwareBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapEntryNodeSchemaAwareBuilder.java @@ -14,6 +14,7 @@ import java.util.Collection; import java.util.Map; import java.util.Map.Entry; import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.util.ImmutableMapTemplate; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; @@ -42,7 +43,7 @@ public final class ImmutableMapEntryNodeSchemaAwareBuilder extends ImmutableMapE @Override public DataContainerNodeBuilder withChild( - final DataContainerChild child) { + final DataContainerChild child) { validator.validateChild(child.getIdentifier()); return super.withChild(child); } @@ -78,7 +79,7 @@ public final class ImmutableMapEntryNodeSchemaAwareBuilder extends ImmutableMapE final Object[] values = new Object[childrenQNamesToPaths.size()]; int offset = 0; for (Entry entry : childrenQNamesToPaths.entrySet()) { - values[offset++] = nonnullKeyValue(entry.getKey(), getChild(entry.getValue())).getValue(); + values[offset++] = nonnullKeyValue(entry.getKey(), getChild(entry.getValue())).body(); } return ImmutableMapTemplate.ordered(childrenQNamesToPaths.keySet()).instantiateWithValues(values); } @@ -87,12 +88,12 @@ public final class ImmutableMapEntryNodeSchemaAwareBuilder extends ImmutableMapE final Object[] values = new Object[keys.size()]; int offset = 0; for (QName key : keys) { - values[offset++] = nonnullKeyValue(key, getChild(childrenQNamesToPaths.get(key))).getValue(); + values[offset++] = nonnullKeyValue(key, getChild(childrenQNamesToPaths.get(key))).body(); } return ImmutableMapTemplate.ordered(keys).instantiateWithValues(values); } - private DataContainerChild nonnullKeyValue(final QName key, final DataContainerChild value) { + private DataContainerChild nonnullKeyValue(final QName key, final @Nullable DataContainerChild value) { if (value != null) { return value; } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapNodeBuilder.java index 8152a2e3b0..5a7f797166 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapNodeBuilder.java @@ -7,28 +7,30 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema.builder.impl; +import static java.util.Objects.requireNonNull; + import com.google.common.collect.Maps; import java.util.Collection; import java.util.HashMap; import java.util.Map; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.util.MapAdaptor; -import org.opendaylight.yangtools.util.UnmodifiableCollection; +import org.opendaylight.yangtools.util.UnmodifiableMap; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableNormalizedNode; -public class ImmutableMapNodeBuilder implements CollectionNodeBuilder { +public class ImmutableMapNodeBuilder implements CollectionNodeBuilder { private static final int DEFAULT_CAPACITY = 4; private final Map value; - private NodeIdentifier nodeIdentifier; + + private @Nullable NodeIdentifier nodeIdentifier = null; protected ImmutableMapNodeBuilder() { this.value = new HashMap<>(DEFAULT_CAPACITY); @@ -42,41 +44,38 @@ public class ImmutableMapNodeBuilder implements CollectionNodeBuilder create() { + public static @NonNull CollectionNodeBuilder create() { return new ImmutableMapNodeBuilder(); } - public static @NonNull CollectionNodeBuilder create(final int sizeHint) { + public static @NonNull CollectionNodeBuilder create(final int sizeHint) { return new ImmutableMapNodeBuilder(sizeHint); } - public static CollectionNodeBuilder create(final MapNode node) { - if (!(node instanceof ImmutableMapNode)) { - throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass())); - } - - return new ImmutableMapNodeBuilder((ImmutableMapNode) node); + public static @NonNull CollectionNodeBuilder create(final SystemMapNode node) { + return new ImmutableMapNodeBuilder(node); } @Override - public CollectionNodeBuilder withChild(final MapEntryNode child) { + public ImmutableMapNodeBuilder withChild(final MapEntryNode child) { this.value.put(child.getIdentifier(), child); return this; } @Override - public CollectionNodeBuilder withoutChild(final PathArgument key) { + public ImmutableMapNodeBuilder withoutChild(final PathArgument key) { this.value.remove(key); return this; } @Override - public CollectionNodeBuilder withValue(final Collection withValue) { + public ImmutableMapNodeBuilder withValue(final Collection withValue) { // TODO replace or putAll ? for (final MapEntryNode mapEntryNode : withValue) { withChild(mapEntryNode); @@ -86,47 +85,45 @@ public class ImmutableMapNodeBuilder implements CollectionNodeBuilder withNodeIdentifier(final NodeIdentifier withNodeIdentifier) { + public ImmutableMapNodeBuilder withNodeIdentifier(final NodeIdentifier withNodeIdentifier) { this.nodeIdentifier = withNodeIdentifier; return this; } @Override - public MapNode build() { + public SystemMapNode build() { return new ImmutableMapNode(nodeIdentifier, MapAdaptor.getDefaultInstance().optimize(value)); } @Override - public CollectionNodeBuilder addChild( - final MapEntryNode child) { + public ImmutableMapNodeBuilder addChild(final MapEntryNode child) { return withChild(child); } @Override - public NormalizedNodeContainerBuilder removeChild( - final PathArgument key) { + public ImmutableMapNodeBuilder removeChild(final PathArgument key) { return withoutChild(key); } - protected static final class ImmutableMapNode - extends AbstractImmutableNormalizedNode> implements MapNode { + protected static final class ImmutableMapNode extends AbstractImmutableNormalizedNode + implements SystemMapNode { - private final Map children; + private final @NonNull Map children; ImmutableMapNode(final NodeIdentifier nodeIdentifier, final Map children) { super(nodeIdentifier); - this.children = children; + this.children = requireNonNull(children); } @Override - public Optional getChild(final NodeIdentifierWithPredicates child) { - return Optional.ofNullable(children.get(child)); + public MapEntryNode childByArg(final NodeIdentifierWithPredicates child) { + return children.get(child); } @Override - public Collection getValue() { - return UnmodifiableCollection.create(children.values()); + public Map asMap() { + return UnmodifiableMap.of(children); } @Override @@ -134,14 +131,21 @@ public class ImmutableMapNodeBuilder implements CollectionNodeBuilder implementedType() { + return SystemMapNode.class; + } + @Override protected int valueHashCode() { return children.hashCode(); } @Override - protected boolean valueEquals(final AbstractImmutableNormalizedNode other) { - return children.equals(((ImmutableMapNode) other).children); + protected boolean valueEquals(final SystemMapNode other) { + final Map otherChildren = + other instanceof ImmutableMapNode ? ((ImmutableMapNode) other).children : other.asMap(); + return children.equals(otherChildren); } } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapNodeSchemaAwareBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapNodeSchemaAwareBuilder.java index d747a4a895..59bc6ecddf 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapNodeSchemaAwareBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapNodeSchemaAwareBuilder.java @@ -13,7 +13,7 @@ import java.util.Collections; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; +import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataValidationException; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; @@ -32,12 +32,12 @@ public class ImmutableMapNodeSchemaAwareBuilder extends ImmutableMapNodeBuilder super.withNodeIdentifier(NodeIdentifier.create(schema.getQName())); } - public static @NonNull CollectionNodeBuilder create(final ListSchemaNode schema) { + public static @NonNull CollectionNodeBuilder create(final ListSchemaNode schema) { return new ImmutableMapNodeSchemaAwareBuilder(schema); } - public static @NonNull CollectionNodeBuilder create(final ListSchemaNode schema, - final MapNode node) { + public static @NonNull CollectionNodeBuilder create(final ListSchemaNode schema, + final SystemMapNode node) { if (!(node instanceof ImmutableMapNode)) { throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass())); } @@ -46,14 +46,14 @@ public class ImmutableMapNodeSchemaAwareBuilder extends ImmutableMapNodeBuilder } @Override - public CollectionNodeBuilder withChild(final MapEntryNode child) { + public ImmutableMapNodeBuilder withChild(final MapEntryNode child) { DataValidationException.checkLegalChild(schema.getQName().equals(child.getNodeType()), child.getIdentifier(), schema, Collections.singleton(schema.getQName())); return super.withChild(child); } @Override - public CollectionNodeBuilder withNodeIdentifier(final NodeIdentifier withNodeIdentifier) { + public ImmutableMapNodeBuilder withNodeIdentifier(final NodeIdentifier withNodeIdentifier) { throw new UnsupportedOperationException("Node identifier created from schema"); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUnkeyedListEntryNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUnkeyedListEntryNodeBuilder.java index 93823e871e..dbf58fa5d7 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUnkeyedListEntryNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUnkeyedListEntryNodeBuilder.java @@ -53,10 +53,15 @@ public class ImmutableUnkeyedListEntryNodeBuilder } protected static final class ImmutableUnkeyedListEntryNode - extends AbstractImmutableDataContainerNode implements UnkeyedListEntryNode { - + extends AbstractImmutableDataContainerNode + implements UnkeyedListEntryNode { ImmutableUnkeyedListEntryNode(final NodeIdentifier nodeIdentifier, final Map children) { super(children, nodeIdentifier); } + + @Override + protected Class implementedType() { + return UnkeyedListEntryNode.class; + } } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUnkeyedListNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUnkeyedListNodeBuilder.java index 81d10f7213..a32930dc6c 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUnkeyedListNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUnkeyedListNodeBuilder.java @@ -10,7 +10,6 @@ package org.opendaylight.yangtools.yang.data.impl.schema.builder.impl; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import java.util.Collection; -import java.util.Collections; import java.util.LinkedList; import java.util.List; import org.eclipse.jdt.annotation.NonNull; @@ -37,19 +36,19 @@ public class ImmutableUnkeyedListNodeBuilder implements CollectionNodeBuilder(); - Iterables.addAll(value, node.getValue()); + Iterables.addAll(value, node.body()); this.dirty = true; } - public static @NonNull CollectionNodeBuilder create() { + public static CollectionNodeBuilder create() { return new ImmutableUnkeyedListNodeBuilder(); } - public static @NonNull CollectionNodeBuilder create(final int sizeHint) { + public static CollectionNodeBuilder create(final int sizeHint) { return new ImmutableUnkeyedListNodeBuilder(); } - public static @NonNull CollectionNodeBuilder create( + public static CollectionNodeBuilder create( final UnkeyedListNode node) { if (!(node instanceof ImmutableUnkeyedListNode)) { throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass())); @@ -117,15 +116,14 @@ public class ImmutableUnkeyedListNodeBuilder implements CollectionNodeBuilder> implements - UnkeyedListNode { + protected static final class EmptyImmutableUnkeyedListNode + extends AbstractImmutableNormalizedNode implements UnkeyedListNode { protected EmptyImmutableUnkeyedListNode(final NodeIdentifier nodeIdentifier) { super(nodeIdentifier); } @Override - public ImmutableList getValue() { + public ImmutableList body() { return ImmutableList.of(); } @@ -135,23 +133,29 @@ public class ImmutableUnkeyedListNodeBuilder implements CollectionNodeBuilder other) { - return Collections.emptyList().equals(other.getValue()); + protected Class implementedType() { + return UnkeyedListNode.class; } @Override protected int valueHashCode() { return 1; } + + @Override + protected boolean valueEquals(final UnkeyedListNode other) { + return other.isEmpty(); + } } - protected static final class ImmutableUnkeyedListNode extends - AbstractImmutableNormalizedValueNode> + protected static final class ImmutableUnkeyedListNode + extends AbstractImmutableNormalizedValueNode> implements UnkeyedListNode { private final ImmutableList children; @@ -163,23 +167,35 @@ public class ImmutableUnkeyedListNodeBuilder implements CollectionNodeBuilder other) { - return children.equals(((ImmutableUnkeyedListNode) other).children); + protected Class implementedType() { + return UnkeyedListNode.class; } @Override - public UnkeyedListEntryNode getChild(final int position) { - return children.get(position); + protected int valueHashCode() { + return children.hashCode(); } @Override - public int getSize() { - return children.size(); + protected boolean valueEquals(final UnkeyedListNode other) { + final Collection otherChildren; + if (other instanceof ImmutableUnkeyedListNode) { + otherChildren = ((ImmutableUnkeyedListNode) other).children; + } else { + otherChildren = other.body(); + } + return otherChildren instanceof List ? children.equals(otherChildren) + : Iterables.elementsEqual(children, otherChildren); } } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedLeafSetNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUserLeafSetNodeBuilder.java similarity index 57% rename from yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedLeafSetNodeBuilder.java rename to yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUserLeafSetNodeBuilder.java index 344680f32d..155fb2cff0 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedLeafSetNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUserLeafSetNodeBuilder.java @@ -13,45 +13,43 @@ import java.util.Collection; import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.util.UnmodifiableCollection; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedLeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserLeafSetNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableNormalizedNode; -public class ImmutableOrderedLeafSetNodeBuilder implements ListNodeBuilder> { +public class ImmutableUserLeafSetNodeBuilder implements ListNodeBuilder> { private Map> value; private NodeIdentifier nodeIdentifier; private boolean dirty; - protected ImmutableOrderedLeafSetNodeBuilder() { + protected ImmutableUserLeafSetNodeBuilder() { value = new LinkedHashMap<>(); dirty = false; } - protected ImmutableOrderedLeafSetNodeBuilder(final ImmutableOrderedLeafSetNode node) { + protected ImmutableUserLeafSetNodeBuilder(final ImmutableUserLeafSetNode node) { nodeIdentifier = node.getIdentifier(); value = node.getChildren(); dirty = true; } - public static @NonNull ListNodeBuilder> create() { - return new ImmutableOrderedLeafSetNodeBuilder<>(); + public static @NonNull ListNodeBuilder> create() { + return new ImmutableUserLeafSetNodeBuilder<>(); } - public static @NonNull ListNodeBuilder> create(final LeafSetNode node) { - if (!(node instanceof ImmutableOrderedLeafSetNode)) { + public static @NonNull ListNodeBuilder> create( + final UserLeafSetNode node) { + if (!(node instanceof ImmutableUserLeafSetNode)) { throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass())); } - return new ImmutableOrderedLeafSetNodeBuilder<>((ImmutableOrderedLeafSetNode) node); + return new ImmutableUserLeafSetNodeBuilder<>((ImmutableUserLeafSetNode) node); } private void checkDirty() { @@ -62,33 +60,33 @@ public class ImmutableOrderedLeafSetNodeBuilder implements ListNodeBuilder> withChild(final LeafSetEntryNode child) { + public ImmutableUserLeafSetNodeBuilder withChild(final LeafSetEntryNode child) { checkDirty(); this.value.put(child.getIdentifier(), child); return this; } @Override - public ListNodeBuilder> withoutChild(final PathArgument key) { + public ImmutableUserLeafSetNodeBuilder withoutChild(final PathArgument key) { checkDirty(); this.value.remove(key); return this; } @Override - public OrderedLeafSetNode build() { + public UserLeafSetNode build() { dirty = true; - return new ImmutableOrderedLeafSetNode<>(nodeIdentifier, value); + return new ImmutableUserLeafSetNode<>(nodeIdentifier, value); } @Override - public ListNodeBuilder> withNodeIdentifier(final NodeIdentifier withNodeIdentifier) { + public ImmutableUserLeafSetNodeBuilder withNodeIdentifier(final NodeIdentifier withNodeIdentifier) { this.nodeIdentifier = withNodeIdentifier; return this; } @Override - public ListNodeBuilder> withValue(final Collection> withValue) { + public ImmutableUserLeafSetNodeBuilder withValue(final Collection> withValue) { checkDirty(); for (final LeafSetEntryNode leafSetEntry : withValue) { withChild(leafSetEntry); @@ -97,27 +95,26 @@ public class ImmutableOrderedLeafSetNodeBuilder implements ListNodeBuilder> withChildValue(final T childValue) { + public ImmutableUserLeafSetNodeBuilder withChildValue(final T childValue) { return withChild(ImmutableLeafSetEntryNodeBuilder.create() .withNodeIdentifier(new NodeWithValue<>(nodeIdentifier.getNodeType(), childValue)) .withValue(childValue).build()); } - protected static final class ImmutableOrderedLeafSetNode extends - AbstractImmutableNormalizedNode>> implements - OrderedLeafSetNode { - + protected static final class ImmutableUserLeafSetNode + extends AbstractImmutableNormalizedNode> + implements UserLeafSetNode { private final Map> children; - ImmutableOrderedLeafSetNode(final NodeIdentifier nodeIdentifier, + ImmutableUserLeafSetNode(final NodeIdentifier nodeIdentifier, final Map> children) { super(nodeIdentifier); this.children = children; } @Override - public Optional> getChild(final NodeWithValue child) { - return Optional.ofNullable(children.get(child)); + public LeafSetEntryNode childByArg(final NodeWithValue child) { + return children.get(child); } @Override @@ -126,41 +123,44 @@ public class ImmutableOrderedLeafSetNodeBuilder implements ListNodeBuilder> getChildren() { - return Collections.unmodifiableMap(children); + @Override + public Collection> body() { + return UnmodifiableCollection.create(children.values()); } @Override - protected boolean valueEquals(final AbstractImmutableNormalizedNode other) { - return children.equals(((ImmutableOrderedLeafSetNode) other).children); + protected Class> implementedType() { + return (Class) UserLeafSetNode.class; } @Override - public int getSize() { - return children.size(); + protected int valueHashCode() { + return children.hashCode(); } @Override - public Collection> getValue() { - return UnmodifiableCollection.create(children.values()); + protected boolean valueEquals(final UserLeafSetNode other) { + return children.equals(((ImmutableUserLeafSetNode) other).children); + } + + @SuppressFBWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD", + justification = "https://github.com/spotbugs/spotbugs/issues/811") + private Map> getChildren() { + return Collections.unmodifiableMap(children); } } @Override - public NormalizedNodeContainerBuilder, LeafSetNode> addChild( - final LeafSetEntryNode child) { + public ImmutableUserLeafSetNodeBuilder addChild(final LeafSetEntryNode child) { return withChild(child); } @Override - public NormalizedNodeContainerBuilder, LeafSetNode> - removeChild(final PathArgument key) { + public ImmutableUserLeafSetNodeBuilder removeChild(final PathArgument key) { return withoutChild(key); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedLeafSetNodeSchemaAwareBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUserLeafSetNodeSchemaAwareBuilder.java similarity index 64% rename from yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedLeafSetNodeSchemaAwareBuilder.java rename to yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUserLeafSetNodeSchemaAwareBuilder.java index bbd103c4d3..e106216e88 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedLeafSetNodeSchemaAwareBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUserLeafSetNodeSchemaAwareBuilder.java @@ -14,49 +14,48 @@ import java.util.Collections; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserLeafSetNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataValidationException; import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; -public final class ImmutableOrderedLeafSetNodeSchemaAwareBuilder extends ImmutableOrderedLeafSetNodeBuilder { - +public final class ImmutableUserLeafSetNodeSchemaAwareBuilder extends ImmutableUserLeafSetNodeBuilder { private final LeafListSchemaNode schema; - private ImmutableOrderedLeafSetNodeSchemaAwareBuilder(final LeafListSchemaNode schema) { + private ImmutableUserLeafSetNodeSchemaAwareBuilder(final LeafListSchemaNode schema) { this.schema = requireNonNull(schema); super.withNodeIdentifier(new NodeIdentifier(schema.getQName())); } - public ImmutableOrderedLeafSetNodeSchemaAwareBuilder(final LeafListSchemaNode schema, - final ImmutableOrderedLeafSetNode node) { + public ImmutableUserLeafSetNodeSchemaAwareBuilder(final LeafListSchemaNode schema, + final ImmutableUserLeafSetNode node) { super(node); this.schema = requireNonNull(schema); // FIXME: Preconditions.checkArgument(schema.getQName().equals(node.getIdentifier())); super.withNodeIdentifier(new NodeIdentifier(schema.getQName())); } - public static @NonNull ListNodeBuilder> create(final LeafListSchemaNode schema) { - return new ImmutableOrderedLeafSetNodeSchemaAwareBuilder<>(schema); + public static @NonNull ListNodeBuilder> create(final LeafListSchemaNode schema) { + return new ImmutableUserLeafSetNodeSchemaAwareBuilder<>(schema); } - public static @NonNull ListNodeBuilder> create(final LeafListSchemaNode schema, - final LeafSetNode node) { - if (!(node instanceof ImmutableOrderedLeafSetNode)) { + public static @NonNull ListNodeBuilder> create(final LeafListSchemaNode schema, + final UserLeafSetNode node) { + if (!(node instanceof ImmutableUserLeafSetNode)) { throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass())); } - return new ImmutableOrderedLeafSetNodeSchemaAwareBuilder<>(schema, (ImmutableOrderedLeafSetNode) node); + return new ImmutableUserLeafSetNodeSchemaAwareBuilder<>(schema, (ImmutableUserLeafSetNode) node); } @Override - public ListNodeBuilder> withChildValue(final T childValue) { + public ImmutableUserLeafSetNodeBuilder withChildValue(final T childValue) { // TODO check value type return super.withChildValue(childValue); } @Override - public ListNodeBuilder> withChild(final LeafSetEntryNode child) { + public ImmutableUserLeafSetNodeBuilder withChild(final LeafSetEntryNode child) { checkArgument(schema.getQName().equals(child.getNodeType()), "Incompatible node type, should be: %s, is: %s", schema.getQName(), child.getNodeType()); // TODO check value type using TypeProvider ? @@ -66,7 +65,7 @@ public final class ImmutableOrderedLeafSetNodeSchemaAwareBuilder extends Immu } @Override - public ListNodeBuilder> withNodeIdentifier(final NodeIdentifier withNodeIdentifier) { + public ImmutableUserLeafSetNodeBuilder withNodeIdentifier(final NodeIdentifier withNodeIdentifier) { throw new UnsupportedOperationException("Node identifier created from schema"); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedMapNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUserMapNodeBuilder.java similarity index 57% rename from yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedMapNodeBuilder.java rename to yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUserMapNodeBuilder.java index 178525be51..99d6dd3f1d 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedMapNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUserMapNodeBuilder.java @@ -11,32 +11,31 @@ import com.google.common.collect.Iterables; import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.util.UnmodifiableCollection; +import org.opendaylight.yangtools.util.UnmodifiableMap; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableNormalizedNode; -public class ImmutableOrderedMapNodeBuilder implements CollectionNodeBuilder { +public class ImmutableUserMapNodeBuilder implements CollectionNodeBuilder { private static final int DEFAULT_CAPACITY = 4; private Map value; private NodeIdentifier nodeIdentifier; private boolean dirty; - protected ImmutableOrderedMapNodeBuilder() { + protected ImmutableUserMapNodeBuilder() { this.value = new LinkedHashMap<>(DEFAULT_CAPACITY); this.dirty = false; } - protected ImmutableOrderedMapNodeBuilder(final int sizeHint) { + protected ImmutableUserMapNodeBuilder(final int sizeHint) { if (sizeHint >= 0) { this.value = new LinkedHashMap<>(sizeHint + sizeHint / 3); } else { @@ -45,26 +44,26 @@ public class ImmutableOrderedMapNodeBuilder implements CollectionNodeBuilder create() { - return new ImmutableOrderedMapNodeBuilder(); + public static @NonNull CollectionNodeBuilder create() { + return new ImmutableUserMapNodeBuilder(); } - public static @NonNull CollectionNodeBuilder create(final int sizeHint) { - return new ImmutableOrderedMapNodeBuilder(sizeHint); + public static @NonNull CollectionNodeBuilder create(final int sizeHint) { + return new ImmutableUserMapNodeBuilder(sizeHint); } - public static @NonNull CollectionNodeBuilder create(final MapNode node) { - if (!(node instanceof ImmutableOrderedMapNode)) { + public static @NonNull CollectionNodeBuilder create(final UserMapNode node) { + if (!(node instanceof ImmutableUserMapNode)) { throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass())); } - return new ImmutableOrderedMapNodeBuilder((ImmutableOrderedMapNode) node); + return new ImmutableUserMapNodeBuilder((ImmutableUserMapNode) node); } private void checkDirty() { @@ -75,21 +74,21 @@ public class ImmutableOrderedMapNodeBuilder implements CollectionNodeBuilder withChild(final MapEntryNode child) { + public CollectionNodeBuilder withChild(final MapEntryNode child) { checkDirty(); this.value.put(child.getIdentifier(), child); return this; } @Override - public CollectionNodeBuilder withoutChild(final PathArgument key) { + public CollectionNodeBuilder withoutChild(final PathArgument key) { checkDirty(); this.value.remove(key); return this; } @Override - public CollectionNodeBuilder withValue(final Collection withValue) { + public CollectionNodeBuilder withValue(final Collection withValue) { // TODO replace or putAll ? for (final MapEntryNode mapEntryNode : withValue) { withChild(mapEntryNode); @@ -99,46 +98,44 @@ public class ImmutableOrderedMapNodeBuilder implements CollectionNodeBuilder withNodeIdentifier( + public CollectionNodeBuilder withNodeIdentifier( final NodeIdentifier withNodeIdentifier) { this.nodeIdentifier = withNodeIdentifier; return this; } @Override - public OrderedMapNode build() { + public UserMapNode build() { dirty = true; - return new ImmutableOrderedMapNode(nodeIdentifier, value); + return new ImmutableUserMapNode(nodeIdentifier, value); } @Override - public CollectionNodeBuilder addChild( + public CollectionNodeBuilder addChild( final MapEntryNode child) { return withChild(child); } @Override - public NormalizedNodeContainerBuilder removeChild( + public NormalizedNodeContainerBuilder removeChild( final PathArgument key) { return withoutChild(key); } - protected static final class ImmutableOrderedMapNode - extends AbstractImmutableNormalizedNode> - implements OrderedMapNode { - + protected static final class ImmutableUserMapNode + extends AbstractImmutableNormalizedNode implements UserMapNode { private final Map children; - ImmutableOrderedMapNode(final NodeIdentifier nodeIdentifier, + ImmutableUserMapNode(final NodeIdentifier nodeIdentifier, final Map children) { super(nodeIdentifier); this.children = children; } @Override - public Optional getChild(final NodeIdentifierWithPredicates child) { - return Optional.ofNullable(children.get(child)); + public MapEntryNode childByArg(final NodeIdentifierWithPredicates child) { + return children.get(child); } @Override @@ -152,23 +149,39 @@ public class ImmutableOrderedMapNodeBuilder implements CollectionNodeBuilder body() { + return UnmodifiableCollection.create(children.values()); } @Override - protected boolean valueEquals(final AbstractImmutableNormalizedNode other) { - return children.equals(((ImmutableOrderedMapNode) other).children); + public Map asMap() { + return UnmodifiableMap.of(children); } @Override - public int getSize() { - return children.size(); + protected Class implementedType() { + return UserMapNode.class; } @Override - public Collection getValue() { - return UnmodifiableCollection.create(children.values()); + protected int valueHashCode() { + // Order is important + int hashCode = 1; + for (MapEntryNode child : children.values()) { + hashCode = 31 * hashCode + child.hashCode(); + } + return hashCode; + } + + @Override + protected boolean valueEquals(final UserMapNode other) { + final Map otherChildren; + if (other instanceof ImmutableUserMapNode) { + otherChildren = ((ImmutableUserMapNode) other).children; + } else { + otherChildren = other.asMap(); + } + return Iterables.elementsEqual(children.values(), otherChildren.values()); } } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedMapNodeSchemaAwareBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUserMapNodeSchemaAwareBuilder.java similarity index 61% rename from yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedMapNodeSchemaAwareBuilder.java rename to yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUserMapNodeSchemaAwareBuilder.java index d71f08cd7e..2f61233cc8 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedMapNodeSchemaAwareBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUserMapNodeSchemaAwareBuilder.java @@ -13,49 +13,48 @@ import java.util.Collections; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; -import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataValidationException; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; -public class ImmutableOrderedMapNodeSchemaAwareBuilder extends ImmutableOrderedMapNodeBuilder { +public class ImmutableUserMapNodeSchemaAwareBuilder extends ImmutableUserMapNodeBuilder { private final ListSchemaNode schema; - protected ImmutableOrderedMapNodeSchemaAwareBuilder(final ListSchemaNode schema) { + protected ImmutableUserMapNodeSchemaAwareBuilder(final ListSchemaNode schema) { this.schema = requireNonNull(schema); super.withNodeIdentifier(NodeIdentifier.create(schema.getQName())); } - protected ImmutableOrderedMapNodeSchemaAwareBuilder(final ListSchemaNode schema, - final ImmutableOrderedMapNode node) { + protected ImmutableUserMapNodeSchemaAwareBuilder(final ListSchemaNode schema, + final ImmutableUserMapNode node) { super(node); this.schema = requireNonNull(schema); super.withNodeIdentifier(NodeIdentifier.create(schema.getQName())); } - public static @NonNull CollectionNodeBuilder create(final ListSchemaNode schema) { - return new ImmutableOrderedMapNodeSchemaAwareBuilder(schema); + public static @NonNull CollectionNodeBuilder create(final ListSchemaNode schema) { + return new ImmutableUserMapNodeSchemaAwareBuilder(schema); } - public static @NonNull CollectionNodeBuilder create(final ListSchemaNode schema, - final MapNode node) { - if (!(node instanceof ImmutableOrderedMapNode)) { + public static @NonNull CollectionNodeBuilder create(final ListSchemaNode schema, + final UserMapNode node) { + if (!(node instanceof ImmutableUserMapNode)) { throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass())); } - return new ImmutableOrderedMapNodeSchemaAwareBuilder(schema, (ImmutableOrderedMapNode) node); + return new ImmutableUserMapNodeSchemaAwareBuilder(schema, (ImmutableUserMapNode) node); } @Override - public CollectionNodeBuilder withChild(final MapEntryNode child) { + public CollectionNodeBuilder withChild(final MapEntryNode child) { DataValidationException.checkLegalChild(schema.getQName().equals(child.getNodeType()), child.getIdentifier(), schema, Collections.singleton(schema.getQName())); return super.withChild(child); } @Override - public CollectionNodeBuilder withNodeIdentifier( + public CollectionNodeBuilder withNodeIdentifier( final NodeIdentifier withNodeIdentifier) { throw new UnsupportedOperationException("Node identifier created from schema"); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableYangModeledAnyXmlNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableYangModeledAnyXmlNodeBuilder.java index ed45e08536..d131e0a6c5 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableYangModeledAnyXmlNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableYangModeledAnyXmlNodeBuilder.java @@ -54,8 +54,7 @@ public final class ImmutableYangModeledAnyXmlNodeBuilder extends } private static final class ImmutableYangModeledAnyXmlNode extends - AbstractImmutableDataContainerNode implements YangModeledAnyXmlNode { - + AbstractImmutableDataContainerNode implements YangModeledAnyXmlNode { private final @NonNull ContainerSchemaNode contentSchema; ImmutableYangModeledAnyXmlNode(final NodeIdentifier nodeIdentifier, final Map value, @@ -65,8 +64,14 @@ public final class ImmutableYangModeledAnyXmlNodeBuilder extends } @Override + @Deprecated public ContainerSchemaNode getSchemaOfAnyXmlData() { return contentSchema; } + + @Override + protected Class implementedType() { + return YangModeledAnyXmlNode.class; + } } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/valid/DataNodeContainerValidator.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/valid/DataNodeContainerValidator.java index 554aeb7189..abdfaabd92 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/valid/DataNodeContainerValidator.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/valid/DataNodeContainerValidator.java @@ -53,7 +53,7 @@ public class DataNodeContainerValidator { DataValidationException.checkLegalChild(isKnownChild(child), child, schema, childNodes, augments); } - public DataContainerChild validateChild(final DataContainerChild child) { + public DataContainerChild validateChild(final DataContainerChild child) { validateChild(child.getIdentifier()); return child; } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/valid/DataValidationException.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/valid/DataValidationException.java index 0b3a7f4fc5..2e49ea1762 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/valid/DataValidationException.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/valid/DataValidationException.java @@ -62,17 +62,17 @@ public class DataValidationException extends RuntimeException { } } - public static void checkListKey(final DataContainerChild childNode, final Map keyValues, + public static void checkListKey(final DataContainerChild childNode, final Map keyValues, final QName keyQName, final NodeIdentifierWithPredicates nodeId) { checkListKey(childNode, keyQName, nodeId); final Object expected = keyValues.get(keyQName); - final Object actual = childNode.getValue(); + final Object actual = childNode.body(); checkListKey(nodeId, keyQName, expected, actual); } - public static void checkListKey(final DataContainerChild childNode, final QName keyQName, + public static void checkListKey(final DataContainerChild childNode, final QName keyQName, final NodeIdentifierWithPredicates nodeId) { if (childNode == null) { throw new IllegalListKeyException(keyQName, nodeId); diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableDataContainerNode.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableDataContainerNode.java index 6b5e0d7e51..3394effafb 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableDataContainerNode.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableDataContainerNode.java @@ -9,30 +9,27 @@ package org.opendaylight.yangtools.yang.data.impl.schema.nodes; import java.util.Collection; import java.util.Map; -import java.util.Optional; import org.opendaylight.yangtools.util.ImmutableOffsetMap; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode; -public abstract class AbstractImmutableDataContainerNode - extends AbstractImmutableNormalizedNode>> - implements DataContainerNode { +public abstract class AbstractImmutableDataContainerNode> + extends AbstractImmutableNormalizedNode implements DataContainerNode { private final Map children; protected AbstractImmutableDataContainerNode(final Map children, final K nodeIdentifier) { super(nodeIdentifier); - this.children = ImmutableOffsetMap.unorderedCopyOf(children); } @Override - public final Optional> getChild(final PathArgument child) { - return Optional.ofNullable(LazyLeafOperations.getChild(children, child)); + public final DataContainerChild childByArg(final PathArgument child) { + return LazyLeafOperations.getChild(children, child); } @Override - public final Collection> getValue() { + public final Collection body() { return new LazyValues(children); } @@ -41,11 +38,6 @@ public abstract class AbstractImmutableDataContainerNode return children.size(); } - @Override - protected int valueHashCode() { - return children.hashCode(); - } - /** * DO NOT USE THIS METHOD. * @@ -60,8 +52,13 @@ public abstract class AbstractImmutableDataContainerNode } @Override - protected boolean valueEquals(final AbstractImmutableNormalizedNode other) { - return other instanceof AbstractImmutableDataContainerNode && children.equals( - ((AbstractImmutableDataContainerNode) other).children); + protected int valueHashCode() { + return children.hashCode(); + } + + @Override + protected boolean valueEquals(final N other) { + return other instanceof AbstractImmutableDataContainerNode && children.equals( + ((AbstractImmutableDataContainerNode) other).children); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedNode.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedNode.java index 9359831c0c..bda43c15d6 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedNode.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedNode.java @@ -8,42 +8,28 @@ package org.opendaylight.yangtools.yang.data.impl.schema.nodes; import com.google.common.base.MoreObjects.ToStringHelper; -import org.opendaylight.yangtools.concepts.AbstractSimpleIdentifiable; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.concepts.AbstractIdentifiable; import org.opendaylight.yangtools.concepts.Immutable; -import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -public abstract class AbstractImmutableNormalizedNode extends AbstractSimpleIdentifiable - implements NormalizedNode, Immutable { +public abstract class AbstractImmutableNormalizedNode + extends AbstractIdentifiable implements NormalizedNode, Immutable { protected AbstractImmutableNormalizedNode(final K nodeIdentifier) { super(nodeIdentifier); } - @Override - public final QName getNodeType() { - return getIdentifier().getNodeType(); - } - - @Override - protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { - return super.addToStringAttributes(toStringHelper).add("value", getValue()); - } - - protected abstract boolean valueEquals(AbstractImmutableNormalizedNode other); - - protected abstract int valueHashCode(); - @Override public final boolean equals(final Object obj) { if (this == obj) { return true; } - if (obj == null || this.getClass() != obj.getClass()) { + final Class clazz = implementedType(); + if (!clazz.isInstance(obj)) { return false; } - - final AbstractImmutableNormalizedNode other = (AbstractImmutableNormalizedNode)obj; + final N other = clazz.cast(obj); return getIdentifier().equals(other.getIdentifier()) && valueEquals(other); } @@ -51,4 +37,15 @@ public abstract class AbstractImmutableNormalizedNode public final int hashCode() { return 31 * getIdentifier().hashCode() + valueHashCode(); } + + @Override + protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { + return super.addToStringAttributes(toStringHelper).add("body", body()); + } + + protected abstract @NonNull Class implementedType(); + + protected abstract int valueHashCode(); + + protected abstract boolean valueEquals(@NonNull N other); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedSimpleValueNode.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedSimpleValueNode.java index 5e4660b8c6..a9dd8cfb2d 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedSimpleValueNode.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedSimpleValueNode.java @@ -9,27 +9,23 @@ package org.opendaylight.yangtools.yang.data.impl.schema.nodes; import java.util.Objects; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -public abstract class AbstractImmutableNormalizedSimpleValueNode - extends AbstractImmutableNormalizedValueNode { +public abstract class AbstractImmutableNormalizedSimpleValueNode + extends AbstractImmutableNormalizedValueNode { protected AbstractImmutableNormalizedSimpleValueNode(final K nodeIdentifier, final V value) { super(nodeIdentifier, value); } @Override - protected int valueHashCode() { - final V local = value(); - final int result = local != null ? local.hashCode() : 1; - // FIXME: are attributes part of hashCode/equals? - return result; + protected final int valueHashCode() { + return value().hashCode(); } @Override - protected boolean valueEquals(final AbstractImmutableNormalizedNode other) { - // We can not call directly getValue.equals because of Empty Type + protected final boolean valueEquals(final N other) { + // We can not call directly body().equals because of Empty Type // RequireInstanceStatementSupport leaves which always have NULL value - - // FIXME: are attributes part of hashCode/equals? - return Objects.deepEquals(value(), other.getValue()); + return Objects.deepEquals(value(), other.body()); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueNode.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueNode.java index 13c31eca1e..ee0acab5b9 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueNode.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueNode.java @@ -11,10 +11,10 @@ import static java.util.Objects.requireNonNull; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -public abstract class AbstractImmutableNormalizedValueNode extends - AbstractImmutableNormalizedNode { - +public abstract class AbstractImmutableNormalizedValueNode + extends AbstractImmutableNormalizedNode { private final @NonNull V value; protected AbstractImmutableNormalizedValueNode(final K nodeIdentifier, final @NonNull V value) { @@ -23,7 +23,7 @@ public abstract class AbstractImmutableNormalizedValueNode