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<MyDomainObject> 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;