Cleaned up mdsal-common-api and mdsal-dom-spi
[mdsal.git] / binding / mdsal-binding-api / src / main / java / org / opendaylight / mdsal / 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.mdsal.binding.api;
9
10 import org.opendaylight.mdsal.common.api.AsyncWriteTransaction;
11 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
12
13 import org.opendaylight.yangtools.yang.binding.DataObject;
14 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
15
16 /**
17  * A transaction that provides mutation capabilities on a data tree.
18  * <p>
19  * For more information on usage and examples, please see the documentation in {@link AsyncWriteTransaction}.
20  */
21 public interface WriteTransaction extends AsyncWriteTransaction<InstanceIdentifier<?>, DataObject> {
22
23     /**
24      * Stores a piece of data at the specified path. This acts as an add / replace
25      * operation, which is to say that whole subtree will be replaced by the specified data.
26      * * <p>
27      * This method does not automatically create missing parent nodes. It is equivalent to invoking
28      * {@link #put(LogicalDatastoreType, InstanceIdentifier, DataObject, boolean)}
29      * with <code>createMissingParents</code> set to false.
30      * <p>
31      * For more information on usage and examples, please see the documentation in {@link AsyncWriteTransaction}.
32      * <p>
33      * If you need to make sure that a parent object exists but you do not want modify
34      * its pre-existing state by using put, consider using {@link #merge} instead.
35      *
36      * @param store
37      *            the logical data store which should be modified
38      * @param path
39      *            the data object path
40      * @param data
41      *            the data object to be written to the specified path
42      * @throws IllegalStateException
43      *             if the transaction has already been submitted
44      */
45     <T extends DataObject> void put(LogicalDatastoreType store, InstanceIdentifier<T> path, T data);
46
47
48     /**
49      * Stores a piece of data at the specified path. This acts as an add /
50      * replace operation, which is to say that whole subtree will be replaced by
51      * the specified data.
52      * <p>
53      * For more information on usage and examples, please see the documentation
54      * in {@link AsyncWriteTransaction}.
55      * <p>
56      * If you need to make sure that a parent object exists but you do not want
57      * modify its pre-existing state by using put, consider using {@link #merge}
58      * instead.
59      *
60      * Note: Using <code>createMissingParents</code> with value true, may
61      * introduce garbage in data store, or recreate nodes, which were deleted by
62      * previous transaction.
63      *
64      * @param store
65      *            the logical data store which should be modified
66      * @param path
67      *            the data object path
68      * @param data
69      *            the data object to be written to the specified path
70      * @param createMissingParents
71      *            if true, any missing parent nodes will be automatically
72      *            created using a merge 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 true, any missing parent nodes will be automatically created
120      *            using a merge operation.
121      * @throws IllegalStateException
122      *             if the transaction has already been submitted
123      */
124     <T extends DataObject> void merge(LogicalDatastoreType store, InstanceIdentifier<T> path, T data,
125             boolean createMissingParents);
126
127     @Override
128     void delete(LogicalDatastoreType store, InstanceIdentifier<?> path);
129 }