This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/master by this push:
     new b372f0db50 CAUSEWAY-3404: quality of life: DataTable exporting utility
b372f0db50 is described below

commit b372f0db50601562682d506cf9cc9df09f42c016
Author: Andi Huber <[email protected]>
AuthorDate: Mon Mar 4 07:24:34 2024 +0100

    CAUSEWAY-3404: quality of life: DataTable exporting utility
---
 .../simple}/CollectionContentsExporter.java        | 22 +++++++++++++++++++++-
 .../core/metamodel/tabular/simple/DataTable.java   | 20 ++++++++++++++++++++
 .../CollectionContentsAsExcelExporter.java         |  2 +-
 .../export/CollectionContentsAsExportFactory.java  |  2 +-
 4 files changed, 43 insertions(+), 3 deletions(-)

diff --git 
a/viewers/commons/applib/src/main/java/org/apache/causeway/viewer/commons/applib/services/tabular/CollectionContentsExporter.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/simple/CollectionContentsExporter.java
similarity index 77%
rename from 
viewers/commons/applib/src/main/java/org/apache/causeway/viewer/commons/applib/services/tabular/CollectionContentsExporter.java
rename to 
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/simple/CollectionContentsExporter.java
index 7eb5d23c2d..642a8712af 100644
--- 
a/viewers/commons/applib/src/main/java/org/apache/causeway/viewer/commons/applib/services/tabular/CollectionContentsExporter.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/simple/CollectionContentsExporter.java
@@ -16,14 +16,19 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.commons.applib.services.tabular;
+package org.apache.causeway.core.metamodel.tabular.simple;
 
 import java.io.File;
+import java.nio.file.Files;
 
+import org.apache.causeway.applib.value.Blob;
 import org.apache.causeway.applib.value.NamedWithMimeType.CommonMimeType;
+import org.apache.causeway.commons.io.DataSource;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.tabular.simple.DataTable;
 
+import lombok.SneakyThrows;
+
 /**
  * SPI to provide file export to table views.
  *
@@ -41,6 +46,21 @@ public interface CollectionContentsExporter {
      */
     void createExport(DataTable dataTable, File tempFile);
 
+    /**
+     * Writes given tabular data into a {@link Blob} of given name.
+     *
+     */
+    @SneakyThrows
+    default Blob exportToBlob(final DataTable dataTable, final String name) {
+        var tempFile = File.createTempFile(this.getClass().getCanonicalName(), 
name);
+        try {
+            createExport(dataTable, tempFile);
+            return Blob.of(name, getMimeType(), 
DataSource.ofFile(tempFile).bytes());
+        } finally {
+            Files.deleteIfExists(tempFile.toPath()); // cleanup
+        }
+    }
+
     CommonMimeType getMimeType();
 
     /**
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/simple/DataTable.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/simple/DataTable.java
index 8cf1dd177d..f2de63f5fe 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/simple/DataTable.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/simple/DataTable.java
@@ -28,6 +28,7 @@ import org.springframework.lang.Nullable;
 
 import org.apache.causeway.applib.query.Query;
 import org.apache.causeway.applib.services.bookmark.Bookmark;
+import org.apache.causeway.applib.value.Blob;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.commons.internal.assertions._Assert;
 import org.apache.causeway.commons.internal.base._NullSafe;
@@ -226,6 +227,25 @@ public class DataTable implements Serializable {
         return this;
     }
 
+    // -- EXPORT
+
+    /**
+     *
+     * Typical use-case:<br>
+     * <pre>{@code
+     * @Inject CollectionContentsAsExcelExporter excelExporter;
+     *
+     * Blob exportToExcel(List&lt;MyDomainObject&gt; myDomainObjects) {
+     *     var dataTable = DataTable.forDomainType(MyDomainObject.class);
+     *     dataTable.setDataElementPojos(myDomainObjects);
+     *     return dataTable.exportToBlob(excelExporter);
+     * }
+     * }</pre>
+     */
+    public Blob exportToBlob(final CollectionContentsExporter exporter) {
+        return exporter.exportToBlob(this, tableFriendlyName);
+    }
+
     // -- SERIALIZATION PROXY
 
     private Object writeReplace() {
diff --git 
a/extensions/vw/tabular/excel/src/main/java/org/apache/causeway/extensions/tabular/excel/exporter/CollectionContentsAsExcelExporter.java
 
b/extensions/vw/tabular/excel/src/main/java/org/apache/causeway/extensions/tabular/excel/exporter/CollectionContentsAsExcelExporter.java
index fc5144bb7d..0512083414 100644
--- 
a/extensions/vw/tabular/excel/src/main/java/org/apache/causeway/extensions/tabular/excel/exporter/CollectionContentsAsExcelExporter.java
+++ 
b/extensions/vw/tabular/excel/src/main/java/org/apache/causeway/extensions/tabular/excel/exporter/CollectionContentsAsExcelExporter.java
@@ -23,8 +23,8 @@ import java.io.File;
 import org.springframework.stereotype.Component;
 
 import org.apache.causeway.applib.value.NamedWithMimeType.CommonMimeType;
+import 
org.apache.causeway.core.metamodel.tabular.simple.CollectionContentsExporter;
 import org.apache.causeway.core.metamodel.tabular.simple.DataTable;
-import 
org.apache.causeway.viewer.commons.applib.services.tabular.CollectionContentsExporter;
 
 @Component
 public class CollectionContentsAsExcelExporter
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/export/CollectionContentsAsExportFactory.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/export/CollectionContentsAsExportFactory.java
index 4cb8cf1a8a..a952080506 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/export/CollectionContentsAsExportFactory.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/export/CollectionContentsAsExportFactory.java
@@ -27,7 +27,7 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.util.file.Files;
 
 import org.apache.causeway.commons.functional.Try;
-import 
org.apache.causeway.viewer.commons.applib.services.tabular.CollectionContentsExporter;
+import 
org.apache.causeway.core.metamodel.tabular.simple.CollectionContentsExporter;
 import org.apache.causeway.viewer.commons.model.components.UiComponentType;
 import org.apache.causeway.viewer.wicket.model.models.EntityCollectionModel;
 import org.apache.causeway.viewer.wicket.ui.CollectionContentsAsFactory;

Reply via email to