Merge "Unified Two Phase Commit implementation, fixed BA to BI connection"
[controller.git] / opendaylight / md-sal / sal-dom-broker / src / main / java / org / opendaylight / controller / sal / dom / broker / impl / HashMapDataStore.xtend
1 package org.opendaylight.controller.sal.dom.broker.impl
2
3 import org.opendaylight.controller.md.sal.common.api.data.DataReader
4 import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler
5 import org.opendaylight.controller.md.sal.common.api.data.DataModification
6 import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction
7 import org.opendaylight.yangtools.yang.common.RpcResult
8 import java.util.Map
9 import java.util.concurrent.ConcurrentHashMap
10 import org.opendaylight.controller.sal.common.util.Rpcs
11 import java.util.Collections
12 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier
13 import org.opendaylight.yangtools.yang.data.api.CompositeNode
14
15 class HashMapDataStore //
16 implements //
17 DataReader<InstanceIdentifier, CompositeNode>, DataCommitHandler<InstanceIdentifier, CompositeNode> {
18
19     val Map<InstanceIdentifier, CompositeNode> configuration = new ConcurrentHashMap();
20     val Map<InstanceIdentifier, CompositeNode> operational = new ConcurrentHashMap();
21
22     override readConfigurationData(InstanceIdentifier path) {
23         configuration.get(path);
24     }
25
26     override readOperationalData(InstanceIdentifier path) {
27         operational.get(path);
28     }
29
30     override requestCommit(DataModification<InstanceIdentifier, CompositeNode> modification) {
31         return new HashMapDataStoreTransaction(modification, this);
32     }
33
34     def RpcResult<Void> rollback(HashMapDataStoreTransaction transaction) {
35         return Rpcs.getRpcResult(true, null, Collections.emptySet);
36     }
37
38     def RpcResult<Void> finish(HashMapDataStoreTransaction transaction) {
39         val modification = transaction.modification;
40         configuration.putAll(modification.updatedConfigurationData);
41         operational.putAll(modification.updatedOperationalData);
42
43         for (removal : modification.removedConfigurationData) {
44             configuration.remove(removal);
45         }
46         for (removal : modification.removedOperationalData) {
47             operational.remove(removal);
48         }
49         return Rpcs.getRpcResult(true, null, Collections.emptySet);
50     }
51
52 }
53
54 class HashMapDataStoreTransaction implements // 
55 DataCommitTransaction<InstanceIdentifier, CompositeNode> {
56     @Property
57     val DataModification<InstanceIdentifier, CompositeNode> modification
58
59     @Property
60     val HashMapDataStore datastore;
61
62     new(
63         DataModification<InstanceIdentifier, CompositeNode> modify,
64         HashMapDataStore store
65     ) {
66         _modification = modify;
67         _datastore = store;
68     }
69
70     override finish() throws IllegalStateException {
71         datastore.finish(this);
72
73     }
74
75     override getModification() {
76         this._modification;
77     }
78
79     override rollback() throws IllegalStateException {
80         datastore.rollback(this);
81     }
82 }