import com.ciclocairu.relatorios.Config;
import com.ciclocairu.relatorios.ReportConfigurations;
import com.ciclocairu.relatorios.services.ReportService;
@Configuration
public class ReportConfig {
public static final String separator = System.getProperty("file.separator");
@Bean
public ReportConfigurations initialConfigurations() {
return Config.create();
}
@Bean
public ReportService createReportService() {
return new ReportService();
}
}
A classe deve implementar a interface ReportProperties
@Component
public class AdiantamentoRelatoriosProperties implements ReportProperties {
private String fileReportName;
private List<ReportParameters> parameters = new ArrayList<ReportParameters>();
private Connection connection;
@Override
public String getFolderReportsName() {
return "adiantamento";
}
@Override
public String getFileReportName() {
return fileReportName;
}
public void setFileReportName(String fileReportName) {
this.fileReportName = fileReportName;
}
@Override
public List<ReportParameters> getReportParams() {
return parameters;
}
public void setParameters(List<ReportParameters> parameters) {
this.parameters = parameters;
}
@Override
public Connection getReportConnection() {
return connection;
}
public void setConnection(Connection connection) {
this.connection = connection;
}
}
@Autowired
private AdiantamentoRelatoriosProperties adiantamentoRelatoriosProperties;
@Autowired
private ReportService reportService;
@Autowired
private JdbcTemplate jdbcTemplate;
public String gerarRelatorioRequisicao(List<ReportParameters> parametros, HttpServletResponse response) {
try {
adiantamentoRelatoriosProperties.setFileReportName("requisicao");
adiantamentoRelatoriosProperties.setConnection(jdbcTemplate.getDataSource().getConnection());
adiantamentoRelatoriosProperties.setParameters(parametros);
String filePath = reportService.generateReport(adiantamentoRelatoriosProperties, response);
return filePath;
} catch (GenerateReportException | SQLException | IOException e) {
LOG.error(e.getMessage());
throw new RuntimeException(e.getMessage());
}
}
Por padrão, o caminho usado pra salvar relatório é em System.getProperty("user.home") + separator + "reports"
;
Voce pode alterar isso criando uma classe que implement ReportConfigurations
[...]
public class ReportConfigurationsImpl implements ReportConfigurations {
private String basePath;
private String generatedReportsBasePath;
private String imagesPath;
public void setBasePath(String basePath) {
this.basePath = basePath;
}
public void setGeneratedReportsBasePath(String generatedReportsBasePath) {
this.generatedReportsBasePath = generatedReportsBasePath;
}
@Override
public String getBasePath() {
return this.basePath;
}
@Override
public String getGeneratedReportsBasePath() {
return generatedReportsBasePath;
}
public void setImagesPath(String imagesPath) {
this.imagesPath = imagesPath;
}
@Override
public String getImagesPath() {
return imagesPath;
}
}
@Bean
public ReportConfigurations initialConfigurations() {
ReportConfigurationsImpl config = new ReportConfigurationsImpl();
//configurando diretórios
config.setBasePath(path);
config.setGeneratedReportsBasePath(generatedBasePath);
config.setImagesPath(config.getBasePath() + separator + "images");
return config;
}
public class ReportParameters {
public String name; //nome do parametro
public Object value; //valor
public String type; //tipo do parametro
public String reportType; //tipo dele no relatório. normalmente sempre serão iguais ao type
//getters setters
}
Basta Instanciar e passar ele para o servido que gera o relattório (vide exemplos acima)
adiantamentoRelatoriosProperties.setParameters(parametros);