package org.ourgrid.peer.business.requester;
import java.util.ArrayList;
import java.util.List;
import org.ourgrid.common.interfaces.to.RequestSpecification;
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.peer.business.controller.allocation.RedistributionController;
import org.ourgrid.peer.business.controller.messages.WorkerMessages;
import org.ourgrid.peer.business.dao.PeerDAOFactory;
import org.ourgrid.peer.request.UnwantedWorkerRequestTO;
import org.ourgrid.peer.to.AllocableWorker;
import org.ourgrid.peer.to.PeerUser;
import org.ourgrid.peer.to.PeerUserReference;
import org.ourgrid.peer.to.Request;
public class UnwantedWorkerRequester implements RequesterIF<UnwantedWorkerRequestTO> {
public List<IResponseTO> execute(UnwantedWorkerRequestTO request) {
List<IResponseTO> responses = new ArrayList<IResponseTO>();
String brokerPublicKey = request.getSenderPublicKey();
String workerAddress = request.getWorkerAddress();
PeerUser user = UserControl.getInstance().getUserByPublicKey(responses, brokerPublicKey);
if (user == null) {
responses.add(new LoggerResponseTO(WorkerMessages.getUnknownConsumerMarkedUnwantedWorkerMessage(brokerPublicKey),
LoggerResponseTO.WARN));
return responses;
}
PeerUserReference loggedUser = PeerDAOFactory.getInstance().getUsersDAO().getLoggedUser(brokerPublicKey);
if (loggedUser == null) {
responses.add(new LoggerResponseTO(WorkerMessages.getUnknownConsumerMarkedUnwantedWorkerMessage(brokerPublicKey),
LoggerResponseTO.WARN));
return responses;
}
String lwpcAddress = loggedUser.getWorkerProviderClientAddress();
if (workerAddress == null) {
responses.add(new LoggerResponseTO(WorkerMessages.getNullUnwantedWorkerMessage(lwpcAddress),
LoggerResponseTO.WARN));
return responses;
}
AllocableWorker allocable = PeerDAOFactory.getInstance().getAllocationDAO().getAllocableWorker(request.getWorkerPublicKey());
if (allocable == null) {
responses.add(new LoggerResponseTO(WorkerMessages.getUnknownUnwantedWorkerMessage(lwpcAddress, workerAddress),
LoggerResponseTO.WARN));
return responses;
}
if (!allocable.getConsumer().getConsumerAddress().equals(lwpcAddress)) {
responses.add(new LoggerResponseTO(WorkerMessages.getNotAllocatedUnwantedWorkerMessage(lwpcAddress, workerAddress),
LoggerResponseTO.WARN));
return responses;
}
RequestSpecification requestSpec = request.getRequestSpec();
if (requestSpec == null) {
responses.add(new LoggerResponseTO(WorkerMessages.getNullRequestUnwantedWorkerMessage(lwpcAddress, workerAddress, allocable.isWorkerLocal()),
LoggerResponseTO.WARN));
return responses;
}
if (!allocable.getRequest().getSpecification().equals(requestSpec)) {
responses.add(new LoggerResponseTO(WorkerMessages.getInvalidRequestUnwantedWorkerMessage(requestSpec.getRequestId(), lwpcAddress,
workerAddress, allocable.isWorkerLocal()), LoggerResponseTO.WARN));
return responses;
}
Request r = PeerDAOFactory.getInstance().getRequestDAO().getRequest(requestSpec.getRequestId());
r.addUnwantedWorker(allocable.getWorkerSpecification());
RedistributionController.getInstance().redistributeWorker(responses, allocable);
return responses;
}
}