This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch maintenance-branch
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/maintenance-branch by this
push:
new 2da0d02fb89 CAUSEWAY-3983: [v2] removes tab content when always hidden
(backport)
2da0d02fb89 is described below
commit 2da0d02fb89da204a992aab3ed3016e90fd9f9ca
Author: andi-huber <[email protected]>
AuthorDate: Thu Mar 26 15:24:17 2026 +0100
CAUSEWAY-3983: [v2] removes tab content when always hidden (backport)
---
.../apache/causeway/applib/annotation/Where.java | 5 +++-
.../layout/grid/bootstrap/BSGridTransformer.java | 27 ++++++++++++++++++----
2 files changed, 26 insertions(+), 6 deletions(-)
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/annotation/Where.java
b/api/applib/src/main/java/org/apache/causeway/applib/annotation/Where.java
index f0befd99b3e..2be0584a047 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/annotation/Where.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/annotation/Where.java
@@ -213,6 +213,10 @@ public boolean inStandaloneTable() {
|| this == ALL_TABLES;
}
+ public boolean isObjectForms() {
+ return this == OBJECT_FORMS;
+ }
+
/**
* Whether this <tt>Where</tt> is a superset of the context <tt>Where</tt>
provided.
*
@@ -225,5 +229,4 @@ public boolean includes(final Where context) {
&& context.isAlways());
}
-
}
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSGridTransformer.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSGridTransformer.java
index d75d38a304a..66bf92e7a72 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSGridTransformer.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSGridTransformer.java
@@ -25,6 +25,7 @@
import org.apache.causeway.applib.layout.component.ActionLayoutData;
import org.apache.causeway.applib.layout.component.CollectionLayoutData;
import org.apache.causeway.applib.layout.component.DomainObjectLayoutData;
+import org.apache.causeway.applib.layout.component.HasHidden;
import org.apache.causeway.applib.layout.component.PropertyLayoutData;
import
org.apache.causeway.applib.layout.grid.bootstrap.BSElement.BSElementVisitor;
import org.apache.causeway.commons.internal.base._NullSafe;
@@ -48,19 +49,30 @@ public BSGrid apply(final BSGrid bsGrid) {
// first phase: collect all empty tabs for removal
bsGrid.visit(new BSElementVisitor() {
- final Stack<Flag> stack = new Stack<Flag>();
+ final Stack<Flag> stack = new Stack<>();
@Override public void visit(final ActionLayoutData
actionLayoutData) {
- if(_NullSafe.isEmpty(actionLayoutData.getMetadataError()))
keep();
+ if(_NullSafe.isEmpty(actionLayoutData.getMetadataError())
+ && !isAlwaysHidden(actionLayoutData)) {
+ keep();
+ }
}
@Override public void visit(final DomainObjectLayoutData
domainObjectLayoutData) {
-
if(_NullSafe.isEmpty(domainObjectLayoutData.getMetadataError())) keep();
+
if(_NullSafe.isEmpty(domainObjectLayoutData.getMetadataError())) {
+ keep();
+ }
}
@Override public void visit(final PropertyLayoutData
propertyLayoutData) {
-
if(_NullSafe.isEmpty(propertyLayoutData.getMetadataError())) keep();
+ if(_NullSafe.isEmpty(propertyLayoutData.getMetadataError())
+ && !isAlwaysHidden(propertyLayoutData)) {
+ keep();
+ }
}
@Override public void visit(final CollectionLayoutData
collectionLayoutData) {
-
if(_NullSafe.isEmpty(collectionLayoutData.getMetadataError())) keep();
+
if(_NullSafe.isEmpty(collectionLayoutData.getMetadataError())
+ && !isAlwaysHidden(collectionLayoutData)) {
+ keep();
+ }
}
@Override public void enter(final BSTab bsTab) {
@@ -73,6 +85,11 @@ public BSGrid apply(final BSGrid bsGrid) {
emptyTabs.add(bsTab);
}
}
+ private boolean isAlwaysHidden(final HasHidden hasHidden) {
+ if(hasHidden==null || hasHidden.getHidden()==null) return
false;
+ return hasHidden.getHidden().isAlways()
+ || hasHidden.getHidden().isObjectForms();
+ }
private void keep() {
stack.stream().forEach(row->row.keep=true);
}