package org.opendaylight.controller.sal.binding.impl import org.opendaylight.controller.md.sal.common.api.data.DataReader import org.opendaylight.controller.sal.binding.api.data.RuntimeDataProvider import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler import org.opendaylight.yangtools.yang.binding.InstanceIdentifier import org.opendaylight.yangtools.yang.binding.DataObject 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 class HashMapDataStore // implements // RuntimeDataProvider, DataCommitHandler, DataObject> { val Map,DataObject> configuration = new ConcurrentHashMap(); val Map,DataObject> operational = new ConcurrentHashMap(); override readConfigurationData(InstanceIdentifier path) { configuration.get(path); } override readOperationalData(InstanceIdentifier path) { operational.get(path); } override requestCommit(DataModification, DataObject> 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, DataObject> { @Property val DataModification, DataObject> modification @Property val HashMapDataStore datastore; new( DataModification, DataObject> 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); } }