X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=data%2Fyang-data-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fschema%2Fbuilder%2Fimpl%2FImmutableChoiceNodeBuilder.java;fp=data%2Fyang-data-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fschema%2Fbuilder%2Fimpl%2FImmutableChoiceNodeBuilder.java;h=1f095df1d7013be60982022b4e9e1d0c96ed9dd2;hb=1867432c68157e9f12a4b795fc9ad78520433bd7;hp=5edf9d5b1099b1010738944e83f90aa3d0d1f960;hpb=e85954b803561166596bf6f604c0aafb094a38ae;p=yangtools.git diff --git a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeBuilder.java b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeBuilder.java index 5edf9d5b10..1f095df1d7 100644 --- a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeBuilder.java +++ b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeBuilder.java @@ -7,11 +7,18 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema.builder.impl; +import static java.util.Objects.requireNonNull; + +import java.util.Collection; import java.util.Map; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.util.ImmutableOffsetMap; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.AbstractChoiceNode; import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; -import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableDataContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; +import org.opendaylight.yangtools.yang.data.impl.schema.nodes.LazyLeafOperations; +import org.opendaylight.yangtools.yang.data.impl.schema.nodes.LazyValues; public final class ImmutableChoiceNodeBuilder extends AbstractImmutableDataContainerNodeBuilder @@ -25,7 +32,7 @@ public final class ImmutableChoiceNodeBuilder } private ImmutableChoiceNodeBuilder(final ImmutableChoiceNode node) { - super(node); + super(node.name, node.children); } public static ChoiceNode.@NonNull Builder create(final ChoiceNode node) { @@ -40,15 +47,45 @@ public final class ImmutableChoiceNodeBuilder return new ImmutableChoiceNode(getNodeIdentifier(), buildValue()); } - private static final class ImmutableChoiceNode - extends AbstractImmutableDataContainerNode implements ChoiceNode { - ImmutableChoiceNode(final NodeIdentifier nodeIdentifier, final Map children) { - super(children, nodeIdentifier); + private static final class ImmutableChoiceNode extends AbstractChoiceNode { + private final @NonNull NodeIdentifier name; + private final @NonNull Map children; + + ImmutableChoiceNode(final NodeIdentifier name, final Map children) { + this.name = requireNonNull(name); + // FIXME: move this to caller + this.children = ImmutableOffsetMap.unorderedCopyOf(children); + } + + @Override + public NodeIdentifier name() { + return name; + } + + @Override + public DataContainerChild childByArg(final NodeIdentifier child) { + return LazyLeafOperations.getChild(children, child); + } + + @Override + public Collection body() { + return new LazyValues(children); + } + + @Override + public int size() { + return children.size(); + } + + @Override + protected int valueHashCode() { + return children.hashCode(); } @Override - protected Class implementedType() { - return ChoiceNode.class; + protected boolean valueEquals(final ChoiceNode other) { + return other instanceof ImmutableChoiceNode immutable ? children.equals(immutable.children) + : ImmutableNormalizedNodeMethods.bodyEquals(this, other); } } }