Implement managed transactions
[mdsal.git] / binding / mdsal-binding-util / src / main / java / org / opendaylight / mdsal / binding / util / WriteTrackingWriteTransaction.java
1 /*
2  * Copyright © 2018 Red Hat, Inc. and others.
3  *
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
7  */
8 package org.opendaylight.mdsal.binding.util;
9
10 import org.opendaylight.mdsal.binding.api.WriteTransaction;
11 import org.opendaylight.mdsal.binding.spi.ForwardingWriteTransaction;
12 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
13 import org.opendaylight.yangtools.yang.binding.DataObject;
14 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
15
16 /**
17  * Write transaction which keeps track of writes.
18  */
19 class WriteTrackingWriteTransaction extends ForwardingWriteTransaction implements WriteTrackingTransaction {
20     // This is only ever read *after* changes to the transaction are complete
21     private boolean written;
22
23     WriteTrackingWriteTransaction(WriteTransaction delegate) {
24         super(delegate);
25     }
26
27     @Override
28     public <T extends DataObject> void put(LogicalDatastoreType store, InstanceIdentifier<T> path, T data) {
29         super.put(store, path, data);
30         written = true;
31     }
32
33     @Override
34     public <T extends DataObject> void put(LogicalDatastoreType store, InstanceIdentifier<T> path, T data,
35         boolean createMissingParents) {
36         super.put(store, path, data, createMissingParents);
37         written = true;
38     }
39
40     @Override
41     public <T extends DataObject> void merge(LogicalDatastoreType store, InstanceIdentifier<T> path, T data) {
42         super.merge(store, path, data);
43         written = true;
44     }
45
46     @Override
47     public <T extends DataObject> void merge(LogicalDatastoreType store, InstanceIdentifier<T> path, T data,
48         boolean createMissingParents) {
49         super.merge(store, path, data, createMissingParents);
50         written = true;
51     }
52
53     @Override
54     public void delete(LogicalDatastoreType store, InstanceIdentifier<?> path) {
55         super.delete(store, path);
56         written = true;
57     }
58
59     @Override
60     public boolean isWritten() {
61         return written;
62     }
63 }