Remove MapModificationStrategy hack
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / schema / tree / MapModificationStrategy.java
index 2cfeeaa471b78c16c4d5947c35e31b0be7ec5505..ae65ef8a827ecd96504ded9248bc019319aba497 100644 (file)
@@ -12,6 +12,7 @@ import static java.util.Objects.requireNonNull;
 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;
@@ -22,20 +23,20 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.Version;
 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);
@@ -43,7 +44,7 @@ final class MapModificationStrategy extends AbstractNodeContainerModificationStr
     }
 
     static MapModificationStrategy of(final ListSchemaNode schema, final DataTreeConfiguration treeConfig) {
-        final MapEntry<?> support;
+        final NormalizedNodeContainerSupport<?, ?> support;
         final MapNode emptyNode;
         if (schema.isUserOrdered()) {
             support = ORDERED_SUPPORT;
@@ -55,19 +56,9 @@ final class MapModificationStrategy extends AbstractNodeContainerModificationStr
         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