Cleanup ShardRootModificationContext
[mdsal.git] / dom / mdsal-dom-inmemory-datastore / src / main / java / org / opendaylight / mdsal / dom / store / inmemory / ShardRootModificationContext.java
1 /*
2  * Copyright (c) 2016 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
9 package org.opendaylight.mdsal.dom.store.inmemory;
10
11 import com.google.common.base.Preconditions;
12 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
13 import org.opendaylight.yangtools.concepts.Identifiable;
14 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
15 import org.opendaylight.yangtools.yang.data.api.schema.tree.CursorAwareDataTreeModification;
16 import org.opendaylight.yangtools.yang.data.api.schema.tree.CursorAwareDataTreeSnapshot;
17 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification;
18 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModificationCursor;
19
20 // Non-final for mocking
21 class ShardRootModificationContext implements Identifiable<DOMDataTreeIdentifier> {
22
23     private final DOMDataTreeIdentifier identifier;
24     private final CursorAwareDataTreeSnapshot snapshot;
25
26     private CursorAwareDataTreeModification modification = null;
27     private DataTreeModificationCursorAdaptor cursor = null;
28
29     ShardRootModificationContext(final DOMDataTreeIdentifier identifier,
30             final CursorAwareDataTreeSnapshot snapshot) {
31         this.identifier = Preconditions.checkNotNull(identifier);
32         this.snapshot = Preconditions.checkNotNull(snapshot);
33     }
34
35     @Override
36     public DOMDataTreeIdentifier getIdentifier() {
37         return identifier;
38     }
39
40     DataTreeModificationCursorAdaptor cursor() {
41         if (cursor == null) {
42             if (modification == null) {
43                 modification = snapshot.newModification();
44             }
45
46             // FIXME: Should there be non-root path?
47             DataTreeModificationCursor dataTreeCursor = modification.createCursor(YangInstanceIdentifier.EMPTY);
48             cursor = DataTreeModificationCursorAdaptor.of(dataTreeCursor);
49         }
50         return cursor;
51     }
52
53     boolean isModified() {
54         return modification != null;
55     }
56
57     DataTreeModification ready() {
58         if (cursor != null) {
59             cursor.close();
60             cursor = null;
61         }
62         DataTreeModification ret = null;
63         if (modification != null) {
64             modification.ready();
65             ret = modification;
66             modification = null;
67         }
68
69         return ret;
70     }
71
72     void closeCursor() {
73         cursor.close();
74         cursor = null;
75     }
76 }