org.openmrs.module.cohort.api.db.hibernate.HibernateCohortDAO.java Source code

Java tutorial

Introduction

Here is the source code for org.openmrs.module.cohort.api.db.hibernate.HibernateCohortDAO.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.cohort.api.db.hibernate;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.criterion.Conjunction;
import org.hibernate.criterion.Disjunction;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.openmrs.Encounter;
import org.openmrs.EncounterType;
import org.openmrs.Form;
import org.openmrs.Location;
import org.openmrs.Patient;
import org.openmrs.PatientIdentifierType;
import org.openmrs.PersonName;
import org.openmrs.api.db.DAOException;
import org.openmrs.api.db.hibernate.HibernateUtil;
import org.openmrs.api.db.hibernate.PatientSearchCriteria;
import org.openmrs.module.cohort.CohortAttribute;
import org.openmrs.module.cohort.CohortAttributeType;
import org.openmrs.module.cohort.CohortEncounter;
import org.openmrs.module.cohort.CohortM;
import org.openmrs.module.cohort.CohortMember;
import org.openmrs.module.cohort.CohortMemberAttribute;
import org.openmrs.module.cohort.CohortMemberAttributeType;
import org.openmrs.module.cohort.CohortObs;
import org.openmrs.module.cohort.CohortProgram;
import org.openmrs.module.cohort.CohortRole;
import org.openmrs.module.cohort.CohortType;
import org.openmrs.module.cohort.CohortVisit;
import org.openmrs.module.cohort.EncounterSearchCriteria;
import org.openmrs.module.cohort.api.db.CohortDAO;

/**
 * It is a default implementation of  {@link cohortDAO}.
 */
public class HibernateCohortDAO implements CohortDAO {
    protected final Log log = LogFactory.getLog(this.getClass());

    private SessionFactory sessionFactory;

    /**
      * @param sessionFactory the sessionFactory to set
      */
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    /**
      * @return the sessionFactory
      */
    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    @Override
    public CohortAttribute saveCohortAttributes(CohortAttribute att) {
        sessionFactory.getCurrentSession().saveOrUpdate(att);
        return att;
    }

    @Override
    public List<CohortAttribute> findCohortAtt(String name) {
        Criteria criteria = (Criteria) sessionFactory.getCurrentSession().createCriteria(CohortAttribute.class);
        criteria.add(Restrictions.ilike("value", name, MatchMode.START));
        return criteria.list();
    }

    @Override
    public CohortMember saveCPatient(CohortMember cohort) {
        sessionFactory.getCurrentSession().saveOrUpdate(cohort);
        return cohort;
    }

    @Override
    public CohortType saveCohortType(CohortType cohorttype) {
        sessionFactory.getCurrentSession().saveOrUpdate(cohorttype);
        return cohorttype;
    }

    @Override
    public List<CohortType> findCohortType() {
        List<CohortType> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortType");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public List<CohortType> getAllCohortTypes() {
        List<CohortType> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortType");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public List<CohortType> findCohortType(String cohort_name) {
        Criteria criteria = (Criteria) sessionFactory.getCurrentSession().createCriteria(CohortType.class);
        criteria.add(Restrictions.ilike("name", cohort_name, MatchMode.START));
        return criteria.list();
    }

    @Override
    public void purgeCohortType(CohortType cohort) {
        sessionFactory.getCurrentSession().delete(cohort);
    }

    @Override
    public void purgeCohortAtt(CohortAttribute att) {
        sessionFactory.getCurrentSession().delete(att);
    }

    @Override
    public List<CohortAttributeType> findCohortAttributes() {
        List<CohortAttributeType> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortAttributeType");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public List<CohortAttributeType> findCohortAttributes(String attribute_type_name) {
        Criteria criteria = (Criteria) sessionFactory.getCurrentSession().createCriteria(CohortAttributeType.class);
        criteria.add(Restrictions.ilike("name", attribute_type_name, MatchMode.START));
        return criteria.list();
    }

    @Override
    public void purgeCohortAttributes(CohortAttributeType attributes) {
        sessionFactory.getCurrentSession().delete(attributes);
    }

    @Override
    public void purgeCohortEncounters(CohortEncounter cencounters) {
        sessionFactory.getCurrentSession().delete(cencounters);
    }

    @Override
    public CohortType getCohortType(Integer id) {
        return (CohortType) sessionFactory.getCurrentSession().get(CohortType.class, id);
    }

