Deprecate DCL in favor of DTCL
[controller.git] / opendaylight / md-sal / sal-binding-api / src / main / java / org / opendaylight / controller / md / sal / binding / api / WriteTransaction.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
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.controller.md.sal.binding.api;
9
10 import org.opendaylight.controller.md.sal.common.api.data.AsyncWriteTransaction;
11 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
12 import org.opendaylight.yangtools.yang.binding.DataObject;
13 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
14
15 /**
16  * A transaction that provides mutation capabilities on a data tree.
17  * <p>
18  * For more information on usage and examples, please see the documentation in {@link AsyncWriteTransaction}.
19  */
20 public interface WriteTransaction extends AsyncWriteTransaction<InstanceIdentifier<?>, DataObject> {
21
22     /**
23      * Stores a piece of data at the specified path. This acts as an add / replace
24      * operation, which is to say that whole subtree will be replaced by the specified data.
25      * * <p>
26      * This method does not automatically create missing parent nodes. It is equivalent to invoking
27      * {@link #put(LogicalDatastoreType, InstanceIdentifier, DataObject, boolean)}
28      * with <code>createMissingParents</code> set to false.
29      * <p>
30      * For more information on usage and examples, please see the documentation in {@link AsyncWriteTransaction}.
31      * <p>
32      * If you need to make sure that a parent object exists but you do not want modify
33      * its pre-existing state by using put, consider using {@link #merge} instead.
34      *
35      * @param store
36      *            the logical data store which should be modified
37      * @param path
38      *            the data object path
39      * @param data
40      *            the data object to be written to the specified path
41      * @throws IllegalStateException
42      *             if the transaction has already been submitted
43      */
44     <T extends DataObject> void put(LogicalDatastoreType store, InstanceIdentifier<T> path, T data);
45
46
47     /**
48      * Stores a piece of data at the specified path. This acts as an add /
49      * replace operation, which is to say that whole subtree will be replaced by
50      * the specified data.
51      * <p>
52      * For more information on usage and examples, please see the documentation
53      * in {@link AsyncWriteTransaction}.
54      * <p>
55      * If you need to make sure that a parent object exists but you do not want
56      * modify its pre-existing state by using put, consider using {@link #merge}
57      * instead.
58      *
59      * Note: Using <code>createMissingParents</code> with value true, may
60      * introduce garbage in data store, or recreate nodes, which were deleted by
61      * previous transaction.
62      *
63      * @param store
64      *            the logical data store which should be modified
65      * @param path
66      *            the data object path
67      * @param data
68      *            the data object to be written to the specified path
69      * @param createMissingParents
70      *            if {@link #CREATE_MISSING_PARENTS} ({@code true}), any missing
71      *            parent nodes will be automatically created using a merge
72      *            operation.
73      * @throws IllegalStateException
74      *             if the transaction has already been submitted
75      */
76     <T extends DataObject> void put(LogicalDatastoreType store, InstanceIdentifier<T> path, T data,
77             boolean createMissingParents);
78
79     /**
80      * Merges a piece of data with the existing data at a specified path. Any pre-existing data
81      * which is not explicitly overwritten will be preserved. This means that if you store a container,
82      * its child lists will be merged.
83      * <p>
84      * This method does not automatically create missing parent nodes. It is equivalent to invoking
85      * {@link #merge(LogicalDatastoreType, InstanceIdentifier, DataObject, boolean)}
86      * with <code>createMissingParents</code> set to false.
87      * <p>
88      * For more information on usage and examples, please see the documentation in {@link AsyncWriteTransaction}.
89      *<p>
90      * If you require an explicit replace operation, use {@link #put} instead.
91      * @param store
92      *            the logical data store which should be modified
93      * @param path
94      *            the data object path
95      * @param data
96      *            the data object to be merged to the specified path
97      * @throws IllegalStateException
98      *             if the transaction has already been submitted
99      */
100     <T extends DataObject> void merge(LogicalDatastoreType store, InstanceIdentifier<T> path, T data);
101
102     /**
103      * Merges a piece of data with the existing data at a specified path. Any
104      * pre-existing data which is not explicitly overwritten will be preserved.
105      * This means that if you store a container, its child lists will be merged.
106      * <p>
107      * For more information on usage and examples, please see the documentation
108      * in {@link AsyncWriteTransaction}.
109      * <p>
110      * If you require an explicit replace operation, use {@link #put} instead.
111      *
112      * @param store
113      *            the logical data store which should be modified
114      * @param path
115      *            the data object path
116      * @param data
117      *            the data object to be merged to the specified path
118      * @param createMissingParents
119      *            if {@link #CREATE_MISSING_PARENTS} ({@code true}), any missing
120      *            parent nodes will be automatically created using a merge
121      *            operation.
122      * @throws IllegalStateException
123      *             if the transaction has already been submitted
124      */
125     <T extends DataObject> void merge(LogicalDatastoreType store, InstanceIdentifier<T> path, T data,
126             boolean createMissingParents);
127
128     @Override
129     void delete(LogicalDatastoreType store, InstanceIdentifier<?> path);
130
131     /**
132      * Flag value indicating that missing parents should be created.
133      */
134     boolean CREATE_MISSING_PARENTS = true;
135
136     /**
137      * Flag value indicating that missing parents should cause an error.
138      */
139     boolean FAIL_ON_MISSING_PARENTS = false;
140 }