package net.codjo.control.server.plugin;
import net.codjo.control.common.message.ControlJobRequest;
import net.codjo.control.common.message.SourceOfData;
import net.codjo.control.common.message.TransferJobRequest;
import net.codjo.workflow.common.message.JobRequest;
import net.codjo.workflow.common.message.ScheduleContract;
import net.codjo.workflow.server.api.ScheduleAgent;
/**
*
*/
class TransferScheduleAgent extends ScheduleAgent {
TransferScheduleAgent() {
super(new TransferHandler());
}
private static class TransferHandler extends AbstractHandler {
public boolean acceptContract(ScheduleContract contract) {
JobRequest request = contract.getRequest();
return isUserToQuarantineRequest(request)
|| (ControlServerPlugin.CONTROL_REQUEST_TYPE.equals(request.getType())
&& contract.getPreviousContract() != null
&& isUserToQuarantineRequest(contract.getPreviousContract().getRequest()));
}
private boolean isUserToQuarantineRequest(JobRequest request) {
if (!ControlServerPlugin.QUARANTINE_TRANSFER_TYPE.equals(request.getType())) {
return false;
}
TransferJobRequest transfer = new TransferJobRequest(request);
return transfer.getTransferType() == TransferJobRequest.Transfer.USER_TO_QUARANTINE;
}
public JobRequest createNextRequest(ScheduleContract contract) {
if (ControlServerPlugin.QUARANTINE_TRANSFER_TYPE.equals(contract.getRequest().getType())) {
TransferJobRequest transfer = new TransferJobRequest(contract.getRequest());
ControlJobRequest jobRequest = new ControlJobRequest(transfer.getQuarantine());
jobRequest.addPath(SourceOfData.TRANSFERT_FROM_QUARANTINE);
return jobRequest.toRequest();
}
else {
TransferJobRequest transfer =
new TransferJobRequest(contract.getPreviousContract().getRequest());
transfer.setTransferType(TransferJobRequest.Transfer.QUARANTINE_TO_USER);
transfer.setId(null);
return transfer.toRequest();
}
}
}
}