package edu.harvard.mcb.leschziner.storage;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ConcurrentHashMap;
import com.hazelcast.core.AtomicNumber;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.MultiMap;
import edu.harvard.mcb.leschziner.event.BufferedQueue;
public class HazelcastStorage implements StorageEngine {
private final HazelcastInstance instance;
private final Map<String, BufferedQueue> bufferedQueues;
public HazelcastStorage() {
bufferedQueues = new ConcurrentHashMap<String, BufferedQueue>();
this.instance = Hazelcast.getDefaultInstance();
}
public HazelcastStorage(HazelcastInstance instance) {
bufferedQueues = new ConcurrentHashMap<String, BufferedQueue>();
this.instance = instance;
}
@Override public AtomicNumber getAtomicNumber(String name) {
return instance.getAtomicNumber(name);
}
@Override public <K, V> Map<K, V> getMap(String name) {
return instance.getMap(name);
}
@Override public <K, V> MultiMap<K, V> getMultiMap(String name) {
return instance.getMultiMap(name);
}
@Override public <T> BlockingQueue<T> getQueue(String name) {
return instance.getQueue(name);
}
@Override public <T> Set<T> getSet(String name) {
return instance.getSet(name);
}
@Override public <T> BufferedQueue<T> getBufferedQueue(String name) {
// Look the key up
if (!bufferedQueues.containsKey(name)) {
// If it doesnt exist, create a new one
BufferedQueue<T> newQueue = new BufferedQueue<>(name);
bufferedQueues.put(name, newQueue);
return newQueue;
} else {
return bufferedQueues.get(name);
}
}
}