package edu.harvard.econcs.turkserver.server; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import edu.harvard.econcs.turkserver.api.ExperimentController; import edu.harvard.econcs.turkserver.api.HITWorker; /** * TODO make this more asynchronous in the starting of rounds and experiment * @author alicexigao * */ public class FakeExperimentController implements ExperimentController { static final String expId = "fake experiment"; long startTime; long finishTime; FakeHITWorkerGroup group; EventAnnotationManager callbacks; AtomicInteger roundNum; public FakeExperimentController(FakeHITWorkerGroup fakeGroup) { this.group = fakeGroup; callbacks = new EventAnnotationManager(); for(HITWorker fake : fakeGroup.getHITWorkers() ) ((FakeHITWorker) fake).initialize(expId, callbacks); } public void addFakeGroup(FakeHITWorkerGroup fakeGroup) { // TODO This doesn't actually track this group, so fix it for(HITWorker fake : fakeGroup.getHITWorkers() ) ((FakeHITWorker) fake).initialize(expId, callbacks); } public void setBean(Object bean) { callbacks.processExperiment(expId, bean); } public void startExperiment() { startTime = System.currentTimeMillis(); callbacks.triggerStart(expId); } public void rcvBroadcast(HITWorker worker, Map<String, Object> msg) { callbacks.deliverBroadcastMsg(expId, worker, msg); } public void rcvService(HITWorker worker, Map<String, Object> msg) { callbacks.deliverServiceMsg(expId, worker, msg); } @Override public String getExpId() { return expId; } @Override public void sendExperimentBroadcast(Map<String, Object> msg) { group.deliverExperimentBroadcast(msg); } @Override public void setRoundInput(String inputData) { // TODO Auto-generated method stub } @Override public void setBonusAmount(HITWorker hitWorker, double amount) { // TODO Auto-generated method stub } @Override public void startRounds() { roundNum = new AtomicInteger(1); callbacks.triggerRound(expId, roundNum.get()); } @Override public int getCurrentRound() { return roundNum.get(); } @Override public void finishRound() { callbacks.triggerRound(expId, roundNum.incrementAndGet()); } @Override public void finishExperiment() { finishTime = System.currentTimeMillis(); callbacks.deprocessExperiment(expId); } @Override public long getStartTime() { return startTime; } @Override public long getFinishTime() { return finishTime; } }