From 74ed5b525c1474eb10e3396a307578738bc38040 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 3 Aug 2018 11:34:53 +0200 Subject: [PATCH] Remove duplicate instantiation of EffectiveAugmentationSchema 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 --- .../yang/data/impl/codec/SchemaTracker.java | 8 ++----- .../schema/InstanceIdToCompositeNodes.java | 13 +---------- .../AugmentationModificationStrategy.java | 16 ++----------- .../data/util/AugmentationContextNode.java | 12 ++++------ .../yang/data/util/DataSchemaContextNode.java | 23 +++++++++++-------- .../util/EffectiveAugmentationSchema.java | 18 +++++++++++++++ 6 files changed, 42 insertions(+), 48 deletions(-) diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/SchemaTracker.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/SchemaTracker.java index 41a412c911..4f531089b2 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/SchemaTracker.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/SchemaTracker.java @@ -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 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; } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToCompositeNodes.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToCompositeNodes.java index 1e68bea939..0977b9b04e 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToCompositeNodes.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToCompositeNodes.java @@ -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 extends Instan return new AugmentationIdentifier(potentialChildren.build()); } - private static DataNodeContainer augmentationProxy(final AugmentationSchemaNode augmentation, - final DataNodeContainer schema) { - final Set 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 extends Instan static final class AugmentationNormalization extends DataContainerNormalizationOperation { AugmentationNormalization(final AugmentationSchemaNode augmentation, final DataNodeContainer schema) { - super(augmentationIdentifierFrom(augmentation), augmentationProxy(augmentation, schema)); + super(augmentationIdentifierFrom(augmentation), EffectiveAugmentationSchema.create(augmentation, schema)); } @Override diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AugmentationModificationStrategy.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AugmentationModificationStrategy.java index d7232374f8..223b92ab9b 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AugmentationModificationStrategy.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AugmentationModificationStrategy.java @@ -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 { 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 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 +} diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AugmentationContextNode.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AugmentationContextNode.java index ebc18f27ff..15fb6a2d5f 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AugmentationContextNode.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AugmentationContextNode.java @@ -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 { - +final class AugmentationContextNode extends DataContainerContextNode { 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 getQNameIdentifiers() { return getIdentifier().getPossibleChildNames(); } - } diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/DataSchemaContextNode.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/DataSchemaContextNode.java index 22b93d8621..1b4814c80d 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/DataSchemaContextNode.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/DataSchemaContextNode.java @@ -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 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 implements I return new AugmentationIdentifier(potentialChildren.build()); } - static DataNodeContainer augmentationProxy(final AugmentationSchemaNode augmentation, - final DataNodeContainer schema) { - Set 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); } /** diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/EffectiveAugmentationSchema.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/EffectiveAugmentationSchema.java index 179f295c3d..b031e299e9 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/EffectiveAugmentationSchema.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/EffectiveAugmentationSchema.java @@ -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 children = new HashSet<>(); + for (DataSchemaNode augNode : schema.getChildNodes()) { + children.add(parent.getDataChildByName(augNode.getQName())); + } + return new EffectiveAugmentationSchema(schema, children); + } + @Override public Optional getWhenCondition() { return delegate.getWhenCondition(); -- 2.36.6