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() {