package fi.utu.ville.exercises.helpers;
import java.io.Serializable;
import java.util.HashSet;
import fi.utu.ville.exercises.model.ExecutionState;
import fi.utu.ville.exercises.model.Executor;
import fi.utu.ville.exercises.model.SubmissionInfo;
import fi.utu.ville.exercises.model.SubmissionListener;
import fi.utu.ville.exercises.model.SubmissionResult;
import fi.utu.ville.exercises.model.SubmissionType;
/**
* <p>
* A simple helper class to which standard {@link SubmissionListener}-handling can be delegated to.
* </p>
* <p>
* This class might be usable if all the functionality in {@link ExerciseExecutionHelper} is not needed.
* </p>
*
* @author Riku Haavisto
*
* @param <S>
* relevant {@link SubmissionInfo}-implementor
*/
public class SubmitListenerHelper<S extends SubmissionInfo> implements
Serializable {
/**
*
*/
private static final long serialVersionUID = -4399905295186961688L;
private final HashSet<SubmissionListener<S>> submitListeners = new HashSet<SubmissionListener<S>>();
public SubmitListenerHelper() {
}
/**
* Registers a {@link SubmissionListener}. {@link Executor #registerSubmitListener(SubmissionListener)} can be delegated to this method.
*
* @param submitListener
* {@link SubmissionListener} to be registered
*/
public void registerSubmitListener(SubmissionListener<S> submitListener) {
submitListeners.add(submitListener);
}
/**
* <p>
* Informs registered {@link SubmissionListener}s with {@link SubmissionResult} constructed from the parameters.
* </p>
* <p>
* Does not perform any {@link ExecutionState}-changes.
* </p>
*
* @param correctness
* double presenting correctness of submission in range 0.0 - 1.0
* @param timeOnTask
* int presenting time-on-task user used in seconds
* @param data
* {@link SubmissionInfo}-object about the submission
* @param submType
* used {@link SubmissionType}
*/
public void informOnlySubmit(double correctness, int timeOnTask, S data,
SubmissionType submType) {
for (SubmissionListener<S> sListener : submitListeners) {
sListener.submitted(new SubmissionResult<S>(correctness,
timeOnTask, data, null, submType));
}
}
/**
* <p>
* Informs registered {@link SubmissionListener}s with given {@link SubmissionResult}.
* </p>
* <p>
* Does not perform any {@link ExecutionState}-changes.
* </p>
*
* @param fb
* {@link SubmissionResult} to use
*/
public void informOnlySubmit(SubmissionResult<S> fb) {
for (SubmissionListener<S> sListener : submitListeners) {
sListener.submitted(fb);
}
}
}