gov.nih.nci.cananolab.service.sample.impl.SampleExporter.java Source code

Java tutorial

Introduction

Here is the source code for gov.nih.nci.cananolab.service.sample.impl.SampleExporter.java

Source

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

package gov.nih.nci.cananolab.service.sample.impl;

import gov.nih.nci.cananolab.dto.common.LinkableItem;
import gov.nih.nci.cananolab.dto.particle.AdvancedSampleBean;
import gov.nih.nci.cananolab.dto.particle.AdvancedSampleSearchBean;
import gov.nih.nci.cananolab.exception.CompositionException;
import gov.nih.nci.cananolab.util.ExportUtils;

import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;

/**
 * Service methods involving exporting samples
 *
 * @author pansu, houy
 *
 */
public class SampleExporter {
    private static Logger logger = Logger.getLogger(SampleExporter.class);

    /**
     * Export advance sample summary report as Excel spread sheet.
     *
     * @param searchBean
     * @param out
     * @throws CompositionException
     */
    public static void exportSummary(AdvancedSampleSearchBean searchBean, List<AdvancedSampleBean> sampleBeans,
            String viewSampleUrl, OutputStream out) throws IOException {
        if (out != null) {
            HSSFWorkbook wb = new HSSFWorkbook();
            outputSummarySheet(searchBean, sampleBeans, viewSampleUrl, wb);
            wb.write(out);
            out.flush();
            out.close();
        }
    }

    /**
     * Output advance sample summary report, representing,
     * bodyAdvancedSampleSearchResult.jsp
     *
     * @param searchBean
     * @param wb
     */
    private static void outputSummarySheet(AdvancedSampleSearchBean searchBean,
            List<AdvancedSampleBean> sampleBeans, String viewSampleUrl, HSSFWorkbook wb) throws IOException {
        HSSFFont headerFont = wb.createFont();
        headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        HSSFCellStyle headerStyle = wb.createCellStyle();
        headerStyle.setFont(headerFont);

        HSSFCellStyle hlinkStyle = wb.createCellStyle();
        HSSFFont hlinkFont = wb.createFont();
        hlinkFont.setUnderline(HSSFFont.U_SINGLE);
        hlinkFont.setColor(HSSFColor.BLUE.index);
        hlinkStyle.setFont(hlinkFont);

        int rowIndex = 0;
        HSSFSheet sheet = wb.createSheet("Advanced Sample Search Report");

        // 1.Output Search Criteria. comment out as per Sharon.
        // rowIndex = outputCriteria(searchBean, sheet, headerStyle, rowIndex);

        // 2.Output table column headers.
        rowIndex = outputHeader(sampleBeans.get(0), sheet, headerStyle, rowIndex);

        // 3.Output each table row.
        for (AdvancedSampleBean sampleBean : sampleBeans) {
            rowIndex = outputRow(sampleBean, viewSampleUrl, sheet, hlinkStyle, rowIndex);
        }
    }

    /**
     * Output Search Criteria for advance sample search work sheet.
     *
     * @param compType
     * @param entityType
     * @param sheet
     * @param headerStyle
     * @param rowIndex
     *
     *            private static int outputCriteria(AdvancedSampleSearchBean
     *            searchBean, HSSFSheet sheet, HSSFCellStyle headerStyle, int
     *            rowIndex) { // 1. Output "Selected Criteria" at (0, 0).
     *            HSSFRow row = sheet.createRow(rowIndex++);
     *            ExportUtils.createCell(row, 0, headerStyle,
     *            "Selected Criteria"); // 2. Output Criteria Display Name at(1,
     *            0). row = sheet.createRow(rowIndex++);
     *            ExportUtils.createCell(row, 0, searchBean.getDisplayName());
     *            rowIndex++; // Create one empty line as separator. return
     *            rowIndex; }
     */

    /**
     * Output headers for work sheet.
     *
     * @param compType
     * @param entityType
     * @param sheet
     * @param headerStyle
     * @param rowIndex
     */
    public static int outputHeader(AdvancedSampleBean sampleBean, HSSFSheet sheet, HSSFCellStyle headerStyle,
            int rowIndex) {
        // 1. Output "Sample Name" at first column.
        int columnIndex = 0;
        HSSFRow row = sheet.createRow(rowIndex++);
        ExportUtils.createCell(row, columnIndex++, headerStyle, "Sample Name");

        // 2. Output selected column(s).
        Map<String, List<LinkableItem>> columns = sampleBean.getAttributeMap();
        if (columns != null && !columns.isEmpty()) {
            for (String header : columns.keySet()) {
                ExportUtils.createCell(row, columnIndex++, headerStyle, header.replaceAll("<br>", " "));
            }
        }

        // 3. Output "Site" at last column.
        ExportUtils.createCell(row, columnIndex, headerStyle, "Site");

        return rowIndex;
    }

    /**
     * Output one table row for work sheet.
     *
     * @param compType
     * @param entityType
     * @param sheet
     * @param headerStyle
     * @param rowIndex
     */
    public static int outputRow(AdvancedSampleBean sampleBean, String viewSampleUrl, HSSFSheet sheet,
            HSSFCellStyle hlinkStyle, int rowIndex) {
        // 1. Output first column - Sample Name at index 0.
        HSSFRow row = sheet.createRow(rowIndex++);
        ExportUtils.createCell(row, 0, hlinkStyle, sampleBean.getDomainSample().getName(),
                getViewSampleURL(sampleBean, viewSampleUrl));

        // 2. Output selected column(s) starting from index 1.
        int columnIndex = 1;
        Map<String, List<LinkableItem>> columns = sampleBean.getAttributeMap();
        if (columns != null && !columns.isEmpty()) {
            StringBuilder sb = new StringBuilder();
            for (String key : columns.keySet()) {
                sb.setLength(0);
                List<LinkableItem> items = (List<LinkableItem>) columns.get(key);
                for (LinkableItem item : items) {
                    sb.append(item.getDisplayName()).append(' ');
                }
                ExportUtils.createCell(row, columnIndex++, sb.toString());
            }
        }

        return rowIndex;
    }

    /**
     * Return complete view sample URL including sample id.
     *
     * @param sample
     * @return
     */
    private static String getViewSampleURL(AdvancedSampleBean sample, String viewSampleUrl) {
        StringBuilder sb = new StringBuilder(viewSampleUrl);
        sb.append("&sampleId=").append(sample.getSampleId());

        return sb.toString();
    }
}