You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2023/09/28 15:54:39 UTC
[causeway] branch CAUSEWAY-3597 created (now a6953532c3)
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a change to branch CAUSEWAY-3597
in repository https://gitbox.apache.org/repos/asf/causeway.git
at a6953532c3 CAUSEWAY-3597: adds additional mixin to download all columnOrder txt files for a domain class as a single zip
This branch includes the following new commits:
new a6953532c3 CAUSEWAY-3597: adds additional mixin to download all columnOrder txt files for a domain class as a single zip
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[causeway] 01/01: CAUSEWAY-3597: adds additional mixin to download all columnOrder txt files for a domain class as a single zip
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3597
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit a6953532c3694b782b7e4b3c245810e3309eedb1
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Sep 28 16:54:34 2023 +0100
CAUSEWAY-3597: adds additional mixin to download all columnOrder txt files for a domain class as a single zip
---
.../inspect/Object_downloadColumnOrderTxtFile.java | 10 +--
...> Object_downloadColumnOrderTxtFilesAsZip.java} | 84 +++++++++++-----------
.../jdo/metamodel/menu/JdoMetamodelMenu.java | 5 ++
...ayout.xml => FixtureResult.layout.fallback.xml} | 5 +-
4 files changed, 56 insertions(+), 48 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/Object_downloadColumnOrderTxtFile.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/Object_downloadColumnOrderTxtFile.java
index b3cbb303a4..d3be456772 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/Object_downloadColumnOrderTxtFile.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/Object_downloadColumnOrderTxtFile.java
@@ -85,7 +85,7 @@ public class Object_downloadColumnOrderTxtFile {
String fileName = String.format("%s.columnOrder.txt", parentSpec.getShortIdentifier());
String fileContents = buf.toString();
- return newClon(fileName, fileContents);
+ return newClob(fileName, fileContents);
}
private Clob parentedCollectionTxtFile(String collectionId) {
@@ -107,7 +107,7 @@ public class Object_downloadColumnOrderTxtFile {
String fileName = String.format("%s#%s.columnOrder.txt", parentSpec.getShortIdentifier(), collectionId);
String fileContents = buf.toString();
- return newClon(fileName, fileContents);
+ return newClob(fileName, fileContents);
}
@MemberSupport public List<String> choices0Act() {
@@ -117,11 +117,7 @@ public class Object_downloadColumnOrderTxtFile {
.collect(Collectors.toList());
}
- @MemberSupport public String disableAct() {
- return choices0Act().isEmpty() ? "No collections" : null;
- }
-
- private static Clob newClon(String fileName, String fileContents) {
+ private static Clob newClob(String fileName, String fileContents) {
return Clob.of(fileName, NamedWithMimeType.CommonMimeType.TXT, fileContents);
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/Object_downloadColumnOrderTxtFile.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/Object_downloadColumnOrderTxtFilesAsZip.java
similarity index 62%
copy from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/Object_downloadColumnOrderTxtFile.java
copy to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/Object_downloadColumnOrderTxtFilesAsZip.java
index b3cbb303a4..fcbc39b520 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/Object_downloadColumnOrderTxtFile.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/Object_downloadColumnOrderTxtFilesAsZip.java
@@ -18,13 +18,15 @@
*/
package org.apache.causeway.core.metamodel.inspect;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
import javax.inject.Inject;
-import org.springframework.lang.Nullable;
+import org.apache.causeway.applib.value.Blob;
+
+import org.apache.causeway.commons.io.ZipUtils;
+
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
+
+import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.causeway.applib.annotation.Action;
import org.apache.causeway.applib.annotation.ActionLayout;
@@ -45,37 +47,49 @@ import lombok.val;
@Action(
commandPublishing = Publishing.DISABLED,
- domainEvent = Object_downloadColumnOrderTxtFile.ActionDomainEvent.class,
+ domainEvent = Object_downloadColumnOrderTxtFilesAsZip.ActionDomainEvent.class,
executionPublishing = Publishing.DISABLED,
restrictTo = RestrictTo.PROTOTYPING,
semantics = SemanticsOf.IDEMPOTENT // to avoid caching
)
@ActionLayout(
- describedAs = "Downloads a .columnOrder.txt file for either this object or one of its collections",
+ cssClassFa = "fa-download",
+ named = "Download .columnOrder.txt files (ZIP)",
+ describedAs = "Downloads all the .columnOrder.txt files for this object and its collections, as a zip file",
fieldSetId = LayoutConstants.FieldSetId.METADATA,
position = ActionLayout.Position.PANEL_DROPDOWN,
- sequence = "700.2.2"
+ sequence = "700.2.3"
)
@RequiredArgsConstructor
-public class Object_downloadColumnOrderTxtFile {
+public class Object_downloadColumnOrderTxtFilesAsZip {
private final Object domainObject; // mixee
public static class ActionDomainEvent
- extends org.apache.causeway.applib.CausewayModuleApplib.ActionDomainEvent<Object_downloadColumnOrderTxtFile> {}
+ extends org.apache.causeway.applib.CausewayModuleApplib.ActionDomainEvent<Object_downloadColumnOrderTxtFilesAsZip> {}
@Inject SpecificationLoader specificationLoader;
- @MemberSupport public Clob act(
- @Nullable String collectionId
- ) {
+ @MemberSupport public Blob act(final String fileName) {
+
+ val zipBuilder = ZipUtils.zipEntryBuilder();
- return collectionId == null
- ? standaloneCollectionTxtFile()
- : parentedCollectionTxtFile(collectionId);
+ addStandaloneEntry(zipBuilder);
+ addCollectionEntries(zipBuilder);
+
+ final byte[] zipBytes = zipBuilder.toBytes();
+ return Blob.of(fileName, NamedWithMimeType.CommonMimeType.ZIP, zipBytes);
+ }
+
+ public String default0Act() {
+ val parentSpec = specificationLoader.loadSpecification(domainObject.getClass());
+ return String.format("%s.columnOrder.zip", parentSpec.getShortIdentifier());
}
- private Clob standaloneCollectionTxtFile() {
+
+ // HELPERS
+
+ private void addStandaloneEntry(ZipUtils.EntryBuilder zipBuilder) {
val parentSpec = specificationLoader.loadSpecification(domainObject.getClass());
val buf = new StringBuilder();
@@ -83,19 +97,21 @@ public class Object_downloadColumnOrderTxtFile {
.map(ObjectFeature::getId)
.forEach(assocId -> buf.append(assocId).append("\n"));
- String fileName = String.format("%s.columnOrder.txt", parentSpec.getShortIdentifier());
- String fileContents = buf.toString();
- return newClon(fileName, fileContents);
+ val fileName = String.format("%s.columnOrder.txt", parentSpec.getShortIdentifier());
+ val fileContents = buf.toString();
+
+ zipBuilder.addAsUtf8(fileName, fileContents);
}
- private Clob parentedCollectionTxtFile(String collectionId) {
+ private void addCollectionEntries(ZipUtils.EntryBuilder zipBuilder) {
val parentSpec = specificationLoader.loadSpecification(domainObject.getClass());
+ parentSpec.streamCollections(MixedIn.INCLUDED)
+ .forEach(collection -> addCollection(collection, parentSpec, zipBuilder));
+ }
+
+ private void addCollection(OneToManyAssociation collection, ObjectSpecification parentSpec, ZipUtils.EntryBuilder zipBuilder) {
val buf = new StringBuilder();
- val collection = parentSpec.streamCollections(MixedIn.INCLUDED)
- .filter(x -> Objects.equals(x.getId(), collectionId))
- .findFirst()
- .orElseThrow(); // shouldn't happen because of disableAct guard.
val collectionIdentifier = collection.getFeatureIdentifier();
val elementType = collection.getElementType();
@@ -105,24 +121,12 @@ public class Object_downloadColumnOrderTxtFile {
.map(ObjectFeature::getId)
.forEach(assocId -> buf.append(assocId).append("\n"));
- String fileName = String.format("%s#%s.columnOrder.txt", parentSpec.getShortIdentifier(), collectionId);
- String fileContents = buf.toString();
- return newClon(fileName, fileContents);
- }
+ val fileName = String.format("%s#%s.columnOrder.txt", parentSpec.getShortIdentifier(), collection.getId());
+ val fileContents = buf.toString();
- @MemberSupport public List<String> choices0Act() {
- val objectSpec = specificationLoader.loadSpecification(domainObject.getClass());
- return objectSpec.streamCollections(MixedIn.INCLUDED)
- .map(ObjectFeature::getId)
- .collect(Collectors.toList());
+ zipBuilder.addAsUtf8(fileName, fileContents);
}
- @MemberSupport public String disableAct() {
- return choices0Act().isEmpty() ? "No collections" : null;
- }
- private static Clob newClon(String fileName, String fileContents) {
- return Clob.of(fileName, NamedWithMimeType.CommonMimeType.TXT, fileContents);
- }
}
diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/menu/JdoMetamodelMenu.java b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/menu/JdoMetamodelMenu.java
index af4ac394ad..38554cc8f0 100644
--- a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/menu/JdoMetamodelMenu.java
+++ b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/menu/JdoMetamodelMenu.java
@@ -36,6 +36,9 @@ import org.apache.causeway.applib.annotation.SemanticsOf;
import org.apache.causeway.applib.value.Blob;
import org.apache.causeway.applib.value.NamedWithMimeType.CommonMimeType;
import org.apache.causeway.commons.io.ZipUtils;
+import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectFeature;
import org.apache.causeway.persistence.jdo.applib.services.JdoSupportService;
import org.apache.causeway.persistence.jdo.metamodel.CausewayModulePersistenceJdoMetamodel;
import org.apache.causeway.persistence.jdo.provider.entities.JdoFacetContext;
@@ -43,6 +46,8 @@ import org.apache.causeway.persistence.jdo.provider.entities.JdoFacetContext;
import lombok.RequiredArgsConstructor;
import lombok.val;
+import java.util.Objects;
+
@Named(CausewayModulePersistenceJdoMetamodel.NAMESPACE + ".JdoMetamodelMenu")
@DomainService()
@DomainServiceLayout(
diff --git a/testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/FixtureResult.layout.xml b/testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/FixtureResult.layout.fallback.xml
similarity index 80%
rename from testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/FixtureResult.layout.xml
rename to testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/FixtureResult.layout.fallback.xml
index 4cafa1772e..ab86f8fef0 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/FixtureResult.layout.xml
+++ b/testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/FixtureResult.layout.fallback.xml
@@ -17,7 +17,10 @@
specific language governing permissions and limitations
under the License.
-->
-<bs:grid xsi:schemaLocation="https://causeway.apache.org/applib/layout/component https://causeway.apache.org/applib/layout/component/component.xsd https://causeway.apache.org/applib/layout/grid/bootstrap3 https://causeway.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd" xmlns:bs="https://causeway.apache.org/applib/layout/grid/bootstrap3" xmlns:cpt="https://causeway.apache.org/applib/layout/component" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<bs:grid
+ xsi:schemaLocation="https://causeway.apache.org/applib/layout/component https://causeway.apache.org/applib/layout/component/component.xsd https://causeway.apache.org/applib/layout/grid/bootstrap3 https://causeway.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+ xmlns:bs="https://causeway.apache.org/applib/layout/grid/bootstrap3"
+ xmlns:cpt="https://causeway.apache.org/applib/layout/component" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<bs:row>
<bs:col span="12" unreferencedActions="true">
<cpt:domainObject/>