import com.google.common.base.MoreObjects.ToStringHelper;
import java.util.Optional;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+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.schema.MapNode;
import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
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.tree.NormalizedNodeContainerSupport.MapEntry;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
final class MapModificationStrategy extends AbstractNodeContainerModificationStrategy {
- private static final MapEntry<OrderedMapNode> ORDERED_SUPPORT = new MapEntry<>(OrderedMapNode.class,
- ChildTrackingPolicy.ORDERED, ImmutableOrderedMapNodeBuilder::create,
- ImmutableOrderedMapNodeBuilder::create);
- private static final MapEntry<MapNode> UNORDERED_SUPPORT = new MapEntry<>(MapNode.class,
- ChildTrackingPolicy.UNORDERED, ImmutableMapNodeBuilder::create, ImmutableMapNodeBuilder::create);
+ private static final NormalizedNodeContainerSupport<NodeIdentifier, OrderedMapNode> ORDERED_SUPPORT =
+ new NormalizedNodeContainerSupport<>(OrderedMapNode.class, ChildTrackingPolicy.ORDERED,
+ ImmutableOrderedMapNodeBuilder::create, ImmutableOrderedMapNodeBuilder::create);
+ private static final NormalizedNodeContainerSupport<NodeIdentifier, MapNode> UNORDERED_SUPPORT =
+ new NormalizedNodeContainerSupport<>(MapNode.class, ImmutableMapNodeBuilder::create,
+ ImmutableMapNodeBuilder::create);
private final Optional<ModificationApplyOperation> entryStrategy;
private final MapNode emptyNode;
- private MapModificationStrategy(final MapEntry<?> support, final ListSchemaNode schema,
+ private MapModificationStrategy(final NormalizedNodeContainerSupport<?, ?> support, final ListSchemaNode schema,
final DataTreeConfiguration treeConfig, final MapNode emptyNode) {
super(support, treeConfig);
this.emptyNode = requireNonNull(emptyNode);
}
static MapModificationStrategy of(final ListSchemaNode schema, final DataTreeConfiguration treeConfig) {
- final MapEntry<?> support;
+ final NormalizedNodeContainerSupport<?, ?> support;
final MapNode emptyNode;
if (schema.isUserOrdered()) {
support = ORDERED_SUPPORT;
return new MapModificationStrategy(support, schema, treeConfig, emptyNode);
}
- // FIXME: this is a hack, originally introduced in
- // Change-Id: I9dc02a1917f38e8a0d62279843974b9869c48693. DataTreeRoot needs to be fixed up to properly
- // handle the lookup of through maps.
@Override
public Optional<ModificationApplyOperation> getChild(final YangInstanceIdentifier.PathArgument identifier) {
- if (identifier instanceof NodeIdentifierWithPredicates) {
- return entryStrategy;
- }
- // In case we already are in a MapEntry node(for example DataTree rooted at MapEntry)
- // try to retrieve the child that the identifier should be pointing to from our entryStrategy
- // if we have one. If the entryStrategy cannot find this child we just return the absent
- // we get from it.
- return entryStrategy.get().getChild(identifier);
+ return identifier instanceof NodeIdentifierWithPredicates ? entryStrategy : Optional.empty();
}
@Override