org.openmrs.module.dataintegrityworkflow.db.hibernate.HibernateDataIntegrityWorkflowDAO.java Source code

Java tutorial

Introduction

Here is the source code for org.openmrs.module.dataintegrityworkflow.db.hibernate.HibernateDataIntegrityWorkflowDAO.java

Source

/**
 * The contents of this file are subject to the OpenMRS Public License
 * Version 1.0 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://license.openmrs.org
 *
 * 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.
 *
 * Copyright (C) OpenMRS, LLC.  All Rights Reserved.
 */
package org.openmrs.module.dataintegrityworkflow.db.hibernate;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.transform.Transformers;
import org.openmrs.User;
import org.openmrs.api.db.DAOException;
import org.openmrs.module.dataintegrity.IntegrityCheck;
import org.openmrs.module.dataintegrity.IntegrityCheckResult;
import org.openmrs.module.dataintegrityworkflow.*;
import org.openmrs.module.dataintegrityworkflow.db.DataIntegrityWorkflowDAO;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author: harsz89
 */

/**
 * Hibernate data access implementation
 */
public class HibernateDataIntegrityWorkflowDAO implements DataIntegrityWorkflowDAO {
    /**
     * the session factory to use in this DAO
     */
    private SessionFactory sessionFactory;

    /**
     * @see DataIntegrityWorkflowDAO#setSessionFactory(org.hibernate.SessionFactory)
     */
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    /**
     * @see DataIntegrityWorkflowDAO#getSessionFactory()
     */
    public SessionFactory getSessionFactory() {
        return this.sessionFactory;
    }

    /**
     * @see DataIntegrityWorkflowDAO#saveIntegrityWorkflowRecord(org.openmrs.module.dataintegrityworkflow.IntegrityWorkflowRecord)
     */
    public void saveIntegrityWorkflowRecord(IntegrityWorkflowRecord integrityWorkflowRecord) {
        sessionFactory.getCurrentSession().save(integrityWorkflowRecord);
    }

    /**
     * @see DataIntegrityWorkflowDAO#saveWorkflowStage(org.openmrs.module.dataintegrityworkflow.WorkflowStage)
     */
    public void saveWorkflowStage(WorkflowStage workflowStage) {
        sessionFactory.getCurrentSession().save(workflowStage);
    }

    /**
     * @see DataIntegrityWorkflowDAO#saveIntegrityCheckUpdate(org.openmrs.module.dataintegrityworkflow.IntegrityCheckAssignment)
     */
    public void saveIntegrityCheckUpdate(IntegrityCheckAssignment integrityCheckUpdate) throws DAOException {
        sessionFactory.getCurrentSession().save(integrityCheckUpdate);
    }

    /**
     * @see DataIntegrityWorkflowDAO#saveWorkflowAssignee(org.openmrs.module.dataintegrityworkflow.RecordAssignee)
     */
    public int saveWorkflowAssignee(RecordAssignee recordAssignee) {
        return (Integer) sessionFactory.getCurrentSession().save(recordAssignee);
    }

    /**
     * @see DataIntegrityWorkflowDAO#saveIntegrityRecordStageChange(org.openmrs.module.dataintegrityworkflow.IntegrityRecordStageChange)
     */
    public void saveIntegrityRecordStageChange(IntegrityRecordStageChange integrityRecordStageChange) {
        sessionFactory.getCurrentSession().save(integrityRecordStageChange);
    }

    /**
     * @see DataIntegrityWorkflowDAO#saveIntegrityRecordComment(IntegrityRecordComment
     */
    public void saveIntegrityRecordComment(IntegrityRecordComment integrityRecordComment) {
        sessionFactory.getCurrentSession().save(integrityRecordComment);
    }

    /**
     * @see DataIntegrityWorkflowDAO#saveIntegrityRecordAssignment(org.openmrs.module.dataintegrityworkflow.IntegrityRecordAssignment)
     */
    public int saveIntegrityRecordAssignment(IntegrityRecordAssignment integrityRecordAssignment) {
        return (Integer) sessionFactory.getCurrentSession().save(integrityRecordAssignment);
    }

    /**
     * @see DataIntegrityWorkflowDAO#saveIntegrityRecordStatusChange(org.openmrs.module.dataintegrityworkflow.RecordStatusChange)
     */
    public void saveIntegrityRecordStatusChange(RecordStatusChange recordStatusChange) {
        sessionFactory.getCurrentSession().save(recordStatusChange);
    }

    /**
     * @see DataIntegrityWorkflowDAO#getRecordAssigneeById(int)
     */
    public RecordAssignee getRecordAssigneeById(int assigneeId) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(RecordAssignee.class);
        criteria.add(Restrictions.eq("recordAssigneeId", assigneeId));
        return (RecordAssignee) criteria.uniqueResult();
    }

    /**
     * @see DataIntegrityWorkflowDAO#getIntegrityCheckUpdate(int)
     */
    public IntegrityCheckAssignment getIntegrityCheckUpdate(int checkId) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(IntegrityCheckAssignment.class);
        criteria.add(Restrictions.eq("integrityCheckId", checkId));
        return (IntegrityCheckAssignment) criteria.uniqueResult();
    }

    /**
     * @see DataIntegrityWorkflowDAO#getIntegrityRecordAssignmentByAssigneeAndId(org.openmrs.module.dataintegrityworkflow.RecordAssignee, int)
     */
    public IntegrityRecordAssignment getIntegrityRecordAssignmentByAssigneeAndId(RecordAssignee recordAssignee,
            int assginmentId) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(IntegrityRecordAssignment.class);
        criteria.add(Restrictions.eq("recordAssignee", recordAssignee))
                .add(Restrictions.eq("assignmentId", assginmentId));
        return (IntegrityRecordAssignment) criteria.uniqueResult();
    }

    /**
     * @see DataIntegrityWorkflowDAO#getIntegrityWorkflowRecord(int)
     */
    public IntegrityWorkflowRecord getIntegrityWorkflowRecord(int integrityRecordWorkflowDetailId) {
        return (IntegrityWorkflowRecord) sessionFactory.getCurrentSession().get(IntegrityWorkflowRecord.class,
                integrityRecordWorkflowDetailId);
    }

    public IntegrityRecordAssignment getIngrityRecordAssignmentById(int assignmentId) throws DAOException {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(IntegrityRecordAssignment.class);
        criteria.add(Restrictions.eq("assignmentId", assignmentId));
        return (IntegrityRecordAssignment) criteria.uniqueResult();
    }

    /**
     * @see DataIntegrityWorkflowDAO#getAllIntegrityWorkflowRecordsForCheck(int)
     */
    public List<IntegrityWorkflowRecord> getAllIntegrityWorkflowRecordsForCheck(int checkId) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(IntegrityWorkflowRecord.class);
        criteria.add(Restrictions.eq("integrityCheckId", checkId));
        return (List<IntegrityWorkflowRecord>) criteria.list();
    }

    /**
     * @see DataIntegrityWorkflowDAO#getAssignedIntegrityWorkflowRecordByAssignee(org.openmrs.module.dataintegrityworkflow.RecordAssignee)
     */
    public IntegrityWorkflowRecord getAssignedIntegrityWorkflowRecordByAssignee(RecordAssignee assignedUser) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(IntegrityWorkflowRecord.class);
        criteria.add(Restrictions.eq("currentAssignee", assignedUser));
        return (IntegrityWorkflowRecord) criteria.uniqueResult();
    }

    public IntegrityWorkflowRecord getAssignedIntegrityWorkflowRecordByAssigneeAndCheck(
            RecordAssignee recordAssignee, int checkId) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(IntegrityWorkflowRecord.class);
        criteria.add(Restrictions.eq("currentAssignee", recordAssignee))
                .add(Restrictions.eq("integrityCheckId", checkId));
        return (IntegrityWorkflowRecord) criteria.uniqueResult();
    }

    /**
     * @see DataIntegrityWorkflowDAO#getAllAssignmentsOfUser(org.openmrs.User)
     */
    public List<RecordAssignee> getAllAssignmentsOfUser(User user) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(RecordAssignee.class);
        criteria.add(Restrictions.eq("assignee", user));
        return (List<RecordAssignee>) criteria.list();
    }

    /**
     * @see DataIntegrityWorkflowDAO#getCurrentAssignmentOfUser(org.openmrs.User)
     */
    public RecordAssignee getCurrentAssignmentOfUser(User user) {
        return null; //To change body of implemented methods use File | Settings | File Templates.
    }

    /**
     * @see DataIntegrityWorkflowDAO#getWorkflowStage(int)
     */
    public WorkflowStage getWorkflowStage(int stageId) {
        return (WorkflowStage) sessionFactory.getCurrentSession().get(WorkflowStage.class, stageId);
    }

    /**
     * @see DataIntegrityWorkflowDAO#getWorkflowStageByStatus(String)
     */
    public WorkflowStage getWorkflowStageByStatus(String status) throws DAOException {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(WorkflowStage.class);
        criteria.add(Restrictions.eq("status", status));
        return (WorkflowStage) criteria.uniqueResult();
    }

    /**
     * @see DataIntegrityWorkflowDAO#getWorkflowStages()
     */
    public List<WorkflowStage> getWorkflowStages() {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(WorkflowStage.class);
        return (List<WorkflowStage>) criteria.list();
    }

    /**
     * @see DataIntegrityWorkflowDAO#getWorkflowRecordAssigneeByUserAndWorkflowRecord(org.openmrs.module.dataintegrityworkflow.IntegrityWorkflowRecord, org.openmrs.User)
     */
    public RecordAssignee getWorkflowRecordAssigneeByUserAndWorkflowRecord(
            IntegrityWorkflowRecord integrityWorkflowRecord, User assignUser) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(RecordAssignee.class);
        criteria.add(Restrictions.eq("integrityWorkflowRecord", integrityWorkflowRecord))
                .add(Restrictions.eq("assignee", assignUser));
        return (RecordAssignee) criteria.uniqueResult();
    }

    /**
     * @see DataIntegrityWorkflowDAO#getIntegrityRecordComments(org.openmrs.module.dataintegrityworkflow.IntegrityWorkflowRecord)
     */
    public List<IntegrityRecordComment> getIntegrityRecordComments(
            IntegrityWorkflowRecord integrityWorkflowRecord) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(IntegrityRecordComment.class);
        criteria.add(Restrictions.eq("integrityWorkflowRecord", integrityWorkflowRecord));
        return (List<IntegrityRecordComment>) criteria.list();
    }

    /**
     * @see DataIntegrityWorkflowDAO#getIntegrityWorkflowRecordByResult(org.openmrs.module.dataintegrity.IntegrityCheckResult)
     */
    public IntegrityWorkflowRecord getIntegrityWorkflowRecordByResult(IntegrityCheckResult integrityCheckResult) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(IntegrityWorkflowRecord.class);
        criteria.add(Restrictions.eq("integrityCheckResult", integrityCheckResult));
        List records = criteria.list();
        if (records.size() > 0) {
            return (IntegrityWorkflowRecord) records.get(0);
        }
        return null;
    }

    /**
     * @see DataIntegrityWorkflowDAO#getIntegrityWorkflowRecordByResultId(int)
     */
    public IntegrityWorkflowRecord getIntegrityWorkflowRecordByResultId(int resultId) {
        return (IntegrityWorkflowRecord) sessionFactory.getCurrentSession().get(IntegrityWorkflowRecord.class,
                resultId);
    }

    /**
     * @see DataIntegrityWorkflowDAO#updateIntegrityRecordComment(org.openmrs.module.dataintegrityworkflow.IntegrityRecordComment)
     */
    public void updateIntegrityRecordComment(IntegrityRecordComment integrityRecordComment) {
        //To change body of implemented methods use File | Settings | File Templates.
    }

    /**
     * @see DataIntegrityWorkflowDAO#updateIntegrityWorkflowRecord(org.openmrs.module.dataintegrityworkflow.IntegrityWorkflowRecord)
     */
    public void updateIntegrityWorkflowRecord(IntegrityWorkflowRecord integrityWorkflowRecord) {
        sessionFactory.getCurrentSession().update(integrityWorkflowRecord);
    }

    /**
     * @see DataIntegrityWorkflowDAO#updateWorkflowAssignee(org.openmrs.module.dataintegrityworkflow.RecordAssignee)
     */
    public void updateWorkflowAssignee(RecordAssignee recordAssignee) {
        sessionFactory.getCurrentSession().update(recordAssignee);
    }

    /**
     * @see DataIntegrityWorkflowDAO#updateCheckUpdate(org.openmrs.module.dataintegrityworkflow.IntegrityCheckAssignment)
     */
    public void updateCheckUpdate(IntegrityCheckAssignment integrityCheckUpdate) {
        sessionFactory.getCurrentSession().update(integrityCheckUpdate);
    }

    /**
     * @see DataIntegrityWorkflowDAO#updateIntegrityRecordAssignment(org.openmrs.module.dataintegrityworkflow.IntegrityRecordAssignment)
     */
    public void updateIntegrityRecordAssignment(IntegrityRecordAssignment integrityRecordAssignment) {
        sessionFactory.getCurrentSession().update(integrityRecordAssignment);
    }

    /**
     * @see DataIntegrityWorkflowDAO#deleteIntegrityRecordComment(org.openmrs.module.dataintegrityworkflow.IntegrityRecordComment)
     */
    public void deleteIntegrityRecordComment(IntegrityRecordComment integrityRecordComment) {
        //To change body of implemented methods use File | Settings | File Templates.
    }

    /**
     * @see DataIntegrityWorkflowDAO#getIntegrityWorkflowRecordByRecordId(int)
     */
    public IntegrityWorkflowRecord getIntegrityWorkflowRecordByRecordId(int recordId) {
        return (IntegrityWorkflowRecord) sessionFactory.getCurrentSession().get(IntegrityWorkflowRecord.class,
                recordId);
    }

    /**
     * @see DataIntegrityWorkflowDAO#findResultForIntegrityCheckById(org.openmrs.module.dataintegrity.IntegrityCheck, int)
     */
    public IntegrityCheckResult findResultForIntegrityCheckById(IntegrityCheck integrityCheck, int id) {
        if (integrityCheck == null)
            return null;
        Criteria crit = sessionFactory.getCurrentSession().createCriteria(IntegrityCheckResult.class)
                .add(Restrictions.eq("integrityCheck", integrityCheck))
                .add(Restrictions.eq("integrityCheckResultId", id));
        return (IntegrityCheckResult) crit.uniqueResult();
    }

    public List getCheckRecordAssigneeCounts(IntegrityCheck integrityCheck) {
        String hql = " select recordassignees.assignee.username, count(recordassignees.assignee)  from IntegrityWorkflowRecord as record inner join record.currentAssignee as recordassignees "
                + " where record.currentAssignee is not null and record.currentAssignee.recordAssigneeId=recordassignees.recordAssigneeId and record.integrityCheckId ="
                + integrityCheck.getIntegrityCheckId() + " group by recordassignees.assignee";
        Query query = sessionFactory.getCurrentSession().createQuery(hql);
        return query.list();
    }

    public List getCheckRecordStagesCounts(IntegrityCheck integrityCheck) {
        String hql = "select  recordassignment.currentStage.workflowStageId , count(recordassignment.currentStage)  from IntegrityWorkflowRecord as record inner join record.currentAssignee as recordassignees "
                + " inner join recordassignees.currentIntegrityRecordAssignment as recordassignment where  record.currentAssignee is not null and recordassignees.currentIntegrityRecordAssignment is not null and record.currentAssignee.recordAssigneeId=recordassignees.recordAssigneeId"
                + " and recordassignees.currentIntegrityRecordAssignment.assignmentId = recordassignment.assignmentId and record.integrityCheckId ="
                + integrityCheck.getIntegrityCheckId() + " group by recordassignment.currentStage";
        Query query = sessionFactory.getCurrentSession().createQuery(hql);
        return query.list();
    }

    public List getCheckRecordStatusCounts(IntegrityCheck integrityCheck) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(IntegrityCheckResult.class);
        criteria.add(Restrictions.eq("integrityCheck", integrityCheck));
        ProjectionList projList = Projections.projectionList();
        projList.add(Projections.groupProperty("status"), "statusId");
        projList.add(Projections.rowCount(), "count");
        criteria.setProjection(projList);
        return criteria.list();
    }

    public void saveIntegrityCheckKey(IntegrityCheckKey integrityCheckKey) {
        sessionFactory.getCurrentSession().save(integrityCheckKey);
    }

    public boolean isCheckKeyExists(String key) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(IntegrityCheckKey.class);
        criteria.add(Restrictions.eq("keyVal", key));
        if (criteria.list().size() > 0) {
            return true;
        } else {
            return false;
        }
    }

    public IntegrityCheckKey getIntegrityCheckKey(IntegrityCheck integrityCheck) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(IntegrityCheckKey.class);
        criteria.add(Restrictions.eq("integrityCheck", integrityCheck));
        return (IntegrityCheckKey) criteria.uniqueResult();
    }

    public boolean isCheckInKeyList(IntegrityCheck integrityCheck) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(IntegrityCheckKey.class);
        criteria.add(Restrictions.eq("integrityCheck", integrityCheck));
        if (criteria.list().size() > 0) {
            return true;
        } else {
            return false;
        }
    }

    public void updateWorkflowStage(WorkflowStage workflowStage) {
        sessionFactory.getCurrentSession().update(workflowStage);
    }

    public void updateCheckKey(IntegrityCheckKey integrityCheckKey) {
        sessionFactory.getCurrentSession().update(integrityCheckKey);
    }

}