package net.sourceforge.seqware.common.business.impl; import io.seqware.common.model.SequencerRunStatus; import java.util.Date; import java.util.List; import java.util.SortedSet; import java.util.TreeSet; import net.sourceforge.seqware.common.business.SequencerRunService; import net.sourceforge.seqware.common.dao.FileDAO; import net.sourceforge.seqware.common.dao.LaneDAO; import net.sourceforge.seqware.common.dao.SequencerRunDAO; import net.sourceforge.seqware.common.model.Lane; import net.sourceforge.seqware.common.model.Registration; import net.sourceforge.seqware.common.model.SequencerRun; import net.sourceforge.seqware.common.model.SequencerRunWizardDTO; import net.sourceforge.seqware.common.util.Log; /** * <p> * SequencerRunServiceImpl class. * </p> * * @author boconnor * @version $Id: $Id */ public class SequencerRunServiceImpl implements SequencerRunService { private SequencerRunDAO sequencerRunDAO = null; private LaneDAO laneDAO = null; private FileDAO fileDAO = null; /** * <p> * Constructor for SequencerRunServiceImpl. * </p> */ public SequencerRunServiceImpl() { super(); } /** * {@inheritDoc} * * Sets a private member variable with an instance of an implementation of SequencerRunDAO. This method is called by the Spring * framework at run time. * * @see SequencerRunDAO */ @Override public void setSequencerRunDAO(SequencerRunDAO sequencerRunDAO) { this.sequencerRunDAO = sequencerRunDAO; } /** * Sets a private member variable with an instance of an implementation of LaneDAO. This method is called by the Spring framework at run * time. * * @param laneDAO * implementation of LaneDAO * @see LaneDAO */ public void setLaneDAO(LaneDAO laneDAO) { this.laneDAO = laneDAO; } /** * 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 SequencerRun into the database. * * @return */ @Override public Integer insert(SequencerRun sequencerRun) { /* * //FIXME: need to set the names of each lane!! TreeSet <Lane> list = new TreeSet<Lane>(); //FIXME: why do I have to manually set * these!?!?! sequencerRun.getLane1().setCreateTimestamp(new Date()); sequencerRun.getLane2().setCreateTimestamp(new Date()); * sequencerRun.getLane3().setCreateTimestamp(new Date()); sequencerRun.getLane4().setCreateTimestamp(new Date()); * sequencerRun.getLane5().setCreateTimestamp(new Date()); sequencerRun.getLane6().setCreateTimestamp(new Date()); * sequencerRun.getLane7().setCreateTimestamp(new Date()); sequencerRun.getLane8().setCreateTimestamp(new Date()); * sequencerRun.getLane1().setSequencerRun(sequencerRun); sequencerRun.getLane2().setSequencerRun(sequencerRun); * sequencerRun.getLane3().setSequencerRun(sequencerRun); sequencerRun.getLane4().setSequencerRun(sequencerRun); * sequencerRun.getLane5().setSequencerRun(sequencerRun); sequencerRun.getLane6().setSequencerRun(sequencerRun); * sequencerRun.getLane7().setSequencerRun(sequencerRun); sequencerRun.getLane8().setSequencerRun(sequencerRun); * list.add(sequencerRun.getLane1()); list.add(sequencerRun.getLane2()); list.add(sequencerRun.getLane3()); * list.add(sequencerRun.getLane4()); list.add(sequencerRun.getLane5()); list.add(sequencerRun.getLane6()); * list.add(sequencerRun.getLane7()); list.add(sequencerRun.getLane8()); sequencerRun.setLanes(list); */ sequencerRun.setCreateTimestamp(new Date()); if (sequencerRun.getProcess()) { sequencerRun.setStatus(SequencerRunStatus.Complete); } else { sequencerRun.setStatus(null); } return (sequencerRunDAO.insert(sequencerRun)); } /** * This is being used to create a new SequencerRun object and the correct number of assocated Lanes * * @param sequencerRun * a {@link net.sourceforge.seqware.common.model.SequencerRunWizardDTO} object. * @return */ @Override public Integer insert(SequencerRunWizardDTO sequencerRun) { sequencerRun.setCreateTimestamp(new Date()); Log.stderr("Counts: " + sequencerRun.getLaneCount()); TreeSet<Lane> list = new TreeSet<>(); for (int i = 1; i <= sequencerRun.getLaneCount(); i++) { Log.stderr("HERE: " + i); Lane lane = new Lane(); // need to fill out the name field since that is used to distinguish in // the treeset // which doesn't allow for duplicates! if (lane.getName() == null || "".equals(lane.getName())) { // do this if the LIMS hasn't already filled this in lane.setName(sequencerRun.getName() + "_lane_" + i); lane.setLaneIndex(i - 1); } lane.setCreateTimestamp(new Date()); lane.setSequencerRun(sequencerRun); laneDAO.insert(lane); list.add(lane); } sequencerRun.setLanes(list); Log.stderr("Lanes count: " + list.size()); /* * //FIXME: need to set the names of each lane!! TreeSet <Lane> list = new TreeSet<Lane>(); //FIXME: why do I have to manually set * these!?!?! sequencerRun.getLane1().setCreateTimestamp(new Date()); sequencerRun.getLane2().setCreateTimestamp(new Date()); * sequencerRun.getLane3().setCreateTimestamp(new Date()); sequencerRun.getLane4().setCreateTimestamp(new Date()); * sequencerRun.getLane5().setCreateTimestamp(new Date()); sequencerRun.getLane6().setCreateTimestamp(new Date()); * sequencerRun.getLane7().setCreateTimestamp(new Date()); sequencerRun.getLane8().setCreateTimestamp(new Date()); * sequencerRun.getLane1().setSequencerRun(sequencerRun); sequencerRun.getLane2().setSequencerRun(sequencerRun); * sequencerRun.getLane3().setSequencerRun(sequencerRun); sequencerRun.getLane4().setSequencerRun(sequencerRun); * sequencerRun.getLane5().setSequencerRun(sequencerRun); sequencerRun.getLane6().setSequencerRun(sequencerRun); * sequencerRun.getLane7().setSequencerRun(sequencerRun); sequencerRun.getLane8().setSequencerRun(sequencerRun); * list.add(sequencerRun.getLane1()); list.add(sequencerRun.getLane2()); list.add(sequencerRun.getLane3()); * list.add(sequencerRun.getLane4()); list.add(sequencerRun.getLane5()); list.add(sequencerRun.getLane6()); * list.add(sequencerRun.getLane7()); list.add(sequencerRun.getLane8()); sequencerRun.setLanes(list); */ if (sequencerRun.getProcess()) { sequencerRun.setStatus(SequencerRunStatus.Complete); } else { sequencerRun.setStatus(null); } return (sequencerRunDAO.insert(sequencerRun)); } /** * {@inheritDoc} * * Updates an instance of SequencerRun in the database. */ @Override public void update(SequencerRun sequencerRun) { if (sequencerRun.getProcess()) { sequencerRun.setStatus(SequencerRunStatus.Complete); } else { sequencerRun.setStatus(null); } sequencerRunDAO.update(sequencerRun); } /** * {@inheritDoc} * * Deletes an instance of SequencerRun in the database. */ @Override public void delete(SequencerRun sequencerRun) { // get lanes SortedSet<Lane> lanes = sequencerRun.getLanes(); // delete lane, ius, ius_attribute, ius_link laneDAO.delete(lanes); // delete Sequence Run sequencerRunDAO.delete(sequencerRun); } /** {@inheritDoc} */ @Override public List<SequencerRun> setProcCountInfo(List<SequencerRun> list) { for (SequencerRun sequencerRun : list) { // FIX ME: What faster? One sql query or Java code... // List<Integer> statuses = sequencerRunDAO.getProcStatuses(sequencerRun); // sequencerRun.setProcessedCount(statuses.get(0)); // sequencerRun.setProcessingCount(statuses.get(1)); // sequencerRun.setErrorCount(statuses.get(2)); sequencerRun.setProcessedCount(sequencerRun.getProcessedCnt()); sequencerRun.setProcessingCount(sequencerRun.getProcessingCount()); sequencerRun.setErrorCount(sequencerRun.getErrorCnt()); } return list; } /** {@inheritDoc} */ @Override public List<SequencerRun> list(Registration registration) { // get list and delete dublicate // Set<SequencerRun> tempList = new // TreeSet<SequencerRun>(sequencerRunDAO.list(registration, true)); // return new ArrayList<SequencerRun>(tempList); return sequencerRunDAO.list(registration, true); } /** {@inheritDoc} */ @Override public List<SequencerRun> list(Registration registration, Boolean isAsc) { // get list and delete dublicate // Set<SequencerRun> tempList = new // TreeSet<SequencerRun>(sequencerRunDAO.list(registration, isAsc)); // return new ArrayList<SequencerRun>(tempList); return sequencerRunDAO.list(registration, isAsc); } /** * {@inheritDoc} * * Finds an instance of SequencerRun in the database by the SequencerRun emailAddress, and copies the SequencerRun properties to an * instance of SequencerRun. */ @Override public SequencerRun findByName(String name) { SequencerRun sequencerRun = null; if (name != null) { try { sequencerRun = sequencerRunDAO.findByName(name.trim()); } catch (Exception exception) { Log.debug("Cannot find SequencerRun by name " + name); } } return sequencerRun; } /** {@inheritDoc} */ @Override public SequencerRun findByID(Integer expID) { SequencerRun sequencerRun = null; if (expID != null) { try { sequencerRun = sequencerRunDAO.findByID(expID); // fillInLanes(sequencerRun); } catch (Exception exception) { Log.error("Cannot find SequencerRun by expID " + expID); Log.error(exception.getMessage()); } } return sequencerRun; } /** {@inheritDoc} */ @Override public SequencerRun findBySWAccession(Integer swAccession) { SequencerRun sequencerRun = null; if (swAccession != null) { try { sequencerRun = sequencerRunDAO.findBySWAccession(swAccession); } catch (Exception exception) { Log.error("Cannot find SequencerRun by swAccession " + swAccession); Log.error(exception.getMessage()); } } return sequencerRun; } /** {@inheritDoc} */ @Override public List<SequencerRun> findByOwnerID(Integer registrationId) { List<SequencerRun> sequencerRuns = null; if (registrationId != null) { try { sequencerRuns = sequencerRunDAO.findByOwnerID(registrationId); } catch (Exception exception) { Log.error("Cannot find SequencerRun by registrationId " + registrationId); Log.error(exception.getMessage()); } } return sequencerRuns; } /** * {@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 sequencer run and has not * changed the nameAddress. */ checkName = !newName.trim().equalsIgnoreCase(oldName.trim()); } if (checkName) { SequencerRun sequencerRun = this.findByName(newName.trim()); if (sequencerRun != null) { nameUsed = true; } } } return nameUsed; } /** {@inheritDoc} */ @Override public List<SequencerRun> findByCriteria(String criteria, boolean isCaseSens) { return sequencerRunDAO.findByCriteria(criteria, isCaseSens); } /** {@inheritDoc} */ @Override public SequencerRun updateDetached(SequencerRun sequencerRun) { return sequencerRunDAO.updateDetached(sequencerRun); } /* * private void fillInLanes(SequencerRun sequencerRun) { Object[] lanes = sequencerRun.getLanes().toArray(); * Debug.put(": Array Length is " + sequencerRun.getLanes().size()); if (lanes.length >= 8) { sequencerRun.setLane1((Lane)lanes[7]); * sequencerRun.setLane2((Lane)lanes[6]); sequencerRun.setLane3((Lane)lanes[5]); sequencerRun.setLane4((Lane)lanes[4]); * sequencerRun.setLane5((Lane)lanes[3]); sequencerRun.setLane6((Lane)lanes[2]); sequencerRun.setLane7((Lane)lanes[1]); * sequencerRun.setLane8((Lane)lanes[0]); } } */ /** {@inheritDoc} */ @Override public List<SequencerRun> list() { return sequencerRunDAO.list(); } /** {@inheritDoc} */ @Override public void update(Registration registration, SequencerRun sequencerRun) { sequencerRunDAO.update(registration, sequencerRun); } /** * {@inheritDoc} * * @return */ @Override public Integer insert(Registration registration, SequencerRun sequencerRun) { sequencerRun.setCreateTimestamp(new Date()); return (sequencerRunDAO.insert(registration, sequencerRun)); } /** * {@inheritDoc} * * @return */ @Override public Integer insert(Registration registration, SequencerRunWizardDTO sequencerRun) { sequencerRun.setCreateTimestamp(new Date()); return (sequencerRunDAO.insert(registration, sequencerRun)); } /** {@inheritDoc} */ @Override public SequencerRun updateDetached(Registration registration, SequencerRun sequencerRun) { return sequencerRunDAO.updateDetached(registration, sequencerRun); } } // ex:sw=4:ts=4: