org.devgateway.eudevfin.sheetexp.util.TransformationStarter.java Source code

Java tutorial

Introduction

Here is the source code for org.devgateway.eudevfin.sheetexp.util.TransformationStarter.java

Source

/*******************************************************************************
 * Copyright (c) 2014 Development Gateway.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v3.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/gpl.html
 *******************************************************************************/
package org.devgateway.eudevfin.sheetexp.util;

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.devgateway.eudevfin.financial.CustomFinancialTransaction;
import org.devgateway.eudevfin.financial.service.CustomFinancialTransactionService;
import org.devgateway.eudevfin.sheetexp.dto.EntityWrapperInterface;
import org.devgateway.eudevfin.sheetexp.dto.HeaderEntityWrapper;
import org.devgateway.eudevfin.sheetexp.integration.api.SpreadsheetTransformerService;
import org.devgateway.eudevfin.sheetexp.ui.model.Filter;
import org.devgateway.eudevfin.ui.common.temporary.SB;
import org.joda.time.LocalDateTime;

public class TransformationStarter implements ITransformationStarter {

    private static Logger logger = Logger.getLogger(TransformationStarter.class);

    private List<EntityWrapperInterface<?>> finalList;
    private Filter filter;

    /* (non-Javadoc)
     * @see org.devgateway.eudevfin.sheetexp.util.ITransformationStarter#prepareTransformation(org.devgateway.eudevfin.sheetexp.ui.model.Filter, org.devgateway.eudevfin.financial.service.CustomFinancialTransactionService)
     */
    @Override
    public ITransformationStarter prepareTransformation(final Filter filter,
            final CustomFinancialTransactionService txService) {
        final LocalDateTime now = LocalDateTime.now();
        final HeaderEntityWrapper<String> header = new HeaderEntityWrapper<String>(filter.getExportType(), now,
                "en");

        this.filter = filter;
        this.finalList = new ArrayList<EntityWrapperInterface<?>>();
        this.finalList.add(header);

        final List<CustomFinancialTransaction> txList = txService
                .findByReportingYearAndApprovedTrueAndFormTypeIn(filter.getYear(), this.getAllowedFormTypes());
        new EntityWrapperListHelper<CustomFinancialTransaction>(txList, filter.getExportType(), now, "en")
                .addToWrappedList(this.finalList);

        return this;

    }

    private Collection<String> getAllowedFormTypes() {
        Collection<String> retCol = null;
        if (MetadataConstants.CRS_REPORT_TYPE.equals(this.filter.getExportType())) {
            retCol = Arrays.asList(new String[] { SB.BILATERAL_ODA_CRS, SB.MULTILATERAL_ODA_CRS,
                    SB.NON_ODA_OOF_EXPORT, SB.NON_ODA_OOF_NON_EXPORT, SB.NON_ODA_OTHER_FLOWS,
                    SB.NON_ODA_PRIVATE_GRANTS, SB.NON_ODA_PRIVATE_MARKET });
        } else if (MetadataConstants.FSS_REPORT_TYPE.equals(this.filter.getExportType())) {
            retCol = Arrays.asList(new String[] { SB.BILATERAL_ODA_FORWARD_SPENDING });
        } else {
            logger.error("Export type needs to be either CRS or FSS");
        }
        return retCol;
    }

    /* (non-Javadoc)
     * @see org.devgateway.eudevfin.sheetexp.util.ITransformationStarter#executeTransformation(javax.servlet.http.HttpServletResponse, org.devgateway.eudevfin.sheetexp.integration.api.SpreadsheetTransformerService)
     */
    @Override
    public void executeTransformation(final HttpServletResponse response,
            final SpreadsheetTransformerService transformerService) {
        try {
            final String filename = this.filter.getExportType() + "-export.xls";
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-Disposition", "inline; filename=" + filename);
            final OutputStream out = response.getOutputStream();
            transformerService.createSpreadsheetOnStream(this.finalList, this.finalList.size(),
                    new BufferedOutputStream(out), this.filter.getExportType().toUpperCase());
        } catch (final IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}