    @Override
    public CohortAttributeType saveCohortAttributes(CohortAttributeType attributes) {
        sessionFactory.getCurrentSession().saveOrUpdate(attributes);
        return attributes;
    }

    @Override
    public CohortAttributeType getCohortAttributes(Integer cohort_attribute_type_id) {
        return (CohortAttributeType) sessionFactory.getCurrentSession().get(CohortAttributeType.class,
                cohort_attribute_type_id);
    }

    @Override
    public CohortEncounter saveCohortEncounters(CohortEncounter cencounters) {
        sessionFactory.getCurrentSession().saveOrUpdate(cencounters);
        return cencounters;
    }

    @Override
    public List<CohortEncounter> findCohortEncounters() {
        List<CohortEncounter> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortEncounter");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public CohortM saveCohort(CohortM cohort) {
        sessionFactory.getCurrentSession().saveOrUpdate(cohort);
        return cohort;
    }

    @Override
    public void purgeCohort(CohortM cohort) {
        sessionFactory.getCurrentSession().delete(cohort);
    }

    @Override
    public List<CohortM> getCohort(Integer id) {
        List<CohortM> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortM where cohortId='" + id + "'");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public List<CohortM> findCohorts() {
        List<CohortM> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortM");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public List<CohortM> findCohorts(String cohort_module) {
        Criteria criteria = (Criteria) sessionFactory.getCurrentSession().createCriteria(CohortM.class);
        criteria.add(Restrictions.ilike("name", cohort_module, MatchMode.START));
        criteria.add(Restrictions.eq("voided", false));
        return criteria.list();
    }

    @Override
    public CohortMemberAttribute saveCohortMemberAttribute(CohortMemberAttribute att) {
        sessionFactory.getCurrentSession().saveOrUpdate(att);
        return att;
    }

    @Override
    public void purgeCohortMemberAttribute(CohortMemberAttribute att) {
        sessionFactory.getCurrentSession().delete(att);
    }

    @Override
    public CohortMemberAttributeType saveCohortMemberAttributeType(CohortMemberAttributeType at) {
        sessionFactory.getCurrentSession().saveOrUpdate(at);
        return at;
    }

    @Override
    public void purgeCohortMemberAttributeType(CohortMemberAttributeType at) {
        sessionFactory.getCurrentSession().delete(at);
    }

