package us.mn.state.health.lims.observationhistory.daoimpl;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import us.mn.state.health.lims.common.daoimpl.GenericDAOImpl;
import us.mn.state.health.lims.common.exception.LIMSRuntimeException;
import us.mn.state.health.lims.hibernate.HibernateUtil;
import us.mn.state.health.lims.observationhistory.dao.ObservationHistoryDAO;
import us.mn.state.health.lims.observationhistory.valueholder.ObservationHistory;
import us.mn.state.health.lims.patient.valueholder.Patient;
import us.mn.state.health.lims.sample.valueholder.Sample;
import java.util.ArrayList;
import java.util.List;
public class ObservationHistoryDAOImpl extends GenericDAOImpl<String, ObservationHistory> implements ObservationHistoryDAO {
public ObservationHistoryDAOImpl() {
super(ObservationHistory.class, "observation_history");
}
public void delete(List<ObservationHistory> entities)
throws LIMSRuntimeException {
delete(entities, new ObservationHistory());
}
@Override
public void insertOrUpdateData( ObservationHistory observation ) throws LIMSRuntimeException{
if(observation.getId() == null){
insertData( observation );
}else{
updateData( observation );
}
}
public List<ObservationHistory> getAll(Patient patient, Sample sample) {
if( patient != null && sample != null){
ObservationHistory dh = new ObservationHistory();
dh.setPatientId( patient.getId() );
dh.setSampleId( sample.getId() );
return this.readByExample( dh );
}
return new ArrayList<ObservationHistory>( );
}
public List<ObservationHistory> getAll(Patient patient, Sample sample, String observationHistoryTypeId) {
ObservationHistory history = new ObservationHistory();
if (patient != null) {
history.setPatientId(patient.getId());
}
if (sample != null) {
history.setSampleId(sample.getId());
}
history.setObservationHistoryTypeId(observationHistoryTypeId);
return this.readByExample(history);
}
@SuppressWarnings("unchecked")
public List<ObservationHistory> getObservationHistoryByDictonaryValues(String dictionaryValue) throws LIMSRuntimeException {
List<ObservationHistory> observationList;
String sql = "From ObservationHistory oh where oh.valueType = 'D' and oh.value = :value";
try {
Query query = HibernateUtil.getSession().createQuery(sql);
query.setParameter("value", dictionaryValue);
observationList = query.list();
closeSession();
return observationList;
} catch (Exception e) {
handleException(e, "getObservationHistoryByDictonaryValues");
}
return null;
}
@SuppressWarnings("unchecked")
@Override
public List<ObservationHistory> getObservationHistoriesBySampleItemId(String sampleItemId) throws LIMSRuntimeException {
String sql = "from ObservationHistory oh where oh.sampleItemId = :sampleItemId";
try{
Query query = HibernateUtil.getSession().createQuery(sql);
query.setInteger("sampleItemId", Integer.parseInt(sampleItemId));
List<ObservationHistory> observationList = query.list();
closeSession();
return observationList;
}catch( HibernateException e){
handleException(e, "getObservationHistoriesBySampleItemId");
}
return null;
}
@SuppressWarnings("unchecked")
@Override
public List<ObservationHistory> getObservationHistoriesBySampleId(String sampleId) throws LIMSRuntimeException {
String sql = "from ObservationHistory oh where oh.sampleId = :sampleId";
try{
Query query = HibernateUtil.getSession().createQuery(sql);
query.setInteger("sampleId", Integer.parseInt(sampleId));
List<ObservationHistory> observationList = query.list();
closeSession();
return observationList;
}catch( HibernateException e){
handleException(e, "getObservationHistoriesBySampleId");
}
return null;
}
@Override
public List<ObservationHistory> getObservationHistoriesByPatientIdAndType( String patientId, String observationHistoryTypeId ) throws LIMSRuntimeException{
String sql = "from ObservationHistory oh where oh.patientId = :patientId and oh.observationHistoryTypeId = :ohTypeId order by oh.lastupdated desc";
try{
Query query = HibernateUtil.getSession().createQuery(sql);
query.setInteger("patientId", Integer.parseInt(patientId));
query.setInteger("ohTypeId", Integer.parseInt(observationHistoryTypeId));
List<ObservationHistory> ohList = query.list();
closeSession();
return ohList;
}catch(HibernateException e){
handleException(e, "getObservationHistoriesByPatientIdAndType");
}
return null;
}
@Override
public ObservationHistory getObservationHistoriesBySampleIdAndType(String sampleId, String observationHistoryTypeId)
throws LIMSRuntimeException {
String sql = "from ObservationHistory oh where oh.sampleId = :sampleId and oh.observationHistoryTypeId = :ohTypeId";
try{
Query query = HibernateUtil.getSession().createQuery(sql);
query.setInteger("sampleId", Integer.parseInt(sampleId));
query.setInteger("ohTypeId", Integer.parseInt(observationHistoryTypeId));
ObservationHistory oh = (ObservationHistory)query.setMaxResults(1).uniqueResult();
closeSession();
return oh;
}catch(HibernateException e){
handleException(e, "getObservationHistoriesBySampleIdAndType");
}
return null;
}
@Override
public List<ObservationHistory> getObservationHistoriesByValueAndType( String value, String typeId, String valueType ) throws LIMSRuntimeException{
String sql = "from ObservationHistory oh where oh.value = :value and oh.observationHistoryTypeId = :typeId and oh.valueType = :valueType";
try{
Query query = HibernateUtil.getSession().createQuery(sql);
query.setInteger("typeId", Integer.parseInt(typeId));
query.setString( "value", value );
query.setString( "valueType", valueType );
List<ObservationHistory> ohList = query.list();
closeSession();
return ohList;
}catch(HibernateException e){
handleException(e, "getObservationHistoriesByValueAndType");
}
return null;
}
}