+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.data.impl.schema.tree;
-
-import java.util.Optional;
-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.LeafSetNode;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration;
-import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
-
-abstract class AbstractLeafSetModificationStrategy extends AbstractNodeContainerModificationStrategy {
- private final Optional<ModificationApplyOperation> entryStrategy;
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
- AbstractLeafSetModificationStrategy(final LeafListSchemaNode schema, final DataTreeConfiguration treeConfig) {
- super((Class) LeafSetNode.class, treeConfig);
- entryStrategy = Optional.of(new LeafSetEntryModificationStrategy(schema));
- }
-
- @Override
- public final Optional<ModificationApplyOperation> getChild(final PathArgument identifier) {
- return identifier instanceof NodeWithValue ? entryStrategy : Optional.empty();
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2019 Pantheon Technologies, s.r.o. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.data.impl.schema.tree;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-import com.google.common.base.MoreObjects;
-import java.util.Optional;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-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.MapNode;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder;
-import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
-
-// FIXME: createBuilder(), createEmptyValue() and getChild() here are hacks, originally introduced in
-// Change-Id: I9dc02a1917f38e8a0d62279843974b9869c48693. DataTreeRoot needs to be fixed up to properly
-// handle the lookup of through maps.
-abstract class AbstractMapModificationStrategy extends AbstractNodeContainerModificationStrategy {
- final Optional<ModificationApplyOperation> entryStrategy;
-
- AbstractMapModificationStrategy(final Class<? extends MapNode> nodeClass, final ListSchemaNode schema,
- final DataTreeConfiguration treeConfig) {
- super(nodeClass, treeConfig);
- entryStrategy = Optional.of(ListEntryModificationStrategy.of(schema, treeConfig));
- }
-
- @Override
- @SuppressWarnings("rawtypes")
- protected NormalizedNodeContainerBuilder createBuilder(final NormalizedNode<?, ?> original) {
- return ImmutableMapEntryNodeBuilder.create(checkCast(original));
- }
-
- @Override
- protected NormalizedNode<?, ?> createEmptyValue(final NormalizedNode<?, ?> original) {
- return ImmutableMapEntryNodeBuilder.create().withNodeIdentifier(checkCast(original).getIdentifier()).build();
- }
-
- @Override
- public final 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);
- }
-
- @Override
- public final String toString() {
- return MoreObjects.toStringHelper(this).add("entry", entryStrategy.get()).toString();
- }
-
- private static MapEntryNode checkCast(final NormalizedNode<?, ?> original) {
- checkArgument(original instanceof MapEntryNode,
- "MapModification strategy can only handle MapNode or MapEntryNodes, offending node: %s", original);
- return (MapEntryNode) original;
- }
-}
package org.opendaylight.yangtools.yang.data.impl.schema.tree;
import static com.google.common.base.Preconditions.checkArgument;
+import static java.util.Objects.requireNonNull;
-import com.google.common.base.Preconditions;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.MoreObjects.ToStringHelper;
import com.google.common.base.Verify;
import java.util.Collection;
import java.util.Optional;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
abstract class AbstractNodeContainerModificationStrategy extends SchemaAwareApplyOperation {
-
- private final Class<? extends NormalizedNode<?, ?>> nodeClass;
+ private final NormalizedNodeContainerSupport<?, ?> support;
private final boolean verifyChildrenStructure;
- protected AbstractNodeContainerModificationStrategy(final Class<? extends NormalizedNode<?, ?>> nodeClass,
+ AbstractNodeContainerModificationStrategy(final NormalizedNodeContainerSupport<?, ?> support,
final DataTreeConfiguration treeConfig) {
- this.nodeClass = Preconditions.checkNotNull(nodeClass , "nodeClass");
+ this.support = requireNonNull(support);
this.verifyChildrenStructure = treeConfig.getTreeType() == TreeType.CONFIGURATION;
}
+ @Override
+ protected final ChildTrackingPolicy getChildPolicy() {
+ return support.childPolicy;
+ }
+
@Override
void verifyStructure(final NormalizedNode<?, ?> writtenValue, final boolean verifyChildren) {
+ final Class<?> nodeClass = support.requiredClass;
checkArgument(nodeClass.isInstance(writtenValue), "Node %s is not of type %s", writtenValue, nodeClass);
checkArgument(writtenValue instanceof NormalizedNodeContainer);
if (verifyChildrenStructure && verifyChildren) {
mutable.setSubtreeVersion(version);
@SuppressWarnings("rawtypes")
- final NormalizedNodeContainerBuilder dataBuilder = createBuilder(newValue);
+ final NormalizedNodeContainerBuilder dataBuilder = support.createBuilder(newValue);
final TreeNode result = mutateChildren(mutable, dataBuilder, version, modification.getChildren());
// We are good to go except one detail: this is a single logical write, but
// order of operation - parent changes are always resolved before
// children ones, and having node in TOUCH means children was modified
// before.
- modification.updateValue(LogicalOperation.MERGE, createEmptyValue(value));
+ modification.updateValue(LogicalOperation.MERGE, support.createEmptyValue(value));
return;
case MERGE:
// Merging into an existing node. Merge data children modifications (maybe recursively) and mark
final Collection<ModifiedNode> children = modification.getChildren();
if (!children.isEmpty()) {
@SuppressWarnings("rawtypes")
- final NormalizedNodeContainerBuilder dataBuilder = createBuilder(currentMeta.getData());
+ final NormalizedNodeContainerBuilder dataBuilder = support.createBuilder(currentMeta.getData());
final MutableTreeNode newMeta = currentMeta.mutable();
newMeta.setSubtreeVersion(version);
final TreeNode ret = mutateChildren(newMeta, dataBuilder, version, children);
return verifyChildrenStructure;
}
- @SuppressWarnings("rawtypes")
- protected abstract NormalizedNodeContainerBuilder createBuilder(NormalizedNode<?, ?> original);
+ @Override
+ public final String toString() {
+ return addToStringAttributes(MoreObjects.toStringHelper(this)).toString();
+ }
- protected abstract NormalizedNode<?, ?> createEmptyValue(NormalizedNode<?, ?> original);
+ ToStringHelper addToStringAttributes(final ToStringHelper helper) {
+ return helper.add("support", support).add("verifyChildren", verifyChildrenStructure);
+ }
}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.data.impl.schema.tree;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-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;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
-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.util.EffectiveAugmentationSchema;
-
-final class AugmentationModificationStrategy
- extends AbstractDataNodeContainerModificationStrategy<AugmentationSchemaNode> {
- AugmentationModificationStrategy(final AugmentationSchemaNode schema, final DataNodeContainer resolved,
- final DataTreeConfiguration treeConfig) {
- super(EffectiveAugmentationSchema.create(schema, resolved), AugmentationNode.class, treeConfig);
- }
-
- @Override
- @SuppressWarnings("rawtypes")
- protected DataContainerNodeBuilder createBuilder(final NormalizedNode<?, ?> original) {
- checkArgument(original instanceof AugmentationNode);
- return ImmutableAugmentationNodeBuilder.create((AugmentationNode) original);
- }
-
- @Override
- protected NormalizedNode<?, ?> createEmptyValue(final NormalizedNode<?, ?> original) {
- checkArgument(original instanceof AugmentationNode);
- return ImmutableAugmentationNodeBuilder.create()
- .withNodeIdentifier(((AugmentationNode) original).getIdentifier()).build();
- }
-}
*/
package org.opendaylight.yangtools.yang.data.impl.schema.tree;
-import static com.google.common.base.Preconditions.checkArgument;
-
import com.google.common.base.Preconditions;
import com.google.common.base.Predicates;
import com.google.common.base.Verify;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration;
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.builder.api.DataContainerNodeBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableChoiceNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerSupport.Single;
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 {
- private final Map<PathArgument, ModificationApplyOperation> childNodes;
+ private static final Single<NodeIdentifier, ChoiceNode> SUPPORT = new Single<>(ChoiceNode.class,
+ ImmutableChoiceNodeBuilder::create, ImmutableChoiceNodeBuilder::create);
+
+ private final ImmutableMap<PathArgument, ModificationApplyOperation> childNodes;
// FIXME: enforce leaves not coming from two case statements at the same time
- private final Map<CaseEnforcer, Collection<CaseEnforcer>> exclusions;
- private final Map<PathArgument, CaseEnforcer> caseEnforcers;
+ private final ImmutableMap<CaseEnforcer, Collection<CaseEnforcer>> exclusions;
+ private final ImmutableMap<PathArgument, CaseEnforcer> caseEnforcers;
ChoiceModificationStrategy(final ChoiceSchemaNode schemaNode, final DataTreeConfiguration treeConfig) {
- super(ChoiceNode.class, treeConfig);
+ super(SUPPORT, treeConfig);
final Builder<PathArgument, ModificationApplyOperation> childBuilder = ImmutableMap.builder();
final Builder<PathArgument, CaseEnforcer> enforcerBuilder = ImmutableMap.builder();
}
for (final Entry<AugmentationIdentifier, AugmentationSchemaNode> e
: enforcer.getAugmentationEntries()) {
- childBuilder.put(e.getKey(), new AugmentationModificationStrategy(e.getValue(), caze, treeConfig));
+ childBuilder.put(e.getKey(), SchemaAwareApplyOperation.from(e.getValue(), caze, treeConfig));
enforcerBuilder.put(e.getKey(), enforcer);
}
}
return Optional.ofNullable(childNodes.get(child));
}
- @Override
- @SuppressWarnings("rawtypes")
- protected DataContainerNodeBuilder createBuilder(final NormalizedNode<?, ?> original) {
- checkArgument(original instanceof ChoiceNode);
- return ImmutableChoiceNodeBuilder.create((ChoiceNode) original);
- }
-
@Override
void verifyStructure(final NormalizedNode<?, ?> writtenValue, final boolean verifyChildren) {
if (verifyChildrenStructure() && verifyChildren) {
enforceCases(ret);
return ret;
}
-
- @Override
- protected NormalizedNode<?, ?> createEmptyValue(final NormalizedNode<?, ?> original) {
- checkArgument(original instanceof ChoiceNode);
- return ImmutableChoiceNodeBuilder.create().withNodeIdentifier(((ChoiceNode) original).getIdentifier()).build();
- }
}
*/
package org.opendaylight.yangtools.yang.data.impl.schema.tree;
-import static com.google.common.base.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull;
-import com.google.common.base.Preconditions;
import java.util.Optional;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration;
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.builder.api.DataContainerNodeBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerSupport.Single;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
/**
* with mandatory nodes, as it needs to tap into {@link SchemaAwareApplyOperation}'s operations, or subclassed
* for the purposes of {@link StructuralContainerModificationStrategy}'s automatic lifecycle.
*/
-class ContainerModificationStrategy extends AbstractDataNodeContainerModificationStrategy<ContainerSchemaNode> {
+class ContainerModificationStrategy extends DataNodeContainerModificationStrategy<ContainerSchemaNode> {
private static final class EnforcingMandatory extends ContainerModificationStrategy {
private final MandatoryLeafEnforcer enforcer;
}
}
+ private static final Single<NodeIdentifier, ContainerNode> SUPPORT = new Single<>(ContainerNode.class,
+ ImmutableContainerNodeBuilder::create, ImmutableContainerNodeBuilder::create);
+
ContainerModificationStrategy(final ContainerSchemaNode schemaNode, final DataTreeConfiguration treeConfig) {
- super(schemaNode, ContainerNode.class, treeConfig);
+ super(SUPPORT, schemaNode, treeConfig);
}
static ModificationApplyOperation of(final ContainerSchemaNode schema, final DataTreeConfiguration treeConfig) {
return new StructuralContainerModificationStrategy(schema, treeConfig);
}
-
- @Override
- @SuppressWarnings("rawtypes")
- protected final DataContainerNodeBuilder createBuilder(final NormalizedNode<?, ?> original) {
- checkArgument(original instanceof ContainerNode);
- return ImmutableContainerNodeBuilder.create((ContainerNode) original);
- }
-
- @Override
- protected NormalizedNode<?, ?> createEmptyValue(final NormalizedNode<?, ?> original) {
- Preconditions.checkArgument(original instanceof ContainerNode);
- return ImmutableContainerNodeBuilder.create().withNodeIdentifier(((ContainerNode) original).getIdentifier())
- .build();
- }
}
import static com.google.common.base.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull;
+import com.google.common.base.MoreObjects.ToStringHelper;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import javax.annotation.Nonnull;
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.NormalizedNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
import org.opendaylight.yangtools.yang.model.api.AugmentationTarget;
import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
*
* @param <T> Type of the container node
*/
-abstract class AbstractDataNodeContainerModificationStrategy<T extends DataNodeContainer>
+class DataNodeContainerModificationStrategy<T extends DataNodeContainer>
extends AbstractNodeContainerModificationStrategy {
- private static final Logger LOG = LoggerFactory.getLogger(AbstractDataNodeContainerModificationStrategy.class);
+ private static final Logger LOG = LoggerFactory.getLogger(DataNodeContainerModificationStrategy.class);
+
private final LoadingCache<PathArgument, ModificationApplyOperation> childCache = CacheBuilder.newBuilder()
.build(new CacheLoader<PathArgument, ModificationApplyOperation>() {
@Override
return SchemaAwareApplyOperation.from(child, treeConfig);
}
});
- private final T schema;
- private final DataTreeConfiguration treeConfig;
- protected AbstractDataNodeContainerModificationStrategy(final T schema,
- final Class<? extends NormalizedNode<?, ?>> nodeClass, final DataTreeConfiguration treeConfig) {
- super(nodeClass, treeConfig);
- this.schema = requireNonNull(schema,"schema");
- this.treeConfig = requireNonNull(treeConfig,"treeConfig");
- }
+ private final DataTreeConfiguration treeConfig;
+ private final T schema;
- protected final T getSchema() {
- return schema;
+ DataNodeContainerModificationStrategy(final NormalizedNodeContainerSupport<?, ?> support, final T schema,
+ final DataTreeConfiguration treeConfig) {
+ super(support, treeConfig);
+ this.schema = requireNonNull(schema, "schema");
+ this.treeConfig = requireNonNull(treeConfig, "treeConfig");
}
@Override
}
@Override
- @SuppressWarnings("rawtypes")
- protected abstract DataContainerNodeBuilder createBuilder(NormalizedNode<?, ?> original);
-
- @Override
- public String toString() {
- return getClass().getSimpleName() + " [" + schema + "]";
+ ToStringHelper addToStringAttributes(final ToStringHelper helper) {
+ return super.addToStringAttributes(helper).add("schema", schema);
}
}
--- /dev/null
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.data.impl.schema.tree;
+
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
+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.LeafSetNode;
+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.NormalizedNodeContainerSupport.Single;
+import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
+
+final class LeafSetModificationStrategy extends AbstractNodeContainerModificationStrategy {
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ private static final Single<NodeIdentifier, OrderedLeafSetNode<?>> ORDERED_SUPPORT =
+ new Single(OrderedLeafSetNode.class, ChildTrackingPolicy.ORDERED,
+ foo -> ImmutableOrderedLeafSetNodeBuilder.create((OrderedLeafSetNode<?>)foo),
+ ImmutableOrderedLeafSetNodeBuilder::create);
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ private static final Single<NodeIdentifier, LeafSetNode<?>> UNORDERED_SUPPORT =
+ new Single(LeafSetNode.class,
+ foo -> ImmutableLeafSetNodeBuilder.create((LeafSetNode<?>)foo),
+ ImmutableLeafSetNodeBuilder::create);
+
+ private final Optional<ModificationApplyOperation> entryStrategy;
+
+ LeafSetModificationStrategy(final LeafListSchemaNode schema, final DataTreeConfiguration treeConfig) {
+ super(schema.isUserOrdered() ? ORDERED_SUPPORT : UNORDERED_SUPPORT, treeConfig);
+ entryStrategy = Optional.of(new LeafSetEntryModificationStrategy(schema));
+ }
+
+ @Override
+ public Optional<ModificationApplyOperation> getChild(final PathArgument identifier) {
+ return identifier instanceof NodeWithValue ? entryStrategy : Optional.empty();
+ }
+}
\ No newline at end of file
*/
package org.opendaylight.yangtools.yang.data.impl.schema.tree;
-import static com.google.common.base.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull;
import java.util.Optional;
+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;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration;
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.builder.api.DataContainerNodeBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerSupport.Single;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
-class ListEntryModificationStrategy extends AbstractDataNodeContainerModificationStrategy<ListSchemaNode> {
+class ListEntryModificationStrategy extends DataNodeContainerModificationStrategy<ListSchemaNode> {
private static final class EnforcingMandatory extends ListEntryModificationStrategy {
private final MandatoryLeafEnforcer enforcer;
}
}
+ private static final Single<NodeIdentifierWithPredicates, MapEntryNode> SUPPORT = new Single<>(MapEntryNode.class,
+ ImmutableMapEntryNodeBuilder::create, ImmutableMapEntryNodeBuilder::create);
+
ListEntryModificationStrategy(final ListSchemaNode schema, final DataTreeConfiguration treeConfig) {
- super(schema, MapEntryNode.class, treeConfig);
+ super(SUPPORT, schema, treeConfig);
}
static ListEntryModificationStrategy of(final ListSchemaNode schema, final DataTreeConfiguration treeConfig) {
return enforcer.isPresent() ? new EnforcingMandatory(schema, treeConfig, enforcer.get())
: new ListEntryModificationStrategy(schema, treeConfig);
}
-
- @Override
- @SuppressWarnings("rawtypes")
- protected DataContainerNodeBuilder createBuilder(final NormalizedNode<?, ?> original) {
- checkArgument(original instanceof MapEntryNode);
- return ImmutableMapEntryNodeBuilder.create((MapEntryNode) original);
- }
-
- @Override
- protected NormalizedNode<?, ?> createEmptyValue(final NormalizedNode<?, ?> original) {
- checkArgument(original instanceof MapEntryNode);
- return ImmutableMapEntryNodeBuilder.create().withNodeIdentifier(((MapEntryNode) original).getIdentifier())
- .build();
- }
-}
\ No newline at end of file
+}
--- /dev/null
+/*
+ * Copyright (c) 2019 Pantheon Technologies, s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+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.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+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;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration;
+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 final Optional<ModificationApplyOperation> entryStrategy;
+ private final MapNode emptyNode;
+
+ private MapModificationStrategy(final MapEntry<?> support, final ListSchemaNode schema,
+ final DataTreeConfiguration treeConfig, final MapNode emptyNode) {
+ super(support, treeConfig);
+ this.emptyNode = requireNonNull(emptyNode);
+ entryStrategy = Optional.of(ListEntryModificationStrategy.of(schema, treeConfig));
+ }
+
+ static MapModificationStrategy of(final ListSchemaNode schema, final DataTreeConfiguration treeConfig) {
+ final MapEntry<?> support;
+ final MapNode emptyNode;
+ if (schema.isUserOrdered()) {
+ support = ORDERED_SUPPORT;
+ emptyNode = ImmutableNodes.orderedMapNode(schema.getQName());
+ } else {
+ support = UNORDERED_SUPPORT;
+ emptyNode = ImmutableNodes.mapNode(schema.getQName());
+ }
+ 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);
+ }
+
+ @Override
+ ToStringHelper addToStringAttributes(final ToStringHelper helper) {
+ return super.addToStringAttributes(helper).add("entry", entryStrategy.get());
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2019 Pantheon Technologies, s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.data.impl.schema.tree;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.base.MoreObjects;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
+import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder;
+
+abstract class NormalizedNodeContainerSupport<K extends PathArgument, T extends NormalizedNode<K, ?>> {
+ static final class Single<K extends PathArgument, T extends NormalizedNode<K, ?>>
+ extends NormalizedNodeContainerSupport<K, T> {
+ Single(final Class<T> requiredClass,
+ final Function<T, NormalizedNodeContainerBuilder<K, ?, ?, T>> copyBuilder,
+ final Supplier<NormalizedNodeContainerBuilder<K, ?, ?, T>> emptyBuilder) {
+ this(requiredClass, ChildTrackingPolicy.UNORDERED, copyBuilder, emptyBuilder);
+ }
+
+ Single(final Class<T> requiredClass, final ChildTrackingPolicy childPolicy,
+ final Function<T, NormalizedNodeContainerBuilder<K, ?, ?, T>> copyBuilder,
+ final Supplier<NormalizedNodeContainerBuilder<K, ?, ?, T>> emptyBuilder) {
+ super(requiredClass, childPolicy, copyBuilder, emptyBuilder);
+ }
+
+ @Override
+ NormalizedNodeContainerBuilder<?, ?, ?, T> createBuilder(final NormalizedNode<?, ?> original) {
+ return copyBuilder.apply(cast(original));
+ }
+
+ @Override
+ NormalizedNode<?, ?> createEmptyValue(final NormalizedNode<?, ?> original) {
+ return emptyBuilder.get().withNodeIdentifier(cast(original).getIdentifier()).build();
+ }
+
+ private T cast(final NormalizedNode<?, ?> original) {
+ checkArgument(requiredClass.isInstance(original), "Require %s, got %s", requiredClass, original);
+ return requiredClass.cast(original);
+ }
+ }
+
+ // FIXME: MapEntry a refactor of a hack, originally introduced in
+ // Change-Id: I9dc02a1917f38e8a0d62279843974b9869c48693. DataTreeRoot needs to be fixed up to properly
+ // handle the lookup of through maps.
+ static final class MapEntry<T extends NormalizedNode<NodeIdentifier, ?>>
+ extends NormalizedNodeContainerSupport<NodeIdentifier, T> {
+ MapEntry(final Class<T> requiredClass, final ChildTrackingPolicy childPolicy,
+ final Function<T, NormalizedNodeContainerBuilder<NodeIdentifier, ?, ?, T>> copyBuilder,
+ final Supplier<NormalizedNodeContainerBuilder<NodeIdentifier, ?, ?, T>> emptyBuilder) {
+ super(requiredClass, childPolicy, copyBuilder, emptyBuilder);
+ }
+
+ @Override
+ NormalizedNodeContainerBuilder<?, ?, ?, ?> createBuilder(final NormalizedNode<?, ?> original) {
+ if (requiredClass.isInstance(original)) {
+ return copyBuilder.apply(requiredClass.cast(original));
+ }
+ if (original instanceof MapEntryNode) {
+ return ImmutableMapEntryNodeBuilder.create((MapEntryNode) original);
+ }
+ throw new IllegalArgumentException("Expected either MapEntryNode or " + requiredClass + ", offending node: "
+ + original);
+ }
+
+ @Override
+ NormalizedNode<?, ?> createEmptyValue(final NormalizedNode<?, ?> original) {
+ if (requiredClass.isInstance(original)) {
+ return emptyBuilder.get().withNodeIdentifier(requiredClass.cast(original).getIdentifier()).build();
+ }
+ if (original instanceof MapEntryNode) {
+ return ImmutableMapEntryNodeBuilder.create()
+ .withNodeIdentifier(((MapEntryNode) original).getIdentifier()).build();
+ }
+ throw new IllegalArgumentException("Expected either MapEntryNode or " + requiredClass + ", offending node: "
+ + original);
+ }
+ }
+
+ final Function<T, NormalizedNodeContainerBuilder<K, ?, ?, T>> copyBuilder;
+ final Supplier<NormalizedNodeContainerBuilder<K, ?, ?, T>> emptyBuilder;
+ final ChildTrackingPolicy childPolicy;
+ final Class<T> requiredClass;
+
+ NormalizedNodeContainerSupport(final Class<T> requiredClass, final ChildTrackingPolicy childPolicy,
+ final Function<T, NormalizedNodeContainerBuilder<K, ?, ?, T>> copyBuilder,
+ final Supplier<NormalizedNodeContainerBuilder<K, ?, ?, T>> emptyBuilder) {
+ this.requiredClass = requireNonNull(requiredClass);
+ this.childPolicy = requireNonNull(childPolicy);
+ this.copyBuilder = requireNonNull(copyBuilder);
+ this.emptyBuilder = requireNonNull(emptyBuilder);
+ }
+
+ @SuppressWarnings("rawtypes")
+ abstract NormalizedNodeContainerBuilder createBuilder(NormalizedNode<?, ?> original);
+
+ abstract NormalizedNode<?, ?> createEmptyValue(NormalizedNode<?, ?> original);
+
+ @Override
+ public final String toString() {
+ return MoreObjects.toStringHelper(this).add("requiredClass", requiredClass).toString();
+ }
+}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.data.impl.schema.tree;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-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.api.NormalizedNodeContainerBuilder;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedLeafSetNodeBuilder;
-import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
-
-final class OrderedLeafSetModificationStrategy extends AbstractLeafSetModificationStrategy {
- OrderedLeafSetModificationStrategy(final LeafListSchemaNode schema, final DataTreeConfiguration treeConfig) {
- super(schema, treeConfig);
- }
-
- @Override
- protected ChildTrackingPolicy getChildPolicy() {
- return ChildTrackingPolicy.ORDERED;
- }
-
- @SuppressWarnings("rawtypes")
- @Override
- protected NormalizedNodeContainerBuilder createBuilder(final NormalizedNode<?, ?> original) {
- checkArgument(original instanceof OrderedLeafSetNode<?>);
- return ImmutableOrderedLeafSetNodeBuilder.create((OrderedLeafSetNode<?>) original);
- }
-
- @Override
- protected NormalizedNode<?, ?> createEmptyValue(final NormalizedNode<?, ?> original) {
- checkArgument(original instanceof OrderedLeafSetNode<?>);
- return ImmutableOrderedLeafSetNodeBuilder.create()
- .withNodeIdentifier(((OrderedLeafSetNode<?>) original).getIdentifier()).build();
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.data.impl.schema.tree;
-
-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.tree.DataTreeConfiguration;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedMapNodeBuilder;
-import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
-
-final class OrderedMapModificationStrategy extends AbstractMapModificationStrategy {
- OrderedMapModificationStrategy(final ListSchemaNode schema, final DataTreeConfiguration treeConfig) {
- super(OrderedMapNode.class, schema, treeConfig);
- }
-
- @Override
- protected ChildTrackingPolicy getChildPolicy() {
- return ChildTrackingPolicy.ORDERED;
- }
-
- @SuppressWarnings("rawtypes")
- @Override
- protected NormalizedNodeContainerBuilder createBuilder(final NormalizedNode<?, ?> original) {
- return original instanceof OrderedMapNode ? ImmutableOrderedMapNodeBuilder.create((OrderedMapNode) original)
- : super.createBuilder(original);
- }
-
- @Override
- protected NormalizedNode<?, ?> createEmptyValue(final NormalizedNode<?, ?> original) {
- return original instanceof OrderedMapNode ? ImmutableOrderedMapNodeBuilder.create()
- .withNodeIdentifier(((OrderedMapNode) original).getIdentifier()).build()
- : super.createEmptyValue(original);
- }
-}
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.AugmentationNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.ConflictingModificationAppliedException;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration;
import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType;
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.builder.impl.ImmutableAugmentationNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerSupport.Single;
import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
import org.opendaylight.yangtools.yang.model.api.AugmentationTarget;
import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
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.opendaylight.yangtools.yang.model.util.EffectiveAugmentationSchema;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
abstract class SchemaAwareApplyOperation extends ModificationApplyOperation {
private static final Logger LOG = LoggerFactory.getLogger(SchemaAwareApplyOperation.class);
+ private static final Single<AugmentationIdentifier, AugmentationNode> AUGMENTATION_SUPPORT =
+ new Single<>(AugmentationNode.class, ImmutableAugmentationNodeBuilder::create,
+ ImmutableAugmentationNodeBuilder::create);
public static ModificationApplyOperation from(final DataSchemaNode schemaNode,
final DataTreeConfiguration treeConfig) {
for (final AugmentationSchemaNode potential : augSchemas.getAvailableAugmentations()) {
for (final DataSchemaNode child : potential.getChildNodes()) {
if (identifier.getPossibleChildNames().contains(child.getQName())) {
- return new AugmentationModificationStrategy(potential, resolvedTree, treeConfig);
+ return from(potential, resolvedTree, treeConfig);
}
}
}
return null;
}
+ static DataNodeContainerModificationStrategy<AugmentationSchemaNode> from(final AugmentationSchemaNode schema,
+ final DataNodeContainer resolved, final DataTreeConfiguration treeConfig) {
+ return new DataNodeContainerModificationStrategy<>(AUGMENTATION_SUPPORT,
+ EffectiveAugmentationSchema.create(schema, resolved), treeConfig);
+ }
+
static void checkConflicting(final ModificationPath path, final boolean condition, final String message)
throws ConflictingModificationAppliedException {
if (!condition) {
final SchemaAwareApplyOperation op;
if (keyDefinition == null || keyDefinition.isEmpty()) {
op = new UnkeyedListModificationStrategy(schemaNode, treeConfig);
- } else if (schemaNode.isUserOrdered()) {
- op = new OrderedMapModificationStrategy(schemaNode, treeConfig);
} else {
- op = new UnorderedMapModificationStrategy(schemaNode, treeConfig);
+ op = MapModificationStrategy.of(schemaNode, treeConfig);
}
return MinMaxElementsValidation.from(op, schemaNode);
}
private static ModificationApplyOperation fromLeafListSchemaNode(final LeafListSchemaNode schemaNode,
final DataTreeConfiguration treeConfig) {
- final SchemaAwareApplyOperation op;
- if (schemaNode.isUserOrdered()) {
- op = new OrderedLeafSetModificationStrategy(schemaNode, treeConfig);
- } else {
- op = new UnorderedLeafSetModificationStrategy(schemaNode, treeConfig);
- }
- return MinMaxElementsValidation.from(op, schemaNode);
+ return MinMaxElementsValidation.from(new LeafSetModificationStrategy(schemaNode, treeConfig), schemaNode);
}
protected static void checkNotConflicting(final ModificationPath path, final TreeNode original,
}
}
- @Override
- protected ChildTrackingPolicy getChildPolicy() {
- return ChildTrackingPolicy.UNORDERED;
- }
-
@Override
final Optional<TreeNode> apply(final ModifiedNode modification, final Optional<TreeNode> currentMeta,
final Version version) {
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.data.impl.schema.tree;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-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.tree.DataTreeConfiguration;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListEntryNodeBuilder;
-import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
-
-final class UnkeyedListItemModificationStrategy extends AbstractDataNodeContainerModificationStrategy<ListSchemaNode> {
- UnkeyedListItemModificationStrategy(final ListSchemaNode schemaNode, final DataTreeConfiguration treeConfig) {
- super(schemaNode, UnkeyedListEntryNode.class, treeConfig);
- }
-
- @Override
- @SuppressWarnings("rawtypes")
- protected DataContainerNodeBuilder createBuilder(final NormalizedNode<?, ?> original) {
- checkArgument(original instanceof UnkeyedListEntryNode);
- return ImmutableUnkeyedListEntryNodeBuilder.create((UnkeyedListEntryNode) original);
- }
-
- @Override
- protected NormalizedNode<?, ?> createEmptyValue(final NormalizedNode<?, ?> original) {
- checkArgument(original instanceof UnkeyedListEntryNode);
- return ImmutableUnkeyedListEntryNodeBuilder.create()
- .withNodeIdentifier(((UnkeyedListEntryNode) original).getIdentifier()).build();
- }
-}
\ No newline at end of file
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.data.impl.schema.builder.impl.ImmutableUnkeyedListEntryNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerSupport.Single;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
final class UnkeyedListModificationStrategy extends SchemaAwareApplyOperation {
+ private static final Single<NodeIdentifier, UnkeyedListEntryNode> ITEM_SUPPORT =
+ new Single<>(UnkeyedListEntryNode.class, ImmutableUnkeyedListEntryNodeBuilder::create,
+ ImmutableUnkeyedListEntryNodeBuilder::create);
private final Optional<ModificationApplyOperation> entryStrategy;
UnkeyedListModificationStrategy(final ListSchemaNode schema, final DataTreeConfiguration treeConfig) {
- entryStrategy = Optional.of(new UnkeyedListItemModificationStrategy(schema, treeConfig));
+ entryStrategy = Optional.of(new DataNodeContainerModificationStrategy<>(ITEM_SUPPORT, schema, treeConfig));
}
@Override
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.data.impl.schema.tree;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetNodeBuilder;
-import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
-
-final class UnorderedLeafSetModificationStrategy extends AbstractLeafSetModificationStrategy {
- UnorderedLeafSetModificationStrategy(final LeafListSchemaNode schema, final DataTreeConfiguration treeConfig) {
- super(schema, treeConfig);
- }
-
- @SuppressWarnings("rawtypes")
- @Override
- protected NormalizedNodeContainerBuilder createBuilder(final NormalizedNode<?, ?> original) {
- checkArgument(original instanceof LeafSetNode<?>);
- return ImmutableLeafSetNodeBuilder.create((LeafSetNode<?>) original);
- }
-
- @Override
- protected NormalizedNode<?, ?> createEmptyValue(final NormalizedNode<?, ?> original) {
- checkArgument(original instanceof LeafSetNode<?>);
- return ImmutableLeafSetNodeBuilder.create().withNodeIdentifier(((LeafSetNode<?>) original).getIdentifier())
- .build();
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.data.impl.schema.tree;
-
-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.tree.DataTreeConfiguration;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeBuilder;
-import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
-
-final class UnorderedMapModificationStrategy extends AbstractMapModificationStrategy {
- UnorderedMapModificationStrategy(final ListSchemaNode schema, final DataTreeConfiguration treeConfig) {
- super(MapNode.class, schema, treeConfig);
- }
-
- @Override
- @SuppressWarnings("rawtypes")
- protected NormalizedNodeContainerBuilder createBuilder(final NormalizedNode<?, ?> original) {
- return original instanceof MapNode ? ImmutableMapNodeBuilder.create((MapNode) original)
- : super.createBuilder(original);
- }
-
- @Override
- protected NormalizedNode<?, ?> createEmptyValue(final NormalizedNode<?, ?> original) {
- return original instanceof MapNode ? ImmutableMapNodeBuilder.create()
- .withNodeIdentifier(((MapNode) original).getIdentifier()).build() : super.createEmptyValue(original);
- }
-}