package eu.leads.processor.utils;
import eu.leads.crawler.concurrent.Queue;
import eu.leads.crawler.utils.Infinispan;
import org.infinispan.Cache;
import org.infinispan.InvalidCacheUsageException;
import org.infinispan.commons.util.concurrent.NotifyingFuture;
import org.infinispan.lifecycle.ComponentStatus;
import org.infinispan.manager.DefaultCacheManager;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.remoting.transport.Address;
import java.io.IOException;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentMap;
import static java.lang.System.getProperties;
//import org.infinispan.atomic.AtomicObjectFactory;
/**
* @author P. Sutra
*/
public class InfinispanUtils {
// private static AtomicObjectFactory factory;
private static DefaultCacheManager manager;
private static volatile boolean isStarted = false;
public static void start() {
if(isStarted)
return;
String infinispanConfig = getProperties().getProperty("processorInfinispanConfigFile");
if (infinispanConfig != null) {
try {
System.out.println("processorInfinispanConfigFile " + infinispanConfig);
manager = new DefaultCacheManager(infinispanConfig);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("Incorrect InfinispanUtils configuration file");
}
} else {
try {
System.out.println("default cache value configuration");
manager = new DefaultCacheManager(System.getenv("HOME")+"/infinispan-clustered-tcp.xml");
} catch (IOException e) {
e.printStackTrace();
}
}
manager.start();
System.out.println("infinispan started and synchronizing.\nPlease wait...");
}
public static void stop() {
manager.stop();
}
public static synchronized ConcurrentMap getOrCreatePersistentMap(String name) {
return manager.getCache(name);
}
public static void addListenerForMap(Object listener, ConcurrentMap map) {
((Cache) map).addListener(listener);
}
public static void addListenerForMap(Object listener, String cacheName) {
Cache c = manager.getCache(cacheName, true);
c.addListener(listener);
}
public static List<Address> getMembers() {
return manager.getMembers();
}
public static void removeCache(String table) {
// System.out.println("----\n\n\n\n Removing " + table + "\n\n\n\n");
Cache c = manager.getCache(table);
c.clear();
c.stop();
// if(manager.cacheExists(table))
// manager.removeCache(table);
// for(String s : manager.getCacheNames())
// {
// Cache cc = manager.getCache(s);
// if(cc.getStatus().equals(ComponentStatus.RUNNING))
// StdOutputWriter.getInstance().println(table+": " + s + " " + cc.size());
// }
}
public static Address getMemberName() {
return manager.getAddress();
}
}