1 package org.opendaylight.controller.md.sal.dom.store.impl;
3 import org.opendaylight.controller.md.sal.dom.store.impl.tree.NodeModification;
4 import org.opendaylight.controller.md.sal.dom.store.impl.tree.StoreMetadataNode;
5 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument;
6 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
8 import com.google.common.base.Optional;
9 import com.google.common.primitives.UnsignedLong;
11 public class OperationWithModification {
13 private final NodeModification modification;
15 private final ModificationApplyOperation applyOperation;
17 private OperationWithModification(final ModificationApplyOperation op, final NodeModification mod) {
18 this.modification = mod;
19 this.applyOperation = op;
22 public OperationWithModification write(final NormalizedNode<?, ?> value) {
23 modification.write(value);
24 applyOperation.verifyStructure(modification);
28 public OperationWithModification delete() {
29 modification.delete();
33 public NodeModification getModification() {
37 public ModificationApplyOperation getApplyOperation() {
38 return applyOperation;
41 public boolean isApplicable(final Optional<StoreMetadataNode> data) {
42 return applyOperation.isApplicable(modification, data);
45 public Optional<StoreMetadataNode> apply(final Optional<StoreMetadataNode> data, final UnsignedLong subtreeVersion) {
46 return applyOperation.apply(modification, data, subtreeVersion);
49 public static OperationWithModification from(final ModificationApplyOperation operation,
50 final NodeModification modification) {
51 return new OperationWithModification(operation, modification);
55 public void merge(final NormalizedNode<?, ?> data) {
56 modification.merge(data);
57 applyOperation.verifyStructure(modification);
61 public OperationWithModification forChild(final PathArgument childId) {
62 NodeModification childMod = modification.modifyChild(childId);
63 Optional<ModificationApplyOperation> childOp = applyOperation.getChild(childId);
64 return from(childOp.get(),childMod);