X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fdom%2Fbroker%2Fimpl%2FHashMapDataStore.xtend;fp=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fdom%2Fbroker%2Fimpl%2FHashMapDataStore.xtend;h=404842c1dcea4875fd71818b620dfea8c0f0d49b;hp=0000000000000000000000000000000000000000;hb=d2f2d5a34ccd0a715ab6ea7c1f5ac61f16f6e6cc;hpb=87246fdb069fad43135b623971bdf6ebe7df828a diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/HashMapDataStore.xtend b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/HashMapDataStore.xtend new file mode 100644 index 0000000000..404842c1dc --- /dev/null +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/HashMapDataStore.xtend @@ -0,0 +1,82 @@ +package org.opendaylight.controller.sal.dom.broker.impl + +import org.opendaylight.controller.md.sal.common.api.data.DataReader +import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler +import org.opendaylight.controller.md.sal.common.api.data.DataModification +import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction +import org.opendaylight.yangtools.yang.common.RpcResult +import java.util.Map +import java.util.concurrent.ConcurrentHashMap +import org.opendaylight.controller.sal.common.util.Rpcs +import java.util.Collections +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier +import org.opendaylight.yangtools.yang.data.api.CompositeNode + +class HashMapDataStore // +implements // +DataReader, DataCommitHandler { + + val Map configuration = new ConcurrentHashMap(); + val Map operational = new ConcurrentHashMap(); + + override readConfigurationData(InstanceIdentifier path) { + configuration.get(path); + } + + override readOperationalData(InstanceIdentifier path) { + operational.get(path); + } + + override requestCommit(DataModification modification) { + return new HashMapDataStoreTransaction(modification, this); + } + + def RpcResult rollback(HashMapDataStoreTransaction transaction) { + return Rpcs.getRpcResult(true, null, Collections.emptySet); + } + + def RpcResult finish(HashMapDataStoreTransaction transaction) { + val modification = transaction.modification; + configuration.putAll(modification.updatedConfigurationData); + operational.putAll(modification.updatedOperationalData); + + for (removal : modification.removedConfigurationData) { + configuration.remove(removal); + } + for (removal : modification.removedOperationalData) { + operational.remove(removal); + } + return Rpcs.getRpcResult(true, null, Collections.emptySet); + } + +} + +class HashMapDataStoreTransaction implements // +DataCommitTransaction { + @Property + val DataModification modification + + @Property + val HashMapDataStore datastore; + + new( + DataModification modify, + HashMapDataStore store + ) { + _modification = modify; + _datastore = store; + } + + override finish() throws IllegalStateException { + datastore.finish(this); + + } + + override getModification() { + this._modification; + } + + override rollback() throws IllegalStateException { + datastore.rollback(this); + } +}