Package eu.scape_project.planning.efficiency

Source Code of eu.scape_project.planning.efficiency.StatisticsGenerator

package eu.scape_project.planning.efficiency;

import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.io.CsvBeanWriter;
import org.supercsv.io.ICsvBeanWriter;
import org.supercsv.prefs.CsvPreference;

import eu.scape_project.planning.model.Plan;

public abstract class StatisticsGenerator {
    private static final Logger LOGGER = LoggerFactory.getLogger(StatisticsGenerator.class);

    protected EntityManager em;
    protected ICsvBeanWriter listWriter;

    private final List<String> headerList = new ArrayList<String>(65);
    private final List<CellProcessor> processorList = new ArrayList<CellProcessor>(65);

    protected String[] headers = new String[] {};
    protected CellProcessor[] processors = new CellProcessor[] {};

    public StatisticsGenerator(Writer writer, EntityManager em) throws IOException {
        this.em = em;

        listWriter = new CsvBeanWriter(writer, CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE);
    }

    public abstract void writeStatistics(Plan plan) throws IOException;

    protected abstract void setupColumns();

    /**
     * Finalizes the report
     *
     * @throws IOException
     */
    public void endReport() throws IOException {
        listWriter.close();
    }

    /**
     * Iterates over all plans in the database and writes their statistics one
     * by one.
     *
     * @throws IOException
     */
    public void writeCompleteStatistics() throws IOException {
        try {
            Query qry = em.createQuery("select p from Plan p", Plan.class);
            int step = 5;
            int first = 0;
            qry.setMaxResults(step);
            List<Plan> plans = null;
            do {
                qry.setFirstResult(first);
                plans = qry.getResultList();
                for (Iterator<Plan> iter = plans.iterator(); iter.hasNext();) {
                    Plan p = iter.next();
                    if (p != null) {
                        try {
                            writeStatistics(p);
                        } catch (Exception e) {
                            LOGGER.error("failed to generate statistic for: " + p.getId(), e);
                        }
                    }
                }
                first += step;
            } while ((plans != null) && (!plans.isEmpty()));

            endReport();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    protected void addColumn(String field, CellProcessor processor) {
        headerList.add(field);
        processorList.add(processor);
    }

    protected void finishColumns() {
        headers = headerList.toArray(headers);
        processors = processorList.toArray(processors);
    }

}
TOP

Related Classes of eu.scape_project.planning.efficiency.StatisticsGenerator

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.