668d2b0233e613a64c3775e28078c7650368b64f
[yangtools.git] / yang / yang-data-api / src / main / java / org / opendaylight / yangtools / yang / data / api / schema / tree / ModificationType.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.yangtools.yang.data.api.schema.tree;
9
10 /**
11  * Enumeration of all possible node modification states. These are used in
12  * data tree modification context to quickly assess what sort of modification
13  * the node is undergoing.
14  */
15 public enum ModificationType {
16     /**
17      * Node is currently unmodified.
18      */
19     UNMODIFIED,
20
21     /**
22      * A child node, either direct or indirect, has been modified. This means
23      * that the data representation of this node has potentially changed.
24      */
25     SUBTREE_MODIFIED,
26
27     /**
28      * This node has been placed into the tree, potentially completely replacing
29      * pre-existing contents.
30      */
31     WRITE,
32
33     /**
34      * This node has been deleted along with any of its child nodes.
35      */
36     DELETE,
37
38     /**
39      * This node has appeared because it is implied by one of its children. This type is usually produced when a
40      * structural container is created to host some leaf entries. It does not have an associated before-image.
41      *
42      * Its semantics is a combination of SUBTREE_MODIFIED and WRITE, depending on which context it is being interpreted.
43      *
44      * Users who track the value of the node can treat it as a WRITE. Users transforming a {@link DataTreeCandidate} to
45      * operations on a {@link DataTreeModification} should interpret it as a SUBTREE_MODIFIED and examine its children.
46      * This is needed to correctly deal with concurrent operations on the nodes children, as issuing a write on the
47      * DataTreeModification could end up removing any leaves which have not been present at the DataTree which emitted
48      * this event.
49      */
50     APPEARED,
51
52     /**
53      * This node has disappeared because it is no longer implied by any children. This type is usually produced when a
54      * structural container is removed because it has become empty. It does not have an associated after-image.
55      *
56      * Its semantics is a combination of SUBTREE_MODIFIED and DELETE, depending on which context it is being interpreted.
57      * Users who track the value of the node can treat it as a DELETE, as the container has disappeared. Users
58      * transforming a {@link DataTreeCandidate} to operations on a {@link DataTreeModification} should interpret it as
59      * a SUBTREE_MODIFIED and examine its children.
60      *
61      * This is needed to correctly deal with concurrent operations on the nodes children, as issuing a delete on the
62      * DataTreeModification would end up removing any leaves which have not been present at the DataTree which emitted
63      * this event.
64      */
65     DISAPPEARED,
66 }