package com.bagri.server.hazelcast.store.system; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.bagri.server.hazelcast.config.EntityConfig; public abstract class ConfigCacheStore<K, V> { protected final Logger logger = LoggerFactory.getLogger(getClass()); protected EntityConfig cfg; protected Map<K, V> entities; public void setEntityManagement(EntityConfig cfg) { this.cfg = cfg; entities = loadEntities(); } abstract protected Map<K, V> loadEntities(); abstract protected void storeEntities(Map<K, V> entities); public Map<K, V> loadAll(Collection<K> keys) { logger.trace("loadAll.enter; keys: {}", keys); Map<K, V> result = new HashMap<K, V>(keys.size()); for (K key: keys) { V value = entities.get(key); if (value != null) { result.put(key, value); } } logger.trace("loadAll.exit; returning {} entities", result.size()); return result; } public V load(K key) { logger.trace("load.enter; key: {}", key); return entities.get(key); } public Set<K> loadAllKeys() { logger.trace("loadAllKeys.enter;"); Set<K> result = new HashSet<K>(entities.keySet()); logger.trace("loadAllKeys.exit; returning {} keys", result.size()); return result; } public void store(K key, V value) { logger.trace("store.enter; key: {}; value: {}", key, value); entities.put(key, value); storeEntities(entities); } public void storeAll(Map<K, V> map) { logger.trace("storeAll.enter; map: {}", map); entities.putAll(map); storeEntities(entities); } public void delete(K key) { logger.trace("delete.enter; key: {}", key); if (entities.remove(key) != null) { storeEntities(entities); } } public void deleteAll(Collection<K> keys) { logger.trace("deleteAll.enter; keys: {}", keys); boolean changed = false; for (K key: keys) { if (entities.remove(key) != null) { changed = true; } } if (changed) { storeEntities(entities); } } }