BUG-3128: Update RPC router concepts
[controller.git] / opendaylight / md-sal / sal-dom-api / src / main / java / org / opendaylight / controller / md / sal / dom / api / DOMDataWriteTransaction.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.dom.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.data.api.YangInstanceIdentifier;
13 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
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 DOMDataWriteTransaction extends AsyncWriteTransaction<YangInstanceIdentifier, NormalizedNode<?, ?>> {
21
22     @Override
23     void delete(LogicalDatastoreType store, YangInstanceIdentifier path);
24
25     /**
26      * Stores a piece of data at the specified path. This acts as an add / replace
27      * operation, which is to say that whole subtree will be replaced by the specified data.
28      * <p>
29      * For more information on usage and examples, please see the documentation in {@link AsyncWriteTransaction}.
30      * <p>
31      * If you need to make sure that a parent object exists but you do not want modify
32      * its pre-existing state by using put, consider using {@link #merge} instead.
33      *
34      * @param store
35      *            the logical data store which should be modified
36      * @param path
37      *            the data object path
38      * @param data
39      *            the data object to be written to the specified path
40      * @throws IllegalStateException
41      *             if the transaction has already been submitted
42      */
43     void put(LogicalDatastoreType store, YangInstanceIdentifier path, NormalizedNode<?, ?> data);
44
45     /**
46      * Merges a piece of data with the existing data at a specified path. Any pre-existing data
47      * which is not explicitly overwritten will be preserved. This means that if you store a container,
48      * its child lists will be merged.
49      * <p>
50      * For more information on usage and examples, please see the documentation in {@link AsyncWriteTransaction}.
51      *<p>
52      * If you require an explicit replace operation, use {@link #put} instead.
53      *
54      * @param store
55      *            the logical data store which should be modified
56      * @param path
57      *            the data object path
58      * @param data
59      *            the data object to be merged to the specified path
60      * @throws IllegalStateException
61      *             if the transaction has already been submitted
62      */
63     void merge(LogicalDatastoreType store, YangInstanceIdentifier path, NormalizedNode<?, ?> data);
64 }