/**
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
* the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
*
* Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
* graphic logo is a trademark of OpenMRS Inc.
*/
package org.openmrs.module.radiology.report;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.openmrs.module.radiology.order.RadiologyOrder;
/**
* Hibernate specific RadiologyReport related functions. This class should not be used directly. All
* calls should go through the {@link org.openmrs.module.radiology.report.RadiologyReportService} methods.
*
* @see org.openmrs.module.radiology.report.RadiologyReportDAO
* @see org.openmrs.module.radiology.report.RadiologyReportService
*/
class HibernateRadiologyReportDAO implements RadiologyReportDAO {
private SessionFactory sessionFactory;
/**
* Set session factory that allows us to connect to the database that Hibernate knows about.
*
* @param sessionFactory SessionFactory
*/
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
/**
* @see org.openmrs.module.radiology.report.RadiologyReportService#getRadiologyReport(Integer)
*/
@Override
public RadiologyReport getRadiologyReport(Integer reportId) {
return (RadiologyReport) sessionFactory.getCurrentSession()
.get(RadiologyReport.class, reportId);
}
/**
* @see org.openmrs.module.radiology.report.RadiologyReportService#getRadiologyReportByUuid(String)
*/
@Override
public RadiologyReport getRadiologyReportByUuid(String uuid) {
return (RadiologyReport) sessionFactory.getCurrentSession()
.createCriteria(RadiologyReport.class)
.add(Restrictions.eq("uuid", uuid))
.uniqueResult();
}
/**
* @see org.openmrs.module.radiology.report.RadiologyReportService#saveRadiologyReportDraft(RadiologyReport)
*/
@Override
public RadiologyReport saveRadiologyReport(RadiologyReport radiologyReport) {
sessionFactory.getCurrentSession()
.saveOrUpdate(radiologyReport);
return radiologyReport;
}
/**
* @see org.openmrs.module.radiology.report.RadiologyReportService#hasRadiologyOrderCompletedRadiologyReport(RadiologyOrder)
* (RadiologyReport)
*/
@SuppressWarnings("unchecked")
@Override
public boolean hasRadiologyOrderCompletedRadiologyReport(RadiologyOrder radiologyOrder) {
final List<RadiologyReport> radiologyReports = sessionFactory.getCurrentSession()
.createCriteria(RadiologyReport.class)
.add(Restrictions.eq("radiologyOrder", radiologyOrder))
.add(Restrictions.eq("status", RadiologyReportStatus.COMPLETED))
.list();
return radiologyReports.size() == 1;
}
/**
* @see org.openmrs.module.radiology.report.RadiologyReportService#hasRadiologyOrderClaimedRadiologyReport(RadiologyOrder)
*/
@SuppressWarnings("unchecked")
public boolean hasRadiologyOrderClaimedRadiologyReport(RadiologyOrder radiologyOrder) {
final List<RadiologyReport> radiologyReports = sessionFactory.getCurrentSession()
.createCriteria(RadiologyReport.class)
.add(Restrictions.eq("radiologyOrder", radiologyOrder))
.add(Restrictions.eq("status", RadiologyReportStatus.DRAFT))
.add(Restrictions.eq("voided", false))
.list();
return radiologyReports.size() == 1;
}
/**
* @see org.openmrs.module.radiology.report.RadiologyReportService#getActiveRadiologyReportByRadiologyOrder(RadiologyOrder)
*/
@Override
public RadiologyReport getActiveRadiologyReportByRadiologyOrder(RadiologyOrder radiologyOrder) {
return (RadiologyReport) sessionFactory.getCurrentSession()
.createCriteria(RadiologyReport.class)
.add(Restrictions.eq("radiologyOrder", radiologyOrder))
.add(Restrictions.eq("voided", false))
.list()
.get(0);
}
/**
* @see org.openmrs.module.radiology.report.RadiologyReportService#getRadiologyReports(RadiologyReportSearchCriteria)
*/
@SuppressWarnings("unchecked")
@Override
public List<RadiologyReport> getRadiologyReports(RadiologyReportSearchCriteria searchCriteria) {
final Criteria crit = sessionFactory.getCurrentSession()
.createCriteria(RadiologyReport.class);
if (!searchCriteria.getIncludeVoided()) {
crit.add(Restrictions.eq("voided", false));
}
if (searchCriteria.getFromDate() != null) {
crit.add(Restrictions.ge("date", searchCriteria.getFromDate()));
}
if (searchCriteria.getToDate() != null) {
crit.add(Restrictions.le("date", searchCriteria.getToDate()));
}
if (searchCriteria.getPrincipalResultsInterpreter() != null) {
crit.add(Restrictions.eq("principalResultsInterpreter", searchCriteria.getPrincipalResultsInterpreter()));
}
if (searchCriteria.getStatus() != null) {
crit.add(Restrictions.eq("status", searchCriteria.getStatus()));
}
crit.addOrder(Order.asc("date"));
return crit.list();
}
}