package org.ourgrid.broker.business.requester;
import java.util.ArrayList;
import java.util.List;
import org.ourgrid.broker.business.dao.BrokerDAOFactory;
import org.ourgrid.broker.business.dao.JobDAO;
import org.ourgrid.broker.business.messages.BrokerControlMessages;
import org.ourgrid.broker.business.scheduler.SchedulerIF;
import org.ourgrid.broker.request.CancelJobRequestTO;
import org.ourgrid.common.internal.IResponseTO;
import org.ourgrid.common.internal.RequesterIF;
import org.ourgrid.common.internal.response.LoggerResponseTO;
import org.ourgrid.common.internal.response.OperationSucceedResponseTO;
public class CancelJobRequester implements RequesterIF<CancelJobRequestTO> {
public List<IResponseTO> execute(CancelJobRequestTO request) {
List<IResponseTO> responses = new ArrayList<IResponseTO>();
responses.add(new LoggerResponseTO("Trying to cancel a job.", LoggerResponseTO.INFO));
String senderPubKey = request.getSenderPublicKey();
if (!request.isThisMyPublicKey()) {
responses.add(new LoggerResponseTO(BrokerControlMessages.getUnknownSenderControllingBrokerMessage(senderPubKey), LoggerResponseTO.WARN));
return responses;
}
if (!request.canComponentBeUsed()) {
responses.add(new LoggerResponseTO(BrokerControlMessages.getComponentNotStartedMessage(), LoggerResponseTO.ERROR));
return responses;
}
JobDAO jobDAO = BrokerDAOFactory.getInstance().getJobDAO();
int jobID = request.getJobID();
if (!jobDAO.jobExists(jobID)) {
responses.add(new LoggerResponseTO(BrokerControlMessages.getNoSuchJobToCancelMessage(jobID), LoggerResponseTO.WARN));
responses.add(new LoggerResponseTO("Operation cancel job succeed.", LoggerResponseTO.INFO));
OperationSucceedResponseTO to = new OperationSucceedResponseTO();
to.setClientAddress(request.getBrokerControlClientAddress());
to.setErrorCause(new Exception(BrokerControlMessages.getNoSuchJobToCancelMessage(jobID)));
responses.add(to);
return responses;
}
jobDAO.setBrokerControlClientAddress(request.getBrokerControlClientAddress());
SchedulerIF scheduler = jobDAO.getJobScheduler(jobID);
scheduler.cancelJob(jobID, responses);
jobDAO.cancelJob(jobID);
return responses;
}
}