Package com.ponysdk.core.export.csv

Source Code of com.ponysdk.core.export.csv.CSVExporter

package com.ponysdk.core.export.csv;

import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.ponysdk.core.StreamResource;
import com.ponysdk.core.event.StreamHandler;
import com.ponysdk.core.export.ExportableField;
import com.ponysdk.core.export.Exporter;
import com.ponysdk.core.export.util.PropertyUtil;
import com.ponysdk.core.export.xml.XMLExporter;
import com.ponysdk.core.internalization.PString;

public class CSVExporter<T> implements Exporter<T> {

    private static final Logger log = LoggerFactory.getLogger(XMLExporter.class);

    private static final String NAME = "CSV";

    private static final char DELIMITER = ';';

    private final String fileName;

    public CSVExporter(final String fileName) {
        this.fileName = fileName;
    }

    @Override
    public String name() {
        return NAME;
    }

    @Override
    public String export(final List<ExportableField> exportableFields, final List<T> records) throws Exception {
        final StreamResource streamResource = new StreamResource();
        streamResource.open(new StreamHandler() {

            @Override
            public void onStream(final HttpServletRequest req, final HttpServletResponse response) {
                try {
                    response.reset();
                    response.setContentType("text/csv");
                    response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".csv");
                    final PrintWriter printer = response.getWriter();
                    try {
                        final Iterator<ExportableField> iter = exportableFields.iterator();

                        while (iter.hasNext()) {
                            final ExportableField exportableField = iter.next();
                            final String header = exportableField.getCaption();
                            printer.print(header);
                            if (iter.hasNext()) printer.print(DELIMITER);
                        }

                        printer.println();
                        for (final T row : records) {
                            for (final ExportableField exportableField : exportableFields) {
                                printer.print(getDisplayValue(row, exportableField));
                                printer.print(DELIMITER);
                            }
                            printer.println();
                            printer.flush();
                        }
                    } catch (final Exception e) {
                        log.error("Error when exporting", e);
                    } finally {
                        printer.flush();
                        printer.close();
                    }
                } catch (final Exception e) {
                    log.error("Error when exporting", e);
                }
            }
        });

        return PString.get("export.result", records.size(), fileName);
    }

    protected String getDisplayValue(final T row, final ExportableField exportableField) throws Exception {
        return PropertyUtil.getProperty(row, exportableField.getKey());
    }
}
TOP

Related Classes of com.ponysdk.core.export.csv.CSVExporter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.