gov.nih.nci.cabig.caaers.dao.query.InvestigatorQuery.java Source code

Java tutorial

Introduction

Here is the source code for gov.nih.nci.cabig.caaers.dao.query.InvestigatorQuery.java

Source

/*******************************************************************************
 * Copyright SemanticBits, Northwestern University and Akaza Research
 * 
 * Distributed under the OSI-approved BSD 3-Clause License.
 * See http://ncip.github.com/caaers/LICENSE.txt for details.
 ******************************************************************************/
package gov.nih.nci.cabig.caaers.dao.query;

import org.apache.commons.lang.StringUtils;

import java.util.Arrays;
import java.util.List;

public class InvestigatorQuery extends AbstractQuery {

    private static String queryString = "SELECT distinct i from Investigator i";

    private static String FIRST_NAME = "firstName";
    private static String LAST_NAME = "lastName";
    private static String NCI_CODE = "nciIdentifier";
    private static String EMAIL_ADDRESS = "emailAddress";
    private static String LOGIN_ID = "loginId";
    private static String ORGANIZATION = "organization";
    private static String ORGANIZATIONS = "organizations";
    private static String USER_NAME = "userName";

    public InvestigatorQuery() {

        super(queryString);
        leftJoinFetch("i.siteInvestigatorsInternal si");
        orderBy("i.id");
    }

    public void excludeHavingId(Integer id) {
        if (id == null)
            return;
        andWhere(" i.id != :iid");
        setParameter("iid", id);
    }

    public void filterByName(final String name) {
        String[] searchFields = StringUtils.split(name);
        int i = 0;
        if (searchFields != null) {
            for (String searchField : searchFields) {
                String searchString = "%" + StringUtils.lowerCase(searchField) + "%";
                String firstNameKey = "FIRST_NAME_" + i;
                String lastNameKey = "LAST_NAME_" + i;
                String middleNameKey = "MIDDLE_NAME_" + i;
                andWhere(String.format(
                        "(lower(i.firstName) LIKE :%s OR lower(i.lastName) LIKE :%s OR lower(i.middleName) LIKE :%s)",
                        firstNameKey, lastNameKey, middleNameKey));
                setParameter(firstNameKey, searchString);
                setParameter(lastNameKey, searchString);
                setParameter(middleNameKey, searchString);
                i++;
            }
        }
    }

    public void filterByFirstName(final String firstName) {
        String searchString = "%" + firstName.toLowerCase() + "%";
        andWhere("lower(i.firstName) LIKE :" + FIRST_NAME);
        setParameter(FIRST_NAME, searchString);
    }

    public void filterByLastName(final String lastName) {
        String searchString = "%" + lastName.toLowerCase() + "%";
        andWhere("lower(i.lastName) LIKE :" + LAST_NAME);
        setParameter(LAST_NAME, searchString);
    }

    public void filterByEmailAddress(final String emailAddress) {
        String searchString = "%" + emailAddress.trim().toLowerCase() + "%";
        andWhere("lower(i.emailAddress) LIKE :" + EMAIL_ADDRESS);
        setParameter(EMAIL_ADDRESS, searchString);
    }

    public void filterByNciIdentifier(final String value) {
        String searchString = "%" + value.toLowerCase() + "%";
        andWhere("lower(i.nciIdentifier) LIKE :" + NCI_CODE);
        setParameter(NCI_CODE, searchString);
    }

    public void filterByNciIdentifierExactMatch(final String value) {
        String searchString = value.toLowerCase();
        andWhere("lower(i.nciIdentifier) LIKE :" + NCI_CODE);
        setParameter(NCI_CODE, searchString);
    }

    public void filterByLoginId(final String loginId) {
        join("i.caaersUser u");
        String searchString = "%" + loginId.trim().toLowerCase() + "%";
        andWhere(String.format("lower(u.loginName) LIKE :%s", LOGIN_ID));
        setParameter(LOGIN_ID, searchString);
    }

    public void filterByExactLoginId(final String... loginIds) {
        join("i.caaersUser u");
        if (loginIds.length > 1) {
            andWhere("u.loginName in (:loginIds)");
            setParameterList("loginIds", Arrays.asList(loginIds));
        } else {
            String searchString = loginIds[0].trim().toLowerCase();
            andWhere(String.format("lower(u.loginName) = :%s", LOGIN_ID));
            setParameter(LOGIN_ID, searchString);
        }

    }

    public void filterByOrganization(final String organization) {
        String searchString = organization.trim();
        andWhere("si.organization.id =:" + ORGANIZATION);
        setParameter(ORGANIZATION, Integer.parseInt(searchString));
    }

    public void filterByUserName(final String value) {
        join("i.caaersUser cu");
        String searchString = "%" + value.toLowerCase() + "%";
        andWhere("lower(cu.loginName) LIKE :" + USER_NAME);
        setParameter(USER_NAME, searchString);
    }

    public void excludeUsers() {
        andWhere("i.caaersUser is null");
    }

    public void filterByOrganizations(List list) {
        andWhere("si.organization.id in (:" + ORGANIZATIONS + ")");
        setParameterList(ORGANIZATIONS, list);
    }
}