/** * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations under * the License. * * The Original Code is OpenELIS code. * * Copyright (C) The Minnesota Department of Health. All Rights Reserved. * * Contributor(s): CIRG, University of Washington, Seattle WA. */ package us.mn.state.health.lims.analysis.daoimpl; import java.sql.Date; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.Vector; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.validator.GenericValidator; import org.hibernate.HibernateException; import org.hibernate.Query; import us.mn.state.health.lims.analysis.dao.AnalysisDAO; import us.mn.state.health.lims.analysis.valueholder.Analysis; import us.mn.state.health.lims.audittrail.dao.AuditTrailDAO; import us.mn.state.health.lims.audittrail.daoimpl.AuditTrailDAOImpl; import us.mn.state.health.lims.common.action.IActionConstants; import us.mn.state.health.lims.common.daoimpl.BaseDAOImpl; import us.mn.state.health.lims.common.exception.LIMSDuplicateRecordException; import us.mn.state.health.lims.common.exception.LIMSRuntimeException; import us.mn.state.health.lims.common.log.LogEvent; import us.mn.state.health.lims.common.util.StringUtil; import us.mn.state.health.lims.common.util.SystemConfiguration; import us.mn.state.health.lims.hibernate.HibernateUtil; import us.mn.state.health.lims.result.valueholder.Result; import us.mn.state.health.lims.sample.valueholder.Sample; import us.mn.state.health.lims.sampleitem.valueholder.SampleItem; import us.mn.state.health.lims.test.valueholder.Test; import us.mn.state.health.lims.patient.valueholder.Patient; import us.mn.state.health.lims.samplehuman.dao.SampleHumanDAO; import us.mn.state.health.lims.samplehuman.daoimpl.SampleHumanDAOImpl; import us.mn.state.health.lims.common.services.StatusService; import us.mn.state.health.lims.test.dao.TestDAO; import us.mn.state.health.lims.test.daoimpl.TestDAOImpl; import us.mn.state.health.lims.common.services.StatusService.AnalysisStatus; /** * @author diane benz */ public class AnalysisDAOImpl extends BaseDAOImpl implements AnalysisDAO { @SuppressWarnings("rawtypes") public void deleteData(List analyses) throws LIMSRuntimeException { // add to audit trail try { AuditTrailDAO auditDAO = new AuditTrailDAOImpl(); for (int i = 0; i < analyses.size(); i++) { Analysis data = (Analysis) analyses.get(i); Analysis oldData = (Analysis) readAnalysis(data.getId()); Analysis newData = new Analysis(); String sysUserId = data.getSysUserId(); String event = IActionConstants.AUDIT_TRAIL_DELETE; String tableName = "ANALYSIS"; auditDAO.saveHistory(newData, oldData, sysUserId, event, tableName); } } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "AuditTrail deleteData()", e.toString()); throw new LIMSRuntimeException("Error in Analysis AuditTrail deleteData()", e); } try { for (int i = 0; i < analyses.size(); i++) { Analysis data = (Analysis) analyses.get(i); // bugzilla 2206 data = (Analysis) readAnalysis(data.getId()); HibernateUtil.getSession().delete(data); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "deleteData()", e.toString()); throw new LIMSRuntimeException("Error in Analysis deleteData()", e); } } /* * Warning: duplicateCheck uses SystemConfiguration setting for excluding * status (non-Javadoc) * * @see * us.mn.state.health.lims.analysis.dao.AnalysisDAO#insertData(us.mn.state * .health.lims.analysis.valueholder.Analysis, boolean) */ public boolean insertData(Analysis analysis, boolean duplicateCheck) throws LIMSRuntimeException { try { if (duplicateCheck) { if (duplicateAnalysisExists(analysis)) { throw new LIMSDuplicateRecordException("Duplicate record exists for this sample and test " + analysis.getTest().getTestDisplayValue()); } } String id = (String) HibernateUtil.getSession().save(analysis); analysis.setId(id); // bugzilla 1824 inserts will be logged in history table AuditTrailDAO auditDAO = new AuditTrailDAOImpl(); String sysUserId = analysis.getSysUserId(); String tableName = "ANALYSIS"; auditDAO.saveNewHistory(analysis, sysUserId, tableName); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "insertData()", e.toString()); throw new LIMSRuntimeException("Error in Analysis insertData()", e); } return true; } public void updateData( Analysis analysis){ updateData( analysis, false ); } public void updateData(Analysis analysis, boolean skipAuditTrail) throws LIMSRuntimeException { Analysis oldData = readAnalysis(analysis.getId()); if( !skipAuditTrail){ try{ AuditTrailDAO auditDAO = new AuditTrailDAOImpl(); String sysUserId = analysis.getSysUserId(); String event = IActionConstants.AUDIT_TRAIL_UPDATE; String tableName = "ANALYSIS"; auditDAO.saveHistory( analysis, oldData, sysUserId, event, tableName ); }catch( Exception e ){ LogEvent.logError( "AnalysisDAOImpl", "AuditTrail updateData()", e.toString() ); throw new LIMSRuntimeException( "Error in Analysis AuditTrail updateData()", e ); } } try { HibernateUtil.getSession().merge(analysis); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); HibernateUtil.getSession().evict(analysis); HibernateUtil.getSession().refresh(analysis); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "updateData()", e.toString()); throw new LIMSRuntimeException("Error in Analysis updateData()", e); } } public void getData(Analysis analysis) throws LIMSRuntimeException { try { Analysis analysisClone = (Analysis) HibernateUtil.getSession().get(Analysis.class, analysis.getId()); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); if (analysisClone != null) { PropertyUtils.copyProperties(analysis, analysisClone); } else { analysis.setId(null); } } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getData()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getData()", e); } } @SuppressWarnings("rawtypes") public List getAllAnalyses() throws LIMSRuntimeException { List list = new Vector(); try { String sql = "from Analysis a order by a.id"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getAllAnalyses()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getAllAnalyses()", e); } return list; } @SuppressWarnings("rawtypes") public List getPageOfAnalyses(int startingRecNo) throws LIMSRuntimeException { List list = new Vector(); try { // calculate maxRow to be one more than the page size int endingRecNo = startingRecNo + (SystemConfiguration.getInstance().getDefaultPageSize() + 1); String sql = "from Analysis a order by a.id"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setFirstResult(startingRecNo - 1); query.setMaxResults(endingRecNo - 1); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getPageOfAnalyses()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getPageOfAnalyses()", e); } return list; } public Analysis readAnalysis(String idString) { Analysis analysis = null; try { analysis = (Analysis) HibernateUtil.getSession().get(Analysis.class, idString); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "readAnalysis()", e.toString()); throw new LIMSRuntimeException("Error in Analysis readAnalysis()", e); } return analysis; } @SuppressWarnings("rawtypes") public List getAnalyses(String filter) throws LIMSRuntimeException { List list = new Vector(); try { String sql = "from Analysis a where upper(a.analysisType) like upper(:param) order by upper(a.analysisType)"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setParameter("param", filter + "%"); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getAnalyses()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getAnalyses(String filter)", e); } return list; } @SuppressWarnings("rawtypes") public List getNextAnalysisRecord(String id) throws LIMSRuntimeException { return getNextRecord(id, "Analysis", Analysis.class); } @SuppressWarnings("rawtypes") public List getPreviousAnalysisRecord(String id) throws LIMSRuntimeException { return getPreviousRecord(id, "Analysis", Analysis.class); } @SuppressWarnings({ "rawtypes", "unchecked" }) public List getAllAnalysesPerTest(Test test) throws LIMSRuntimeException { List list = new Vector(); try { String sql = "from Analysis a where a.test = :testId and (a.status is null or a.status NOT IN (:exclusionList)) order by a.sampleItem.sample.accessionNumber"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("testId", Integer.parseInt(test.getId())); List statusesToExclude = new ArrayList(); statusesToExclude.add(SystemConfiguration.getInstance().getAnalysisStatusCanceled()); query.setParameterList("exclusionList", statusesToExclude); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getAllAnalysesPerTest()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getAllAnalysesPerTest()", e); } return list; } @SuppressWarnings("rawtypes") public List getAllAnalysisByTestAndStatus(String testId, List<Integer> statusIdList) throws LIMSRuntimeException { List list = new Vector(); try { String sql = "from Analysis a where a.test = :testId and a.statusId IN (:statusIdList) order by a.sampleItem.sample.accessionNumber"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("testId", Integer.parseInt(testId)); query.setParameterList("statusIdList", statusIdList); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getAllAnalysisByTestAndStatuses()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getAllAnalysisByTestAndStatuses()", e); } return list; } @SuppressWarnings("rawtypes") public List getAllAnalysisByTestsAndStatus(List<String> testIdList, List<Integer> statusIdList) throws LIMSRuntimeException { List list = new Vector(); List<Integer> testList = new ArrayList<Integer>(); try { String sql = "from Analysis a where a.test.id IN (:testList) and a.statusId IN (:statusIdList) order by a.sampleItem.sample.accessionNumber"; for (String testId : testIdList) { testList.add(Integer.parseInt(testId)); } org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setParameterList("testList", testList); query.setParameterList("statusIdList", statusIdList); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getAllAnalysisByTestsAndStatuses()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getAllAnalysisByTestsAndStatuses()", e); } return list; } @SuppressWarnings("rawtypes") public List getAllAnalysisByTestAndExcludedStatus(String testId, List<Integer> statusIdList) throws LIMSRuntimeException { List list = new Vector(); try { String sql = "from Analysis a where a.test = :testId and a.statusId not IN (:statusIdList) order by a.sampleItem.sample.accessionNumber"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("testId", Integer.parseInt(testId)); query.setParameterList("statusIdList", statusIdList); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getAllAnalysisByTestAndExcludedStatuses()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getAllAnalysisByTestAndExcludedStatuses()", e); } return list; } @SuppressWarnings("rawtypes") public List getAllAnalysisByTestSectionAndStatus(String testSectionId, List<Integer> statusIdList, boolean sortedByDateAndAccession) throws LIMSRuntimeException { List list = new Vector(); try { String sql = "from Analysis a where a.testSection.id = :testSectionId and a.statusId IN (:statusIdList) order by a.id"; if (sortedByDateAndAccession) { //sql += " order by a.sampleItem.sample.receivedTimestamp asc, a.sampleItem.sample.accessionNumber"; } org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("testSectionId", Integer.parseInt(testSectionId)); query.setParameterList("statusIdList", statusIdList); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getAllAnalysisByTestSectionAndStatuses()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getAllAnalysisByTestSectionAndStatuses()", e); } return list; } @SuppressWarnings("rawtypes") public List getAllAnalysisByTestSectionAndExcludedStatus(String testSectionId, List<Integer> statusIdList) throws LIMSRuntimeException { List list = new Vector(); try { String sql = "from Analysis a where a.testSection.id = :testSectionId and a.statusId NOT IN (:statusIdList) order by a.sampleItem.sample.receivedTimestamp asc, a.sampleItem.sample.accessionNumber "; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("testSectionId", Integer.parseInt(testSectionId)); query.setParameterList("statusIdList", statusIdList); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getAllAnalysisByTestSectionAndExcludedStatuses()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getAllAnalysisByTestSectionAndExcludedStatuses()", e); } return list; } @SuppressWarnings("unchecked") public List<Analysis> getAnalysesBySampleItem(SampleItem sampleItem) throws LIMSRuntimeException { List<Analysis> list = null; try { String sql = "from Analysis a where a.sampleItem.id = :sampleItemId"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("sampleItemId", Integer.parseInt(sampleItem.getId())); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getAnalysesBySampleItem()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getAnalysesBySampleItem()", e); } return list; } @SuppressWarnings("unchecked") public List<Analysis> getAnalysesBySampleItemsExcludingByStatusIds(SampleItem sampleItem, Set<Integer> statusIds) throws LIMSRuntimeException { if (statusIds == null || statusIds.isEmpty()) { return getAnalysesBySampleItem(sampleItem); } List<Analysis> analysisList = null; try { String sql = "from Analysis a where a.sampleItem.id = :sampleItemId and a.statusId not in ( :statusList )"; Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("sampleItemId", Integer.parseInt(sampleItem.getId())); query.setParameterList("statusList", statusIds); analysisList = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getAnalysesBySampleItemsExcludingByStatusIds()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getAnalysesBySampleItemsExcludingByStatusIds()", e); } return analysisList; } @SuppressWarnings("unchecked") @Override public List<Analysis> getAnalysesBySampleStatusIdExcludingByStatusId(String statusId, Set<Integer> statusIds) throws LIMSRuntimeException { if (statusIds == null || statusIds.isEmpty()) { return getAnalysesBySampleStatusId(statusId); } String sql = "from Analysis a where a.sampleItem.sample.statusId = :sampleStatus and a.statusId not in (:excludedStatusIds)"; try { Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("sampleStatus", Integer.parseInt(statusId)); query.setParameterList("excludedStatusIds", statusIds); List<Analysis> analysisList = query.list(); closeSession(); return analysisList; } catch (HibernateException e) { handleException(e, "getAnalysesBySampleStatusIdExcludingByStatusId"); } return null; } @SuppressWarnings("unchecked") public List<Analysis> getAnalysesBySampleStatusId(String statusId) throws LIMSRuntimeException { List<Analysis> analysisList = null; try { String sql = "from Analysis a where a.sampleItem.sample.statusId = :sampleStatusId"; Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("sampleStatusId", Integer.parseInt(statusId)); analysisList = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getAnalysesBySampleItemsExcludingByStatusIds()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getAnalysesBySampleItemsExcludingByStatusIds()", e); } return analysisList; } @SuppressWarnings("unchecked") @Override public List<Analysis> getAnalysesBySampleIdExcludedByStatusId(String id, Set<Integer> statusIds) throws LIMSRuntimeException { if (statusIds == null || statusIds.isEmpty()) { return getAnalysesBySampleId(id); } String sql = "from Analysis a where a.sampleItem.sample.id = :sampleId and a.statusId not in ( :excludedIds)"; try { Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("sampleId", Integer.parseInt(id)); query.setParameterList("excludedIds", statusIds); List<Analysis> analysisList = query.list(); closeSession(); return analysisList; } catch (HibernateException e) { handleException(e, "getAnalysesBySampleIdExcludedByStatusId"); } return null; } @SuppressWarnings("unchecked") @Override public List<Analysis> getAnalysesBySampleIdAndStatusId(String id, Set<Integer> statusIds) throws LIMSRuntimeException { if (statusIds == null || statusIds.isEmpty()) { return getAnalysesBySampleId(id); } String sql = "from Analysis a where a.sampleItem.sample.id = :sampleId and a.statusId in ( :statusIds)"; try { Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("sampleId", Integer.parseInt(id)); query.setParameterList("statusIds", statusIds); List<Analysis> analysisList = query.list(); closeSession(); return analysisList; } catch (HibernateException e) { handleException(e, "getAnalysesBySampleIdAndStatusId"); } return null; } /** * bugzilla 1993 (part of 1942) getAnalysesReadyToBeReported() - returns the * tests that should be updated with a printed date of today's date (see * ResultsReport) * */ @SuppressWarnings({ "rawtypes", "unchecked" }) public List getAnalysesReadyToBeReported() throws LIMSRuntimeException { List list = new Vector(); try { List analysisStatusesToInclude = new ArrayList(); analysisStatusesToInclude.add(SystemConfiguration.getInstance().getAnalysisStatusReleased()); List sampleStatusesToInclude = new ArrayList(); sampleStatusesToInclude.add(SystemConfiguration.getInstance().getSampleStatusEntry2Complete()); sampleStatusesToInclude.add(SystemConfiguration.getInstance().getSampleStatusReleased()); list = HibernateUtil.getSession().getNamedQuery("analysis.getAnalysesReadyToBeReported") .setParameterList("analysisStatusesToInclude", analysisStatusesToInclude) .setParameterList("sampleStatusesToInclude", sampleStatusesToInclude).list(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getAnalysesReadyToBeReported()", e.toString()); throw new LIMSRuntimeException("Error in getAnalysesReadyToBeReported()", e); } finally { HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } return list; } @SuppressWarnings({ "rawtypes", "unchecked" }) public List getAllChildAnalysesByResult(Result result) throws LIMSRuntimeException { List list = new Vector(); try { String sql = "from Analysis a where a.parentResult = :param and a.status NOT IN (:param2)"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setParameter("param", result.getId()); List statusesToExclude = new ArrayList(); statusesToExclude.add(SystemConfiguration.getInstance().getAnalysisStatusCanceled()); query.setParameterList("param2", statusesToExclude); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getallChildAnalysesByResult()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getallChildAnalysesByResult()", e); } return list; } @SuppressWarnings({ "rawtypes", "unchecked" }) public List getMaxRevisionAnalysesBySample(SampleItem sampleItem) throws LIMSRuntimeException { List list = new Vector(); try { String sql = "from Analysis a where (a.sampleItem.id, a.test.id, a.revision) IN " + "(select b.sampleItem.id, b.test.id, max(b.revision) from Analysis b " + "group by b.sampleItem.id, b.test.id) " + "and a.sampleItem.id = :param " + "and a.status NOT IN (:param2) " + "order by a.test.id, a.revision desc"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setParameter("param", sampleItem.getId()); List statusesToExclude = new ArrayList(); statusesToExclude.add(SystemConfiguration.getInstance().getAnalysisStatusCanceled()); query.setParameterList("param2", statusesToExclude); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getMaxRevisionAnalysesBySample()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getMaxRevisionAnalysesBySample()", e); } return list; } // bugzilla 2300 (separate method for sample tracking) @SuppressWarnings("rawtypes") public List getMaxRevisionAnalysesBySampleIncludeCanceled(SampleItem sampleItem) throws LIMSRuntimeException { List list = new Vector(); try { String sql = "from Analysis a where (a.sampleItem.id, a.test.id, a.revision) IN " + "(select b.sampleItem.id, b.test.id, max(b.revision) from Analysis b " + "group by b.sampleItem.id, b.test.id) " + "and a.sampleItem.id = :param " + "order by a.test.id, a.revision desc"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setParameter("param", sampleItem.getId()); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getMaxRevisionAnalysesBySample()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getMaxRevisionAnalysesBySample()", e); } return list; } @SuppressWarnings({ "rawtypes", "unchecked" }) public List getRevisionHistoryOfAnalysesBySample(SampleItem sampleItem) throws LIMSRuntimeException { List list = new Vector(); try { String sql = "from Analysis a where (a.sampleItem.id, a.test.id, a.revision) NOT IN " + "(select b.sampleItem.id, b.test.id, max(b.revision) from Analysis b " + "group by b.sampleItem.id, b.test.id) " + "and a.sampleItem.id = :param " + "and a.status NOT IN (:param2) " + "order by a.test.id, a.revision desc"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setParameter("param", sampleItem.getId()); List statusesToExclude = new ArrayList(); statusesToExclude.add(SystemConfiguration.getInstance().getAnalysisStatusCanceled()); query.setParameterList("param2", statusesToExclude); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getRevisionHistoryOfAnalysesBySample()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getRevisionHistoryOfAnalysesBySample()", e); } return list; } @SuppressWarnings({ "rawtypes", "unchecked" }) public List getRevisionHistoryOfAnalysesBySampleAndTest(SampleItem sampleItem, Test test, boolean includeLatestRevision) throws LIMSRuntimeException { List list = new Vector(); try { String sql = ""; if (includeLatestRevision) { sql = "from Analysis a " + "where a.sampleItem.id = :param " + "and a.status NOT IN (:param3) " + "and a.test.id = :param2 " + "order by a.test.id, a.revision desc"; } else { sql = "from Analysis a where (a.sampleItem.id, a.test.id, a.revision) NOT IN " + "(select b.sampleItem.id, b.test.id, max(b.revision) from Analysis b " + "group by b.sampleItem.id, b.test.id) " + "and a.sampleItem.id = :param " + "and a.status NOT IN (:param3) " + "and a.test.id = :param2 " + "order by a.test.id, a.revision desc"; } org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setParameter("param", sampleItem.getId()); query.setParameter("param2", test.getId()); List statusesToExclude = new ArrayList(); statusesToExclude.add(SystemConfiguration.getInstance().getAnalysisStatusCanceled()); query.setParameterList("param3", statusesToExclude); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getRevisionHistoryOfAnalysesBySample()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getRevisionHistoryOfAnalysesBySample()", e); } return list; } @SuppressWarnings({ "rawtypes", "unchecked" }) public List getAllMaxRevisionAnalysesPerTest(Test test) throws LIMSRuntimeException { List list = new Vector(); try { String sql = "from Analysis a where (a.sampleItem.id, a.revision) IN " + "(select b.sampleItem.id, max(b.revision) from Analysis b " + "group by b.sampleItem.id) " + "and a.test = :param " + "and a.status NOT IN (:param2) " + "order by a.sampleItem.sample.accessionNumber"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setParameter("param", test.getId()); List statusesToExclude = new ArrayList(); statusesToExclude.add(SystemConfiguration.getInstance().getAnalysisStatusCanceled()); query.setParameterList("param2", statusesToExclude); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getAllMaxRevisionAnalysesPerTest()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getAllMaxRevisionAnalysesPerTest()", e); } return list; } // bugzilla 2227, 2258 @SuppressWarnings({ "rawtypes", "unchecked" }) public List getMaxRevisionAnalysesReadyToBeReported() throws LIMSRuntimeException { List list = new Vector(); try { List analysisStatusesToInclude = new ArrayList(); analysisStatusesToInclude.add(SystemConfiguration.getInstance().getAnalysisStatusReleased()); List sampleStatusesToInclude = new ArrayList(); sampleStatusesToInclude.add(SystemConfiguration.getInstance().getSampleStatusEntry2Complete()); sampleStatusesToInclude.add(SystemConfiguration.getInstance().getSampleStatusReleased()); list = HibernateUtil.getSession().getNamedQuery("analysis.getMaxRevisionAnalysesReadyToBeReported") .setParameterList("analysisStatusesToInclude", analysisStatusesToInclude) .setParameterList("sampleStatusesToInclude", sampleStatusesToInclude).list(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getMaxRevisionAnalysesReadyToBeReported()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getMaxRevisionAnalysesReadyToBeReported()", e); } finally { HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } return list; } // bugzilla 1900 @SuppressWarnings({ "rawtypes", "unchecked" }) public List getMaxRevisionAnalysesReadyForReportPreviewBySample(List accessionNumbers) throws LIMSRuntimeException { List list = new Vector(); try { List analysisStatusesToInclude = new ArrayList(); // see question in 1900 should this be released or results completed // status? // answer: results completed analysisStatusesToInclude.add(SystemConfiguration.getInstance().getAnalysisStatusResultCompleted()); List sampleStatusesToInclude = new ArrayList(); sampleStatusesToInclude.add(SystemConfiguration.getInstance().getSampleStatusEntry2Complete()); // see question in 1900 - should this be included? Yes sampleStatusesToInclude.add(SystemConfiguration.getInstance().getSampleStatusReleased()); if (accessionNumbers != null && accessionNumbers.size() > 0) { list = HibernateUtil.getSession().getNamedQuery("analysis.getMaxRevisionAnalysesReadyForPreviewBySample") .setParameterList("analysisStatusesToInclude", analysisStatusesToInclude) .setParameterList("sampleStatusesToInclude", sampleStatusesToInclude) .setParameterList("samplesToInclude", accessionNumbers).list(); } } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getMaxRevisionAnalysesReadyForReportPreviewBySample()", e.toString()); throw new LIMSRuntimeException("Error in getMaxRevisionAnalysesReadyForReportPreviewBySample()", e); } finally { HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } return list; } // bugzilla 1856 @SuppressWarnings("rawtypes") public List getAnalysesAlreadyReportedBySample(Sample sample) throws LIMSRuntimeException { List list = new Vector(); try { list = HibernateUtil.getSession().getNamedQuery("analysis.getAnalysesAlreadyReportedBySample") .setParameter("sampleId", sample.getId()).list(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getAnalysesAlreadyReportedBySample()", e.toString()); throw new LIMSRuntimeException("Error in getAnalysesAlreadyReportedBySample()", e); } finally { HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } return list; } // bugzilla 2264 @SuppressWarnings({ "rawtypes", "unchecked" }) public List getMaxRevisionPendingAnalysesReadyToBeReportedBySample(Sample sample) throws LIMSRuntimeException { List list = new Vector(); try { List analysisStatusesToInclude = new ArrayList(); analysisStatusesToInclude.add(SystemConfiguration.getInstance().getAnalysisStatusAssigned()); // bugzilla 2264 per Nancy add results completed status to pending // tests analysisStatusesToInclude.add(SystemConfiguration.getInstance().getAnalysisStatusResultCompleted()); list = HibernateUtil.getSession().getNamedQuery("analysis.getMaxRevisionPendingAnalysesReadyToBeReportedBySample") .setParameter("sampleId", sample.getId()).setParameterList("analysisStatusesToInclude", analysisStatusesToInclude) .list(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getMaxRevisionPendingAnalysesReadyToBeReportedBySample()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getMaxRevisionPendingAnalysesReadyToBeReportedBySample()", e); } finally { HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } return list; } // bugzilla 1900 @SuppressWarnings({ "rawtypes", "unchecked" }) public List getMaxRevisionPendingAnalysesReadyForReportPreviewBySample(Sample sample) throws LIMSRuntimeException { List list = new Vector(); try { List analysisStatusesToInclude = new ArrayList(); analysisStatusesToInclude.add(SystemConfiguration.getInstance().getAnalysisStatusAssigned()); // see question in 1900 do we need to include this? // Answer NO // analysisStatusesToInclude.add(SystemConfiguration.getInstance().getAnalysisStatusResultCompleted()); list = HibernateUtil.getSession().getNamedQuery("analysis.getMaxRevisionPendingAnalysesReadyToBeReportedBySample") .setParameter("sampleId", sample.getId()).setParameterList("analysisStatusesToInclude", analysisStatusesToInclude) .list(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getMaxRevisionPendingAnalysesReadyForReportPreviewBySample()", e.toString()); throw new LIMSRuntimeException("Error in getMaxRevisionPendingAnalysesReadyForReportPreviewBySample()", e); } finally { HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } return list; } @SuppressWarnings({ "unchecked", "rawtypes" }) public Analysis getPreviousAnalysisForAmendedAnalysis(Analysis analysis) throws LIMSRuntimeException { Analysis previousAnalysis = null; try { // Use an expression to read in the Analysis whose // revision is 1 less than the analysis passed in String sql = "from Analysis a where a.revision = :param and a.sampleItem = :param2 and a.test = :param3 and a.status NOT IN (:param4)"; Query query = HibernateUtil.getSession().createQuery(sql); String revisionString = analysis.getRevision(); int revision = 0; if (!StringUtil.isNullorNill(revisionString)) { try { revision = Integer.parseInt(revisionString); } catch (NumberFormatException nfe) { } } query.setParameter("param", String.valueOf((revision - 1))); query.setParameter("param2", analysis.getSampleItem()); query.setParameter("param3", analysis.getTest()); List statusesToExclude = new ArrayList(); statusesToExclude.add(SystemConfiguration.getInstance().getAnalysisStatusCanceled()); query.setParameterList("param4", statusesToExclude); List list = query.list(); if ((list != null) && !list.isEmpty()) { previousAnalysis = (Analysis) list.get(0); } HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getPreviousAnalysisForAmendedAnalysis()", e.toString()); throw new LIMSRuntimeException("Exception occurred in getPreviousAnalysisForAmendedAnalysis", e); } return previousAnalysis; } @SuppressWarnings({ "rawtypes", "unchecked" }) private boolean duplicateAnalysisExists(Analysis analysis) throws LIMSRuntimeException { try { List list = new ArrayList(); String sql = "from Analysis a where a.sampleItem = :param and a.test = :param2 and a.status NOT IN (:param3)"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setParameter("param", analysis.getSampleItem()); query.setParameter("param2", analysis.getTest()); List statusesToExclude = new ArrayList(); statusesToExclude.add(SystemConfiguration.getInstance().getAnalysisStatusCanceled()); query.setParameterList("param3", statusesToExclude); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); if (list.size() > 0) { return true; } else { return false; } } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "duplicateAnalysisExists()", e.toString()); throw new LIMSRuntimeException("Error in duplicateAnalysisExists()", e); } } @SuppressWarnings({ "unchecked", "rawtypes" }) public void getMaxRevisionAnalysisBySampleAndTest(Analysis analysis) throws LIMSRuntimeException { try { Analysis anal = null; String sql = "from Analysis a where (a.sampleItem.id, a.test.id, a.revision) IN " + "(select b.sampleItem.id, b.test.id, max(b.revision) from Analysis b " + "group by b.sampleItem.id, b.test.id) " + "and a.sampleItem = :param " + "and a.status NOT IN (:param3) " + "and a.test = :param2"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setParameter("param", analysis.getSampleItem().getId()); query.setParameter("param2", analysis.getTest().getId()); List statusesToExclude = new ArrayList(); statusesToExclude.add(SystemConfiguration.getInstance().getAnalysisStatusCanceled()); query.setParameterList("param3", statusesToExclude); anal = (Analysis) query.uniqueResult(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); if (anal != null) { PropertyUtils.copyProperties(analysis, anal); } else { analysis.setId(null); } } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getMaxRevisionAnalysisBySampleAndTest()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getMaxRevisionAnalysisBySampleAndTest()", e); } } @SuppressWarnings({ "rawtypes", "unchecked" }) public List getMaxRevisionParentTestAnalysesBySample(SampleItem sampleItem) throws LIMSRuntimeException { List list = new Vector(); try { String sql = "from Analysis a where (a.sampleItem.id, a.test.id, a.revision) IN " + "(select b.sampleItem.id, b.test.id, max(b.revision) from Analysis b " + "group by b.sampleItem.id, b.test.id) " + "and a.sampleItem.id = :param " + "and a.status NOT IN (:param2) " + "and a.parentAnalysis is null " + "order by a.test.id, a.revision desc"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setParameter("param", sampleItem.getId()); List statusesToExclude = new ArrayList(); statusesToExclude.add(SystemConfiguration.getInstance().getAnalysisStatusCanceled()); query.setParameterList("param2", statusesToExclude); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (Exception e) { LogEvent.logError("AnalysisDAOImpl", "getMaxRevisionAnalysesBySample()", e.toString()); throw new LIMSRuntimeException("Error in Analysis getMaxRevisionAnalysesBySample()", e); } return list; } @SuppressWarnings("unchecked") public List<Analysis> getAnalysesForStatusId(String statusId) throws LIMSRuntimeException { List<Analysis> list = null; try { String sql = "from Analysis a where a.statusId = :statusId"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("statusId", Integer.parseInt(statusId)); list = query.list(); closeSession(); return list; } catch (HibernateException he) { handleException(he, "getAnalysisForStatusId"); } return null; } @SuppressWarnings("unchecked") @Override public List<Analysis> getAnalysisStartedOnExcludedByStatusId(Date collectionDate, Set<Integer> statusIds) throws LIMSRuntimeException { if (statusIds == null || statusIds.isEmpty()) { return getAnalysisStartedOn(collectionDate); } String sql = "from Analysis a where a.startedDate = :startedDate and a.statusId not in ( :statusList )"; try { Query query = HibernateUtil.getSession().createQuery(sql); query.setDate("startedDate", collectionDate); query.setParameterList("statusList", statusIds); List<Analysis> analysisList = query.list(); closeSession(); return analysisList; } catch (HibernateException e) { handleException(e, "getAnalysisStartedOnExcludedByStatusId"); } return null; } @SuppressWarnings("unchecked") public List<Analysis> getAnalysisStartedOn(Date collectionDate) throws LIMSRuntimeException { try { String sql = "from Analysis a where a.startedDate = :startedDate"; Query query = HibernateUtil.getSession().createQuery(sql); query.setDate("startedDate", collectionDate); List<Analysis> list = query.list(); closeSession(); return list; } catch (HibernateException he) { handleException(he, "getAnalysisStartedOn"); } return null; } @SuppressWarnings("unchecked") @Override public List<Analysis> getAnalysisCollectedOnExcludedByStatusId(Date collectionDate, Set<Integer> statusIds) throws LIMSRuntimeException { if (statusIds == null || statusIds.isEmpty()) { return getAnalysisStartedOn(collectionDate); } String sql = "from Analysis a where a.sampleItem.collectionDate = :startedDate and a.statusId not in ( :statusList )"; try { Query query = HibernateUtil.getSession().createQuery(sql); query.setDate("startedDate", collectionDate); query.setParameterList("statusList", statusIds); List<Analysis> analysisList = query.list(); closeSession(); return analysisList; } catch (HibernateException e) { handleException(e, "getAnalysisStartedOnExcludedByStatusId"); } return null; } @SuppressWarnings("unchecked") public List<Analysis> getAnalysisCollectedOn(Date collectionDate) throws LIMSRuntimeException { try { String sql = "from Analysis a where a.sampleItem.collectionDate = :startedDate"; Query query = HibernateUtil.getSession().createQuery(sql); query.setDate("startedDate", collectionDate); List<Analysis> list = query.list(); closeSession(); return list; } catch (HibernateException he) { handleException(he, "getAnalysisStartedOn"); } return null; } /** * @see us.mn.state.health.lims.analysis.dao.AnalysisDAO#getAnalysisBySampleAndTestIds(java.lang.String, * java.util.List) */ @SuppressWarnings("unchecked") public List<Analysis> getAnalysisBySampleAndTestIds(String sampleId, List<Integer> testIds) { List<Analysis> list = null; try { if (testIds == null || testIds.size() == 0) { return new ArrayList<Analysis>(); } String sql = "from Analysis a WHERE a.sampleItem.sample.id = :sampleId AND a.test.id IN ( :testIds )"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("sampleId", Integer.valueOf(sampleId)); query.setParameterList("testIds", testIds); list = query.list(); HibernateUtil.getSession().flush(); HibernateUtil.getSession().clear(); } catch (HibernateException he) { LogEvent.logError("AnalysisDAOImpl", "getAnalysisBySampleAndTestIds()", he.toString()); throw new LIMSRuntimeException("Error in getAnalysisStartedOn()", he); } return list; } @SuppressWarnings("unchecked") public List<Analysis> getAnalysisByTestSectionAndCompletedDateRange(String sectionID, Date lowDate, Date highDate) throws LIMSRuntimeException { String sql = "From Analysis a where a.testSection.id = :testSectionId and a.completedDate BETWEEN :lowDate AND :highDate"; try { Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("testSectionId", Integer.parseInt(sectionID)); query.setDate("lowDate", lowDate); query.setDate("highDate", highDate); List<Analysis> list = query.list(); closeSession(); return list; } catch (HibernateException he) { handleException(he, "getAnalysisByTestSectionAndCompletedDateRange"); } return null; } @SuppressWarnings("unchecked") public List<Analysis> getAnalysisStartedOrCompletedInDateRange(Date lowDate, Date highDate) throws LIMSRuntimeException { String sql = "From Analysis a where a.startedDate BETWEEN :lowDate AND :highDate or a.completedDate BETWEEN :lowDate AND :highDate"; try { Query query = HibernateUtil.getSession().createQuery(sql); query.setDate("lowDate", lowDate); query.setDate("highDate", highDate); List<Analysis> list = query.list(); closeSession(); return list; } catch (HibernateException he) { handleException(he, "getAnalysisStartedOrCompletedInDateRange"); } return null; } @SuppressWarnings("unchecked") public List<Analysis> getAnalysesBySampleId(String id) throws LIMSRuntimeException { List<Analysis> list = null; if (!GenericValidator.isBlankOrNull(id)) { try { String sql = "from Analysis a where a.sampleItem.sample.id = :sampleId"; org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("sampleId", Integer.parseInt(id)); list = query.list(); closeSession(); } catch (Exception e) { handleException(e, "getAnalysesBySampleId"); } } return list; } @SuppressWarnings("unchecked") public List<Analysis> getAllAnalysisByTestSectionAndStatus(String testSectionId, List<Integer> analysisStatusList, List<Integer> sampleStatusList) throws LIMSRuntimeException { String sql = "From Analysis a WHERE a.testSection.id = :testSectionId AND a.statusId IN (:analysisStatusList) AND a.sampleItem.sample.statusId IN (:sampleStatusList)"; try { Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("testSectionId", Integer.parseInt(testSectionId)); query.setParameterList("analysisStatusList", analysisStatusList); query.setParameterList("sampleStatusList", sampleStatusList); List<Analysis> analysisList = query.list(); closeSession(); return analysisList; } catch (HibernateException e) { handleException(e, "getAllAnalysisByTestSectionAndStatus"); } return null; } @SuppressWarnings("unchecked") @Override public List<Analysis> getAnalysisStartedOnRangeByStatusId(Date lowDate, Date highDate, String statusID) throws LIMSRuntimeException { String sql = "From Analysis a where a.statusId = :statusID and a.startedDate BETWEEN :lowDate AND :highDate"; try { Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("statusID", Integer.parseInt(statusID)); query.setDate("lowDate", lowDate); query.setDate("highDate", highDate); List<Analysis> analysisList = query.list(); closeSession(); return analysisList; } catch (HibernateException e) { handleException(e, "getAnalysisStartedOnRangeByStatusId"); } return null; } @SuppressWarnings("unchecked") @Override public List<Analysis> getAnalysisCompleteInRange(Timestamp lowDate, Timestamp highDate) throws LIMSRuntimeException { String sql = "From Analysis a where a.completedDate >= :lowDate AND a.completedDate < :highDate"; try { Query query = HibernateUtil.getSession().createQuery(sql); query.setTimestamp("lowDate", lowDate); query.setTimestamp("highDate", highDate); List<Analysis> analysisList = query.list(); closeSession(); return analysisList; } catch (HibernateException e) { handleException(e, "getAnalysisCompletedInRange"); } return null; } @SuppressWarnings("unchecked") @Override public List<Analysis> getAnalysisEnteredAfterDate(Timestamp date) throws LIMSRuntimeException { String sql = "From Analysis a where a.enteredDate > :date"; try { Query query = HibernateUtil.getSession().createQuery(sql); query.setTimestamp("date", date); List<Analysis> analysisList = query.list(); closeSession(); return analysisList; } catch (HibernateException e) { handleException(e, "getAnalysisEnteredAfterDate"); } return null; } @SuppressWarnings("unchecked") @Override public List<Analysis> getAnalysisByAccessionAndTestId(String accessionNumber, String testId) throws LIMSRuntimeException { if (GenericValidator.isBlankOrNull(accessionNumber) || GenericValidator.isBlankOrNull(testId)) { return new ArrayList<Analysis>(); } String sql = "From Analysis a where a.sampleItem.sample.accessionNumber = :accessionNumber and a.test.id = :testId"; try { Query query = HibernateUtil.getSession().createQuery(sql); query.setString("accessionNumber", accessionNumber); query.setInteger("testId", Integer.parseInt(testId)); List<Analysis> analysises = query.list(); closeSession(); return analysises; } catch (HibernateException e) { handleException(e, "getAnalysisByAccessionAndTestId"); } return null; } @Override public List<Analysis> getAnalysisByTestNamesAndCompletedDateRange(List<String> testNames, Date lowDate, Date highDate) throws LIMSRuntimeException { if (testNames.isEmpty()) { return new ArrayList<Analysis>(); } String sql = "From Analysis a where a.test.testName in (:testNames) and a.completedDate BETWEEN :lowDate AND :highDate"; try { Query query = HibernateUtil.getSession().createQuery(sql); query.setParameterList("testNames", testNames); query.setDate("lowDate", lowDate); query.setDate("highDate", highDate); @SuppressWarnings("unchecked") List<Analysis> list = query.list(); closeSession(); return list; } catch (HibernateException he) { handleException(he, "getAnalysisByTestNamesAndCompletedDateRange"); } return null; } @Override public List<Analysis> getAnalysisByTestDescriptionAndCompletedDateRange(List<String> descriptions, Date lowDate, Date highDate) throws LIMSRuntimeException { if (descriptions.isEmpty()) { return new ArrayList<Analysis>(); } String sql = "From Analysis a where a.test.description in (:descriptions) and a.completedDate BETWEEN :lowDate AND :highDate"; try { Query query = HibernateUtil.getSession().createQuery(sql); query.setParameterList("descriptions", descriptions); query.setDate("lowDate", lowDate); query.setDate("highDate", highDate); @SuppressWarnings("unchecked") List<Analysis> list = query.list(); closeSession(); return list; } catch (HibernateException he) { handleException(he, "getAnalysisByTestDescriptionsAndCompletedDateRange"); } return null; } @Override public List<Analysis> getAnalysesBySampleItemIdAndStatusId(String sampleItemId, String statusId) throws LIMSRuntimeException { try { String sql = "from Analysis a where a.sampleItem.id = :sampleItemId and a.statusId = :statusId"; Query query = HibernateUtil.getSession().createQuery(sql); query.setInteger("sampleItemId", Integer.parseInt(sampleItemId)); query.setInteger("statusId", Integer.parseInt(statusId)); @SuppressWarnings("unchecked") List<Analysis> analysisList = query.list(); closeSession(); return analysisList; } catch (Exception e) { handleException(e, "getAnalysesBySampleItemIdAndStatusId"); } return null; //will never get here } @Override public Analysis getAnalysisById(String analysisId) throws LIMSRuntimeException { if(analysisId==null) return null; try { Analysis analysis = (Analysis) HibernateUtil.getSession().get(Analysis.class, analysisId); closeSession(); return analysis; } catch (Exception e) { handleException(e, "getAnalysisById"); } return null; } @SuppressWarnings("unchecked") @Override public List<Analysis> getAnalysesBySampleIdTestIdAndStatusId(List<Integer> sampleIdList, List<Integer> testIdList, List<Integer> statusIdList) throws LIMSRuntimeException { if (sampleIdList.isEmpty() || testIdList.isEmpty() || statusIdList.isEmpty()) { return new ArrayList<Analysis>(); } String sql = "from Analysis a where a.sampleItem.sample.id in (:sampleIdList) and a.test.id in (:testIdList) and a.statusId in (:statusIdList) order by a.releasedDate desc"; try { Query query = HibernateUtil.getSession().createQuery(sql); query.setParameterList("sampleIdList", sampleIdList); query.setParameterList("testIdList", testIdList); query.setParameterList("statusIdList", statusIdList); List<Analysis> analysisList = query.list(); closeSession(); return analysisList; } catch (HibernateException e) { handleException(e, "getAnalysesBySampleIdTestIdAndStatusId"); } return null; } public Analysis getPatientPreviousAnalysisForTestName(Patient patient,Sample currentSample, String testName){ Analysis previousAnalysis=null; List<Integer> sampIDList= new ArrayList<Integer>(); List<Integer> testIDList= new ArrayList<Integer>(); TestDAO testDAO=new TestDAOImpl(); SampleHumanDAO sampleHumanDAO = new SampleHumanDAOImpl(); List<Sample> sampList=sampleHumanDAO.getSamplesForPatient(patient.getId()); if(sampList.isEmpty() || testDAO.getTestByName(testName)==null) return previousAnalysis; testIDList.add(Integer.parseInt(testDAO.getTestByName(testName).getId())); for(Sample sample : sampList){ sampIDList.add(Integer.parseInt(sample.getId())); } List<Integer> statusList = new ArrayList<Integer>(); statusList.add(Integer.parseInt(StatusService.getInstance().getStatusID(AnalysisStatus.Finalized))); AnalysisDAO analysisDAO = new AnalysisDAOImpl(); List<Analysis> analysisList = analysisDAO.getAnalysesBySampleIdTestIdAndStatusId(sampIDList,testIDList, statusList); if (analysisList.isEmpty()) return previousAnalysis; for(int i=0;i<analysisList.size();i++){ if(i<analysisList.size()-1 && currentSample.getAccessionNumber().equals(analysisList.get(i).getSampleItem().getSample().getAccessionNumber())){ previousAnalysis=analysisList.get(i+1); return previousAnalysis; } } return previousAnalysis; } }