    @Override
    public List<CohortMemberAttributeType> findCohortMemberAttributeType() {
        List<CohortMemberAttributeType> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortMemberAttributeType");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public List<CohortMemberAttributeType> findCohortMemberAttributes(String attribute_type_name) {
        List<CohortMemberAttributeType> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session
                .createQuery("from CohortMemberAttributeType where name='" + attribute_type_name + "'");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public CohortVisit saveCohortVisit(CohortVisit cvisit) {
        sessionFactory.getCurrentSession().saveOrUpdate(cvisit);
        return cvisit;
    }

    @Override
    public void purgeCohortVisit(CohortVisit cvisit) {
        sessionFactory.getCurrentSession().delete(cvisit);
    }

    @Override
    public List<CohortVisit> findCohortVisit() {
        List<CohortVisit> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortVisit");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public CohortM getCohortId(Integer id) {
        return (CohortM) sessionFactory.getCurrentSession().get(CohortM.class, id);
    }

    @Override
    public List<CohortMemberAttributeType> findCohortMemberAttributeType(String name) {
        Criteria criteria = (Criteria) sessionFactory.getCurrentSession()
                .createCriteria(CohortMemberAttributeType.class);
        criteria.add(Restrictions.ilike("name", name, MatchMode.START));
        criteria.add(Restrictions.eq("voided", false));
        return criteria.list();
    }

    @Override
    public List<CohortMemberAttribute> findCohortMemberAttribute(String name) {
        Criteria criteria = (Criteria) sessionFactory.getCurrentSession()
                .createCriteria(CohortMemberAttribute.class);
        criteria.add(Restrictions.ilike("value", name, MatchMode.START));
        criteria.add(Restrictions.eq("voided", false));
        return criteria.list();
    }

    @Override
    public CohortM getCohortUuid(String uuid) {
        return (CohortM) sessionFactory.getCurrentSession().createQuery("from CohortM t where t.uuid = :uuid")
                .setString("uuid", uuid).uniqueResult();
    }

    @Override
    public List<CohortEncounter> findCohortEncounters(String name) {
        Criteria criteria = (Criteria) sessionFactory.getCurrentSession().createCriteria(CohortEncounter.class);
        criteria.add(Restrictions.ilike("encounterType", name, MatchMode.START));
        criteria.add(Restrictions.eq("voided", false));
        return criteria.list();
    }

    @Override
    public List<CohortVisit> findCohortVisit(String name) {
        Criteria criteria = (Criteria) sessionFactory.getCurrentSession().createCriteria(CohortVisit.class);
        criteria.add(Restrictions.ilike("visitType", name, MatchMode.START));
        criteria.add(Restrictions.eq("voided", false));
        return criteria.list();
    }

    @Override
    public CohortAttribute getCohortAttributeUuid(String uuid) {
        return (CohortAttribute) sessionFactory.getCurrentSession()
                .createQuery("from CohortAttribute t where t.uuid = :uuid").setString("uuid", uuid).uniqueResult();
    }

    @Override
    public CohortEncounter getCohortEncounterUuid(String uuid) {
        return (CohortEncounter) sessionFactory.getCurrentSession()
                .createQuery("from CohortEncounter t where t.uuid = :uuid").setString("uuid", uuid).uniqueResult();
    }

    @Override
    public CohortMember getCohortMemUuid(String uuid) {
        return (CohortMember) sessionFactory.getCurrentSession()
                .createQuery("from CohortMember t where t.uuid = :uuid").setString("uuid", uuid).uniqueResult();
    }

    @Override
    public CohortMemberAttribute getCohortMemberAttributeUuid(String uuid) {
        return (CohortMemberAttribute) sessionFactory.getCurrentSession()
                .createQuery("from CohortMemberAttribute t where t.uuid = :uuid").setString("uuid", uuid)
                .uniqueResult();
    }

    @Override
    public CohortType getCohortTypeUuid(String uuid) {
        return (CohortType) sessionFactory.getCurrentSession().createQuery("from CohortType t where t.uuid = :uuid")
                .setString("uuid", uuid).uniqueResult();
    }

    @Override
    public CohortVisit getCohortVisitUuid(String uuid) {
        return (CohortVisit) sessionFactory.getCurrentSession()
                .createQuery("from CohortVisit t where t.uuid = :uuid").setString("uuid", uuid).uniqueResult();
    }

    @Override
    public CohortAttributeType getCohortAttributeTypeUuid(String uuid) {
        return (CohortAttributeType) sessionFactory.getCurrentSession()
                .createQuery("from CohortAttributeType t where t.uuid = :uuid").setString("uuid", uuid)
                .uniqueResult();
    }

    @Override
    public CohortMemberAttributeType getCohortMemberAttributeType(String uuid) {
        return (CohortMemberAttributeType) sessionFactory.getCurrentSession()
                .createQuery("from CohortMemberAttributeType t where t.uuid = :uuid").setString("uuid", uuid)
                .uniqueResult();
    }

    @Override
    public List<CohortMember> findCohortMember() {
        List<CohortMember> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortMember");
        cohort = queryResult.list();
        return cohort;

    }

    @Override
    public List<CohortVisit> findCohortVisit(Integer id) {
        List<CohortVisit> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortVisit where cohortVisitId='" + id + "'");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public List<CohortM> findCohort(Integer id) {
        List<CohortM> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortM where cohortId='" + id + "'");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public List<CohortType> findCohortType(Integer id) {
        List<CohortType> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortType where cohortTypeId='" + id + "'");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public List<CohortAttribute> findCohortAtt(Integer id) {
        List<CohortAttribute> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortAttribute where cohortAttributeId='" + id + "'");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public List<CohortAttributeType> findCohortAttType(Integer id) {
        List<CohortAttributeType> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session
                .createQuery("from CohortAttributeType where cohortAttributeTypeId='" + id + "'");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public List<CohortMemberAttributeType> findCohortMemAttType(Integer id) {
        List<CohortMemberAttributeType> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session
                .createQuery("from CohortMemberAttributeType where cohortMemberAttributeTypeId='" + id + "'");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public List<CohortMemberAttribute> findCohortMemAtt(Integer id) {
        List<CohortMemberAttribute> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session
                .createQuery("from CohortMemberAttribute where cohortMemberAttributeId='" + id + "'");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public List<CohortEncounter> findCohortEnc(Integer id) {
        List<CohortEncounter> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortEncounter where encounterId='" + id + "'");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public CohortProgram saveCohortProgram(CohortProgram cohort) {
        sessionFactory.getCurrentSession().saveOrUpdate(cohort);
        return cohort;
    }

    @Override
    public void purgeCohortProgram(CohortProgram cvisit) {
        sessionFactory.getCurrentSession().delete(cvisit);
    }

    @Override
    public List<CohortProgram> findCohortProg() {
        List<CohortProgram> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortProgram");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public List<CohortProgram> findCohortProgram(String name) {
        Criteria criteria = (Criteria) sessionFactory.getCurrentSession().createCriteria(CohortProgram.class);
        criteria.add(Restrictions.ilike("name", name, MatchMode.START));
        criteria.add(Restrictions.eq("voided", false));
        return criteria.list();
    }

    @Override
    public CohortProgram getCohortProgramUuid(String uuid) {
        return (CohortProgram) sessionFactory.getCurrentSession()
                .createQuery("from CohortProgram t where t.uuid = :uuid").setString("uuid", uuid).uniqueResult();
    }

    @Override
    public List<CohortProgram> findCohortProgram(Integer id) {
        List<CohortProgram> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortProgram where cohortProgramId='" + id + "'");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public CohortObs saveCohortObs(CohortObs cobs) {
        sessionFactory.getCurrentSession().saveOrUpdate(cobs);
        return cobs;
    }

    @Override
    public void purgeCohortObs(CohortObs cobs) {
        sessionFactory.getCurrentSession().delete(cobs);
    }

    @Override
    public List<CohortObs> findCohortObs() {
        List<CohortObs> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortObs");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public List<CohortObs> findCohortObs(Integer id) {
        List<CohortObs> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortObs where obsId='" + id + "'");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public CohortObs getCohortObsUuid(String uuid) {
        return (CohortObs) sessionFactory.getCurrentSession().createQuery("from CohortObs t where t.uuid = :uuid")
                .setString("uuid", uuid).uniqueResult();
    }

    @Override
    public CohortRole saveCohortRole(CohortRole cohort) {
        sessionFactory.getCurrentSession().saveOrUpdate(cohort);
        return cohort;
    }

    @Override
    public List<CohortRole> findRoles(String name) {
        List<CohortRole> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery(
                "from CohortRole r where r.cohortType=(select m.cohortType from CohortM m where m.name='" + name
                        + "')");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public List<CohortRole> findCohortRoles(String name) {
        List<CohortRole> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortRole where name='" + name + "'");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public CohortRole getCohortRoleUuid(String uuid) {
        return (CohortRole) sessionFactory.getCurrentSession().createQuery("from CohortRole t where t.uuid = :uuid")
                .setString("uuid", uuid).uniqueResult();
    }

    @Override
    public CohortEncounter getCohortEncounter(Integer id) {

        return (CohortEncounter) sessionFactory.getCurrentSession().get(CohortEncounter.class, id);

    }

    @Override
    public List<CohortEncounter> getEncounters(EncounterSearchCriteria searchCriteria) {
        Criteria crit = sessionFactory.getCurrentSession().createCriteria(CohortEncounter.class);

        if (searchCriteria.getCohort() != null && searchCriteria.getCohort().getCohortId() != null) {
            crit.add(Restrictions.eq("cohort", searchCriteria.getCohort()));
        }
        if (searchCriteria.getLocation() != null && searchCriteria.getLocation().getLocationId() != null) {
            crit.add(Restrictions.eq("location", searchCriteria.getLocation()));
        }
        if (searchCriteria.getFromDate() != null) {
            crit.add(Restrictions.ge("encounterDatetime", searchCriteria.getFromDate()));
        }
        if (searchCriteria.getToDate() != null) {
            crit.add(Restrictions.le("encounterDatetime", searchCriteria.getToDate()));
        }
        if (searchCriteria.getEnteredViaForms() != null && searchCriteria.getEnteredViaForms().size() > 0) {
            crit.add(Restrictions.in("form", searchCriteria.getEnteredViaForms()));
        }
        if (searchCriteria.getEncounterTypes() != null && searchCriteria.getEncounterTypes().size() > 0) {
            crit.add(Restrictions.in("encounterType", searchCriteria.getEncounterTypes()));
        }
        if (searchCriteria.getVisits() != null && searchCriteria.getVisits().size() > 0) {
            crit.add(Restrictions.in("visit", searchCriteria.getVisits()));
        }
        crit.addOrder(Order.asc("encounterDatetime"));
        return crit.list();
    }

    @Override
    @SuppressWarnings("unchecked")
    public List<CohortEncounter> getEncounters(String query, Integer cohortId, Integer start, Integer length,
            boolean includeVoided) {
        if (StringUtils.isBlank(query) && cohortId == null) {
            return Collections.emptyList();
        }

        Criteria criteria = createEncounterByQueryCriteria(query, cohortId, includeVoided, true);

        if (start != null) {
            criteria.setFirstResult(start);
        }
        if (length != null && length > 0) {
            criteria.setMaxResults(length);
        }

        return criteria.list();
    }

    private Criteria createEncounterByQueryCriteria(String query, Integer cohortId, boolean includeVoided,
            boolean orderByNames) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(CohortEncounter.class, "enc");
        if (!includeVoided) {
            criteria.add(Restrictions.eq("enc.voided", false));
        }

        criteria = criteria.createCriteria("cohort", "coh");
        if (cohortId != null) {
            criteria.add(Restrictions.eq("coh.cohortId", cohortId));
            if (StringUtils.isNotBlank(query)) {
                criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
                //match on location.name, encounterType.name, form.name
                //provider.name, provider.identifier, provider.person.names
                MatchMode mode = MatchMode.ANYWHERE;
                criteria.createAlias("enc.location", "loc");
                criteria.createAlias("enc.encounterType", "encType");
                criteria.createAlias("enc.form", "form");
                criteria.createAlias("enc.encounterProviders", "enc_prov");
                criteria.createAlias("enc_prov.provider", "prov");
                criteria.createAlias("prov.person", "person", Criteria.LEFT_JOIN);
                criteria.createAlias("person.names", "personName", Criteria.LEFT_JOIN);

                Disjunction or = Restrictions.disjunction();
                or.add(Restrictions.ilike("loc.name", query, mode));
                or.add(Restrictions.ilike("encType.name", query, mode));
                or.add(Restrictions.ilike("form.name", query, mode));
                or.add(Restrictions.ilike("prov.name", query, mode));
                or.add(Restrictions.ilike("prov.identifier", query, mode));

                String[] splitNames = query.split(" ");
                Disjunction nameOr = Restrictions.disjunction();
                for (String splitName : splitNames) {
                    nameOr.add(Restrictions.ilike("personName.givenName", splitName, mode));
                    nameOr.add(Restrictions.ilike("personName.middleName", splitName, mode));
                    nameOr.add(Restrictions.ilike("personName.familyName", splitName, mode));
                    nameOr.add(Restrictions.ilike("personName.familyName2", splitName, mode));
                }
                //OUTPUT for provider criteria: 
                //prov.name like '%query%' OR prov.identifier like '%query%'
                //OR ( personName.voided = false 
                //       AND (  personName.givenName like '%query%' 
                //         OR personName.middleName like '%query%' 
                //         OR personName.familyName like '%query%'
                //         OR personName.familyName2 like '%query%'
                //         )
                //    )
                Conjunction personNameConjuction = Restrictions.conjunction();
                personNameConjuction.add(Restrictions.eq("personName.voided", false));
                personNameConjuction.add(nameOr);

                or.add(personNameConjuction);

                criteria.add(or);
            }
        } else {
            String name = null;
            String identifier = null;
            if (query.matches(".*\\d+.*")) {
                identifier = query;
            } else {
                // there is no number in the string, search on name
                name = query;
            }
            criteria = new PatientSearchCriteria(sessionFactory, criteria).prepareCriteria(name, identifier,
                    new ArrayList<PatientIdentifierType>(), false, orderByNames, false);
        }

        return criteria;
    }

    @Override
    public List<CohortRole> findCohortRole(String cohort_name) {
        Criteria criteria = (Criteria) sessionFactory.getCurrentSession().createCriteria(CohortRole.class);
        criteria.add(Restrictions.ilike("name", cohort_name, MatchMode.START));
        criteria.add(Restrictions.eq("voided", false));
        return criteria.list();
    }

    @Override
    public List<CohortRole> findCohortRole(Integer id) {
        List<CohortRole> cohort = null;
        Session session = sessionFactory.getCurrentSession();
        Query queryResult = session.createQuery("from CohortRole where cohortRoleId='" + id + "'");
        cohort = queryResult.list();
        return cohort;
    }

    @Override
    public void purgeCohortRole(CohortRole crole) {
        sessionFactory.getCurrentSession().delete(crole);
    }
}