gov.nih.nci.cma.service.findings.handlers.ClinicalQueryHandler.java Source code

Java tutorial

Introduction

Here is the source code for gov.nih.nci.cma.service.findings.handlers.ClinicalQueryHandler.java

Source

/*L
 *  Copyright SAIC
 *
 *  Distributed under the OSI-approved BSD 3-Clause License.
 *  See http://ncip.github.com/cma/LICENSE.txt for details.
 */

package gov.nih.nci.cma.service.findings.handlers;

import gov.nih.nci.caintegrator.domain.finding.bean.Finding;
import gov.nih.nci.caintegrator.domain.finding.clinical.brainCancer.GBMClinicalFinding;
import gov.nih.nci.caintegrator.dto.query.QueryDTO;
import gov.nih.nci.caintegrator.studyQueryService.QueryHandler;
import gov.nih.nci.cma.query.dto.ProjectQueryDTO;

import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;

/**
 * ClinicalQueryHandler provides the functionality to take in a 
 * ClinicalQueryDTO and then create a criteria object that will allow
 * the execution of that query to bring back the correct finding objects.
 * 
 *
 * @author caIntegrator Team
 */
public class ClinicalQueryHandler implements QueryHandler {

    private static Logger logger = Logger.getLogger(ClinicalQueryHandler.class);
    private static final String TIMECOURSE = "timeCourse.name";
    private SessionFactory sessionFactory;

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

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

    /**
     * Method that looks at the QueryDTO and creates a criteria to
     * be executed.
     *
     * @param query
     * @return
     */
    protected Criteria createCriteria(QueryDTO query) {
        Session s = sessionFactory.getCurrentSession();
        Criteria criteria = s.createCriteria(GBMClinicalFinding.class);
        ProjectQueryDTO clinicalQuery = (ProjectQueryDTO) query;

        for (String key : clinicalQuery.getQueryMap().keySet()) {
            List unknownList = clinicalQuery.getQueryMap().get(key);
            if (unknownList.get(0) instanceof String) {
                logger.info("Query params for " + key + " are Strings");
                criteria.add(Restrictions.in(key + ".value", clinicalQuery.getQueryMap().get(key)));
            } else if (unknownList.get(0) instanceof Double) {
                logger.info("Query params for " + key + " are Doubles");
                criteria.add(Restrictions.between(key + ".absoluteValue",
                        clinicalQuery.getQueryMap().get(key).get(0), clinicalQuery.getQueryMap().get(key).get(1)));
            }
        }

        return criteria;
    }

    public List<Finding> getResults(QueryDTO dto, Integer page) {
        // TODO Auto-generated method stub
        return null;
    }

    public Integer getResultCount(QueryDTO query) {
        // TODO Auto-generated method stub
        return null;
    }

    /**
     * 
     */
    public boolean canHandle(QueryDTO query) {
        if (query instanceof ProjectQueryDTO) {
            return true;
        } else
            return false;
    }

    public List<Finding> getResults(QueryDTO query) {
        Criteria criteria = createCriteria(query);
        if (criteria != null)
            return criteria.list();
        else
            return null;
    }

}