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%2Fbuilder%2Fimpl%2FImmutableUnkeyedListNodeBuilder.java;h=224d0aef847c60099126a11304400a744c630c62;hb=0736c9c93dff667dd2abaf5de92ca68ea64869d6;hp=274b781d3e66fded64bdf5485dada1f47561c20f;hpb=bda9bbb102e232c8850e793c48afa789c155ccd6;p=yangtools.git 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 274b781d3e..224d0aef84 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 @@ -7,13 +7,15 @@ */ 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.opendaylight.yangtools.concepts.Immutable; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; +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.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; @@ -21,14 +23,10 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNo import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableNormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableNormalizedValueNode; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; - public class ImmutableUnkeyedListNodeBuilder implements CollectionNodeBuilder { - private List value; - private InstanceIdentifier.NodeIdentifier nodeIdentifier; - private boolean dirty = false; + private NodeIdentifier nodeIdentifier; + private boolean dirty; protected ImmutableUnkeyedListNodeBuilder() { this.value = new LinkedList<>(); @@ -37,16 +35,22 @@ public class ImmutableUnkeyedListNodeBuilder implements CollectionNodeBuilder(); Iterables.addAll(value, node.getValue()); this.dirty = true; } - public static CollectionNodeBuilder create() { + public static @NonNull CollectionNodeBuilder create() { + return new ImmutableUnkeyedListNodeBuilder(); + } + + public static @NonNull CollectionNodeBuilder create(final int sizeHint) { return new ImmutableUnkeyedListNodeBuilder(); } - public static CollectionNodeBuilder create(final UnkeyedListNode node) { + public static @NonNull CollectionNodeBuilder create( + final UnkeyedListNode node) { if (!(node instanceof ImmutableUnkeyedListNode)) { throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass())); } @@ -70,16 +74,17 @@ public class ImmutableUnkeyedListNodeBuilder implements CollectionNodeBuilder withoutChild( - final InstanceIdentifier.PathArgument key) { + final PathArgument key) { checkDirty(); throw new UnsupportedOperationException("Children does not have identifiers."); } @Override - public CollectionNodeBuilder withValue(final List value) { + public CollectionNodeBuilder withValue( + final Collection withValue) { // TODO replace or putAll ? - for (final UnkeyedListEntryNode UnkeyedListEntryNode : value) { - withChild(UnkeyedListEntryNode); + for (final UnkeyedListEntryNode node : withValue) { + withChild(node); } return this; @@ -87,14 +92,17 @@ public class ImmutableUnkeyedListNodeBuilder implements CollectionNodeBuilder withNodeIdentifier( - final InstanceIdentifier.NodeIdentifier nodeIdentifier) { - this.nodeIdentifier = nodeIdentifier; + final NodeIdentifier withNodeIdentifier) { + this.nodeIdentifier = withNodeIdentifier; return this; } @Override public UnkeyedListNode build() { dirty = true; + if (value.isEmpty()) { + return new EmptyImmutableUnkeyedListNode(nodeIdentifier); + } return new ImmutableUnkeyedListNode(nodeIdentifier, ImmutableList.copyOf(value)); } @@ -104,18 +112,51 @@ public class ImmutableUnkeyedListNodeBuilder implements CollectionNodeBuilder removeChild( - final PathArgument key) { + public NormalizedNodeContainerBuilder + removeChild(final PathArgument key) { return withoutChild(key); } + protected static final class EmptyImmutableUnkeyedListNode extends + AbstractImmutableNormalizedNode> + implements UnkeyedListNode { + protected EmptyImmutableUnkeyedListNode(final NodeIdentifier nodeIdentifier) { + super(nodeIdentifier); + } + + @Override + public ImmutableList getValue() { + return ImmutableList.of(); + } + + @Override + public UnkeyedListEntryNode getChild(final int position) { + throw new IndexOutOfBoundsException(); + } + + @Override + public int getSize() { + return 0; + } + + @Override + protected boolean valueEquals(final AbstractImmutableNormalizedNode other) { + return Collections.EMPTY_LIST.equals(other.getValue()); + } + + @Override + protected int valueHashCode() { + return Collections.EMPTY_LIST.hashCode(); + } + } + protected static final class ImmutableUnkeyedListNode extends - AbstractImmutableNormalizedValueNode> - implements Immutable, UnkeyedListNode { + AbstractImmutableNormalizedValueNode> + implements UnkeyedListNode { private final ImmutableList children; - ImmutableUnkeyedListNode(final InstanceIdentifier.NodeIdentifier nodeIdentifier, + ImmutableUnkeyedListNode(final NodeIdentifier nodeIdentifier, final ImmutableList children) { super(nodeIdentifier, children); this.children = children;