package org.ourgrid.peer.business.requester; import java.util.ArrayList; import java.util.List; import org.ourgrid.common.interfaces.to.LocalWorkerState; import org.ourgrid.common.internal.IResponseTO; import org.ourgrid.common.internal.RequesterIF; import org.ourgrid.common.internal.response.LoggerResponseTO; import org.ourgrid.common.statistics.control.UserControl; import org.ourgrid.common.statistics.control.WorkerControl; import org.ourgrid.peer.business.controller.allocation.RedistributionController; import org.ourgrid.peer.business.controller.messages.WorkerMessages; import org.ourgrid.peer.business.dao.PeerDAOFactory; import org.ourgrid.peer.dao.AllocationDAO; import org.ourgrid.peer.request.DisposeWorkerRequestTO; import org.ourgrid.peer.to.AllocableWorker; import org.ourgrid.peer.to.LocalWorker; import org.ourgrid.peer.to.PeerUser; import org.ourgrid.peer.to.PeerUserReference; import org.ourgrid.reqtrace.Req; public class DisposeWorkerRequester implements RequesterIF<DisposeWorkerRequestTO> { public List<IResponseTO> execute(DisposeWorkerRequestTO request) { List<IResponseTO> responses = new ArrayList<IResponseTO>(); String brokerPublicKey = request.getBrokerPublicKey(); String lwpcAddress = validateUser(responses, brokerPublicKey); if (lwpcAddress == null) { return responses; } String workerAddress = request.getWorkerAddress(); AllocableWorker allocable = validateWorker(responses, workerAddress, request.getWorkerUserAtServer(), request.getWorkerPublicKey(), brokerPublicKey, lwpcAddress); if (allocable == null) { return responses; } LoggerResponseTO loggerResponse = new LoggerResponseTO( WorkerMessages.getDisposingWorkerMessage( allocable.getRequest().getSpecification().getRequestId(), lwpcAddress, workerAddress), LoggerResponseTO.DEBUG); responses.add(loggerResponse); RedistributionController.getInstance().redistributeWorker(responses, allocable); return responses; } @Req("REQ015") private String validateUser(List<IResponseTO> responses, String brokerPublicKey) { PeerUser user = UserControl.getInstance().getUserByPublicKey(responses, brokerPublicKey); if (user == null) { LoggerResponseTO loggerResponse = new LoggerResponseTO( WorkerMessages.getUnknownConsumerDisposingWorkerMessage(brokerPublicKey), LoggerResponseTO.WARN); responses.add(loggerResponse); return null; } PeerUserReference loggedUser = PeerDAOFactory.getInstance().getUsersDAO().getLoggedUser(brokerPublicKey); if (loggedUser == null) { LoggerResponseTO loggerResponse = new LoggerResponseTO( WorkerMessages.getNotLoggedConsumerDisposingWorkerMessage(brokerPublicKey), LoggerResponseTO.WARN); responses.add(loggerResponse); return null; } String lwpcAddress = loggedUser.getWorkerProviderClientAddress(); if (lwpcAddress == null) { LoggerResponseTO loggerResponse = new LoggerResponseTO( WorkerMessages.getNotLoggedUserDisposingWorkerMessage(brokerPublicKey), LoggerResponseTO.WARN); responses.add(loggerResponse); return null; } return lwpcAddress; } @Req("REQ015") private AllocableWorker validateWorker(List<IResponseTO> responses, String workerAddress, String workerUserAtServer, String workerPublicKey, String brokerPublicKey, String lwpcAdress) { if (workerAddress == null) { LoggerResponseTO loggerResponse = new LoggerResponseTO( WorkerMessages.getNullWorkerDisposalMessage(lwpcAdress), LoggerResponseTO.WARN); responses.add(loggerResponse); return null; } LocalWorker localWorker = WorkerControl.getInstance().getLocalWorker(responses, workerUserAtServer); if (localWorker != null && ( localWorker.getStatus().equals(LocalWorkerState.OWNER) || localWorker.getStatus().equals(LocalWorkerState.IDLE))) { LoggerResponseTO loggerResponse = new LoggerResponseTO( WorkerMessages.getConsumerDisposingNotAllocatedWorkerMessage( workerAddress, lwpcAdress), LoggerResponseTO.WARN); responses.add(loggerResponse); return null; } AllocationDAO allocationDAO = PeerDAOFactory.getInstance().getAllocationDAO(); AllocableWorker allocable = allocationDAO.getAllocableWorker(workerPublicKey); if (allocable == null) { LoggerResponseTO loggerResponse = new LoggerResponseTO( WorkerMessages.getUnknownWorkerDisposalMessage(lwpcAdress), LoggerResponseTO.WARN); responses.add(loggerResponse); return null; } // DeploymentID workerManagementID = serviceManager.getStubDeploymentID(allocable.getWorkerManagement()); if (allocable.getConsumer() == null || allocable.getConsumer().getPublicKey() == null) { return null; //TODO } if (!allocable.getConsumer().getPublicKey().equals(brokerPublicKey)) { LoggerResponseTO loggerResponse = new LoggerResponseTO( WorkerMessages.getConsumerDisposingNotAllocatedWorkerMessage( workerAddress, lwpcAdress), LoggerResponseTO.WARN); responses.add(loggerResponse); return null; } return allocable; } }