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.messages.BrokerControlMessages; import org.ourgrid.broker.business.scheduler.SchedulerIF; import org.ourgrid.broker.request.StopBrokerRequestTO; import org.ourgrid.common.internal.IResponseTO; import org.ourgrid.common.internal.RequesterIF; import org.ourgrid.common.internal.response.LoggerResponseTO; public class StopBrokerRequester implements RequesterIF<StopBrokerRequestTO> { public List<IResponseTO> execute(StopBrokerRequestTO request) { List<IResponseTO> responses = new ArrayList<IResponseTO>(); String senderPublicKey = request.getSenderPublicKey(); responses.add(new LoggerResponseTO(BrokerControlMessages.getTryingToStopBrokerMessage(), LoggerResponseTO.INFO)); if(!request.isThisMyPublicKey()) { responses.add(new LoggerResponseTO(BrokerControlMessages.getUnknownSenderControllingBrokerMessage(senderPublicKey), LoggerResponseTO.WARN)); return responses; } if (!request.canComponentBeUsed()) { responses.add(new LoggerResponseTO(BrokerControlMessages.getComponentNotStartedMessage(), LoggerResponseTO.ERROR)); return responses; } killJobDAO(); finishRequests(responses); for(SchedulerIF scheduler: BrokerDAOFactory.getInstance().getJobDAO().getSchedulers()) { scheduler.stop(); } responses.add(new LoggerResponseTO(BrokerControlMessages.getSuccessfullyShutdownBrokerMessage(), LoggerResponseTO.INFO)); return responses; } /** * Shuts the JobCounter down, by saving its last jobID into a file */ private void killJobDAO() { BrokerDAOFactory.getInstance().getJobCounterDAO().getJobCounter().shutdown(true); } protected void finishRequests(List<IResponseTO> responses) { for(SchedulerIF scheduler: BrokerDAOFactory.getInstance().getJobDAO().getSchedulers()) { scheduler.finishRequests(responses); } } }