X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fschema%2Fnodes%2FAbstractImmutableDataContainerNode.java;h=6b5e0d7e5124eb8ee661fa9f8119a624252f7daf;hb=0b18801833d3e236d0afd7c5f2d9690b0a2b3e84;hp=7c7d53d61ac210a77bc7a5dc7c7d3e29a5f3b334;hpb=ba1b7f529bb6d4c451500230504692478150454d;p=yangtools.git 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 7c7d53d61a..6b5e0d7e51 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 @@ -7,32 +7,38 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema.nodes; -import java.util.Collections; +import java.util.Collection; import java.util.Map; - -import org.opendaylight.yangtools.concepts.Immutable; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; +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; -import com.google.common.base.Optional; -import com.google.common.collect.Iterables; - -public abstract class AbstractImmutableDataContainerNode // - extends AbstractImmutableNormalizedNode>> // - implements Immutable, DataContainerNode { +public abstract class AbstractImmutableDataContainerNode + extends AbstractImmutableNormalizedNode>> + implements DataContainerNode { + private final Map children; - protected final Map> children; + protected AbstractImmutableDataContainerNode(final Map children, final K nodeIdentifier) { + super(nodeIdentifier); - public AbstractImmutableDataContainerNode( - final Map> children, final K nodeIdentifier) { - super(nodeIdentifier, Iterables.unmodifiableIterable(children.values())); - this.children = children; + this.children = ImmutableOffsetMap.unorderedCopyOf(children); } @Override public final Optional> getChild(final PathArgument child) { - return Optional.> fromNullable(children.get(child)); + return Optional.ofNullable(LazyLeafOperations.getChild(children, child)); + } + + @Override + public final Collection> getValue() { + return new LazyValues(children); + } + + @Override + public final int size() { + return children.size(); } @Override @@ -40,17 +46,22 @@ public abstract class AbstractImmutableDataContainerNode return children.hashCode(); } - public final Map> getChildren() { - // Make sure we do not leak a mutable view - return Collections.unmodifiableMap(children); + /** + * DO NOT USE THIS METHOD. + * + *

+ * This is an implementation-internal API and no outside users should use it. If you do, you are asking for trouble, + * as the returned object is not guaranteed to conform to java.util.Map interface, nor is its contents well-defined. + * + * @return An unmodifiable view if this node's children. + */ + public final Map getChildren() { + return children; } @Override protected boolean valueEquals(final AbstractImmutableNormalizedNode other) { - if (!(other instanceof AbstractImmutableDataContainerNode)) { - return false; - } - - return children.equals(((AbstractImmutableDataContainerNode)other).children); + return other instanceof AbstractImmutableDataContainerNode && children.equals( + ((AbstractImmutableDataContainerNode) other).children); } }