package org.ourgrid.worker.business.requester; import java.util.ArrayList; import java.util.List; import org.ourgrid.common.filemanager.FileInfo; import org.ourgrid.common.interfaces.to.GridProcessErrorTypes; import org.ourgrid.common.internal.IResponseTO; import org.ourgrid.common.internal.RequesterIF; import org.ourgrid.common.internal.response.LoggerResponseTO; import org.ourgrid.worker.business.controller.EnvironmentController; import org.ourgrid.worker.business.controller.GridProcessError; 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.GetFileInfoMessageHandle; import org.ourgrid.worker.request.GetFileInfoProcessorRequestTO; import org.ourgrid.worker.response.ErrorOcurredMessageHandleResponseTO; import org.ourgrid.worker.response.HereIsFileInfoMessageHandleResponseTO; public class GetFileInfoProcessorRequester implements RequesterIF<GetFileInfoProcessorRequestTO> { public List<IResponseTO> execute(GetFileInfoProcessorRequestTO request) { List<IResponseTO> responses = new ArrayList<IResponseTO>(); GetFileInfoMessageHandle handle = request.getHandle(); String filePath = handle.getFilePath(); String senderPubKey = request.getSenderPublicKey(); WorkerStatusDAO workerStatusDAO = WorkerDAOFactory.getInstance().getWorkerStatusDAO(); if (!senderPubKey.equals(workerStatusDAO.getConsumerPublicKey())) { responses.add(new LoggerResponseTO(WorkerControllerMessages. getUnknownClientTriesToGetFileInfoMessage(filePath, senderPubKey), LoggerResponseTO.WARN)); return responses; } if(!workerStatusDAO.isWorkingState()) { responses.add(new LoggerResponseTO(WorkerControllerMessages. getClientWithoutStartingWorkTriesToGetFileInfoMessage(filePath, senderPubKey), LoggerResponseTO.WARN)); return responses; } if(!workerStatusDAO.hasConsumer()) { responses.add(new LoggerResponseTO(WorkerControllerMessages. getClientWithoutStartingWorkTriesToGetFileInfoMessage(filePath, senderPubKey), LoggerResponseTO.DEBUG)); return responses; } String consumerAddress = workerStatusDAO.getConsumerAddress(); String solvedStorageDir; try { solvedStorageDir = EnvironmentController.getInstance().solveStorageDir(filePath); String fileDigest = EnvironmentController.getInstance().getFileDigest(solvedStorageDir); responses.add(new HereIsFileInfoMessageHandleResponseTO(handle.getHandleId(), new FileInfo(filePath, fileDigest), consumerAddress)); } catch (Exception exception) { responses.add(new LoggerResponseTO(WorkerControllerMessages. getErrorWhileGettingFileInfoMessage(filePath, senderPubKey, exception.getMessage()), LoggerResponseTO.WARN)); responses.add(new ErrorOcurredMessageHandleResponseTO(new GridProcessError(exception, GridProcessErrorTypes.APPLICATION_ERROR), consumerAddress)); return responses; } responses.add(new LoggerResponseTO(WorkerControllerMessages.getSuccessfulGetFileInfoMessage( solvedStorageDir, senderPubKey), LoggerResponseTO.DEBUG)); return responses; } }