package net.sourceforge.seqware.common.business.impl; import io.seqware.common.model.ProcessingStatus; import java.io.IOException; import java.util.Date; import java.util.Set; import java.util.TreeSet; import net.sourceforge.seqware.common.business.FileUploadService; import net.sourceforge.seqware.common.business.UploadFile; import net.sourceforge.seqware.common.dao.ExperimentDAO; import net.sourceforge.seqware.common.dao.FileDAO; import net.sourceforge.seqware.common.dao.FileTypeDAO; import net.sourceforge.seqware.common.dao.IUSDAO; import net.sourceforge.seqware.common.dao.LaneDAO; import net.sourceforge.seqware.common.dao.ProcessingDAO; import net.sourceforge.seqware.common.dao.SampleDAO; import net.sourceforge.seqware.common.dao.SequencerRunDAO; import net.sourceforge.seqware.common.dao.StudyDAO; import net.sourceforge.seqware.common.model.Experiment; import net.sourceforge.seqware.common.model.File; import net.sourceforge.seqware.common.model.FileType; import net.sourceforge.seqware.common.model.IUS; import net.sourceforge.seqware.common.model.Lane; import net.sourceforge.seqware.common.model.Processing; import net.sourceforge.seqware.common.model.Registration; import net.sourceforge.seqware.common.model.Sample; import net.sourceforge.seqware.common.model.SequencerRun; import net.sourceforge.seqware.common.model.Study; /** * <p> * FileUploadServiceImpl class. * </p> * * @author boconnor * @version $Id: $Id */ public class FileUploadServiceImpl implements FileUploadService { private StudyDAO studyDAO = null; private ExperimentDAO experimentDAO = null; private SampleDAO sampleDAO = null; private LaneDAO laneDAO = null; private ProcessingDAO processingDAO = null; private SequencerRunDAO sequencerRunDAO = null; private IUSDAO IUSDAO = null; private FileTypeDAO fileTypeDAO = null; private FileDAO fileDAO = null; /** * <p> * Constructor for FileUploadServiceImpl. * </p> */ public FileUploadServiceImpl() { super(); } /** * <p> * Setter for the field <code>studyDAO</code>. * </p> * * @param studyDAO * a {@link net.sourceforge.seqware.common.dao.StudyDAO} object. */ public void setStudyDAO(StudyDAO studyDAO) { this.studyDAO = studyDAO; } /** * <p> * Setter for the field <code>experimentDAO</code>. * </p> * * @param experimentDAO * a {@link net.sourceforge.seqware.common.dao.ExperimentDAO} object. */ public void setExperimentDAO(ExperimentDAO experimentDAO) { this.experimentDAO = experimentDAO; } /** * <p> * Setter for the field <code>sampleDAO</code>. * </p> * * @param sampleDAO * a {@link net.sourceforge.seqware.common.dao.SampleDAO} object. */ public void setSampleDAO(SampleDAO sampleDAO) { this.sampleDAO = sampleDAO; } /** * <p> * Setter for the field <code>laneDAO</code>. * </p> * * @param laneDAO * a {@link net.sourceforge.seqware.common.dao.LaneDAO} object. */ public void setLaneDAO(LaneDAO laneDAO) { this.laneDAO = laneDAO; } /** * <p> * Setter for the field <code>processingDAO</code>. * </p> * * @param processingDAO * a {@link net.sourceforge.seqware.common.dao.ProcessingDAO} object. */ public void setProcessingDAO(ProcessingDAO processingDAO) { this.processingDAO = processingDAO; } /** * <p> * Setter for the field <code>sequencerRunDAO</code>. * </p> * * @param sequencerRunDAO * a {@link net.sourceforge.seqware.common.dao.SequencerRunDAO} object. */ public void setSequencerRunDAO(SequencerRunDAO sequencerRunDAO) { this.sequencerRunDAO = sequencerRunDAO; } /** * <p> * setIUSDAO. * </p> * * @param IUSDAO * a {@link net.sourceforge.seqware.common.dao.IUSDAO} object. */ public void setIUSDAO(IUSDAO IUSDAO) { this.IUSDAO = IUSDAO; } /** * <p> * Setter for the field <code>fileTypeDAO</code>. * </p> * * @param fileTypeDAO * a {@link net.sourceforge.seqware.common.dao.FileTypeDAO} object. */ public void setFileTypeDAO(FileTypeDAO fileTypeDAO) { this.fileTypeDAO = fileTypeDAO; } /** * Sets a private member variable with an instance of an implementation of FileDAO. This method is called by the Spring framework at run * time. * * @param fileDAO * implementation of FileDAO * @see fileDAO */ public void setFileDAO(FileDAO fileDAO) { this.fileDAO = fileDAO; } private File createFile(UploadFile uploadFile, String metaType, Registration owner) throws IOException { String filePath = ""; if (uploadFile.getUseURL()) { filePath = uploadFile.getFileURL(); } else { java.io.File f = fileDAO.saveFile(uploadFile.getFile(), uploadFile.getFolderStore(), owner); filePath = f.getPath(); } File file = new File(); file.setFilePath(filePath); file.setOwner(owner); file.setMetaType(metaType); fileDAO.insert(file); return file; } private Processing insertProcessing(Registration owner, Set<File> files) { Processing newProcessing = new Processing(); newProcessing.setOwner(owner); newProcessing.setFiles(files); newProcessing.setStatus(ProcessingStatus.success); newProcessing.setExitStatus(0); newProcessing.setProcessExitStatus(0); newProcessing.setRunStartTimestamp(null); newProcessing.setRunStopTimestamp(null); newProcessing.setAlgorithm("upload"); newProcessing.setCreateTimestamp(new Date()); processingDAO.insert(newProcessing); return newProcessing; } private Processing insert(UploadFile uploadFile, FileType fileType, Registration registration) throws Exception { Set<File> files = new TreeSet<>(); // if(file!= null && !file.isEmpty()){ files.add(createFile(uploadFile, fileType.getMetaType(), registration)); // } // create new processing Processing newProcessing = insertProcessing(registration, files); return newProcessing; } /** {@inheritDoc} */ @Override public void uploadFile(Study study, UploadFile uploadFile, FileType fileType, Registration registration) throws Exception { // create new processing Processing newProcessing = insert(uploadFile, fileType, registration); // get old processings Set<Processing> oldProcessings = study.getProcessings(); // and add them to new processing oldProcessings.add(newProcessing); // add study to new processing newProcessing.getStudies().add(study); // insert new study studyDAO.update(study); } /** {@inheritDoc} */ @Override public void uploadFile(Experiment experiment, UploadFile uploadFile, FileType fileType, Registration registration) throws Exception { // create new processing Processing newProcessing = insert(uploadFile, fileType, registration); // get old processings Set<Processing> oldProcessings = experiment.getProcessings(); // and add them to new processing oldProcessings.add(newProcessing); // add study to new processing newProcessing.getExperiments().add(experiment); // insert new study experimentDAO.update(experiment); } /** {@inheritDoc} */ @Override public void uploadFile(Sample sample, UploadFile uploadFile, FileType fileType, Registration registration) throws Exception { // create new processing Processing newProcessing = insert(uploadFile, fileType, registration); // get old processings Set<Processing> oldProcessings = sample.getProcessings(); // and add them to new processing oldProcessings.add(newProcessing); // add study to new processing newProcessing.getSamples().add(sample); // insert new study sampleDAO.update(sample); } /** {@inheritDoc} */ @Override public void uploadFile(Lane lane, UploadFile uploadFile, FileType fileType, Registration registration) throws Exception { // create new processing Processing newProcessing = insert(uploadFile, fileType, registration); // get old processings Set<Processing> oldProcessings = lane.getProcessings(); // and add them to new processing oldProcessings.add(newProcessing); // add study to new processing newProcessing.getLanes().add(lane); // insert new study laneDAO.update(lane); } /** {@inheritDoc} */ @Override public void uploadFile(IUS ius, UploadFile uploadFile, FileType fileType, Registration registration) throws Exception { // create new processing Processing newProcessing = insert(uploadFile, fileType, registration); // get old processings Set<Processing> oldProcessings = ius.getProcessings(); // and add them to new processing oldProcessings.add(newProcessing); // add study to new processing newProcessing.getIUS().add(ius); // insert new study IUSDAO.update(ius); } /** {@inheritDoc} */ @Override public void uploadFile(Processing processing, UploadFile uploadFile, FileType fileType, Registration registration) throws Exception { // create new processing Processing newProcessing = insert(uploadFile, fileType, registration); // get old processings Set<Processing> oldProcessings = processing.getChildren(); // and add them to new processing oldProcessings.add(newProcessing); // add study to new processing newProcessing.getParents().add(processing); // insert new study processingDAO.update(processing); } /** {@inheritDoc} */ @Override public void uploadFile(SequencerRun sequencerRun, UploadFile uploadFile, FileType fileType, Registration registration) throws Exception { // create new processing Processing newProcessing = insert(uploadFile, fileType, registration); // get old processings Set<Processing> oldProcessings = sequencerRun.getProcessings(); // and add them to new processing oldProcessings.add(newProcessing); // add study to new processing newProcessing.getSequencerRuns().add(sequencerRun); // insert new study sequencerRunDAO.update(sequencerRun); } }