package fi.iki.mkuokkanen.seda.keyStore; import fi.iki.mkuokkanen.seda.queue.QueueOut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; import java.util.HashMap; import java.util.Map; import static com.google.common.base.Preconditions.checkNotNull; /** * Simple Business Logic module in this app * * @author mkuokkanen */ class StorageImpl implements Storage { private static final int MAX_SIZE = 100; private static Logger logger = LoggerFactory.getLogger(StorageImpl.class); /** * Internal data structure. */ private final Map<String, String> store; private final QueueOut queue; /** * Default Constructor. */ @Inject public StorageImpl(QueueOut queue) { this.queue = checkNotNull(queue); this.store = new HashMap<>(MAX_SIZE); } @Override public boolean push(String key, String value) { logger.info("Push {}:{}", key, value); if (store.size() >= MAX_SIZE) { logger.warn("KeyStore already has {} items and limit is {}, ignoring push.", store.size(), MAX_SIZE); return false; } String ret = store.put(key, value); if (ret == null) { logger.debug("Store push, op:add, key:{}, value:{}", key, value); } else { logger.debug("Store push, op:update, key:{}, value:{}", key, value); } return true; } @Override public boolean delete(String key) { String ret = store.remove(key); if (ret == null) { logger.debug("Store delete, had no key:{}", key); return false; } else { logger.debug("Store delete, key:{}", key); return true; } } @Override public void broadcast() { queue.writeBroadcastToQueue(store); } }