2 * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.cluster.datastore;
10 import static java.util.Objects.requireNonNull;
12 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
13 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
16 * A TransactionOperation to apply a specific modification. Subclasses provide type capture of required data, so that
17 * we instantiate AbstractModification subclasses for the bare minimum time required.
19 abstract class TransactionModificationOperation extends TransactionOperation {
20 private abstract static class AbstractDataOperation extends TransactionModificationOperation {
21 private final NormalizedNode data;
23 AbstractDataOperation(final YangInstanceIdentifier path, final NormalizedNode data) {
25 this.data = requireNonNull(data);
28 final NormalizedNode data() {
33 static final class DeleteOperation extends TransactionModificationOperation {
34 DeleteOperation(final YangInstanceIdentifier path) {
39 protected void invoke(final TransactionContext transactionContext, final Boolean havePermit) {
40 transactionContext.executeDelete(path(), havePermit);
44 static final class MergeOperation extends AbstractDataOperation {
45 MergeOperation(final YangInstanceIdentifier path, final NormalizedNode data) {
50 protected void invoke(final TransactionContext transactionContext, final Boolean havePermit) {
51 transactionContext.executeMerge(path(), data(), havePermit);
55 static final class WriteOperation extends AbstractDataOperation {
56 WriteOperation(final YangInstanceIdentifier path, final NormalizedNode data) {
61 protected void invoke(final TransactionContext transactionContext, final Boolean havePermit) {
62 transactionContext.executeWrite(path(), data(), havePermit);
66 private final YangInstanceIdentifier path;
68 TransactionModificationOperation(final YangInstanceIdentifier path) {
69 this.path = requireNonNull(path);
72 final YangInstanceIdentifier path() {