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
commit fcd242ec92ee913d13879b400fd319c679a19910 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 | 23 ++++++++++++++++++++-- .../core/metamodel/tabular/simple/DataTable.java | 20 +++++++++++++++++++ .../CollectionContentsAsExcelExporter.java | 2 +- .../export/CollectionContentsAsExportFactory.java | 2 +- .../ComponentFactoryRegistrarDefault.java | 2 +- 5 files changed, 44 insertions(+), 5 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..5dfe49da85 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,13 +16,17 @@ * 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 +45,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; diff --git a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java index f7679406a5..ade636d5ae 100644 --- a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java +++ b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java @@ -39,7 +39,7 @@ import org.apache.causeway.applib.value.semantics.ValueSemanticsResolver; import org.apache.causeway.commons.collections.Can; import org.apache.causeway.commons.internal.base._NullSafe; import org.apache.causeway.commons.internal.functions._Predicates; -import org.apache.causeway.viewer.commons.applib.services.tabular.CollectionContentsExporter; +import org.apache.causeway.core.metamodel.tabular.simple.CollectionContentsExporter; import org.apache.causeway.viewer.wicket.model.models.ScalarModel; import org.apache.causeway.viewer.wicket.ui.ComponentFactory; import org.apache.causeway.viewer.wicket.ui.app.registry.ComponentFactoryRegistrar;
