package org.ourgrid.worker.business.requester;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.ourgrid.common.FileTransferInfo;
import org.ourgrid.common.internal.IResponseTO;
import org.ourgrid.common.internal.RequesterIF;
import org.ourgrid.common.internal.response.LoggerResponseTO;
import org.ourgrid.reqtrace.Req;
import org.ourgrid.worker.business.controller.FileTransferController;
import org.ourgrid.worker.business.dao.WorkerDAOFactory;
import org.ourgrid.worker.business.dao.WorkerStatusDAO;
import org.ourgrid.worker.business.messages.WorkerControllerMessages;
import org.ourgrid.worker.communication.processors.handle.GetFilesMessageHandle;
import org.ourgrid.worker.request.GetFilesProcessorRequestTO;
public class GetFilesProcessorRequester implements RequesterIF<GetFilesProcessorRequestTO> {
public List<IResponseTO> execute(GetFilesProcessorRequestTO request) {
List<IResponseTO> responses = new ArrayList<IResponseTO>();
GetFilesMessageHandle handle = request.getHandle();
FileTransferInfo[] files = handle.getFiles();
List<String> filePathList = createFilePathList(files);
String senderPublicKey = request.getSenderPublicKey();
WorkerStatusDAO workerStatusDAO = WorkerDAOFactory.getInstance().getWorkerStatusDAO();
if(!workerStatusDAO.hasConsumer()) {
responses.add(new LoggerResponseTO(WorkerControllerMessages.
getClientRequestsToRecoverFilesOnUnstartedWorkerMessage(filePathList, senderPublicKey),
LoggerResponseTO.WARN));
return responses;
}
if(!senderPublicKey.equals(workerStatusDAO.getConsumerPublicKey())) {
responses.add(new LoggerResponseTO(WorkerControllerMessages.
getUnknownClientRequestsToRecoverFilesMessage(filePathList, senderPublicKey),
LoggerResponseTO.WARN));
return responses;
}
if(!WorkerDAOFactory.getInstance().getExecutionDAO().isExecutionFinished()) {
responses.add(new LoggerResponseTO(WorkerControllerMessages.
getClientRequestsToRecoverFilesBeforeExecutionFinishMessage(filePathList, senderPublicKey),
LoggerResponseTO.WARN));
return responses;
}
if(workerStatusDAO.isFileTransferErrorState()) {
responses.add(new LoggerResponseTO(WorkerControllerMessages.
getClientRequestsToRecoverFilesOnWorkerWithErrorMessage(filePathList, senderPublicKey),
LoggerResponseTO.WARN));
return responses;
}
FileTransferController.getInstance().startTransfer(workerStatusDAO.getConsumerDeploymentID(),
workerStatusDAO.getConsumerPublicKey(), responses, files);
return responses;
}
@Req("REQ081")
private List<String> createFilePathList(FileTransferInfo... infos) {
List<String> list = new LinkedList<String>();
if(infos != null) {
for (FileTransferInfo info : infos) {
list.add(info.getFilePath());
}
return list;
}
return null;
}
}