package com.datascience.core.commands;
import com.datascience.core.base.AssignedLabel;
import com.datascience.core.base.LObject;
import com.datascience.core.base.Project;
import com.datascience.core.base.Worker;
import com.datascience.datastoring.jobs.JobCommand;
import com.datascience.gal.WorkerValue;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
/**
*
* @author artur
*/
public class WorkerCommands {
protected static WorkerValue<Map<String, Object>> getWorkerStats(Project project, Worker worker){
Map<String, Object> map = new HashMap<String, Object>();
WorkerValue<Map<String, Object>> ret = new WorkerValue<Map<String, Object>>(worker.getName(), map);
map.put("assigns", project.getData().getWorkerAssigns(worker).size());
int goldTests = 0;
int correctGoldTests = 0;
for (AssignedLabel al : (Collection<AssignedLabel>) project.getData().getWorkerAssigns(worker)){
LObject<String> obj = project.getData().getObject(al.getLobject().getName());
if (obj.isGold()){
goldTests++;
if (al.getLabel().equals(obj.getGoldLabel()))
correctGoldTests++;
}
}
map.put("goldTests", goldTests);
map.put("correctGoldTests", correctGoldTests);
return ret;
}
static public class GetWorkers extends JobCommand<Collection<WorkerValue<Map<String, Object>>>, Project<?, ?, ?, ?>> {
public GetWorkers(){
super(false);
}
@Override
protected void realExecute() {
Collection<WorkerValue<Map<String, Object>>> ret = new ArrayList<WorkerValue<Map<String, Object>>>();
for (Worker w : project.getData().getWorkers()){
ret.add(getWorkerStats(project, w));
}
setResult(ret);
}
}
static public class GetWorker extends JobCommand<WorkerValue<Map<String, Object>>, Project> {
String workerId;
public GetWorker(String workerId){
super(false);
this.workerId = workerId;
}
@Override
protected void realExecute() {
Worker w = ParamChecking.worker(project.getData(), workerId);
setResult(getWorkerStats(project, w));
}
}
}