From fd5c52cfb196a8d1dd6d6f2fb94f9a395c28afa7 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 6 Feb 2019 02:13:22 +0100 Subject: [PATCH] SchemaAwareApplyOperation has getSchema() Obviously, if an ModificationApplyOperation knows abouts its schema it should expose it through getSchema(). This allows us to concentrate fields a bit. Change-Id: I9656b28dfb32fe7951e3ccd32b43eabe4427929f Signed-off-by: Robert Varga --- ...ractNodeContainerModificationStrategy.java | 49 ++++++++++++++++++- .../tree/ChoiceModificationStrategy.java | 8 +-- ...DataNodeContainerModificationStrategy.java | 19 +++---- .../tree/LeafSetModificationStrategy.java | 11 ++--- .../tree/ListEntryModificationStrategy.java | 4 +- .../schema/tree/MapModificationStrategy.java | 18 +++---- .../schema/tree/MinMaxElementsValidation.java | 6 +-- .../tree/SchemaAwareApplyOperation.java | 14 ++++-- .../tree/UnkeyedListModificationStrategy.java | 13 +++-- .../tree/ValueNodeModificationStrategy.java | 10 +++- 10 files changed, 105 insertions(+), 47 deletions(-) diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractNodeContainerModificationStrategy.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractNodeContainerModificationStrategy.java index 5a8e1d28bd..c7686895fd 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractNodeContainerModificationStrategy.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractNodeContainerModificationStrategy.java @@ -15,6 +15,7 @@ import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.Verify; import java.util.Collection; import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -29,8 +30,54 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.TreeNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.TreeNodeFactory; import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.Version; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder; +import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus; + +abstract class AbstractNodeContainerModificationStrategy + extends SchemaAwareApplyOperation { + abstract static class Invisible extends AbstractNodeContainerModificationStrategy { + private final @NonNull SchemaAwareApplyOperation entryStrategy; + + Invisible(final NormalizedNodeContainerSupport support, final DataTreeConfiguration treeConfig, + final SchemaAwareApplyOperation entryStrategy) { + super(support, treeConfig); + this.entryStrategy = requireNonNull(entryStrategy); + } + + @Override + final T getSchema() { + return entryStrategy.getSchema(); + } + + final Optional entryStrategy() { + return Optional.of(entryStrategy); + } + + @Override + ToStringHelper addToStringAttributes(final ToStringHelper helper) { + return super.addToStringAttributes(helper).add("entry", entryStrategy); + } + } + + abstract static class Visible extends AbstractNodeContainerModificationStrategy { + private final @NonNull T schema; + + Visible(final NormalizedNodeContainerSupport support, final DataTreeConfiguration treeConfig, + final T schema) { + super(support, treeConfig); + this.schema = requireNonNull(schema); + } + + @Override + final T getSchema() { + return schema; + } + + @Override + ToStringHelper addToStringAttributes(final ToStringHelper helper) { + return super.addToStringAttributes(helper).add("schema", schema); + } + } -abstract class AbstractNodeContainerModificationStrategy extends SchemaAwareApplyOperation { private final NormalizedNodeContainerSupport support; private final boolean verifyChildrenStructure; diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ChoiceModificationStrategy.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ChoiceModificationStrategy.java index a03c21e7e8..4052f0db9a 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ChoiceModificationStrategy.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ChoiceModificationStrategy.java @@ -19,6 +19,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; @@ -32,12 +33,13 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.TreeNode; 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.ImmutableChoiceNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.Visible; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode; import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; -final class ChoiceModificationStrategy extends AbstractNodeContainerModificationStrategy { +final class ChoiceModificationStrategy extends Visible { private static final NormalizedNodeContainerSupport SUPPORT = new NormalizedNodeContainerSupport<>(ChoiceNode.class, ImmutableChoiceNodeBuilder::create, ImmutableChoiceNodeBuilder::create); @@ -46,10 +48,10 @@ final class ChoiceModificationStrategy extends AbstractNodeContainerModification // FIXME: enforce leaves not coming from two case statements at the same time private final ImmutableMap> exclusions; private final ImmutableMap caseEnforcers; - private final ChoiceNode emptyNode; + private final @NonNull ChoiceNode emptyNode; ChoiceModificationStrategy(final ChoiceSchemaNode schema, final DataTreeConfiguration treeConfig) { - super(SUPPORT, treeConfig); + super(SUPPORT, treeConfig, schema); final Builder childBuilder = ImmutableMap.builder(); final Builder enforcerBuilder = ImmutableMap.builder(); diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/DataNodeContainerModificationStrategy.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/DataNodeContainerModificationStrategy.java index 912bca8859..00d752b194 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/DataNodeContainerModificationStrategy.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/DataNodeContainerModificationStrategy.java @@ -9,18 +9,20 @@ package org.opendaylight.yangtools.yang.data.impl.schema.tree; import static java.util.Objects.requireNonNull; -import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; import java.util.Optional; import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; +import org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.Visible; 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.api.DocumentedNode.WithStatus; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,12 +32,10 @@ import org.slf4j.LoggerFactory; * * @param Type of the container node */ -class DataNodeContainerModificationStrategy - extends AbstractNodeContainerModificationStrategy { +class DataNodeContainerModificationStrategy extends Visible { private static final Logger LOG = LoggerFactory.getLogger(DataNodeContainerModificationStrategy.class); - private final DataTreeConfiguration treeConfig; - private final T schema; + private final @NonNull DataTreeConfiguration treeConfig; @SuppressWarnings("rawtypes") private static final AtomicReferenceFieldUpdater UPDATER = @@ -45,8 +45,7 @@ class DataNodeContainerModificationStrategy DataNodeContainerModificationStrategy(final NormalizedNodeContainerSupport support, final T schema, final DataTreeConfiguration treeConfig) { - super(support, treeConfig); - this.schema = requireNonNull(schema, "schema"); + super(support, treeConfig, schema); this.treeConfig = requireNonNull(treeConfig, "treeConfig"); } @@ -63,6 +62,7 @@ class DataNodeContainerModificationStrategy } private ModificationApplyOperation resolveChild(final PathArgument identifier) { + final T schema = getSchema(); if (identifier instanceof AugmentationIdentifier && schema instanceof AugmentationTarget) { return SchemaAwareApplyOperation.from(schema, (AugmentationTarget) schema, (AugmentationIdentifier) identifier, treeConfig); @@ -111,9 +111,4 @@ class DataNodeContainerModificationStrategy } } } - - @Override - ToStringHelper addToStringAttributes(final ToStringHelper helper) { - return super.addToStringAttributes(helper).add("schema", schema); - } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/LeafSetModificationStrategy.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/LeafSetModificationStrategy.java index 69fe07e764..0ff785aa07 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/LeafSetModificationStrategy.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/LeafSetModificationStrategy.java @@ -17,9 +17,10 @@ import org.opendaylight.yangtools.yang.data.api.schema.OrderedLeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedLeafSetNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.Invisible; import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; -final class LeafSetModificationStrategy extends AbstractNodeContainerModificationStrategy { +final class LeafSetModificationStrategy extends Invisible { @SuppressWarnings({ "unchecked", "rawtypes" }) private static final NormalizedNodeContainerSupport> ORDERED_SUPPORT = new NormalizedNodeContainerSupport(OrderedLeafSetNode.class, ChildTrackingPolicy.ORDERED, @@ -31,15 +32,13 @@ final class LeafSetModificationStrategy extends AbstractNodeContainerModificatio foo -> ImmutableLeafSetNodeBuilder.create((LeafSetNode)foo), ImmutableLeafSetNodeBuilder::create); - private final Optional entryStrategy; - LeafSetModificationStrategy(final LeafListSchemaNode schema, final DataTreeConfiguration treeConfig) { - super(schema.isUserOrdered() ? ORDERED_SUPPORT : UNORDERED_SUPPORT, treeConfig); - entryStrategy = Optional.of(new ValueNodeModificationStrategy<>(LeafSetEntryNode.class, schema)); + super(schema.isUserOrdered() ? ORDERED_SUPPORT : UNORDERED_SUPPORT, treeConfig, + new ValueNodeModificationStrategy<>(LeafSetEntryNode.class, schema)); } @Override public Optional getChild(final PathArgument identifier) { - return identifier instanceof NodeWithValue ? entryStrategy : Optional.empty(); + return identifier instanceof NodeWithValue ? entryStrategy() : Optional.empty(); } } \ No newline at end of file diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ListEntryModificationStrategy.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ListEntryModificationStrategy.java index 825a77dded..3d135f25d9 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ListEntryModificationStrategy.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ListEntryModificationStrategy.java @@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.data.impl.schema.tree; import static java.util.Objects.requireNonNull; import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -67,7 +68,8 @@ class ListEntryModificationStrategy extends DataNodeContainerModificationStrateg super(SUPPORT, schema, treeConfig); } - static ListEntryModificationStrategy of(final ListSchemaNode schema, final DataTreeConfiguration treeConfig) { + static @NonNull ListEntryModificationStrategy of(final ListSchemaNode schema, + final DataTreeConfiguration treeConfig) { final Optional enforcer = MandatoryLeafEnforcer.forContainer(schema, treeConfig); return enforcer.isPresent() ? new EnforcingMandatory(schema, treeConfig, enforcer.get()) : new ListEntryModificationStrategy(schema, treeConfig); diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MapModificationStrategy.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MapModificationStrategy.java index ae65ef8a82..c523802a1e 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MapModificationStrategy.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MapModificationStrategy.java @@ -9,8 +9,8 @@ package org.opendaylight.yangtools.yang.data.impl.schema.tree; import static java.util.Objects.requireNonNull; -import com.google.common.base.MoreObjects.ToStringHelper; import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; 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; @@ -23,9 +23,10 @@ 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.AbstractNodeContainerModificationStrategy.Invisible; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; -final class MapModificationStrategy extends AbstractNodeContainerModificationStrategy { +final class MapModificationStrategy extends Invisible { private static final NormalizedNodeContainerSupport ORDERED_SUPPORT = new NormalizedNodeContainerSupport<>(OrderedMapNode.class, ChildTrackingPolicy.ORDERED, ImmutableOrderedMapNodeBuilder::create, ImmutableOrderedMapNodeBuilder::create); @@ -33,14 +34,12 @@ final class MapModificationStrategy extends AbstractNodeContainerModificationStr new NormalizedNodeContainerSupport<>(MapNode.class, ImmutableMapNodeBuilder::create, ImmutableMapNodeBuilder::create); - private final Optional entryStrategy; - private final MapNode emptyNode; + private final @NonNull MapNode emptyNode; private MapModificationStrategy(final NormalizedNodeContainerSupport support, final ListSchemaNode schema, final DataTreeConfiguration treeConfig, final MapNode emptyNode) { - super(support, treeConfig); + super(support, treeConfig, ListEntryModificationStrategy.of(schema, treeConfig)); this.emptyNode = requireNonNull(emptyNode); - entryStrategy = Optional.of(ListEntryModificationStrategy.of(schema, treeConfig)); } static MapModificationStrategy of(final ListSchemaNode schema, final DataTreeConfiguration treeConfig) { @@ -58,7 +57,7 @@ final class MapModificationStrategy extends AbstractNodeContainerModificationStr @Override public Optional getChild(final YangInstanceIdentifier.PathArgument identifier) { - return identifier instanceof NodeIdentifierWithPredicates ? entryStrategy : Optional.empty(); + return identifier instanceof NodeIdentifierWithPredicates ? entryStrategy() : Optional.empty(); } @Override @@ -74,9 +73,4 @@ final class MapModificationStrategy extends AbstractNodeContainerModificationStr AutomaticLifecycleMixin.checkApplicable(super::checkApplicable, emptyNode, path, modification, current, version); } - - @Override - ToStringHelper addToStringAttributes(final ToStringHelper helper) { - return super.addToStringAttributes(helper).add("entry", entryStrategy.get()); - } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MinMaxElementsValidation.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MinMaxElementsValidation.java index 8da7307041..f63cbd05db 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MinMaxElementsValidation.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MinMaxElementsValidation.java @@ -28,18 +28,18 @@ import org.slf4j.LoggerFactory; final class MinMaxElementsValidation extends DelegatingModificationApplyOperation { private static final Logger LOG = LoggerFactory.getLogger(MinMaxElementsValidation.class); - private final SchemaAwareApplyOperation delegate; + private final SchemaAwareApplyOperation delegate; private final int minElements; private final int maxElements; - private MinMaxElementsValidation(final SchemaAwareApplyOperation delegate, final Integer minElements, + private MinMaxElementsValidation(final SchemaAwareApplyOperation delegate, final Integer minElements, final Integer maxElements) { this.delegate = requireNonNull(delegate); this.minElements = minElements != null ? minElements : 0; this.maxElements = maxElements != null ? maxElements : Integer.MAX_VALUE; } - static ModificationApplyOperation from(final SchemaAwareApplyOperation delegate, final DataSchemaNode schema) { + static ModificationApplyOperation from(final SchemaAwareApplyOperation delegate, final DataSchemaNode schema) { if (!(schema instanceof ElementCountConstraintAware)) { return delegate; } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/SchemaAwareApplyOperation.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/SchemaAwareApplyOperation.java index 56ca5b69a0..3baed737a8 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/SchemaAwareApplyOperation.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/SchemaAwareApplyOperation.java @@ -12,6 +12,7 @@ import static com.google.common.base.Verify.verifyNotNull; import java.util.List; import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; @@ -30,13 +31,14 @@ import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus; import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -abstract class SchemaAwareApplyOperation extends ModificationApplyOperation { +abstract class SchemaAwareApplyOperation extends ModificationApplyOperation { private static final Logger LOG = LoggerFactory.getLogger(SchemaAwareApplyOperation.class); public static ModificationApplyOperation from(final DataSchemaNode schemaNode, @@ -59,7 +61,7 @@ abstract class SchemaAwareApplyOperation extends ModificationApplyOperation { throw new IllegalArgumentException("Not supported schema node type for " + schemaNode.getClass()); } - public static SchemaAwareApplyOperation from(final DataNodeContainer resolvedTree, + public static AugmentationModificationStrategy from(final DataNodeContainer resolvedTree, final AugmentationTarget augSchemas, final AugmentationIdentifier identifier, final DataTreeConfiguration treeConfig) { for (final AugmentationSchemaNode potential : augSchemas.getAvailableAugmentations()) { @@ -83,7 +85,7 @@ abstract class SchemaAwareApplyOperation extends ModificationApplyOperation { private static ModificationApplyOperation fromListSchemaNode(final ListSchemaNode schemaNode, final DataTreeConfiguration treeConfig) { final List keyDefinition = schemaNode.getKeyDefinition(); - final SchemaAwareApplyOperation op; + final SchemaAwareApplyOperation op; if (keyDefinition == null || keyDefinition.isEmpty()) { op = new UnkeyedListModificationStrategy(schemaNode, treeConfig); } else { @@ -290,6 +292,12 @@ abstract class SchemaAwareApplyOperation extends ModificationApplyOperation { protected abstract void checkTouchApplicable(ModificationPath path, NodeModification modification, Optional current, Version version) throws DataValidationFailedException; + /** + * Return the {@link WithStatus}-subclass schema associated with this operation. + * @return A model node + */ + abstract @NonNull T getSchema(); + /** * Checks if supplied schema node belong to specified Data Tree type. All nodes belong to the operational tree, * nodes in configuration tree are marked as such. diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/UnkeyedListModificationStrategy.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/UnkeyedListModificationStrategy.java index eae59539a7..d49b4a6b7e 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/UnkeyedListModificationStrategy.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/UnkeyedListModificationStrategy.java @@ -25,19 +25,24 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNo import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListEntryNodeBuilder; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; -final class UnkeyedListModificationStrategy extends SchemaAwareApplyOperation { +final class UnkeyedListModificationStrategy extends SchemaAwareApplyOperation { private static final NormalizedNodeContainerSupport ITEM_SUPPORT = new NormalizedNodeContainerSupport<>(UnkeyedListEntryNode.class, ImmutableUnkeyedListEntryNodeBuilder::create, ImmutableUnkeyedListEntryNodeBuilder::create); - private final Optional entryStrategy; + private final DataNodeContainerModificationStrategy entryStrategy; private final UnkeyedListNode emptyNode; UnkeyedListModificationStrategy(final ListSchemaNode schema, final DataTreeConfiguration treeConfig) { - entryStrategy = Optional.of(new DataNodeContainerModificationStrategy<>(ITEM_SUPPORT, schema, treeConfig)); + entryStrategy = new DataNodeContainerModificationStrategy<>(ITEM_SUPPORT, schema, treeConfig); emptyNode = ImmutableNodes.listNode(schema.getQName()); } + @Override + ListSchemaNode getSchema() { + return entryStrategy.getSchema(); + } + @Override Optional apply(final ModifiedNode modification, final Optional storeMeta, final Version version) { @@ -132,7 +137,7 @@ final class UnkeyedListModificationStrategy extends SchemaAwareApplyOperation { @Override public Optional getChild(final PathArgument child) { - return child instanceof NodeIdentifier ? entryStrategy : Optional.empty(); + return child instanceof NodeIdentifier ? Optional.of(entryStrategy) : Optional.empty(); } @Override diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ValueNodeModificationStrategy.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ValueNodeModificationStrategy.java index 6287ed6721..6b03863c12 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ValueNodeModificationStrategy.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ValueNodeModificationStrategy.java @@ -11,6 +11,7 @@ import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.ValueNode; @@ -21,15 +22,20 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.TreeNodeFactory; import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.Version; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; -final class ValueNodeModificationStrategy extends SchemaAwareApplyOperation { +final class ValueNodeModificationStrategy extends SchemaAwareApplyOperation { private final Class nodeClass; - private final T schema; + private final @NonNull T schema; ValueNodeModificationStrategy(final Class nodeClass, final T schema) { this.nodeClass = requireNonNull(nodeClass); this.schema = requireNonNull(schema); } + @Override + T getSchema() { + return schema; + } + @Override public Optional getChild(final PathArgument child) { throw new UnsupportedOperationException("Node " + schema.getPath() -- 2.36.6