package org.ourgrid.peer.business.requester;
import java.util.ArrayList;
import java.util.List;
import org.ourgrid.common.interfaces.management.RemoteWorkerManagement;
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.RegisterInterestResponseTO;
import org.ourgrid.common.internal.response.ReleaseResponseTO;
import org.ourgrid.common.specification.worker.WorkerSpecification;
import org.ourgrid.common.util.StringUtil;
import org.ourgrid.peer.PeerConstants;
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.HereIsWorkerRequestTO;
import org.ourgrid.peer.to.RemoteAllocableWorker;
public class HereIsWorkerRequester implements RequesterIF<HereIsWorkerRequestTO> {
public List<IResponseTO> execute(HereIsWorkerRequestTO request) {
List<IResponseTO> responses = new ArrayList<IResponseTO>();
String senderPublicKey = request.getSenderPublicKey();
String providerAddress = request.getProviderAddress();
String workerAddress = request.getWorkerAddress();
WorkerSpecification workerSpec = request.getWorkerSpec();
if (providerAddress == null) {
responses.add(new LoggerResponseTO(WorkerMessages.getReceivingNullRemoteProviderMessage(senderPublicKey), LoggerResponseTO.WARN));
return responses;
}
if (workerAddress == null) {
responses.add(new LoggerResponseTO(WorkerMessages.getReceivingNullRemoteWorkerMessage(
StringUtil.addressToContainerID(providerAddress)), LoggerResponseTO.WARN));
ReleaseResponseTO releaseTO = new ReleaseResponseTO();
releaseTO.setStubAddress(providerAddress);
responses.add(releaseTO);
return responses;
}
if (workerSpec == null) {
responses.add(new LoggerResponseTO(WorkerMessages.getReceivingNullWorkerSpecRemoteWorkerMessage(
StringUtil.addressToContainerID(providerAddress)), LoggerResponseTO.WARN));
ReleaseResponseTO releaseTO = new ReleaseResponseTO();
releaseTO.setStubAddress(providerAddress);
responses.add(releaseTO);
ReleaseResponseTO releaseTO2 = new ReleaseResponseTO();
releaseTO2.setStubAddress(workerAddress);
responses.add(releaseTO2);
return responses;
}
AllocationDAO allocationDAO = PeerDAOFactory.getInstance().getAllocationDAO();
RemoteAllocableWorker rAlloc = new RemoteAllocableWorker(workerAddress, request.getWorkerClientAddress(), providerAddress,
request.getProviderCertSubjectDN(), workerSpec);
allocationDAO.addNotRecoveredRemoteAllocableWorker(workerAddress, rAlloc);
RegisterInterestResponseTO registerInterestResponse = new RegisterInterestResponseTO();
registerInterestResponse.setMonitorableAddress(workerAddress);
registerInterestResponse.setMonitorableType(RemoteWorkerManagement.class);
registerInterestResponse.setMonitorName(PeerConstants.REMOTE_WORKER_MANAGEMENT_CLIENT);
responses.add(registerInterestResponse);
return responses;
}
}