From 9ab519b5f6146036541e90749a23479f9a0a1a79 Mon Sep 17 00:00:00 2001 From: Javier Godoy <11554739+javier-godoy@users.noreply.github.com> Date: Thu, 26 Sep 2024 14:22:17 -0300 Subject: [PATCH] feat: add support for dynamic filename Close #113 --- pom.xml | 2 +- .../addons/gridexporter/GridExporter.java | 30 ++++++++++++++----- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 0a9ed6a..fd3e764 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.vaadin.addons.flowingcode grid-exporter-addon - 2.4.1-SNAPSHOT + 2.5.0-SNAPSHOT Grid Exporter Add-on Grid Exporter Add-on for Vaadin Flow diff --git a/src/main/java/com/flowingcode/vaadin/addons/gridexporter/GridExporter.java b/src/main/java/com/flowingcode/vaadin/addons/gridexporter/GridExporter.java index 7ec44f7..3620822 100644 --- a/src/main/java/com/flowingcode/vaadin/addons/gridexporter/GridExporter.java +++ b/src/main/java/com/flowingcode/vaadin/addons/gridexporter/GridExporter.java @@ -114,7 +114,7 @@ public class GridExporter implements Serializable { String title = "Grid Export"; - String fileName = "export"; + private SerializableSupplier fileNameSupplier = () -> "export"; int sheetNumber = 0; @@ -298,7 +298,7 @@ public GridExporterStreamResource getDocxStreamResource() { } public GridExporterStreamResource getDocxStreamResource(String template) { - return new GridExporterStreamResource(fileName + ".docx", + return new GridExporterStreamResource(getFileName("docx"), makeConcurrentWriter(new DocxStreamResourceWriter<>(this, template))); } @@ -307,12 +307,12 @@ public GridExporterStreamResource getPdfStreamResource() { } public GridExporterStreamResource getPdfStreamResource(String template) { - return new GridExporterStreamResource(fileName + ".pdf", + return new GridExporterStreamResource(getFileName("pdf"), makeConcurrentWriter(new PdfStreamResourceWriter<>(this, template))); } public StreamResource getCsvStreamResource() { - return new StreamResource(fileName + ".csv", new CsvStreamResourceWriter<>(this)); + return new StreamResource(getFileName("csv"), new CsvStreamResourceWriter<>(this)); } public GridExporterStreamResource getExcelStreamResource() { @@ -320,7 +320,7 @@ public GridExporterStreamResource getExcelStreamResource() { } public GridExporterStreamResource getExcelStreamResource(String template) { - return new GridExporterStreamResource(fileName + ".xlsx", + return new GridExporterStreamResource(getFileName("xlsx"), makeConcurrentWriter(new ExcelStreamResourceWriter<>(this, template))); } @@ -490,7 +490,11 @@ public void setTitle(String title) { } public String getFileName() { - return fileName; + return fileNameSupplier.get(); + } + + private String getFileName(String extension) { + return Objects.requireNonNull(getFileName()) + "." + extension; } /** @@ -499,7 +503,19 @@ public String getFileName() { * @param fileName */ public void setFileName(String fileName) { - this.fileName = fileName; + Objects.requireNonNull(fileName, "File name cannot be null"); + fileNameSupplier = () -> fileName; + } + + /** + * Sets a dynamic filename for the exported file. + * + * @param fileNameSupplier a supplier that returns the name of the exported file, without + * extension. + */ + public void setFileName(SerializableSupplier fileNameSupplier) { + this.fileNameSupplier = + Objects.requireNonNull(fileNameSupplier, "File name supplier cannot be null"); } public boolean isAutoAttachExportButtons() {