/**
* 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.test.daoimpl;
import org.apache.commons.beanutils.PropertyUtils;
import org.hibernate.HibernateException;
import org.hibernate.Query;
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.services.TestService;
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.login.dao.UserModuleDAO;
import us.mn.state.health.lims.login.daoimpl.UserModuleDAOImpl;
import us.mn.state.health.lims.login.valueholder.UserSessionData;
import us.mn.state.health.lims.method.valueholder.Method;
import us.mn.state.health.lims.systemusersection.dao.SystemUserSectionDAO;
import us.mn.state.health.lims.systemusersection.daoimpl.SystemUserSectionDAOImpl;
import us.mn.state.health.lims.systemusersection.valueholder.SystemUserSection;
import us.mn.state.health.lims.test.dao.TestDAO;
import us.mn.state.health.lims.test.valueholder.Test;
import us.mn.state.health.lims.testanalyte.dao.TestAnalyteDAO;
import us.mn.state.health.lims.testanalyte.daoimpl.TestAnalyteDAOImpl;
import us.mn.state.health.lims.testanalyte.valueholder.TestAnalyte;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
* @author diane benz
*/
public class TestDAOImpl extends BaseDAOImpl implements TestDAO{
public void deleteData(List tests) throws LIMSRuntimeException{
// add to audit trail
try{
AuditTrailDAO auditDAO = new AuditTrailDAOImpl();
for(int i = 0; i < tests.size(); i++){
Test data = (Test)tests.get(i);
Test oldData = readTest(data.getId());
Test newData = new Test();
String sysUserId = data.getSysUserId();
String event = IActionConstants.AUDIT_TRAIL_DELETE;
String tableName = "TEST";
auditDAO.saveHistory(newData, oldData, sysUserId, event, tableName);
}
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "AuditTrail deleteData()", e.toString());
throw new LIMSRuntimeException("Error in Test AuditTrail deleteData()", e);
}
try{
for(int i = 0; i < tests.size(); i++){
Test data = (Test)tests.get(i);
Test cloneData = readTest(data.getId());
cloneData.setIsActive(IActionConstants.NO);
HibernateUtil.getSession().merge(cloneData);
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
HibernateUtil.getSession().evict(cloneData);
HibernateUtil.getSession().refresh(cloneData);
}
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "deleteData()", e.toString());
throw new LIMSRuntimeException("Error in Test deleteData()", e);
}
}
public boolean insertData(Test test) throws LIMSRuntimeException{
try{
if(test.getIsActive().equals(IActionConstants.YES) && duplicateTestExists(test)){
throw new LIMSDuplicateRecordException("Duplicate record exists for " + test.getDescription());
}
String id = (String)HibernateUtil.getSession().save(test);
test.setId(id);
AuditTrailDAO auditDAO = new AuditTrailDAOImpl();
String sysUserId = test.getSysUserId();
String tableName = "TEST";
auditDAO.saveNewHistory(test, sysUserId, tableName);
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "insertData()", e.toString());
throw new LIMSRuntimeException("Error in Test insertData()", e);
}
return true;
}
public void updateData(Test test) throws LIMSRuntimeException{
try{
if(test.getIsActive().equals(IActionConstants.YES) && duplicateTestExists(test)){
throw new LIMSDuplicateRecordException("Duplicate record exists for " + TestService.getUserLocalizedTestName( test ));
}
}catch(Exception e){
LogEvent.logError("TestDAOImpl", "updateData()", e.toString());
throw new LIMSRuntimeException("Error in Test updateData()", e);
}
Test oldData = readTest(test.getId());
try{
AuditTrailDAO auditDAO = new AuditTrailDAOImpl();
String sysUserId = test.getSysUserId();
String event = IActionConstants.AUDIT_TRAIL_UPDATE;
String tableName = "TEST";
auditDAO.saveHistory(test, oldData, sysUserId, event, tableName);
}catch(Exception e){
LogEvent.logError("TestDAOImpl", "AuditTrail updateData()", e.toString());
throw new LIMSRuntimeException("Error in Test AuditTrail updateData()", e);
}
try{
HibernateUtil.getSession().merge(test);
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
HibernateUtil.getSession().evict(test);
HibernateUtil.getSession().refresh(test);
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "updateData()", e.toString());
throw new LIMSRuntimeException("Error in Test updateData()", e);
}
}
public void getData(Test test) throws LIMSRuntimeException{
try{
Test testClone = (Test)HibernateUtil.getSession().get(Test.class, test.getId());
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
if(testClone != null){
PropertyUtils.copyProperties(test, testClone);
}else{
test.setId(null);
}
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "getData()", e.toString());
throw new LIMSRuntimeException("Error in Test getData()", e);
}
}
@SuppressWarnings("unchecked")
public List<Test> getAllTests(boolean onlyTestsFullySetup) throws LIMSRuntimeException{
List<Test> list = new Vector<Test>();
try{
String sql = "from Test Order by description";
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
list = query.list();
list = filterOnlyFullSetup(onlyTestsFullySetup, list);
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
}catch(Exception e){
handleException(e, "getAllTests()");
}
return list;
}
@SuppressWarnings("unchecked")
public List<Test> getAllActiveTests(boolean onlyTestsFullySetup) throws LIMSRuntimeException{
List<Test> list = new Vector<Test>();
try{
String sql = "from Test WHERE is_Active = 'Y' Order by description";
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
list = query.list();
list = filterOnlyFullSetup(onlyTestsFullySetup, list);
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
}catch(Exception e){
handleException(e, "getAllActiveTests()");
}
return list;
}
private List<Test> filterOnlyFullSetup(boolean onlyTestsFullySetup, List<Test> list){
if(onlyTestsFullySetup && list != null && list.size() > 0){
Iterator<Test> testIterator = list.iterator();
list = new Vector<Test>();
while(testIterator.hasNext()){
Test test = testIterator.next();
if(isTestFullySetup(test)){
list.add(test);
}
}
}
return list;
}
@SuppressWarnings("unchecked")
@Override
public List<Test> getAllActiveOrderableTests() throws LIMSRuntimeException{
try{
String sql = "from Test t WHERE t.isActive = 'Y' and t.orderable = true Order by t.description";
Query query = HibernateUtil.getSession().createQuery(sql);
List<Test> list = query.list();
closeSession();
return list;
}catch(Exception e){
handleException(e, "getAllActiveOrderableTests()");
}
return null;
}
/**
* Get all the tests assigned to this user
*
* @param sysUserId
* the user system id
* @return list of test section bugzilla 2291 added onlyTestsFullySetup
*/
public List getAllTestsBySysUserId(int sysUserId, boolean onlyTestsFullySetup) throws LIMSRuntimeException{
List list = new Vector();
String sectionIdList = "";
String sql;
try{
SystemUserSectionDAO systemUserSectionDao = new SystemUserSectionDAOImpl();
List userTestSectionList = systemUserSectionDao.getAllSystemUserSectionsBySystemUserId(sysUserId);
for(int i = 0; i < userTestSectionList.size(); i++){
SystemUserSection sus = (SystemUserSection)userTestSectionList.get(i);
sectionIdList += sus.getTestSection().getId() + ",";
}
if(!(sectionIdList.equals("")) && (sectionIdList.length() > 0)){
sectionIdList = sectionIdList.substring(0, sectionIdList.length() - 1);
sql = "from Test t where t.testSection.id in (" + sectionIdList + ") Order by description";
}else{
return list;
}
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
list = query.list();
list = filterOnlyFullSetup(onlyTestsFullySetup, list);
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "getAllTestsBySysUserId()", e.toString());
throw new LIMSRuntimeException("Error in Test getAllTestsBySysUserId()", e);
}
return list;
}
public List getPageOfTests(int startingRecNo) throws LIMSRuntimeException{
List list;
try{
// calculate maxRow to be one more than the page size
int endingRecNo = startingRecNo + (SystemConfiguration.getInstance().getDefaultPageSize() + 1);
// bugzilla 1399
String sql = "from Test t order by t.testSection.testSectionName, t.testName";
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){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "getPageOfTests()", e.toString());
throw new LIMSRuntimeException("Error in Test getPageOfTests()", e);
}
return list;
}
// bugzilla 2371
public List getPageOfSearchedTests(int startingRecNo, String searchString) throws LIMSRuntimeException{
List list;
String wildCard = "*";
String newSearchStr;
String sql;
try{
int endingRecNo = startingRecNo + (SystemConfiguration.getInstance().getDefaultPageSize() + 1);
int wCdPosition = searchString.indexOf(wildCard);
if(wCdPosition == -1) // no wild card looking for exact match
{
newSearchStr = searchString.toLowerCase().trim();
sql = "from Test t where trim(lower (t.description)) = :param order by t.testSection.testSectionName, t.testName";
}else{
newSearchStr = searchString.replace(wildCard, "%").toLowerCase().trim();
sql = "from Test t where trim(lower (t.description)) like :param order by t.testSection.testSectionName, t.testName";
}
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
query.setParameter("param", newSearchStr);
query.setFirstResult(startingRecNo - 1);
query.setMaxResults(endingRecNo - 1);
list = query.list();
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
}catch(Exception e){
e.printStackTrace();
throw new LIMSRuntimeException("Error in Test getPageOfSearchedTests()", e);
}
return list;
}
// end bugzilla 2371
/**
* Get all the tests assigned to this user
*
* @param startingRecNo
* the start record
* @param sysUserId
* is the user system id
* @return list of test section
*/
public List getPageOfTestsBySysUserId(int startingRecNo, int sysUserId) 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 sectionIdList = "";
String sql;
SystemUserSectionDAO systemUserSectionDao = new SystemUserSectionDAOImpl();
List userTestSectionList = systemUserSectionDao.getAllSystemUserSectionsBySystemUserId(sysUserId);
for(int i = 0; i < userTestSectionList.size(); i++){
SystemUserSection sus = (SystemUserSection)userTestSectionList.get(i);
sectionIdList += sus.getTestSection().getId() + ",";
}
if(!(sectionIdList.equals("")) && (sectionIdList.length() > 0)){
sectionIdList = sectionIdList.substring(0, sectionIdList.length() - 1);
sql = "from Test t where t.testSection.id in (" + sectionIdList + ") order by t.testSection.testSectionName, t.testName";
}else{
return list;
}
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){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "getPageOfTestsBySysUserId()", e.toString());
throw new LIMSRuntimeException("Error in Test getPageOfTestsBySysUserId()", e);
}
return list;
}
/**
* Get all the tests assigned to this user
*
* @param startingRecNo
* the start record
* @param sysUserId
* is the user system id
* @return list of test section
*/
public List<Test> getPageOfSearchedTestsBySysUserId(int startingRecNo, int sysUserId, String searchString) throws LIMSRuntimeException{
String wildCard = "*";
String newSearchStr;
String sql;
try{
int endingRecNo = startingRecNo + (SystemConfiguration.getInstance().getDefaultPageSize() + 1);
String sectionIdList = "";
SystemUserSectionDAO systemUserSectionDao = new SystemUserSectionDAOImpl();
@SuppressWarnings("unchecked")
List<SystemUserSection> userTestSectionList = systemUserSectionDao.getAllSystemUserSectionsBySystemUserId(sysUserId);
for(int i = 0; i < userTestSectionList.size(); i++){
sectionIdList += userTestSectionList.get(i).getTestSection().getId() + ",";
}
if(!(sectionIdList.equals("")) && (sectionIdList.length() > 0)){
sectionIdList = sectionIdList.substring(0, sectionIdList.length() - 1);
int wCdPosition = searchString.indexOf(wildCard);
if(wCdPosition == -1) // no wild card looking for exact match
{
newSearchStr = searchString.toLowerCase().trim();
sql = "from Test t where t.testSection.id in (" + sectionIdList
+ " ) and trim(lower (t.description)) = :param order by t.testSection.testSectionName, t.testName";
}else{
newSearchStr = searchString.replace(wildCard, "%").toLowerCase().trim();
sql = "from Test t where t.testSection.id in (" + sectionIdList
+ ") and trim(lower (t.description)) like :param order by t.testSection.testSectionName, t.testName";
}
}else
return new ArrayList<Test>();
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
query.setParameter("param", newSearchStr);
query.setFirstResult(startingRecNo - 1);
query.setMaxResults(endingRecNo - 1);
@SuppressWarnings("unchecked")
List<Test> list = query.list();
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
return list;
}catch(Exception e){
e.printStackTrace();
throw new LIMSRuntimeException("Error in Test getPageOfTestsBySysUserId()", e);
}
}
public Test readTest(String idString){
Test test;
try{
test = (Test)HibernateUtil.getSession().get(Test.class, idString);
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "readTest()", e.toString());
throw new LIMSRuntimeException("Error in Test readTest()", e);
}
return test;
}
public List getNextTestRecord(String id) throws LIMSRuntimeException{
return getNextRecord(id, "Test", Test.class);
}
public List getPreviousTestRecord(String id) throws LIMSRuntimeException{
return getPreviousRecord(id, "Test", Test.class);
}
// this is for autocomplete
// bugzilla 2291 added onlyTestsFullySetup
public List getTests(String filter, boolean onlyTestsFullySetup) throws LIMSRuntimeException{
List list;
try{
String sql = "from Test t where upper(t.testName) like upper(:param) and t.isActive='Y' order by upper(t.testName)";
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
query.setParameter("param", filter + "%");
list = query.list();
list = filterOnlyFullSetup(onlyTestsFullySetup, list);
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
}catch(Exception e){
LogEvent.logError("TestDAOImpl", "getTests()", e.toString());
throw new LIMSRuntimeException("Error in Test getTests(String filter)", e);
}
return list;
}
public Test getTestByName(Test test) throws LIMSRuntimeException{
return getTestByName( test.getTestName() );
}
public Test getTestByName(String testName) throws LIMSRuntimeException{
try{
String sql = "from Test t where t.testName = :testName";
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
query.setParameter("testName", testName);
@SuppressWarnings("unchecked")
List<Test> list = query.list();
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
Test t = null;
if(!list.isEmpty()){
t = list.get(0);
}
return t;
}catch(Exception e){
LogEvent.logError("TestDAOImpl", "getTestByName()", e.toString());
throw new LIMSRuntimeException("Error in Test getTestByName()", e);
}
}
public Test getTestByUserLocalizedName(String testName) throws LIMSRuntimeException{
try{
String sql = "from Test t where (t.localizedTestName.english = :testName or t.localizedTestName.french = :testName) and t.isActive='Y'";
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
query.setParameter("testName", testName);
@SuppressWarnings("unchecked")
List<Test> list = query.list();
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
Test t = null;
if(!list.isEmpty()){
t = list.get(0);
}
return t;
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "getTestByName()", e.toString());
throw new LIMSRuntimeException("Error in Test getTestByName()", e);
}
}
@SuppressWarnings("unchecked")
public List<Test> getActiveTestByName(String testName) throws LIMSRuntimeException{
try{
String sql = "from Test t where t.testName = :testName and t.isActive='Y'";
Query query = HibernateUtil.getSession().createQuery(sql);
query.setParameter("testName", testName);
List<Test> list = query.list();
closeSession();
return list;
}catch(HibernateException e){
handleException(e, "getActiveTestByName");
}
return new ArrayList<Test>();
}
@SuppressWarnings("unchecked")
public Test getActiveTestById(Integer testId) throws LIMSRuntimeException{
List<Test> list = null;
try{
String sql = "from Test t where t.id = :testId and t.isActive='Y'";
Query query = HibernateUtil.getSession().createQuery(sql);
query.setParameter("testId", testId);
list = query.list();
closeSession();
}catch(HibernateException e){
handleException(e, "getActiveTestById");
}
return list.size() > 0 ? list.get(0) : null;
}
public Test getTestById(Test test) throws LIMSRuntimeException{
Test returnTest;
try{
returnTest = (Test)HibernateUtil.getSession().get(Test.class, test.getId());
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "getTestById()", e.toString());
throw new LIMSRuntimeException("Error in Test getTestById()", e);
}
return returnTest;
}
// this is for selectdropdown
public List getMethodsByTestSection(String filter) throws LIMSRuntimeException{
try{
String sql = "from Test t where t.testSection = :param";
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
query.setParameter("param", filter);
List list = query.list();
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
List methods = new ArrayList();
for(int i = 0; i < list.size(); i++){
Test t = (Test)list.get(i);
/*
* System.out.println("This is test " + t.getId() + " " +
* t.getTestName());
*/
Method method = t.getMethod();
if(!methods.contains(method)){
methods.add(method);
}
/*
* System.out.println("Adding this method to list " +
* method.getId() + " " + method.getMethodName());
*/
}
return methods;
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "getMethodsByTestSection()", e.toString());
throw new LIMSRuntimeException("Error in Method getMethodsByTestSection(String filter)", e);
}
}
// this is for selectdropdown
public List getTestsByTestSection(String filter) throws LIMSRuntimeException{
try{
String sql = "from Test t where t.testSection = :param";
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
query.setInteger("param", Integer.parseInt(filter));
List list = query.list();
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
return list;
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "getTestsByTestSection()", e.toString());
throw new LIMSRuntimeException("Error in Method getTestsByTestSection(String filter)", e);
}
}
public List<Test> getTestsByTestSectionId(String id) throws LIMSRuntimeException{
try{
String sql = "from Test t where t.testSection.id = :id";
Query query = HibernateUtil.getSession().createQuery(sql);
query.setInteger("id", Integer.parseInt(id));
List list = query.list();
closeSession();
return list;
}catch(Exception e){
handleException(e,"getTestsByTestSectionId");
}
return null;
}
// this is for selectdropdown
public List getTestsByMethod(String filter) throws LIMSRuntimeException{
try{
String sql = "from Test t where t.method = :param";
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
query.setParameter("param", filter);
List list = query.list();
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
return list;
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "getTestsByMethod()", e.toString());
throw new LIMSRuntimeException("Error in Method getTestsByMethod(String filter)", e);
}
}
// this is for selectdropdown
public List getTestsByTestSectionAndMethod(String filter, String filter2) throws LIMSRuntimeException{
try{
String sql = "from Test t where t.testSection = :param1 and t.method = :param2";
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
query.setParameter("param1", filter);
query.setParameter("param2", filter2);
List list = query.list();
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
return list;
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "getTestsByMethod()", e.toString());
throw new LIMSRuntimeException("Error in Method getTestsByMethod(String filter)", e);
}
}
// bugzilla 1411
public Integer getTotalTestCount() throws LIMSRuntimeException{
return getTotalCount("Test", Test.class);
}
// bugzilla 2371
public Integer getTotalSearchedTestCount(String searchString) throws LIMSRuntimeException{
String wildCard = "*";
String newSearchStr;
String sql;
Integer count = null;
try{
int wCdPosition = searchString.indexOf(wildCard);
if(wCdPosition == -1) // no wild card looking for exact match
{
newSearchStr = searchString.toLowerCase().trim();
sql = "select count (*) from Test t where trim(lower (t.description)) = :param ";
}else{
newSearchStr = searchString.replace(wildCard, "%").toLowerCase().trim();
sql = "select count (*) from Test t where trim(lower (t.description)) like :param ";
}
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
query.setParameter("param", newSearchStr);
List results = query.list();
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
if(results != null && results.get(0) != null){
if(results.get(0) != null){
count = (Integer)results.get(0);
}
}
}catch(Exception e){
e.printStackTrace();
throw new LIMSRuntimeException("Error in TestDaoImpl getTotalSearchedTestCount()", e);
}
return count;
}
// end bugzilla 2371
// bugzilla 2371
public Integer getTotalSearchedTestCountBySysUserId(int sysUserId, String searchString) throws LIMSRuntimeException{
String wildCard = "*";
String newSearchStr;
String sql;
Integer count = null;
try{
String sectionIdList = "";
SystemUserSectionDAO systemUserSectionDao = new SystemUserSectionDAOImpl();
List userTestSectionList = systemUserSectionDao.getAllSystemUserSectionsBySystemUserId(sysUserId);
for(int i = 0; i < userTestSectionList.size(); i++){
SystemUserSection sus = (SystemUserSection)userTestSectionList.get(i);
sectionIdList += sus.getTestSection().getId() + ",";
}
if(!(sectionIdList.equals("")) && (sectionIdList.length() > 0)){
sectionIdList = sectionIdList.substring(0, sectionIdList.length() - 1);
int wCdPosition = searchString.indexOf(wildCard);
if(wCdPosition == -1) // no wild card looking for exact match
{
newSearchStr = searchString.toLowerCase().trim();
sql = "select count (*) from Test t where t.testSection.id in (" + sectionIdList + ") and trim(lower (t.description)) = :param ";
}else{
newSearchStr = searchString.replace(wildCard, "%").toLowerCase().trim();
sql = "select count (*) from Test t where t.testSection.id in (" + sectionIdList
+ ") and trim(lower (t.description)) like :param ";
}
}else
return count;
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
query.setParameter("param", newSearchStr);
List results = query.list();
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
if(results != null && results.get(0) != null){
if(results.get(0) != null){
count = (Integer)results.get(0);
}
}
}catch(Exception e){
e.printStackTrace();
throw new LIMSRuntimeException("Error in TestDaoImpl getTotalSearchedTestCountBySysUserId()", e);
}
return count;
}
// end bugzilla 2371
// bugzilla 2371
public Integer getAllSearchedTotalTestCount(HttpServletRequest request, String searchString) throws LIMSRuntimeException{
Integer count;
TestDAO testDAO = new TestDAOImpl();
try{
if(SystemConfiguration.getInstance().getEnableUserTestSection().equals(NO)){
count = testDAO.getTotalSearchedTestCount(searchString);
}else{
UserSessionData usd = (UserSessionData)request.getSession().getAttribute(USER_SESSION_DATA);
UserModuleDAO userModuleDAO = new UserModuleDAOImpl();
if(!userModuleDAO.isUserAdmin(request)){
count = testDAO.getTotalSearchedTestCountBySysUserId(usd.getSystemUserId(), searchString);
}else{
count = testDAO.getTotalSearchedTestCount(searchString);
}
}
}catch(Exception e){
e.printStackTrace();
throw new LIMSRuntimeException("Error in testDAOImpl getAllSearchedTotalTestCount()", e);
}
return count;
}
// end if bugzilla 2371
// bugzilla 1427
public List getNextRecord(String id, String table, Class clazz) throws LIMSRuntimeException{
int currentId = Integer.valueOf( id );
String tablePrefix = getTablePrefix(table);
List list;
// bugzilla 1908
int rrn;
try{
// bugzilla 1908 cannot use named query for postgres because of
// oracle ROWNUM
// instead get the list in this sortorder and determine the index of
// record with id = currentId
String sql = "select t.id from Test t " + " order by t.testSection.testSectionName, t.testName";
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
list = query.list();
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
rrn = list.indexOf(String.valueOf(currentId));
list = HibernateUtil.getSession().getNamedQuery(tablePrefix + "getNext").setFirstResult(rrn + 1).setMaxResults(2).list();
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "getNextRecord()", e.toString());
throw new LIMSRuntimeException("Error in getNextRecord() for " + table, e);
}
return list;
}
// bugzilla 1427
public List getPreviousRecord(String id, String table, Class clazz) throws LIMSRuntimeException{
int currentId = Integer.valueOf( id );
String tablePrefix = getTablePrefix(table);
List list;
// bugzilla 1908
int rrn;
try{
// bugzilla 1908 cannot use named query for postgres because of
// oracle ROWNUM
// instead get the list in this sortorder and determine the index of
// record with id = currentId
String sql = "select t.id from Test t " + " order by t.testSection.testSectionName desc, t.testName desc";
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
list = query.list();
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
rrn = list.indexOf(String.valueOf(currentId));
list = HibernateUtil.getSession().getNamedQuery(tablePrefix + "getPrevious").setFirstResult(rrn + 1).setMaxResults(2).list();
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "getPreviousRecord()", e.toString());
throw new LIMSRuntimeException("Error in getPreviousRecord() for " + table, e);
}
return list;
}
private boolean duplicateTestExists(Test test) throws LIMSRuntimeException{
try{
List list = new ArrayList();
if(test.getIsActive().equalsIgnoreCase("Y")){
// not case sensitive hemolysis and Hemolysis are considered
// duplicates
String sql = "from Test t where (trim(lower(t.description)) = :description and t.isActive='Y' and t.id != :testId)";
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
// initialize with 0 (for new records where no id has been
// generated yet
String testId = "0";
if(!StringUtil.isNullorNill(test.getId())){
testId = test.getId();
}
query.setInteger("testId", Integer.parseInt(testId));
query.setParameter("description", test.getDescription().toLowerCase().trim());
list = query.list();
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
}
return !list.isEmpty();
}catch(Exception e){
LogEvent.logError("TestDAOImpl", "duplicateTestExists()", e.toString());
throw new LIMSRuntimeException("Error in duplicateTestExists()", e);
}
}
// bugzilla 2236
public boolean isTestFullySetup(Test test) throws LIMSRuntimeException{
try{
TestAnalyteDAO testAnalyteDAO = new TestAnalyteDAOImpl();
List testAnalytesByTest = testAnalyteDAO.getAllTestAnalytesPerTest(test);
boolean result = true;
if(testAnalytesByTest == null || testAnalytesByTest.size() == 0){
result = false;
}else{
// bugzilla 2291 make sure none of the components has a null
// result group
boolean atLeastOneResultGroupFound = false;
for(int j = 0; j < testAnalytesByTest.size(); j++){
TestAnalyte testAnalyte = (TestAnalyte)testAnalytesByTest.get(j);
if(testAnalyte.getResultGroup() == null){
atLeastOneResultGroupFound = true;
break;
}
}
if(atLeastOneResultGroupFound){
result = false;
}
}
return result;
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "isTestFullySetup()", e.toString());
throw new LIMSRuntimeException("Error in isTestFullySetup()", e);
}
}
// bugzilla 2443
public Integer getNextAvailableSortOrderByTestSection(Test test) throws LIMSRuntimeException{
Integer result = null;
try{
List list;
Test testWithHighestSortOrder;
String sql = "from Test t where t.testSection = :param and t.sortOrder is not null order by t.sortOrder desc";
org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
query.setParameter("param", test.getTestSection());
list = query.list();
HibernateUtil.getSession().flush();
HibernateUtil.getSession().clear();
if(list.size() > 0){
testWithHighestSortOrder = (Test)list.get(0);
if(testWithHighestSortOrder != null && !StringUtil.isNullorNill(testWithHighestSortOrder.getSortOrder())){
result = ( Integer.parseInt( testWithHighestSortOrder.getSortOrder() ) + 1 );
}
}
}catch(Exception e){
// bugzilla 2154
LogEvent.logError("TestDAOImpl", "getNextAvailableSortOrderByTestSection()", e.toString());
throw new LIMSRuntimeException("Error in getNextAvailableSortOrderByTestSection()", e);
}
return result;
}
/**
* @see us.mn.state.health.lims.test.dao.TestDAO#getAllOrderBy(java.lang.String)
* Read all entities from the database sorted by an appropriate
* property
*/
@SuppressWarnings("unchecked")
public List<Test> getAllOrderBy(String columnName) throws LIMSRuntimeException{
List<Test> entities;
try{
if(!StringUtil.isJavaIdentifier(columnName)){
throw new IllegalArgumentException("\"" + columnName + "\" is not valid syntax for a column name");
}
// I didn't manage to get a query parameter to be used as a column
// name to sort by (because ORDER BY "my_column" is not valid SQL).
// so I had to generate the HQL manually, but only after the above
// check.
String hql = "from Test t where t.isActive='Y' ORDER BY " + columnName;
org.hibernate.Query query = HibernateUtil.getSession().createQuery(hql);
entities = query.list();
closeSession();
}catch(Exception e){
LogEvent.logError("TestDAOImpl", "getAllOrderBy()", e.toString());
throw new LIMSRuntimeException("Error in getAllOrderBy()", e);
}
return entities;
}
@Override
public Test getTestById(String testId) throws LIMSRuntimeException{
String sql = "From Test t where t.id = :id";
try{
Query query = HibernateUtil.getSession().createQuery(sql);
query.setInteger("id", Integer.parseInt(testId));
Test test = (Test)query.uniqueResult();
closeSession();
return test;
}catch(HibernateException e){
handleException(e, "getTesById");
}
return null;
}
@Override
public Test getTestByDescription(String description){
String sql = "From Test t where t.description = :description";
try{
Query query = HibernateUtil.getSession().createQuery(sql);
query.setString("description", description);
Test test = (Test)query.uniqueResult();
closeSession();
return test;
}catch(HibernateException e){
handleException(e, "getTestByDescription");
}
return null;
}
@Override
public Test getTestByGUID( String guid){
String sql = "From Test t where t.guid = :guid";
try{
Query query = HibernateUtil.getSession().createQuery(sql);
query.setString("guid", guid);
Test test = (Test)query.uniqueResult();
closeSession();
return test;
}catch(HibernateException e){
handleException(e, "getTestByGUID");
}
return null;
}
}