All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ec.gob.senescyt.sniese.commons.services.ServicioReportesPdf Maven / Gradle / Ivy

There is a newer version: 2.0.5
Show newest version
package ec.gob.senescyt.sniese.commons.services;

import ec.gob.senescyt.sniese.commons.core.Reporte;
import ec.gob.senescyt.sniese.commons.exceptions.ReporteException;
import fr.opensagres.xdocreport.converter.ConverterTypeTo;
import fr.opensagres.xdocreport.converter.Options;
import fr.opensagres.xdocreport.core.XDocReportException;
import fr.opensagres.xdocreport.document.IXDocReport;
import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
import fr.opensagres.xdocreport.template.TemplateEngineKind;

import javax.validation.Validation;
import javax.validation.Validator;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class ServicioReportesPdf implements ServicioReportes {
    private static final String MENSAJE_ERROR_CONVERTIR_PDF = "Error al convertir reporte a PDF";
    private static final String MENSAJE_ERROR_ELIMINAR_ARCHIVO_TEMPORAL = "Error al eliminar archivo temporal";
    private final XDocReportRegistry registry;
    private String plantilla;
    private Validator validator;
    private IXDocReport report;

    public ServicioReportesPdf(XDocReportRegistry registry, String plantilla) throws IOException, XDocReportException {
        this.registry = registry;
        this.plantilla = plantilla;
        this.validator = Validation.buildDefaultValidatorFactory().getValidator();
        this.report = registry.loadReport(adquirirPlantilla(plantilla), TemplateEngineKind.Velocity);
    }


    @Override
    public InputStream generarReporte(Reporte reporte) {
        validar(reporte);
        InputStream inputStream;
        FileOutputStream outputStream;
        File file = new File(reporte.getNombre());
        try {
            outputStream = new FileOutputStream(file);
            report.convert(reporte.getDatos(), Options.getTo(ConverterTypeTo.PDF), outputStream);
            inputStream = new FileInputStream(file);
            eliminarArchivoTemporal(file);
            outputStream.close();
        } catch (XDocReportException | IOException e) {
            eliminarArchivoTemporal(file);
            throw new ReporteException(MENSAJE_ERROR_CONVERTIR_PDF, e);
        }
        return inputStream;
    }


    public XDocReportRegistry getRegistry() {
        return registry;
    }

    public String getPlantilla() {
        return plantilla;
    }

    private void validar(Reporte reporte) {
        validator.validate(reporte).stream().forEach(v -> {
            throw new ReporteException(v.getMessage());
        });
    }

    private InputStream adquirirPlantilla(String plantilla) throws FileNotFoundException {
        return getClass().getResourceAsStream(plantilla);
    }

    private void eliminarArchivoTemporal(File file) {
        if(file.exists() && !file.delete()){
            throw new ReporteException(MENSAJE_ERROR_ELIMINAR_ARCHIVO_TEMPORAL);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy