package com.mozilla.grouperfish.services.mock;
import java.util.Hashtable;
import java.util.Map;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import com.mozilla.grouperfish.services.api.Grid;
/**
* In memory grid service, usable for some mocking.
*
* This cannot be used as an actual replacement for Hazelcast
* because it lacks the persistence/indexing provided by Bagheera.
*
* Make sure to instantiate this as a singleton (e.g. using Guice).
*/
public class MockGrid implements Grid {
// We want a concurrent map, like Hazelcast provides.
private final Map<String, Map<String, String>> maps =
new Hashtable<String, Map<String, String>>();
private final int queueCapacity = 1000;
private final Map<String, BlockingQueue<?>> queues =
new Hashtable<String, BlockingQueue<?>>();
@Override
public synchronized Map<String, String> map(final String name) {
if (!maps.containsKey(name)) {
maps.put(name, new Hashtable<String, String>());
}
return maps.get(name);
}
@SuppressWarnings("unchecked")
@Override
public synchronized <E> BlockingQueue<E> queue(final String name) {
if (!queues.containsKey(name)) {
queues.put(name, new ArrayBlockingQueue<E>(queueCapacity));
}
return (BlockingQueue<E>) queues.get(name);
}
}