package net.sourceforge.seqware.common.dao.hibernate; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; import net.sourceforge.seqware.common.dao.FileReportDAO; import net.sourceforge.seqware.common.model.FileReportRow; import net.sourceforge.seqware.common.model.SequencerRun; import net.sourceforge.seqware.common.model.Study; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; /** * <p> * FileReportDAOHibernate class. * </p> * * @author boconnor * @version $Id: $Id */ public class FileReportDAOHibernate extends HibernateDaoSupport implements FileReportDAO { /** {@inheritDoc} */ @SuppressWarnings("rawtypes") @Override public List<FileReportRow> getReportForStudy(Study study) { String query = "from FileReportRow as row where row.study.studyId = ?"; List<FileReportRow> fileReport = new ArrayList<>(); Object[] parameters = { study.getStudyId() }; List list = this.getHibernateTemplate().find(query, parameters); for (Object obj : list) { fileReport.add((FileReportRow) obj); } return fileReport; } /** {@inheritDoc} */ @SuppressWarnings("rawtypes") @Override public List<FileReportRow> getReportForStudy(Study study, String orderField, String sortOrder, int offset, int limit) { String query = "from FileReportRow as row where row.study.studyId = ? order by row." + orderField + " " + sortOrder; List<FileReportRow> fileReport = new ArrayList<>(); List list = this.getSession().createQuery(query).setFirstResult(offset).setMaxResults(limit).setInteger(0, study.getStudyId()) .list(); for (Object obj : list) { fileReport.add((FileReportRow) obj); } return fileReport; } /** {@inheritDoc} */ @SuppressWarnings("rawtypes") @Override public List<FileReportRow> getReportForSequencerRun(SequencerRun seqRun, String orderField, String sortOrder, int offset, int limit) { String query = "from FileReportRow as row where row.lane.sequencerRun.sequencerRunId = ? order by row." + orderField + " " + sortOrder; List<FileReportRow> fileReport = new ArrayList<>(); List list = this.getSession().createQuery(query).setFirstResult(offset).setMaxResults(limit) .setInteger(0, seqRun.getSequencerRunId()).list(); for (Object obj : list) { fileReport.add((FileReportRow) obj); } return fileReport; } /** {@inheritDoc} */ @SuppressWarnings("rawtypes") @Override public List<FileReportRow> getReportForSequencerRuns(String orderField, String sortOrder, int offset, int limit) { String query = "from FileReportRow as row where row.lane.sequencerRun.sequencerRunId != null order by row." + orderField + " " + sortOrder; List<FileReportRow> fileReport = new ArrayList<>(); List list = this.getSession().createQuery(query).setFirstResult(offset).setMaxResults(limit).list(); for (Object obj : list) { fileReport.add((FileReportRow) obj); } return fileReport; } /** {@inheritDoc} */ @SuppressWarnings("rawtypes") @Override public List<FileReportRow> getReportForSequencerRun(SequencerRun seqRun) { if (seqRun == null) { String query = "from FileReportRow as row where row.lane.sequencerRun.sequencerRunId != null "; List<FileReportRow> fileReport = new ArrayList<>(); List list = this.getSession().createQuery(query).list(); for (Object obj : list) { fileReport.add((FileReportRow) obj); } return fileReport; } else { String query = "from FileReportRow as row where row.lane.sequencerRun.sequencerRunId = ? "; List<FileReportRow> fileReport = new ArrayList<>(); List list = this.getSession().createQuery(query).setInteger(0, seqRun.getSequencerRunId()).list(); for (Object obj : list) { fileReport.add((FileReportRow) obj); } return fileReport; } } /** {@inheritDoc} */ @SuppressWarnings("rawtypes") @Override public int countOfRows(Study study) { String query = "select count(*) from file_report where study_id = ?"; List result = this.getSession().createSQLQuery(query).setInteger(0, study.getStudyId()).list(); int count = 0; if (result.size() > 0) { count = ((BigInteger) result.get(0)).intValue(); } return count; } /** {@inheritDoc} */ @SuppressWarnings("rawtypes") @Override public int countOfRows(SequencerRun sr) { String query = null; List result = null; if (sr != null) { query = "select count(*) from file_report as fr cross join lane as la " + "where fr.lane_id=la.lane_id and (la.sequencer_run_id = ?)"; result = this.getSession().createSQLQuery(query).setInteger(0, sr.getSequencerRunId()).list(); } else { query = "select count(*) from file_report as fr cross join lane as la " + "where fr.lane_id=la.lane_id and (la.sequencer_run_id is not null)"; result = this.getSession().createSQLQuery(query).list(); } int count = 0; if (result.size() > 0) { count = ((BigInteger) result.get(0)).intValue(); } return count; } }