gov.nih.nci.ess.ae.AdverseEventAdvancedQueryImpl.java Source code

Java tutorial

Introduction

Here is the source code for gov.nih.nci.ess.ae.AdverseEventAdvancedQueryImpl.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.ess.ae;

import ess.caaers.nci.nih.gov.AdverseEvent;
import ess.caaers.nci.nih.gov.AdverseEventQuery;
import ess.caaers.nci.nih.gov.AuditTrail;
import ess.caaers.nci.nih.gov.Criteria;
import ess.caaers.nci.nih.gov.DSET_AdverseEvent;
import ess.caaers.nci.nih.gov.DSET_AuditTrail;
import ess.caaers.nci.nih.gov.Id;
import ess.caaers.nci.nih.gov.LimitOffset;
import ess.caaers.nci.nih.gov.TsDateTime;
import gov.nih.nci.cabig.caaers.dao.AdvancedSearchDao;
import gov.nih.nci.cabig.caaers.dao.AdverseEventDao;
import gov.nih.nci.cabig.caaers.dao.query.AbstractQuery;
import gov.nih.nci.cabig.caaers.web.search.AdvancedSearchCriteriaParameter;
import gov.nih.nci.cabig.caaers.web.search.AdvancedSearchUiUtil;
import gov.nih.nci.cabig.caaers.web.search.CommandToSQL;
import gov.nih.nci.cabig.caaers.web.search.ui.AdvancedSearchUi;
import gov.nih.nci.cabig.caaers.web.search.ui.DependentObject;
import gov.nih.nci.cabig.caaers.web.search.ui.Operator;
import gov.nih.nci.cabig.caaers.web.search.ui.SearchTargetObject;
import gov.nih.nci.cabig.caaers.web.search.ui.UiAttribute;
import gov.nih.nci.cabig.ctms.audit.dao.AuditHistoryRepository;
import gov.nih.nci.cabig.ctms.audit.domain.AuditHistory;
import gov.nih.nci.ess.ae.service.aeadvancedquery.common.AEAdvancedQueryI;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;

import org.apache.commons.lang.math.NumberUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceAware;

import _21090.org.iso.ST;

/**
 * @author Denis G. Krylov
 * 
 */
public class AdverseEventAdvancedQueryImpl implements MessageSourceAware, AEAdvancedQueryI {

    private static final Log log = LogFactory.getLog(AdverseEventAdvancedQueryImpl.class);
    private static final ISO21090Helper h = null;
    private static final String INCOMPLETE_CRITERIA = "WS_AEMS_045";
    private static final String INVALID_ATTR_NAME = "WS_AEMS_043";
    private static final String INVALID_OBJ_NAME = "WS_AEMS_042";
    private static final String INVALID_PREDICATE = "WS_AEMS_044";
    private static final String INVALID_QUERY_CRITERIA = "WS_AEMS_041";
    public static final String INVALID_AE_ID = AdverseEventManagementImpl.INVALID_AE_ID;
    private AdverseEventDao adverseEventDao;
    private AdvancedSearchDao advancedSearchDao;
    private DomainToGridObjectConverter domainToGridConverter;
    private GridToDomainObjectConverter gridToDomainConverter;
    private MessageSource messageSource;
    private AuditHistoryRepository auditHistoryRepository;

    /**
     * @param criteria
     * @param tgtObj
     * @return
     */
    private AdvancedSearchCriteriaParameter convert(Criteria criteria, SearchTargetObject tgtObj) {
        AdvancedSearchCriteriaParameter param = new AdvancedSearchCriteriaParameter();
        final String attrName = getStringValue(criteria.getAttributeName());
        final String objName = getStringValue(criteria.getObjectName());
        final String predicate = getStringValue(criteria.getPredicate());
        final String value = getStringValue(criteria.getValue());

        // check whether the object name is right
        DependentObject depObj = AdvancedSearchUiUtil.getDependentObjectByName(tgtObj, objName);
        if (depObj == null) {
            raiseError(INVALID_OBJ_NAME);
        }

        // check the attribute name
        UiAttribute uiAttr = AdvancedSearchUiUtil.getUiAttributeByName(depObj, attrName);
        if (uiAttr == null) {
            raiseError(INVALID_ATTR_NAME);
        }

        // is the predicate supported for this attribute?
        Operator op = AdvancedSearchUiUtil.getOperator(uiAttr, predicate);
        if (op == null) {
            raiseError(INVALID_PREDICATE);
        }

        param.setAttributeName(attrName);
        param.setObjectName(objName);
        param.setPredicate(predicate);
        param.setValue(value);
        param.setDataType(uiAttr.getDataType());
        param.setDependentObjectName(depObj.getClassName());
        param.setFilterByMethodInQueryClass(uiAttr.getFilterMethod());
        param.setDeleted(false);

        if (!param.isFilled()) {
            raiseError(INCOMPLETE_CRITERIA);
        }
        return param;
    }

    /* (non-Javadoc)
     * @see gov.nih.nci.ess.ae.service.aeadvancedquery.common.AEAdvancedQueryI#findAdverseEvents(ess.caaers.nci.nih.gov.AdverseEventQuery, ess.caaers.nci.nih.gov.LimitOffset)
     */
    public DSET_AdverseEvent findAdverseEvents(AdverseEventQuery query, LimitOffset limitAndOffset)
            throws RemoteException, AdverseEventServiceException {
        // basic parameters check first
        if (query.getSearchCriteria() == null || query.getSearchCriteria().length == 0) {
            raiseError(INVALID_QUERY_CRITERIA);
        }

        AdvancedSearchUi advancedSearchUi = AdvancedSearchUiUtil.loadAdvancedSearchUi();
        SearchTargetObject targetObject = AdvancedSearchUiUtil.getSearchTargetObjectByName(advancedSearchUi,
                "gov.nih.nci.cabig.caaers.domain.AdverseEvent");
        List<AdvancedSearchCriteriaParameter> params = new ArrayList<AdvancedSearchCriteriaParameter>();
        for (Criteria criteria : query.getSearchCriteria()) {
            params.add(convert(criteria, targetObject));
        }
        if (params.isEmpty()) {
            raiseError(INCOMPLETE_CRITERIA);
        }
        Integer firstResult = limitAndOffset != null && limitAndOffset.getOffset() != null
                ? limitAndOffset.getOffset().getValue()
                : null;
        Integer maxResults = limitAndOffset != null && limitAndOffset.getLimit() != null
                ? limitAndOffset.getLimit().getValue()
                : null;
        try {
            AbstractQuery hqlQuery = CommandToSQL.transform(targetObject, params);
            log.info(hqlQuery.getQueryString());
            List<gov.nih.nci.cabig.caaers.domain.AdverseEvent> list = (List<gov.nih.nci.cabig.caaers.domain.AdverseEvent>) advancedSearchDao
                    .search(hqlQuery, firstResult, maxResults);
            List<AdverseEvent> gridList = new ArrayList();
            for (gov.nih.nci.cabig.caaers.domain.AdverseEvent ae : list) {
                gridList.add(domainToGridConverter.convertAdverseEvent(ae));
            }
            return new DSET_AdverseEvent(gridList.toArray(new AdverseEvent[0]));
        } catch (Exception e) {
            log.error(e, e);
            throw new AdverseEventServiceException(e);
        }
    }

    /**
     * @return the adverseEventDao
     */
    public final AdverseEventDao getAdverseEventDao() {
        return adverseEventDao;
    }

    /**
     * @return the domainToGridConverter
     */
    public final DomainToGridObjectConverter getDomainToGridConverter() {
        return domainToGridConverter;
    }

    /**
     * @return the gridToDomainConverter
     */
    public final GridToDomainObjectConverter getGridToDomainConverter() {
        return gridToDomainConverter;
    }

    /**
     * @return the messageSource
     */
    public final MessageSource getMessageSource() {
        return messageSource;
    }

    /**
     * @param st
     * @return
     */
    private String getStringValue(ST st) {
        return (st != null && st.getValue() != null) ? st.getValue() : "";
    }

    private void raiseError(String code) {
        throw new AdverseEventServiceException(code,
                getMessageSource().getMessage(code, new Object[] {}, Locale.getDefault()));
    }

    /**
     * @param adverseEventDao
     *            the adverseEventDao to set
     */
    public final void setAdverseEventDao(AdverseEventDao adverseEventDao) {
        this.adverseEventDao = adverseEventDao;
    }

    /**
     * @param domainToGridConverter
     *            the domainToGridConverter to set
     */
    public final void setDomainToGridConverter(DomainToGridObjectConverter domainToGridConverter) {
        this.domainToGridConverter = domainToGridConverter;
    }

    /**
     * @param gridToDomainConverter
     *            the gridToDomainConverter to set
     */
    public final void setGridToDomainConverter(GridToDomainObjectConverter gridToDomainObjectConverter) {
        this.gridToDomainConverter = gridToDomainObjectConverter;
    }

    /**
     * @param messageSource
     *            the messageSource to set
     */
    public final void setMessageSource(MessageSource messageSource) {
        this.messageSource = messageSource;
    }

    /**
     * @return the advancedSearchDao
     */
    public final AdvancedSearchDao getAdvancedSearchDao() {
        return advancedSearchDao;
    }

    /**
     * @param advancedSearchDao
     *            the advancedSearchDao to set
     */
    public final void setAdvancedSearchDao(AdvancedSearchDao advancedSearchDao) {
        this.advancedSearchDao = advancedSearchDao;
    }

    /*
     * (non-Javadoc)
     * 
     * @see gov.nih.nci.ess.ae.service.aeadvancedquery.common.AEAdvancedQueryI#
     * getAuditTrailOfAdverseEvent(ess.caaers.nci.nih.gov.Id,
     * ess.caaers.nci.nih.gov.TsDateTime)
     */
    public DSET_AuditTrail getAuditTrailOfAdverseEvent(Id aeId, TsDateTime minDate)
            throws RemoteException, gov.nih.nci.ess.ae.service.management.stubs.types.AdverseEventServiceException {
        Calendar cal = null;
        Date startDate = gridToDomainConverter.convertToDate(minDate);
        if (aeId == null || !NumberUtils.isNumber(aeId.getExtension())) {
            raiseError(INVALID_AE_ID);
        }
        if (startDate != null) {
            cal = Calendar.getInstance();
            cal.setTime(startDate);
        }
        int id = NumberUtils.toInt(aeId.getExtension());

        List<AuditHistory> list = auditHistoryRepository
                .getAuditDetailsForEntity(gov.nih.nci.cabig.caaers.domain.AdverseEvent.class, id, cal);
        List<AuditTrail> trail = new ArrayList<AuditTrail>();
        for (AuditHistory history : list) {
            trail.add(domainToGridConverter.convert(history));
        }
        return new DSET_AuditTrail(trail.toArray(new AuditTrail[0]));
    }

    /**
     * @return the auditHistoryRepository
     */
    public final AuditHistoryRepository getAuditHistoryRepository() {
        return auditHistoryRepository;
    }

    /**
     * @param auditHistoryRepository
     *            the auditHistoryRepository to set
     */
    public final void setAuditHistoryRepository(AuditHistoryRepository auditHistoryRepository) {
        this.auditHistoryRepository = auditHistoryRepository;
    }

}