Remove duplicate instantiation of EffectiveAugmentationSchema 92/74792/5
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 3 Aug 2018 09:34:53 +0000 (11:34 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 3 Aug 2018 11:31:10 +0000 (13:31 +0200)
We have four independent call sites, doing the same thing. Unify
all the callers behind EffectiveAugmentationSchema.create().

Change-Id: Ib4e4202cd64cff15d35cf275afbba7c00f853121
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/SchemaTracker.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToCompositeNodes.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AugmentationModificationStrategy.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AugmentationContextNode.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/DataSchemaContextNode.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/EffectiveAugmentationSchema.java

index 41a412c9111bf400436e67523da20a68b7d700a0..4f531089b2ef12ad4d6dd19a0e4da0bb7f50656c 100644 (file)
@@ -15,7 +15,6 @@ import java.io.IOException;
 import java.util.ArrayDeque;
 import java.util.Collection;
 import java.util.Deque;
-import java.util.HashSet;
 import java.util.Optional;
 import org.opendaylight.yangtools.odlext.model.api.YangModeledAnyXmlSchemaNode;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -228,11 +227,8 @@ public final class SchemaTracker {
         checkArgument(parent instanceof DataNodeContainer, "Augmentation allowed only in DataNodeContainer", parent);
         final AugmentationSchemaNode schema = SchemaUtils.findSchemaForAugment((AugmentationTarget) parent,
             identifier.getPossibleChildNames());
-        final HashSet<DataSchemaNode> realChildSchemas = new HashSet<>();
-        for (final DataSchemaNode child : schema.getChildNodes()) {
-            realChildSchemas.add(((DataNodeContainer) parent).getDataChildByName(child.getQName()));
-        }
-        final AugmentationSchemaNode resolvedSchema = new EffectiveAugmentationSchema(schema, realChildSchemas);
+        final AugmentationSchemaNode resolvedSchema = EffectiveAugmentationSchema.create(schema,
+            (DataNodeContainer) parent);
         schemaStack.push(resolvedSchema);
         return resolvedSchema;
     }
index 1e68bea9391f12f3961ea322e36c3083b2bb60ec..0977b9b04ea46c366a4ad2ca2f08e722973fc1f3 100644 (file)
@@ -16,12 +16,10 @@ import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
-import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.ModifyAction;
@@ -72,15 +70,6 @@ abstract class InstanceIdToCompositeNodes<T extends PathArgument> extends Instan
         return new AugmentationIdentifier(potentialChildren.build());
     }
 
-    private static DataNodeContainer augmentationProxy(final AugmentationSchemaNode augmentation,
-            final DataNodeContainer schema) {
-        final Set<DataSchemaNode> children = new HashSet<>();
-        for (final DataSchemaNode augNode : augmentation.getChildNodes()) {
-            children.add(schema.getDataChildByName(augNode.getQName()));
-        }
-        return new EffectiveAugmentationSchema(augmentation, children);
-    }
-
     @Override
     @SuppressWarnings("unchecked")
     public final NormalizedNode<?, ?> create(final YangInstanceIdentifier instanceId,
@@ -267,7 +256,7 @@ abstract class InstanceIdToCompositeNodes<T extends PathArgument> extends Instan
 
     static final class AugmentationNormalization extends DataContainerNormalizationOperation<AugmentationIdentifier> {
         AugmentationNormalization(final AugmentationSchemaNode augmentation, final DataNodeContainer schema) {
-            super(augmentationIdentifierFrom(augmentation), augmentationProxy(augmentation, schema));
+            super(augmentationIdentifierFrom(augmentation), EffectiveAugmentationSchema.create(augmentation, schema));
         }
 
         @Override
index d7232374f8d862343f51c47f72b23435e71173f3..223b92ab9bba6a507fdaac0610ea49fa3fb2262c 100644 (file)
@@ -9,8 +9,6 @@ package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-import java.util.HashSet;
-import java.util.Set;
 import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration;
@@ -18,14 +16,13 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContaine
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableAugmentationNodeBuilder;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
-import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.util.EffectiveAugmentationSchema;
 
 final class AugmentationModificationStrategy
         extends AbstractDataNodeContainerModificationStrategy<AugmentationSchemaNode> {
     AugmentationModificationStrategy(final AugmentationSchemaNode schema, final DataNodeContainer resolved,
             final DataTreeConfiguration treeConfig) {
-        super(createAugmentProxy(schema,resolved), AugmentationNode.class, treeConfig);
+        super(EffectiveAugmentationSchema.create(schema, resolved), AugmentationNode.class, treeConfig);
     }
 
     @Override
@@ -41,13 +38,4 @@ final class AugmentationModificationStrategy
         return ImmutableAugmentationNodeBuilder.create()
                 .withNodeIdentifier(((AugmentationNode) original).getIdentifier()).build();
     }
-
-    private static AugmentationSchemaNode createAugmentProxy(final AugmentationSchemaNode schema,
-            final DataNodeContainer resolved) {
-        final Set<DataSchemaNode> realChildSchemas = new HashSet<>();
-        for (final DataSchemaNode augChild : schema.getChildNodes()) {
-            realChildSchemas.add(resolved.getDataChildByName(augChild.getQName()));
-        }
-        return new EffectiveAugmentationSchema(schema, realChildSchemas);
-    }
-}
\ No newline at end of file
+}
index ebc18f27ff21c3c76c88b1b1f3db07fd7d48d4cb..15fb6a2d5f37aacc550917030cb73410d6edd7c3 100644 (file)
@@ -14,12 +14,11 @@ import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.AugmentationTarget;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.util.EffectiveAugmentationSchema;
 
