package edu.harvard.econcs.turkserver.server.mysql; import java.net.InetAddress; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.LinkedList; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; import net.andrewmao.misc.ConcurrentBooleanCounter; import org.apache.commons.collections.map.MultiValueMap; import edu.harvard.econcs.turkserver.SessionExpiredException; import edu.harvard.econcs.turkserver.schema.Session; @Deprecated public class SimpleDummyTracker extends SimpleDataTracker { private ConcurrentBooleanCounter<String> usedIDs; private ConcurrentHashMap<String, String> idToAssignmentId; private MultiValueMap workerIdToSessions; public SimpleDummyTracker(int simultaneousSessionLimit, int totalSetLimit) { super(simultaneousSessionLimit, totalSetLimit); usedIDs = new ConcurrentBooleanCounter<String>(); idToAssignmentId = new ConcurrentHashMap<String, String>(); // TODO double-check the concurrency of this if it becomes important workerIdToSessions = MultiValueMap.decorate( new ConcurrentHashMap<String, String>(), ConcurrentLinkedQueue.class); } @Override public boolean sessionExistsInDB(String sessionID) throws SessionExpiredException { return usedIDs.containsKey(sessionID); } @Override public boolean sessionCompletedInDB(String id) { return (usedIDs.containsKey(id) && (usedIDs.get(id) == true)); } @SuppressWarnings("unchecked") @Override public List<Session> getSetSessionInfoForWorker(String workerId) { Collection<String> sessions = (Collection<String>) workerIdToSessions.get(workerId); if( sessions == null ) return null; List<Session> srs = new ArrayList<Session>(sessions.size()); for( String bi : sessions ) srs.add(getStoredSessionInfo(bi)); return srs; } @Override public List<Object[]> getWorkerAndTotalDataCounts(String workerId) { logger.warning("Tracking set data not yet implemented in dummy tracker"); return null; } @Override public Session getStoredSessionInfo(String sessionID) { // Obviously, this is missing most of the stuff, but who cares for now Session sr = new Session(); sr.setHitId(sessionID); sr.setAssignmentId(idToAssignmentId.get(sessionID)); return sr; } @Override public void saveHITId(String hitId) { usedIDs.put(hitId, false); } @Override public void saveAssignmentForSession(String hitId, String assignmentId, String workerId) { idToAssignmentId.put(hitId, assignmentId); workerIdToSessions.put(workerId, hitId); logger.info(String.format("session %s has assignment %s by worker %s\n", hitId, assignmentId, workerId)); } @Override public void setSessionData(String hitId, String Data) { logger.warning("Saving data not yet implemented in dummy tracker"); } @Override public void saveSessionLog(String hitId, String data) { System.out.println("Log for " + hitId); System.out.println(data); } @Override public void saveIPForSession(String hitId, InetAddress remoteAddress, Date lobbyTime) { logger.info(hitId + " connected from IP " + remoteAddress.getHostAddress() + " at time " + lobbyTime.toString()); } @Override public List<Session> expireUnusedSessions() { logger.warning("Expiring HITs not yet implemented in dummy tracker"); return new LinkedList<Session>(); } }