package qa.qcri.aidr.predict.communication;
import qa.qcri.aidr.predict.common.*;
import java.util.*;
import org.apache.log4j.Logger;
/**
* OutputWorkerIndex is a collection of OutputWorkers organized by eventID.
*
* @author jrogstadius
*/
public class HttpOutputWorkerIndex {
private static HttpOutputWorkerIndex instance;
HashMap<String, ArrayList<HttpOutputWorker>> workers;
private static Logger logger = Logger.getLogger(HttpOutputWorkerIndex.class);
private HttpOutputWorkerIndex() {
workers = new HashMap<String, ArrayList<HttpOutputWorker>>();
}
public static HttpOutputWorkerIndex getInstance() {
if (instance == null)
instance = new HttpOutputWorkerIndex();
return instance;
}
// public void addWorker(int eventID, HttpOutputWorker worker) {
// synchronized (this) {
// if (!workers.containsKey(eventID))
// workers.put(cri, new ArrayList<HttpOutputWorker>());
// workers.get(eventID).add(worker);
//
// worker.onConnectionClosed
// .subscribe(new Function<EventArgs<Object>>() {
// public void execute(EventArgs<Object> args) {
// removeWorker((HttpOutputWorker) args.sender);
// }
// });
// }
// }
public void addWorker(String crisisCode, HttpOutputWorker worker) {
synchronized (this) {
if (!workers.containsKey(crisisCode))
workers.put(crisisCode, new ArrayList<HttpOutputWorker>());
workers.get(crisisCode).add(worker);
worker.onConnectionClosed
.subscribe(new Function<EventArgs<Object>>() {
public void execute(EventArgs<Object> args) {
removeWorker((HttpOutputWorker) args.sender);
}
});
}
}
public void removeWorker(HttpOutputWorker worker) {
logger.info("Removing worker from index");
synchronized (this) {
if (!workers.containsKey(worker.filter.crisisCode))
return;
ArrayList<HttpOutputWorker> list = workers
.get(worker.filter.crisisCode);
list.remove(worker);
if (list.isEmpty())
workers.remove(worker.filter.crisisCode);
}
}
public List<HttpOutputWorker> getWorkers(String crisisCode) {
synchronized (this) {
if (workers.containsKey(crisisCode))
return new ArrayList<HttpOutputWorker>(workers.get(crisisCode));
else
return new ArrayList<HttpOutputWorker>();
}
}
}