package edu.usc.enl.dynamicmeasurement.algorithms.taskhandler.single;
import edu.usc.enl.dynamicmeasurement.algorithms.taskhandler.TaskHandler;
import edu.usc.enl.dynamicmeasurement.algorithms.tasks.Task2;
import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.SingleSwitchTask;
import edu.usc.enl.dynamicmeasurement.data.DataPacket;
import edu.usc.enl.dynamicmeasurement.data.FinishPacket;
import edu.usc.enl.dynamicmeasurement.process.EpochPacket;
import edu.usc.enl.dynamicmeasurement.util.Util;
import org.w3c.dom.Element;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* User: masoud
* Date: 9/2/13
* Time: 4:39 PM <br/>
* A very simple task handler that can handle only one task
*/
public class SingleTaskHandler extends TaskHandler {
private List<Task2> tasks; //kept this as a list to just not create it each time for getTasks method!
public SingleTaskHandler(Element element) {
super();
this.tasks = new ArrayList<>();
}
@Override
public void addTask(Task2 task, int step) {
super.addTask(task, step);
if (tasks.size() > 0) {
tasks.get(0).finish(new FinishPacket(step * Util.getSimulationConfiguration().getEpoch()));
tasks.clear();
}
tasks.add(task);
((SingleSwitchTask) task).setResourceShare(Util.getNetwork().getFirstMonitorPoints().getCapacity());
}
@Override
public Collection<? extends Task2> getTasks() {
return tasks;
}
@Override
public void removeTask(String taskName, int step) {
System.err.println("Does not support that");
}
@Override
protected void process2(DataPacket p) {
if (tasks.size() > 0) {
tasks.get(0).process(p);
}
}
@Override
protected void step(EpochPacket p) {
super.step(p);
if (tasks.size() > 0) {
int step = p.getStep();
// report tasks
tasks.get(0).report(step);
// update accuracy estimates
tasks.get(0).update(step);
}
}
@Override
public void finish(FinishPacket p) {
if (tasks.size() > 0) {
tasks.get(0).finish(p);
}
}
@Override
public void writeLog(int step) {
}
}