package net.sourceforge.seqware.common.business.impl;
import java.util.Date;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
import net.sourceforge.seqware.common.business.ExperimentService;
import net.sourceforge.seqware.common.dao.ExperimentDAO;
import net.sourceforge.seqware.common.dao.FileDAO;
import net.sourceforge.seqware.common.model.Experiment;
import net.sourceforge.seqware.common.model.File;
import net.sourceforge.seqware.common.model.Registration;
import net.sourceforge.seqware.common.model.Study;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* <p>
* ExperimentServiceImpl class.
* </p>
*
* @author boconnor
* @version $Id: $Id
*/
public class ExperimentServiceImpl implements ExperimentService {
private ExperimentDAO experimentDAO = null;
private FileDAO fileDAO = null;
private static final Log LOG = LogFactory.getLog(ExperimentServiceImpl.class);
/**
* <p>
* Constructor for ExperimentServiceImpl.
* </p>
*/
public ExperimentServiceImpl() {
super();
}
/**
* {@inheritDoc}
*
* Sets a private member variable with an instance of an implementation of ExperimentDAO. This method is called by the Spring framework
* at run time.
*
* @see ExperimentDAO
*/
@Override
public void setExperimentDAO(ExperimentDAO experimentDAO) {
this.experimentDAO = experimentDAO;
}
/**
* 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;
}
/**
* {@inheritDoc}
*
* Inserts an instance of Experiment into the database.
*/
@Override
public Integer insert(Experiment experiment) {
experiment.setCreateTimestamp(new Date());
return (experimentDAO.insert(experiment));
}
/**
* {@inheritDoc}
*
* Updates an instance of Experiment in the database.
*/
@Override
public void update(Experiment experiment) {
experimentDAO.update(experiment);
}
/** {@inheritDoc} */
@Override
public void merge(Experiment experiment) {
experimentDAO.merge(experiment);
}
/**
* {@inheritDoc}
*
* @param experiment
* @param deleteRealFiles
*/
@Override
public void delete(Experiment experiment, boolean deleteRealFiles) {
List<File> deleteFiles = null;
if (deleteRealFiles) {
deleteFiles = experimentDAO.getFiles(experiment.getExperimentId());
}
experimentDAO.delete(experiment);
if (deleteRealFiles) {
fileDAO.deleteAllWithFolderStore(deleteFiles);
}
}
/** {@inheritDoc} */
@Override
public List<Experiment> list(Registration registration) {
return experimentDAO.list(registration);
}
/**
* <p>
* list.
* </p>
*
* @param study
* a {@link net.sourceforge.seqware.common.model.Study} object.
* @return a {@link java.util.List} object.
*/
@Override
public List<Experiment> list(Study study) {
return experimentDAO.list(study);
}
/**
* {@inheritDoc}
*
* @param experimentId
*/
@Override
public List<File> getFiles(Integer experimentId) {
return experimentDAO.getFiles(experimentId);
}
/**
* {@inheritDoc}
*
* @param experimentId
*/
@Override
public boolean isHasFile(Integer experimentId) {
return experimentDAO.isHasFile(experimentId);
}
/** {@inheritDoc} */
@Override
public List<File> getFiles(Integer studyId, String metaType) {
return experimentDAO.getFiles(studyId, metaType);
}
/** {@inheritDoc} */
@Override
public boolean isHasFile(Integer studyId, String metaType) {
return experimentDAO.isHasFile(studyId, metaType);
}
/** {@inheritDoc} */
@Override
public SortedSet<Experiment> setWithHasFile(SortedSet<Experiment> list) {
for (Experiment experiment : list) {
experiment.setIsHasFile(isHasFile(experiment.getExperimentId()));
}
return list;
}
/** {@inheritDoc} */
@Override
public SortedSet<Experiment> listWithHasFile(SortedSet<Experiment> list, String metaType) {
SortedSet<Experiment> result = new TreeSet<>();
for (Experiment experiment : list) {
if (isHasFile(experiment.getExperimentId(), metaType)) {
experiment.setIsHasFile(true);
result.add(experiment);
}
// experiment.setIsHasFile(isHasFile(experiment.getExperimentId(),
// metaType));
}
return result;
}
/**
* {@inheritDoc}
*
* Finds an instance of Experiment in the database by the Experiment emailAddress, and copies the Experiment properties to an instance
* of Experiment.
*
* @param title
*/
@Override
public Experiment findByTitle(String title) {
Experiment experiment = null;
if (title != null) {
try {
experiment = experimentDAO.findByTitle(title.trim());
} catch (Exception exception) {
LOG.debug("Cannot find Experiment by title " + title);
}
}
return experiment;
}
/** {@inheritDoc} */
@Override
public Experiment findByID(Integer expID) {
Experiment experiment = null;
if (expID != null) {
try {
experiment = experimentDAO.findByID(expID);
} catch (Exception exception) {
LOG.error("Cannot find Experiment by expID " + expID);
LOG.error(exception.getMessage());
}
}
return experiment;
}
/** {@inheritDoc} */
@Override
public Experiment findBySWAccession(Integer swAccession) {
Experiment experiment = null;
if (swAccession != null) {
try {
experiment = experimentDAO.findBySWAccession(swAccession);
} catch (Exception exception) {
LOG.error("Cannot find Experiment by swAccession " + swAccession);
LOG.error(exception.getMessage());
}
}
return experiment;
}
/**
* {@inheritDoc}
*
* Determines if an email address has already been used.
*
* @param oldTitle
* @param newTitle
*/
@Override
public boolean hasTitleBeenUsed(String oldTitle, String newTitle) {
boolean titleUsed = false;
boolean checkTitle = true;
if (newTitle != null) {
if (oldTitle != null) {
/*
* We do not want to check if an title address has been used if the user is updating an existing sequencer run and has not
* changed the titleAddress.
*/
checkTitle = !newTitle.trim().equalsIgnoreCase(oldTitle.trim());
}
if (checkTitle) {
Experiment experiment = this.findByTitle(newTitle.trim().toLowerCase());
if (experiment != null) {
titleUsed = true;
}
}
}
return titleUsed;
}
/** {@inheritDoc} */
@Override
public Experiment updateDetached(Experiment experiment) {
return (Experiment) experimentDAO.updateDetached(experiment);
}
/** {@inheritDoc} */
@Override
public List<Experiment> findByOwnerID(Integer registrationID) {
return experimentDAO.findByOwnerID(registrationID);
}
/** {@inheritDoc} */
@Override
public List<Experiment> findByCriteria(String criteria, boolean isCaseSens) {
return experimentDAO.findByCriteria(criteria, isCaseSens);
}
/** {@inheritDoc} */
@Override
public List<Experiment> list() {
return experimentDAO.list();
}
/** {@inheritDoc} */
@Override
public void update(Registration registration, Experiment experiment) {
experimentDAO.update(registration, experiment);
}
/** {@inheritDoc} */
@Override
public Integer insert(Registration registration, Experiment experiment) {
experiment.setCreateTimestamp(new Date());
return (experimentDAO.insert(registration, experiment));
}
/** {@inheritDoc} */
@Override
public Experiment updateDetached(Registration registration, Experiment experiment) {
return experimentDAO.updateDetached(registration, experiment);
}
}
// ex:sw=4:ts=4: