gov.nih.nci.ncicb.tcga.dcc.datareports.service.BamTelemetryReportServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for gov.nih.nci.ncicb.tcga.dcc.datareports.service.BamTelemetryReportServiceImpl.java

Source

/*
 * Software License, Version 1.0 Copyright 2013 SRA International, Inc.
 * Copyright Notice.  The software subject to this notice and license includes both human
 * readable source code form and machine readable, binary, object code form (the "caBIG
 * Software").
 *
 * Please refer to the complete License text for full details at the root of the project.
 */

package gov.nih.nci.ncicb.tcga.dcc.datareports.service;

import gov.nih.nci.ncicb.tcga.dcc.common.aspect.cache.Cached;
import gov.nih.nci.ncicb.tcga.dcc.common.bean.bam.BamTelemetry;
import gov.nih.nci.ncicb.tcga.dcc.common.util.FancyExceptionLogger;
import gov.nih.nci.ncicb.tcga.dcc.common.util.GetterMethod;
import gov.nih.nci.ncicb.tcga.dcc.datareports.bean.ExtJsFilter;
import gov.nih.nci.ncicb.tcga.dcc.datareports.dao.BamTelemetryReportDAO;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.PredicateUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.lang.reflect.Method;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import static gov.nih.nci.ncicb.tcga.dcc.datareports.constants.BamTelemetryReportConstants.ANALYTE_CODE;
import static gov.nih.nci.ncicb.tcga.dcc.datareports.constants.BamTelemetryReportConstants.BAM_TELEMETRY_COLS;
import static gov.nih.nci.ncicb.tcga.dcc.datareports.constants.BamTelemetryReportConstants.LIBRARY_STRATEGY;
import static gov.nih.nci.ncicb.tcga.dcc.datareports.constants.DatareportsCommonConstants.CENTER;
import static gov.nih.nci.ncicb.tcga.dcc.datareports.constants.DatareportsCommonConstants.DATA_TYPE;
import static gov.nih.nci.ncicb.tcga.dcc.datareports.constants.DatareportsCommonConstants.DATE_FORMAT_US_STRING;
import static gov.nih.nci.ncicb.tcga.dcc.datareports.constants.DatareportsCommonConstants.DISEASE;

/**
 * bam telemetry service implementation
 *
 * @author Dominique Berton
 *         Last updated by: $Author$
 * @version $Rev$
 */

@Service
public class BamTelemetryReportServiceImpl implements BamTelemetryReportService {

    protected final Log logger = LogFactory.getLog(getClass());

    @Autowired
    private BamTelemetryReportDAO daoImpl;

    @Autowired
    private DatareportsService commonService;

    @Override
    public List<BamTelemetry> getAllBamTelemetry() {
        return daoImpl.getBamTelemetryRows();
    }

    @Override
    public List<BamTelemetry> getFilteredBamTelemetryList(final List<BamTelemetry> list, final String aliquotUUID,
            final String aliquotId, final String dateFrom, final String dateTo, final List<String> disease,
            final List<String> center, final List<String> dataType, final List<String> analyteCode,
            final List<String> libraryStrategy) {
        final StringBuilder strLog = new StringBuilder();
        final DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT_US_STRING);
        strLog.append("Filter used: aliquotUUID:").append(aliquotUUID).append("aliquotID").append(aliquotId)
                .append(" disease:").append(disease).append(" center:").append(center).append(" dataType:")
                .append(dataType).append(" analyteCode:").append(analyteCode).append(" dateFrom:").append(dateFrom)
                .append(" dateTo:").append(dateTo).append(" libraryStrategy:").append(libraryStrategy);
        logger.debug(strLog);
        if (aliquotId == null && aliquotUUID == null && disease == null && center == null && dataType == null
                && analyteCode == null && dateFrom == null && dateTo == null && libraryStrategy == null) {
            return list;
        }

        final List<Predicate> bamPredicateList = new LinkedList<Predicate>();
        bamPredicateList.add(new Predicate() {
            public boolean evaluate(Object o) {
                boolean isValid = true;

                if (StringUtils.isNotEmpty(aliquotUUID)) {
                    isValid = (((BamTelemetry) o).getAliquotUUID()).equalsIgnoreCase(aliquotUUID);
                } else if (StringUtils.isNotEmpty(aliquotId)) {
                    isValid = (((BamTelemetry) o).getAliquotId()).startsWith(aliquotId);
                } else {
                    return isValid;
                }
                return isValid;
            }
        });
        bamPredicateList.add(
                commonService.genDatePredicate(BamTelemetry.class, "dateReceived", false, dateFrom, dateFormat));
        bamPredicateList
                .add(commonService.genDatePredicate(BamTelemetry.class, "dateReceived", true, dateTo, dateFormat));
        commonService.genORPredicateList(BamTelemetry.class, bamPredicateList, disease, DISEASE);
        commonService.genORPredicateList(BamTelemetry.class, bamPredicateList, center, CENTER);
        commonService.genORPredicateList(BamTelemetry.class, bamPredicateList, dataType, DATA_TYPE);
        commonService.genORPredicateList(BamTelemetry.class, bamPredicateList, analyteCode, ANALYTE_CODE);
        commonService.genORPredicateList(BamTelemetry.class, bamPredicateList, libraryStrategy, LIBRARY_STRATEGY);

        Predicate bamTelemetryPredicates = PredicateUtils.allPredicate(bamPredicateList);
        List<BamTelemetry> fList = (List<BamTelemetry>) CollectionUtils.select(list, bamTelemetryPredicates);
        return fList;
    }

    @Override
    @Cached
    public List<ExtJsFilter> getBamTelemetryFilterDistinctValues(String getterString) {
        final Set<String> tmpSet = new LinkedHashSet<String>();
        final List<ExtJsFilter> bfList = new LinkedList<ExtJsFilter>();
        try {
            final Method getter = GetterMethod.getGetter(BamTelemetry.class, getterString);
            for (BamTelemetry bam : getAllBamTelemetry()) {
                tmpSet.add(getter.invoke(bam).toString());
            }
            for (String str : tmpSet) {
                bfList.add(new ExtJsFilter(str, str));
            }
        } catch (Exception e) {
            logger.debug(FancyExceptionLogger.printException(e));
            return null;
        }
        Collections.sort(bfList, commonService.comparatorExtJsFilter());
        return bfList;
    }

    @Override
    public Map<String, Comparator> getBamTelemetryComparator() {
        return commonService.getComparatorMap(BamTelemetry.class, BAM_TELEMETRY_COLS);
    }

}//End of class