package edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.Task2; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.aggregator.AccuracyAggregator; import edu.usc.enl.dynamicmeasurement.algorithms.tasks.multitask.singleswitch.resourceallocation.AllocationTaskView; import org.w3c.dom.Element; /** * Created with IntelliJ IDEA. * User: masoud * Date: 8/23/13 * Time: 11:28 AM <br/> * represents a task on a single switch */ public class SingleSwitchTask extends Task2 implements AllocationTaskView { protected int resourceShare; private double accuracy; private AccuracyAggregator accuracyAggregator; public SingleSwitchTask(Element element) throws Exception { super(element); resourceShare = 0; } @Override public void updateStats() { accuracyAggregator.update(getAccuracy2()); } public int getResourceShare() { return resourceShare; } public void setResourceShare(int resourceShare) { this.resourceShare = resourceShare; } @Override public void update(int step) { ((SingleSwitchTaskImplementation) user.getImplementation()).setCapacityShare(resourceShare); super.update(step); } @Override public String toString() { return super.toString() + ", ResourceShare: " + resourceShare; } public void setAccuracyAggregator(AccuracyAggregator accuracyAggregator) { this.accuracyAggregator = accuracyAggregator; } public double getAggregatedAccuracy() { return accuracyAggregator.getAccuracy(); } @Override public Task2 getTask() { return this; } public double getAccuracy2() { return accuracy; } @Override public int getUsedResourceShare() { return ((SingleSwitchTaskImplementation) user.getImplementation()).getUsedResourceShare(); } public void setAccuracy(double accuracy) { this.accuracy = accuracy; } @Override public void report(int step) { super.report(step); setAccuracy(((SingleSwitchTaskImplementation) user.getImplementation()).estimateAccuracy()); } /** * The actual algorithm must also implement this interface */ public static interface SingleSwitchTaskImplementation extends TaskImplementation { /** * set resources for the task on this switch * * @param resource */ void setCapacityShare(int resource); /** * estimate the instantaneous accuracy * * @return */ double estimateAccuracy(); /** * @return the number of used resources out of the allocated onces */ int getUsedResourceShare(); } }