-final class AugmentationContextNode extends
-        DataContainerContextNode<AugmentationIdentifier> {
-
+final class AugmentationContextNode extends DataContainerContextNode<AugmentationIdentifier> {
     AugmentationContextNode(final AugmentationSchemaNode augmentation, final DataNodeContainer schema) {
-        super(augmentationIdentifierFrom(augmentation), augmentationProxy(augmentation, schema), null);
+        super(augmentationIdentifierFrom(augmentation), EffectiveAugmentationSchema.create(augmentation, schema), null);
     }
 
     @Override
@@ -29,9 +28,9 @@ final class AugmentationContextNode extends
 
     @Override
     protected DataSchemaContextNode<?> fromLocalSchemaAndQName(final DataNodeContainer schema, final QName child) {
-        DataSchemaNode result = findChildSchemaNode(schema, child);
+        final DataSchemaNode result = findChildSchemaNode(schema, child);
         // We try to look up if this node was added by augmentation
-        if ((schema instanceof DataSchemaNode) && result.isAugmenting()) {
+        if (schema instanceof DataSchemaNode && result.isAugmenting()) {
             return fromAugmentation(schema, (AugmentationTarget) schema, result);
         }
         return fromDataSchemaNode(result);
@@ -41,5 +40,4 @@ final class AugmentationContextNode extends
     protected Set<QName> getQNameIdentifiers() {
         return getIdentifier().getPossibleChildNames();
     }
-
 }
index 22b93d8621aca0727d02a63c8da448a1593fcff2..1b4814c80d2677916140bbd3b5029d6a9549f650 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.yangtools.yang.data.util;
 
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableSet;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
@@ -78,7 +77,7 @@ public abstract class DataSchemaContextNode<T extends PathArgument> implements I
      * Find a child node identifier by its {@link PathArgument}.
      *
      * @param child Child path argument
-     * @return
+     * @return A child node, or null if not found
      */
     @Nullable public abstract DataSchemaContextNode<?> getChild(PathArgument child);
 
@@ -147,13 +146,19 @@ public abstract class DataSchemaContextNode<T extends PathArgument> implements I
         return new AugmentationIdentifier(potentialChildren.build());
     }
 
-    static DataNodeContainer augmentationProxy(final AugmentationSchemaNode augmentation,
-            final DataNodeContainer schema) {
-        Set<DataSchemaNode> children = new HashSet<>();
-        for (DataSchemaNode augNode : augmentation.getChildNodes()) {
-            children.add(schema.getDataChildByName(augNode.getQName()));
-        }
-        return new EffectiveAugmentationSchema(augmentation, children);
+    /**
+     * Returns an AugmentationSchemaNode as effective in a parent node.
+     *
+     * @param schema Augmentation schema
+     * @param parent Parent schema
+     * @return Adjusted Augmentation schema
+     * @throws NullPointerException if any of the arguments is null
+     * @deprecated Use {@link EffectiveAugmentationSchema#create(AugmentationSchemaNode, DataNodeContainer)} instead.
+     */
+    @Deprecated
+    public static AugmentationSchemaNode augmentationProxy(final AugmentationSchemaNode schema,
+            final DataNodeContainer parent) {
+        return EffectiveAugmentationSchema.create(schema, parent);
     }
 
     /**
index 179f295c3d768aa25c3d15cfa07f883df287304f..b031e299e9ed096b2efdb1b9c1e80b304ea94d28 100644 (file)
@@ -12,6 +12,7 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -19,6 +20,7 @@ import java.util.Set;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
@@ -50,6 +52,22 @@ public final class EffectiveAugmentationSchema implements AugmentationSchemaNode
         this.mappedChildSchemas = ImmutableMap.copyOf(m);
     }
 
+    /**
+     * Returns an AugmentationSchemaNode as effective in a parent node.
+     *
+     * @param schema Augmentation schema
+     * @param parent Parent schema
+     * @return Adjusted Augmentation schema
+     * @throws NullPointerException if any of the arguments is null
+     */
+    public static AugmentationSchemaNode create(final AugmentationSchemaNode schema, final DataNodeContainer parent) {
+        Set<DataSchemaNode> children = new HashSet<>();
+        for (DataSchemaNode augNode : schema.getChildNodes()) {
+            children.add(parent.getDataChildByName(augNode.getQName()));
+        }
+        return new EffectiveAugmentationSchema(schema, children);
+    }
+
     @Override
     public Optional<RevisionAwareXPath> getWhenCondition() {
         return delegate.getWhenCondition();