From ecb5cc29ccac889a79c0c1fbaeac0d8e7bddf7ff Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 17 Jun 2015 09:59:30 +0200 Subject: [PATCH] Introduce isMixin() Instead of using a marker interface, expose an explicit method. Change-Id: I59ea238634fecfee7acc745700850c84fc7ca348 Signed-off-by: Robert Varga --- .../schema/InstanceIdToCompositeNodes.java | 71 +++++++++++++++---- .../data/impl/schema/InstanceIdToNodes.java | 30 ++++---- .../impl/schema/InstanceIdToSimpleNodes.java | 10 ++- 3 files changed, 81 insertions(+), 30 deletions(-) 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 6fe2ca12c0..6b55716481 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 @@ -30,10 +30,19 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; +import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.AttributesBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; @@ -77,7 +86,7 @@ abstract class InstanceIdToCompositeNodes extends Instan final Iterator iterator = instanceId.getPathArguments().iterator(); final PathArgument legacyData = iterator.next(); - if (!isMixin(this) && getIdentifier().getNodeType() != null) { + if (!isMixin() && getIdentifier().getNodeType() != null) { checkArgument(getIdentifier().getNodeType().equals(legacyData.getNodeType()), "Node QName must be %s was %s", getIdentifier().getNodeType(), legacyData.getNodeType()); } @@ -159,7 +168,7 @@ abstract class InstanceIdToCompositeNodes extends Instan } @Override - protected NormalizedNodeContainerBuilder createBuilder(final PathArgument currentArg) { + protected DataContainerNodeAttrBuilder createBuilder(final PathArgument currentArg) { final DataContainerNodeAttrBuilder builder = Builders .mapEntryBuilder().withNodeIdentifier((NodeIdentifierWithPredicates) currentArg); for (final Map.Entry keyValue : ((NodeIdentifierWithPredicates) currentArg).getKeyValues().entrySet()) { @@ -171,6 +180,10 @@ abstract class InstanceIdToCompositeNodes extends Instan return builder; } + @Override + boolean isMixin() { + return false; + } } static final class UnkeyedListItemNormalization extends DataContainerNormalizationOperation { @@ -180,22 +193,30 @@ abstract class InstanceIdToCompositeNodes extends Instan } @Override - protected NormalizedNodeContainerBuilder createBuilder(final PathArgument compositeNode) { + protected DataContainerNodeAttrBuilder createBuilder(final PathArgument compositeNode) { return Builders.unkeyedListEntryBuilder().withNodeIdentifier(getIdentifier()); } + @Override + boolean isMixin() { + return false; + } } static final class ContainerTransformation extends DataContainerNormalizationOperation { - protected ContainerTransformation(final ContainerSchemaNode schema) { super(new NodeIdentifier(schema.getQName()), schema); } @Override - protected NormalizedNodeContainerBuilder createBuilder(final PathArgument compositeNode) { + protected DataContainerNodeAttrBuilder createBuilder(final PathArgument compositeNode) { return Builders.containerBuilder().withNodeIdentifier(getIdentifier()); } + + @Override + boolean isMixin() { + return false; + } } static final class OrderedLeafListMixinNormalization extends UnorderedLeafListMixinNormalization { @@ -206,12 +227,12 @@ abstract class InstanceIdToCompositeNodes extends Instan } @Override - protected NormalizedNodeContainerBuilder createBuilder(final PathArgument compositeNode) { + protected ListNodeBuilder createBuilder(final PathArgument compositeNode) { return Builders.orderedLeafSetBuilder().withNodeIdentifier(getIdentifier()); } } - static class UnorderedLeafListMixinNormalization extends InstanceIdToCompositeNodes implements MixinNormalizationOp { + static class UnorderedLeafListMixinNormalization extends InstanceIdToCompositeNodes { private final InstanceIdToNodes innerOp; @@ -221,7 +242,7 @@ abstract class InstanceIdToCompositeNodes extends Instan } @Override - protected NormalizedNodeContainerBuilder createBuilder(final PathArgument compositeNode) { + protected ListNodeBuilder createBuilder(final PathArgument compositeNode) { return Builders.leafSetBuilder().withNodeIdentifier(getIdentifier()); } @@ -232,21 +253,31 @@ abstract class InstanceIdToCompositeNodes extends Instan } return null; } + + @Override + boolean isMixin() { + return true; + } } - static final class AugmentationNormalization extends DataContainerNormalizationOperation implements MixinNormalizationOp { + static final class AugmentationNormalization extends DataContainerNormalizationOperation { public AugmentationNormalization(final AugmentationSchema augmentation, final DataNodeContainer schema) { super(augmentationIdentifierFrom(augmentation), augmentationProxy(augmentation, schema)); } @Override - protected NormalizedNodeContainerBuilder createBuilder(final PathArgument compositeNode) { + protected DataContainerNodeBuilder createBuilder(final PathArgument compositeNode) { return Builders.augmentationBuilder().withNodeIdentifier(getIdentifier()); } + + @Override + boolean isMixin() { + return true; + } } - static class UnorderedMapMixinNormalization extends InstanceIdToCompositeNodes implements MixinNormalizationOp { + static class UnorderedMapMixinNormalization extends InstanceIdToCompositeNodes { private final ListItemNormalization innerNode; @@ -257,7 +288,7 @@ abstract class InstanceIdToCompositeNodes extends Instan } @Override - protected NormalizedNodeContainerBuilder createBuilder(final PathArgument compositeNode) { + protected CollectionNodeBuilder createBuilder(final PathArgument compositeNode) { return Builders.mapBuilder().withNodeIdentifier(getIdentifier()); } @@ -268,6 +299,11 @@ abstract class InstanceIdToCompositeNodes extends Instan } return null; } + + @Override + boolean isMixin() { + return true; + } } static final class OrderedMapMixinNormalization extends UnorderedMapMixinNormalization { @@ -277,13 +313,13 @@ abstract class InstanceIdToCompositeNodes extends Instan } @Override - protected NormalizedNodeContainerBuilder createBuilder(final PathArgument compositeNode) { + protected CollectionNodeBuilder createBuilder(final PathArgument compositeNode) { return Builders.orderedMapBuilder().withNodeIdentifier(getIdentifier()); } } - static class ChoiceNodeNormalization extends InstanceIdToCompositeNodes implements MixinNormalizationOp { + static final class ChoiceNodeNormalization extends InstanceIdToCompositeNodes { private final ImmutableMap> byArg; @@ -306,8 +342,13 @@ abstract class InstanceIdToCompositeNodes extends Instan } @Override - protected NormalizedNodeContainerBuilder createBuilder(final PathArgument compositeNode) { + protected DataContainerNodeBuilder createBuilder(final PathArgument compositeNode) { return Builders.choiceBuilder().withNodeIdentifier(getIdentifier()); } + + @Override + boolean isMixin() { + return true; + } } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodes.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodes.java index 0185f57cd4..d6703312a4 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodes.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodes.java @@ -22,9 +22,11 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.AttributesBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeAttrBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder; import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; import org.opendaylight.yangtools.yang.model.api.AugmentationTarget; @@ -46,7 +48,7 @@ abstract class InstanceIdToNodes implements Identifiable private final T identifier; @Override - public T getIdentifier() { + public final T getIdentifier() { return identifier; } @@ -73,6 +75,7 @@ abstract class InstanceIdToNodes implements Identifiable */ abstract NormalizedNode create(YangInstanceIdentifier instanceId, Optional> deepestChild, Optional> operation); + abstract boolean isMixin(); public void addModifyOpIfPresent(final Optional> operation, final AttributesBuilder builder) { if(operation.isPresent()) { @@ -84,17 +87,7 @@ abstract class InstanceIdToNodes implements Identifiable return operation.name().toLowerCase(); } - static boolean isMixin(final InstanceIdToNodes op) { - return op instanceof MixinNormalizationOp; - } - - /** - * Marker interface for Mixin nodes normalization operations - */ - interface MixinNormalizationOp {} - - - private static class UnkeyedListMixinNormalization extends InstanceIdToCompositeNodes implements MixinNormalizationOp { + private final static class UnkeyedListMixinNormalization extends InstanceIdToCompositeNodes { private final UnkeyedListItemNormalization innerNode; @@ -104,7 +97,7 @@ abstract class InstanceIdToNodes implements Identifiable } @Override - protected NormalizedNodeContainerBuilder createBuilder(final PathArgument compositeNode) { + protected CollectionNodeBuilder createBuilder(final PathArgument compositeNode) { return Builders.unkeyedListBuilder().withNodeIdentifier(getIdentifier()); } @@ -115,6 +108,11 @@ abstract class InstanceIdToNodes implements Identifiable } return null; } + + @Override + boolean isMixin() { + return true; + } } private static class AnyXmlNormalization extends InstanceIdToNodes { @@ -144,6 +142,10 @@ abstract class InstanceIdToNodes implements Identifiable return builder.build(); } + @Override + boolean isMixin() { + return false; + } } private static Optional findChildSchemaNode(final DataNodeContainer parent, final QName child) { diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToSimpleNodes.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToSimpleNodes.java index 5f19939531..ab62d4cc28 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToSimpleNodes.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToSimpleNodes.java @@ -8,7 +8,6 @@ package org.opendaylight.yangtools.yang.data.impl.schema; import static com.google.common.base.Preconditions.checkNotNull; - import com.google.common.base.Optional; import com.google.common.base.Preconditions; import java.util.Map; @@ -62,6 +61,11 @@ abstract class InstanceIdToSimpleNodes> getBuilder(final YangInstanceIdentifier.PathArgument node) { return Builders.leafBuilder().withNodeIdentifier(getIdentifier()); } + + @Override + boolean isMixin() { + return false; + } } static final class LeafListEntryNormalization extends InstanceIdToSimpleNodes { @@ -76,5 +80,9 @@ abstract class InstanceIdToSimpleNodes