1 package org.opendaylight.controller.sal.dom.broker.impl
3 import org.opendaylight.controller.md.sal.common.api.data.DataModification
4 import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction
5 import org.opendaylight.yangtools.yang.common.RpcResult
7 import java.util.concurrent.ConcurrentHashMap
8 import org.opendaylight.controller.sal.common.util.Rpcs
9 import java.util.Collections
10 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier
11 import org.opendaylight.yangtools.yang.data.api.CompositeNode
12 import org.opendaylight.controller.sal.core.api.data.DataStore
13 import java.util.HashSet
15 class HashMapDataStore implements DataStore, AutoCloseable {
18 val Map<InstanceIdentifier, CompositeNode> configuration = new ConcurrentHashMap();
19 val Map<InstanceIdentifier, CompositeNode> operational = new ConcurrentHashMap();
23 override containsConfigurationPath(InstanceIdentifier path) {
24 throw new UnsupportedOperationException("TODO: auto-generated method stub")
28 override containsOperationalPath(InstanceIdentifier path) {
29 throw new UnsupportedOperationException("TODO: auto-generated method stub")
32 override getStoredConfigurationPaths() {
36 override getStoredOperationalPaths() {
40 override readConfigurationData(InstanceIdentifier path) {
41 configuration.get(path);
44 override readOperationalData(InstanceIdentifier path) {
45 operational.get(path);
50 override requestCommit(DataModification<InstanceIdentifier, CompositeNode> modification) {
51 return new HashMapDataStoreTransaction(modification, this);
54 def RpcResult<Void> rollback(HashMapDataStoreTransaction transaction) {
55 return Rpcs.getRpcResult(true, null, Collections.emptySet);
58 def RpcResult<Void> finish(HashMapDataStoreTransaction transaction) {
59 val modification = transaction.modification;
60 configuration.putAll(modification.updatedConfigurationData);
61 operational.putAll(modification.updatedOperationalData);
63 for (removal : modification.removedConfigurationData) {
64 remove(configuration,removal);
66 for (removal : modification.removedOperationalData) {
67 remove(operational,removal);
69 return Rpcs.getRpcResult(true, null, Collections.emptySet);
72 def remove(Map<InstanceIdentifier, CompositeNode> map, InstanceIdentifier identifier) {
73 val affected = new HashSet<InstanceIdentifier>();
74 for(path : map.keySet) {
75 if(identifier.contains(path)) {
79 for(pathToRemove : affected) {
80 map.remove(pathToRemove);
92 class HashMapDataStoreTransaction implements //
93 DataCommitTransaction<InstanceIdentifier, CompositeNode> {
95 val DataModification<InstanceIdentifier, CompositeNode> modification
98 val HashMapDataStore datastore;
101 DataModification<InstanceIdentifier, CompositeNode> modify,
102 HashMapDataStore store
104 _modification = modify;
108 override finish() throws IllegalStateException {
109 datastore.finish(this);
113 override getModification() {
117 override rollback() throws IllegalStateException {
118 datastore.rollback(this);