package net.sourceforge.seqware.common.business.impl; import java.util.Date; import java.util.List; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import net.sourceforge.seqware.common.business.SampleService; import net.sourceforge.seqware.common.dao.FileDAO; import net.sourceforge.seqware.common.dao.SampleDAO; import net.sourceforge.seqware.common.model.File; import net.sourceforge.seqware.common.model.Registration; import net.sourceforge.seqware.common.model.Sample; import net.sourceforge.seqware.common.model.Study; import net.sourceforge.seqware.common.util.Log; /** * <p> * SampleServiceImpl class. * </p> * * @author boconnor * @version $Id: $Id */ public class SampleServiceImpl implements SampleService { private SampleDAO sampleDAO = null; private FileDAO fileDAO = null; /** * <p> * Constructor for SampleServiceImpl. * </p> */ public SampleServiceImpl() { super(); } /** * {@inheritDoc} * * Sets a private member variable with an instance of an implementation of SampleDAO. This method is called by the Spring framework at * run time. * * @see SampleDAO */ @Override public void setSampleDAO(SampleDAO sampleDAO) { this.sampleDAO = sampleDAO; } /** * 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 Sample into the database. */ @Override public Integer insert(Sample sample) { sample.setCreateTimestamp(new Date()); return (sampleDAO.insert(sample)); } /** * {@inheritDoc} * * Updates an instance of Sample in the database. */ @Override public void update(Sample sample) { sampleDAO.update(sample); } /** * {@inheritDoc} * * Deletes an instance of Sample in the database. * * @param sample * @param deleteRealFiles */ @Override public void delete(Sample sample, boolean deleteRealFiles) { List<File> deleteFiles = null; if (deleteRealFiles) { deleteFiles = sampleDAO.getFiles(sample.getSampleId()); } Set<Sample> parents = sample.getParents(); for (Sample parent : parents) { parent.getChildren().remove(sample); } Set<Sample> children = sample.getChildren(); for (Sample child : children) { child.getParents().remove(sample); } sampleDAO.delete(sample); if (deleteRealFiles) { fileDAO.deleteAllWithFolderStore(deleteFiles); } } /** * {@inheritDoc} */ @Override public List<File> getFiles(Integer sampleId) { return sampleDAO.getFiles(sampleId); } /** * {@inheritDoc} */ @Override public boolean isHasFile(Integer sampleId) { return sampleDAO.isHasFile(sampleId); } /** * {@inheritDoc} */ @Override public List<File> getFiles(Integer studyId, String metaType) { return sampleDAO.getFiles(studyId, metaType); } /** * {@inheritDoc} */ @Override public boolean isHasFile(Integer studyId, String metaType) { return sampleDAO.isHasFile(studyId, metaType); } /** * {@inheritDoc} */ @Override public SortedSet<Sample> setWithHasFile(Integer expId, SortedSet<Sample> list) { /* * Map<Integer, Integer> countFiles = sampleDAO.getCountFiles(expId); for (Sample sample : list) { boolean isHasFile = false; * Integer count = countFiles.get(sample.getSampleId()); if(count > 0){ isHasFile = true; } sample.setIsHasFile(isHasFile); } return * list; */ SortedSet<Sample> result = new TreeSet<>(); for (Sample sample : list) { if (isHasFile(sample.getSampleId())) { sample.setIsHasFile(true); result.add(sample); } // experiment.setIsHasFile(isHasFile(experiment.getExperimentId(), // metaType)); } return result; } /** * {@inheritDoc} */ @Override public SortedSet<Sample> listWithHasFile(Integer expId, SortedSet<Sample> list, String metaType) { /* * SortedSet<Sample> result = new TreeSet<Sample>(); Map<Integer, Integer> countFiles = sampleDAO.getCountFiles(expId, metaType); * for (Sample sample : list) { boolean isHasFile = false; Integer count = countFiles.get(sample.getSampleId()); if(count > 0){ * isHasFile = true; sample.setIsHasFile(isHasFile); result.add(sample); } //sample.setIsHasFile(isHasFile); } return result; */ SortedSet<Sample> result = new TreeSet<>(); for (Sample sample : list) { if (isHasFile(sample.getSampleId(), metaType)) { sample.setIsHasFile(true); result.add(sample); } // experiment.setIsHasFile(isHasFile(experiment.getExperimentId(), // metaType)); } return result; } /** * {@inheritDoc} */ @Override public Sample findByTitle(String title) { Sample sample = null; if (title != null) { try { sample = sampleDAO.findByTitle(title.trim()); } catch (Exception exception) { Log.debug("Cannot find Sample by title " + title, exception); } } return sample; } /** * {@inheritDoc} * * Finds an instance of Sample in the database by the Sample emailAddress, and copies the Sample properties to an instance of Sample. */ @Override public Sample findByName(String name) { Sample sample = null; if (name != null) { try { sample = sampleDAO.findByName(name.trim()); } catch (Exception exception) { Log.debug("Cannot find Sample by name " + name, exception); } } return sample; } @Override public List<Sample> matchName(String name) { List<Sample> sample = null; if (name != null) { try { sample = sampleDAO.matchName(name.trim()); } catch (Exception exception) { Log.debug("Cannot find matches for name " + name, exception); } } return sample; } /** * {@inheritDoc} * * @param sampleId */ @Override public Sample findByID(Integer sampleId) { Sample sample = null; if (sampleId != null) { try { sample = sampleDAO.findByID(sampleId); } catch (Exception exception) { Log.error("Cannot find Sample by expID " + sampleId, exception); } } return sample; } /** * {@inheritDoc} */ @Override public Sample findBySWAccession(Integer swAccession) { Sample sample = null; if (swAccession != null) { try { sample = sampleDAO.findBySWAccession(swAccession); } catch (Exception exception) { Log.error("Cannot find Sample by swAccession " + swAccession, exception); } } return sample; } /** * {@inheritDoc} */ @Override public List<Sample> findByOwnerID(Integer registrationId) { List<Sample> samples = null; if (registrationId != null) { try { samples = sampleDAO.findByOwnerID(registrationId); } catch (Exception exception) { Log.error("Cannot find Sample by registrationId " + registrationId, exception); } } return samples; } /** * {@inheritDoc} */ @Override public List<Sample> findByCriteria(String criteria, boolean isCaseSens) { return sampleDAO.findByCriteria(criteria, isCaseSens); } /** * {@inheritDoc} * * Determines if an email address has already been used. */ @Override public boolean hasNameBeenUsed(String oldName, String newName) { boolean nameUsed = false; boolean checkName = true; if (newName != null) { if (oldName != null) { /* * We do not want to check if an name address has been used if the user is updating an existing sample and has not changed * the nameAddress. */ checkName = !newName.trim().equalsIgnoreCase(oldName.trim()); } if (checkName) { Sample sample = this.findByName(newName.trim()); if (sample != null) { nameUsed = true; } } } return nameUsed; } /** * <p> * listComplete. * </p> * * @return a {@link java.util.List} object. */ @Override public List<Sample> listComplete() { return sampleDAO.listComplete(); } /** * <p> * listIncomplete. * </p> * * @return a {@link java.util.List} object. */ @Override public List<Sample> listIncomplete() { return sampleDAO.listIncomplete(); } /** * {@inheritDoc} */ @Override public List<Sample> listSample(Registration registration) { return sampleDAO.listSample(registration); } /** * {@inheritDoc} */ @Override public Sample updateDetached(Sample sample) { return sampleDAO.updateDetached(sample); } /** * {@inheritDoc} */ @Override public List<Sample> getRootSamples(Study study) { return sampleDAO.getRootSamples(study); } /** * {@inheritDoc} */ @Override public Sample getRootSample(Sample childSample) { return sampleDAO.getRootSample(childSample); } /** * {@inheritDoc} */ @Override public List<Sample> list() { return sampleDAO.list(); } /** * {@inheritDoc} */ @Override public void update(Registration registration, Sample sample) { sampleDAO.update(registration, sample); } /** * {@inheritDoc} */ @Override public Integer insert(Registration registration, Sample sample) { sample.setCreateTimestamp(new Date()); return (sampleDAO.insert(registration, sample)); } /** * {@inheritDoc} */ @Override public Sample updateDetached(Registration registration, Sample sample) { return sampleDAO.updateDetached(registration, sample); } } // ex:sw=4:ts=4: