This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/main by this push:
new 4acf470186a CAUSEWAY-3913: fluent ownership accessors [Layout]
4acf470186a is described below
commit 4acf470186aff83b2880789263ac23e18805bc34
Author: a.huber <[email protected]>
AuthorDate: Sun Oct 26 08:22:26 2025 +0100
CAUSEWAY-3913: fluent ownership accessors [Layout]
- to indicate that its not part of the dto spec
---
.../applib/layout/component/ActionLayoutData.java | 3 ++-
.../applib/layout/component/ActionLayoutDataOwner.java | 5 ++++-
.../applib/layout/component/CollectionLayoutData.java | 5 +++--
.../layout/component/CollectionLayoutDataOwner.java | 5 ++++-
.../layout/component/DomainObjectLayoutData.java | 5 +++--
.../layout/component/DomainObjectLayoutDataOwner.java | 5 ++++-
.../causeway/applib/layout/component/FieldSet.java | 5 +++--
.../applib/layout/component/FieldSetOwner.java | 5 ++++-
.../applib/layout/component/MemberRegionOwner.java | 3 ++-
.../apache/causeway/applib/layout/component/Owned.java | 2 +-
.../apache/causeway/applib/layout/component/Owner.java | 10 +++++++++-
.../applib/layout/component/PropertyLayoutData.java | 5 +++--
.../layout/component/ServiceActionLayoutDataOwner.java | 5 ++++-
.../grid/bootstrap/BSElementOwnerResolvingWalker.java | 18 +++++++++---------
.../layout/grid/bootstrap/BSGridTransformer.java | 11 ++++++-----
.../causeway/applib/layout/grid/bootstrap/BSRow.java | 3 ++-
.../applib/layout/grid/bootstrap/BSRowContent.java | 3 ++-
.../layout/grid/bootstrap/BSRowContentOwner.java | 3 ++-
.../applib/layout/grid/bootstrap/BSRowOwner.java | 3 ++-
.../causeway/applib/layout/grid/bootstrap/BSTab.java | 3 ++-
.../applib/layout/grid/bootstrap/BSTabGroup.java | 3 ++-
.../causeway/applib/layout/grid/bootstrap/BSUtil.java | 16 ++++++++--------
.../layout/menubars/bootstrap/BSMenuSection.java | 2 +-
.../services/grid/GridSystemServiceAbstract.java | 16 +++++++---------
.../grid/bootstrap/GridSystemServiceBootstrap.java | 8 ++++----
25 files changed, 93 insertions(+), 59 deletions(-)
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/ActionLayoutData.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/ActionLayoutData.java
index 0becb426e12..eb47268c841 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/ActionLayoutData.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/ActionLayoutData.java
@@ -34,6 +34,7 @@
import lombok.Getter;
import lombok.Setter;
+import lombok.experimental.Accessors;
/**
* Describes the layout of a single action, broadly corresponding to
@@ -99,7 +100,7 @@ public ActionLayoutData(final String id) {
* <p>Set programmatically by framework after reading in from XML.
*/
@XmlTransient
- @Getter @Setter
+ @Getter @Setter @Accessors(fluent=true)
private ActionLayoutDataOwner owner;
/**
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/ActionLayoutDataOwner.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/ActionLayoutDataOwner.java
index a899f78996e..233048457e0 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/ActionLayoutDataOwner.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/ActionLayoutDataOwner.java
@@ -20,9 +20,12 @@
import java.util.List;
+import org.apache.causeway.applib.layout.grid.bootstrap.BSCol;
+
/**
* @since 1.x {@index}
*/
-public interface ActionLayoutDataOwner extends Owner {
+public sealed interface ActionLayoutDataOwner extends Owner
+permits BSCol, CollectionLayoutData, FieldSet, PropertyLayoutData {
List<ActionLayoutData> getActions();
}
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/CollectionLayoutData.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/CollectionLayoutData.java
index a32926c2928..3d1cab3af6a 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/CollectionLayoutData.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/CollectionLayoutData.java
@@ -36,6 +36,7 @@
import lombok.Getter;
import lombok.Setter;
+import lombok.experimental.Accessors;
/**
* Describes the layout of a single collection, broadly corresponds to the
@@ -49,7 +50,7 @@
"named", "describedAs", "cssClass", "defaultView", "hidden", "paged",
"sortedBy", "tableDecorator", "actions", "metadataError", "link"})
@XmlAccessorType(XmlAccessType.FIELD)
-public class CollectionLayoutData
+public final class CollectionLayoutData
implements MemberRegion<CollectionLayoutDataOwner>,
ActionLayoutDataOwner,
Serializable,
@@ -113,7 +114,7 @@ public CollectionLayoutData(final String id) {
* <p>Set programmatically by framework after reading in from XML.
*/
@XmlTransient
- @Getter @Setter
+ @Getter @Setter @Accessors(fluent=true)
private CollectionLayoutDataOwner owner;
/**
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/CollectionLayoutDataOwner.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/CollectionLayoutDataOwner.java
index 933e17cf0e4..c427c52c656 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/CollectionLayoutDataOwner.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/CollectionLayoutDataOwner.java
@@ -20,9 +20,12 @@
import java.util.List;
+import org.apache.causeway.applib.layout.grid.bootstrap.BSCol;
+
/**
* @since 1.x {@index}
*/
-public interface CollectionLayoutDataOwner extends MemberRegionOwner {
+public sealed interface CollectionLayoutDataOwner extends MemberRegionOwner
+permits BSCol {
List<CollectionLayoutData> getCollections();
}
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/DomainObjectLayoutData.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/DomainObjectLayoutData.java
index 48bb9f53472..37afde789af 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/DomainObjectLayoutData.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/DomainObjectLayoutData.java
@@ -34,6 +34,7 @@
import lombok.Getter;
import lombok.Setter;
+import lombok.experimental.Accessors;
/**
* Describes the layout of the title and icon of a domain object, broadly
corresponding to {@link
org.apache.causeway.applib.annotation.DomainObjectLayout}.
@@ -45,7 +46,7 @@
"named", "describedAs", "cssClass", "cssClassFa", "cssClassFaPosition",
"paged", "tableDecorator", "metadataError", "link"})
@XmlAccessorType(XmlAccessType.FIELD)
-public class DomainObjectLayoutData implements Serializable,
Owned<DomainObjectLayoutDataOwner>,
+public final class DomainObjectLayoutData implements Serializable,
Owned<DomainObjectLayoutDataOwner>,
HasBookmarking, HasCssClass, HasCssClassFa, HasDescribedAs, HasNamed {
private static final long serialVersionUID = 1L;
@@ -95,7 +96,7 @@ public DomainObjectLayoutData() {}
* <p>Set programmatically by framework after reading in from XML.
*/
@XmlTransient
- @Getter @Setter
+ @Getter @Setter @Accessors(fluent=true)
private DomainObjectLayoutDataOwner owner;
/**
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/DomainObjectLayoutDataOwner.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/DomainObjectLayoutDataOwner.java
index c5eba7f56f4..a64a59df4d9 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/DomainObjectLayoutDataOwner.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/DomainObjectLayoutDataOwner.java
@@ -18,10 +18,13 @@
*/
package org.apache.causeway.applib.layout.component;
+import org.apache.causeway.applib.layout.grid.bootstrap.BSCol;
+
/**
* @since 1.x {@index}
*/
-public interface DomainObjectLayoutDataOwner extends Owner {
+public sealed interface DomainObjectLayoutDataOwner extends Owner
+permits BSCol {
DomainObjectLayoutData getDomainObject();
void setDomainObject(DomainObjectLayoutData domainObjectLayoutData);
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/FieldSet.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/FieldSet.java
index 4eae6fe39ea..c73280f8161 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/FieldSet.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/FieldSet.java
@@ -35,6 +35,7 @@
import lombok.Getter;
import lombok.Setter;
+import lombok.experimental.Accessors;
/**
* A {@link MemberRegion region} of the page containing a set of
@@ -48,7 +49,7 @@
name = "fieldSet",
propOrder = {"name", "actions", "properties", "metadataError"})
@XmlAccessorType(XmlAccessType.FIELD)
-public class FieldSet
+public final class FieldSet
implements MemberRegion<FieldSetOwner>, ActionLayoutDataOwner, Serializable {
private static final long serialVersionUID = 1L;
@@ -109,7 +110,7 @@ public FieldSet(final String name) {
* <p>Set programmatically by framework after reading in from XML.
*/
@XmlTransient
- @Getter @Setter
+ @Getter @Setter @Accessors(fluent=true)
private FieldSetOwner owner;
/**
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/FieldSetOwner.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/FieldSetOwner.java
index ea46b8848c2..14389eaa56a 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/FieldSetOwner.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/FieldSetOwner.java
@@ -20,9 +20,12 @@
import java.util.List;
+import org.apache.causeway.applib.layout.grid.bootstrap.BSCol;
+
/**
* @since 1.x {@index}
*/
-public interface FieldSetOwner extends MemberRegionOwner {
+public sealed interface FieldSetOwner extends MemberRegionOwner
+permits BSCol {
List<FieldSet> getFieldSets();
}
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/MemberRegionOwner.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/MemberRegionOwner.java
index f24ba23e0e1..0b58cfdb12d 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/MemberRegionOwner.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/MemberRegionOwner.java
@@ -21,6 +21,7 @@
/**
* @since 1.x {@index}
*/
-public interface MemberRegionOwner extends Owner {
+public sealed interface MemberRegionOwner extends Owner
+permits CollectionLayoutDataOwner, FieldSetOwner {
}
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/Owned.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/Owned.java
index f3ce4230ae0..27253f959cf 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/Owned.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/Owned.java
@@ -22,5 +22,5 @@
* @since 1.x {@index}
*/
public interface Owned<T extends Owner> {
- T getOwner();
+ T owner();
}
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/Owner.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/Owner.java
index 7e1bedcde97..c4d039d92cc 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/Owner.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/Owner.java
@@ -18,9 +18,17 @@
*/
package org.apache.causeway.applib.layout.component;
+import org.apache.causeway.applib.layout.grid.bootstrap.BSRowContentOwner;
+import org.apache.causeway.applib.layout.grid.bootstrap.BSRowOwner;
+import org.apache.causeway.applib.layout.grid.bootstrap.BSTabGroupOwner;
+import org.apache.causeway.applib.layout.grid.bootstrap.BSTabOwner;
+
/**
* @since 1.x {@index}
*/
-public interface Owner {
+public sealed interface Owner
+permits ActionLayoutDataOwner, BSRowContentOwner, BSRowOwner, BSTabGroupOwner,
+BSTabOwner, DomainObjectLayoutDataOwner, MemberRegionOwner,
+ServiceActionLayoutDataOwner {
}
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/PropertyLayoutData.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/PropertyLayoutData.java
index 42414597436..648302b9c3b 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/PropertyLayoutData.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/PropertyLayoutData.java
@@ -38,6 +38,7 @@
import lombok.Getter;
import lombok.Setter;
+import lombok.experimental.Accessors;
/**
* Describes the layout of a single property, broadly corresponds to the
{@link org.apache.causeway.applib.annotation.PropertyLayout} annotation.
@@ -49,7 +50,7 @@
name = "property",
propOrder = {"named", "describedAs", "actions", "metadataError", "link"})
@XmlAccessorType(XmlAccessType.FIELD)
-public class PropertyLayoutData
+public final class PropertyLayoutData
implements ActionLayoutDataOwner, Serializable, Owned<FieldSet>,
HasCssClass, HasDescribedAs, HasHidden, HasNamed {
private static final long serialVersionUID = 1L;
@@ -115,7 +116,7 @@ public PropertyLayoutData(final String id) {
* <p>Set programmatically by framework after reading in from XML.
*/
@XmlTransient
- @Getter @Setter
+ @Getter @Setter @Accessors(fluent=true)
private FieldSet owner;
/**
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/ServiceActionLayoutDataOwner.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/ServiceActionLayoutDataOwner.java
index bf2ea1b58a4..72b4a029908 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/component/ServiceActionLayoutDataOwner.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/component/ServiceActionLayoutDataOwner.java
@@ -20,9 +20,12 @@
import java.util.List;
+import org.apache.causeway.applib.layout.menubars.bootstrap.BSMenuSection;
+
/**
* @since 1.x {@index}
*/
-public interface ServiceActionLayoutDataOwner extends Owner {
+public sealed interface ServiceActionLayoutDataOwner extends Owner
+permits BSMenuSection {
List<ServiceActionLayoutData> getServiceActions();
}
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSElementOwnerResolvingWalker.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSElementOwnerResolvingWalker.java
index d3a8098ad90..a485b732053 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSElementOwnerResolvingWalker.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSElementOwnerResolvingWalker.java
@@ -36,14 +36,14 @@ public void walk() {
private void traverseRows(final BSRowOwner rowOwner) {
for (BSRow bsRow : rowOwner.getRows()) {
- bsRow.setOwner(rowOwner);
+ bsRow.owner(rowOwner);
traverseCols(bsRow);
}
}
private void traverseCols(final BSRow bsRow) {
for (BSRowContent rowContent : bsRow.getRowContents()) {
- rowContent.setOwner(bsRow);
+ rowContent.owner(bsRow);
if(rowContent instanceof BSCol bsCol) {
traverseDomainObject(bsCol);
traverseTabGroups(bsCol);
@@ -58,19 +58,19 @@ private void traverseCols(final BSRow bsRow) {
private void traverseDomainObject(final BSCol bsCol) {
var domainObject = bsCol.getDomainObject();
if(domainObject == null) return;
- domainObject.setOwner(bsCol);
+ domainObject.owner(bsCol);
}
private void traverseTabGroups(final BSTabGroupOwner bsTabGroupOwner) {
for (BSTabGroup bsTabGroup : bsTabGroupOwner.getTabGroups()) {
- bsTabGroup.setOwner(bsTabGroupOwner);
+ bsTabGroup.owner(bsTabGroupOwner);
traverseTabs(bsTabGroup);
}
}
private void traverseTabs(final BSTabOwner bsTabOwner) {
for (BSTab tab : bsTabOwner.getTabs()) {
- tab.setOwner(bsTabOwner);
+ tab.owner(bsTabOwner);
traverseRows(tab);
}
}
@@ -78,18 +78,18 @@ private void traverseTabs(final BSTabOwner bsTabOwner) {
private void traverseActions(final ActionLayoutDataOwner
actionLayoutDataOwner) {
if(actionLayoutDataOwner.getActions() == null) return;
for (final ActionLayoutData actionLayoutData :
actionLayoutDataOwner.getActions()) {
- actionLayoutData.setOwner(actionLayoutDataOwner);
+ actionLayoutData.owner(actionLayoutDataOwner);
}
}
private void traverseFieldSets(final FieldSetOwner fieldSetOwner) {
final List<FieldSet> fieldSets = fieldSetOwner.getFieldSets();
for (FieldSet fieldSet : fieldSets) {
- fieldSet.setOwner(fieldSetOwner);
+ fieldSet.owner(fieldSetOwner);
traverseActions(fieldSet);
final List<PropertyLayoutData> properties =
fieldSet.getProperties();
for (final PropertyLayoutData property : properties) {
- property.setOwner(fieldSet);
+ property.owner(fieldSet);
traverseActions(property);
}
}
@@ -99,7 +99,7 @@ private void traverseCollections(
final CollectionLayoutDataOwner owner) {
final List<CollectionLayoutData> collections = owner.getCollections();
for (CollectionLayoutData collection : collections) {
- collection.setOwner(owner);
+ collection.owner(owner);
traverseActions(collection);
}
}
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 236784b51a7..36605c7360d 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
@@ -44,6 +44,7 @@ static final class Flag {
public BSGrid apply(final BSGrid bsGrid) {
var emptyTabs = new ArrayList<BSTab>();
+ // first phase: collect all empty tabs for removal
bsGrid.visit(new BSElement.Visitor() {
final Stack<Flag> stack = new Stack<Flag>();
@@ -67,8 +68,7 @@ public BSGrid apply(final BSGrid bsGrid) {
@Override public void postVisit(final BSTab bsTab) {
var flag = stack.pop();
if(!flag.keep) {
- // collecting into list, so we don't risk a
ConcurrentModificationException,
- // when racing with the underlying iterator
+ // collecting empty tabs
emptyTabs.add(bsTab);
}
}
@@ -77,6 +77,7 @@ private void keep() {
}
});
+ // second phase: removal of tabs not to keep
emptyTabs.forEach(tab->
BSUtil.remove(tab)
.map(BSTabGroup.class::cast)
@@ -159,12 +160,12 @@ public void visit(final BSTabGroup bsTabGroup) {
// opt-out semantics: absence of the attribute results in
participation
if(!bsTabGroup.isCollapseIfOne(true)) return;
- var parent = (BSCol) bsTabGroup.getOwner();
- parent.getTabGroups().remove(bsTabGroup);
+ var col = (BSCol) bsTabGroup.owner();
+ col.getTabGroups().remove(bsTabGroup);
// relocate rows from tab to owning col
bsTabGroup.getTabs().get(0).getRows()
.forEach(row->{
- parent.getRows().add(row);
+ col.getRows().add(row);
});
}
});
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSRow.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSRow.java
index f335f1a9fa2..bf3984b3af3 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSRow.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSRow.java
@@ -31,6 +31,7 @@
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
+import lombok.experimental.Accessors;
/**
* Contains a row of content, either on the top-level {@link BSGrid page} or
at any other lower-level element that can
@@ -72,7 +73,7 @@ public final class BSRow extends BSElementAbstract implements
HasElementId, BSRo
* <p>Set programmatically by framework after reading in from XML.
*/
@XmlTransient
- @Getter @Setter
+ @Getter @Setter @Accessors(fluent=true)
private BSRowOwner owner;
@Override public String toString() {
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSRowContent.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSRowContent.java
index 4f355c868f7..d02352d1ef1 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSRowContent.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSRowContent.java
@@ -23,6 +23,7 @@
import lombok.Getter;
import lombok.Setter;
+import lombok.experimental.Accessors;
/**
* Common superclass for any content of a row.
@@ -49,7 +50,7 @@ public sealed abstract class BSRowContent extends
BSElementAbstract
* <p>Set programmatically by framework after reading in from XML.
*/
@XmlTransient
- @Getter @Setter
+ @Getter @Setter @Accessors(fluent=true)
private BSRowContentOwner owner;
}
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSRowContentOwner.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSRowContentOwner.java
index 542cf8b234b..bd2cb595151 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSRowContentOwner.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSRowContentOwner.java
@@ -25,7 +25,8 @@
/**
* @since 1.x {@index}
*/
-public interface BSRowContentOwner extends Owner {
+public sealed interface BSRowContentOwner extends Owner
+permits BSRow {
List<BSRowContent> getRowContents();
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSRowOwner.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSRowOwner.java
index f62bc730a2d..4394a5f017e 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSRowOwner.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSRowOwner.java
@@ -25,7 +25,8 @@
/**
* @since 1.x {@index}
*/
-public interface BSRowOwner extends Owner {
+public sealed interface BSRowOwner extends Owner
+permits BSCol, BSGrid, BSTab {
List<BSRow> getRows();
}
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSTab.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSTab.java
index b7b021e3d7c..6b26ef98f2d 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSTab.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSTab.java
@@ -28,6 +28,7 @@
import lombok.Getter;
import lombok.Setter;
+import lombok.experimental.Accessors;
/**
* Represents a tab within a {@link BSTabGroup tab group}.
@@ -56,7 +57,7 @@ public final class BSTab extends BSElementAbstract implements
BSRowOwner {
* <p>Set programmatically by framework after reading in from XML.
*/
@XmlTransient
- @Getter @Setter
+ @Getter @Setter @Accessors(fluent=true)
private BSTabOwner owner;
@Override public String toString() {
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSTabGroup.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSTabGroup.java
index 9a946141969..47ed9b3f4cc 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSTabGroup.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSTabGroup.java
@@ -28,6 +28,7 @@
import lombok.Getter;
import lombok.Setter;
+import lombok.experimental.Accessors;
/**
* Represents a tab group containing one or more {@link BSTab tab}s.
@@ -72,7 +73,7 @@ public boolean isCollapseIfOne(boolean _default) {
* <p>Set programmatically by framework after reading in from XML.
*/
@XmlTransient
- @Getter @Setter
+ @Getter @Setter @Accessors(fluent=true)
private BSTabGroupOwner owner;
/**
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSUtil.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSUtil.java
index 93652a1c232..e03d859cbdc 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSUtil.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/grid/bootstrap/BSUtil.java
@@ -85,30 +85,30 @@ public BSGrid resolveOwners(final BSGrid grid) {
/** removes the tab from its owner and returns the owner */
public Optional<BSTabOwner> remove(BSTab tab) {
- var ownerOpt = Optional.ofNullable(tab.getOwner());
+ var ownerOpt = Optional.ofNullable(tab.owner());
ownerOpt.ifPresent(owner->owner.getTabs().remove(tab));
- tab.setOwner(null);
+ tab.owner(null);
return ownerOpt;
}
/** removes the col from its owner and returns the owner */
public Optional<BSRowContentOwner> remove(BSCol col) {
- var ownerOpt = Optional.ofNullable(col.getOwner());
+ var ownerOpt = Optional.ofNullable(col.owner());
ownerOpt.ifPresent(owner->owner.getRowContents().remove(col));
- col.setOwner(null);
+ col.owner(null);
return ownerOpt;
}
/** removes the tabGroup from its owner and returns the owner */
public Optional<BSTabGroupOwner> remove(BSTabGroup tabGroup) {
- var ownerOpt = Optional.ofNullable(tabGroup.getOwner());
+ var ownerOpt = Optional.ofNullable(tabGroup.owner());
ownerOpt.ifPresent(owner->owner.getTabGroups().remove(tabGroup));
- tabGroup.setOwner(null);
+ tabGroup.owner(null);
return ownerOpt;
}
/** removes the row from its owner and returns the owner */
public Optional<BSRowOwner> remove(BSRow row) {
- var ownerOpt = Optional.ofNullable(row.getOwner());
+ var ownerOpt = Optional.ofNullable(row.owner());
ownerOpt.ifPresent(owner->owner.getRows().remove(row));
- row.setOwner(null);
+ row.owner(null);
return ownerOpt;
}
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/layout/menubars/bootstrap/BSMenuSection.java
b/api/applib/src/main/java/org/apache/causeway/applib/layout/menubars/bootstrap/BSMenuSection.java
index 42a6cdc7770..71fd07d2ec1 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/layout/menubars/bootstrap/BSMenuSection.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/layout/menubars/bootstrap/BSMenuSection.java
@@ -41,7 +41,7 @@
*/
@XmlType(name = "section", propOrder = {"named", "serviceActions"})
@XmlAccessorType(XmlAccessType.FIELD)
-public class BSMenuSection implements MenuSection, Serializable,
ServiceActionLayoutDataOwner {
+public final class BSMenuSection implements MenuSection, Serializable,
ServiceActionLayoutDataOwner {
private static final long serialVersionUID = 1L;
public BSMenuSection() {}
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/GridSystemServiceAbstract.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/GridSystemServiceAbstract.java
index 841a5263737..1b3dc7feac4 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/GridSystemServiceAbstract.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/GridSystemServiceAbstract.java
@@ -180,11 +180,9 @@ public void visit(final DomainObjectLayoutData
domainObjectLayoutData) {
@Override
public void visit(final ActionLayoutData actionLayoutData) {
- var actionLayoutDataOwner = actionLayoutData.getOwner();
+ var actionLayoutDataOwner = actionLayoutData.owner();
var objectAction =
objectActionById.get(actionLayoutData.getId());
- if(objectAction == null) {
- return;
- }
+ if(objectAction == null) return;
{
GroupIdAndName groupIdAndName = null;
@@ -311,7 +309,7 @@ public void visit(final PropertyLayoutData
propertyLayoutData) {
// Layout group-name based on owning property group, Layout
sequence monotonically increasing
// nb for any given field set the sequence won't reset to
zero; however this is what we want so that
// table columns are shown correctly (by fieldset, then
property order within that fieldset).
- final FieldSet fieldSet = propertyLayoutData.getOwner();
+ final FieldSet fieldSet = propertyLayoutData.owner();
updateFacet(LayoutOrderFacetForLayoutXml.create(propertySequence.incrementAndGet(),
oneToOneAssociation, precedence));
@@ -381,22 +379,22 @@ public void minimal(final G grid, final Class<?>
domainClass) {
grid.visit(new Grid.Visitor() {
@Override
public void visit(final ActionLayoutData actionLayoutData) {
-
actionLayoutData.getOwner().getActions().remove(actionLayoutData);
+ actionLayoutData.owner().getActions().remove(actionLayoutData);
}
@Override
public void visit(final CollectionLayoutData collectionLayoutData)
{
-
collectionLayoutData.getOwner().getCollections().remove(collectionLayoutData);
+
collectionLayoutData.owner().getCollections().remove(collectionLayoutData);
}
@Override
public void visit(final PropertyLayoutData propertyLayoutData) {
-
propertyLayoutData.getOwner().getProperties().remove(propertyLayoutData);
+
propertyLayoutData.owner().getProperties().remove(propertyLayoutData);
}
@Override
public void visit(final DomainObjectLayoutData
domainObjectLayoutData) {
- final DomainObjectLayoutDataOwner owner =
domainObjectLayoutData.getOwner();
+ final DomainObjectLayoutDataOwner owner =
domainObjectLayoutData.owner();
owner.setDomainObject(new DomainObjectLayoutData());
}
});
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/bootstrap/GridSystemServiceBootstrap.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/bootstrap/GridSystemServiceBootstrap.java
index 3f9f2a1d8c8..e3c1928b877 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/bootstrap/GridSystemServiceBootstrap.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/bootstrap/GridSystemServiceBootstrap.java
@@ -423,7 +423,7 @@ protected boolean validateAndNormalize(
propertyLayoutDataList.forEach(propertyLayoutData->{
final ActionLayoutDataOwner owner = position ==
ActionLayout.Position.PANEL
|| position ==
ActionLayout.Position.PANEL_DROPDOWN
- ? propertyLayoutData.getOwner()
+ ? propertyLayoutData.owner()
: propertyLayoutData;
var actionLayoutData = new ActionLayoutData(actionId);
actionLayoutData.setPosition(position);
@@ -540,7 +540,7 @@ private void addPropertiesTo(
}
var propertyLayoutData = layoutFactory.apply(propertyId);
fieldSet.getProperties().add(propertyLayoutData);
- propertyLayoutData.setOwner(fieldSet);
+ propertyLayoutData.owner(fieldSet);
onNewLayoutData.accept(propertyId, propertyLayoutData);
}
}
@@ -576,7 +576,7 @@ private void addUnreferencedCollectionsTo(
var newTab = new BSTab();
newTab.setName(featureCanonicalFriendlyName);
tabGroup.getTabs().add(newTab);
- newTab.setOwner(tabGroup);
+ newTab.owner(tabGroup);
return newTab;
});
@@ -623,7 +623,7 @@ private void addActionTo(
final ActionLayoutDataOwner owner,
final ActionLayoutData actionLayoutData) {
owner.getActions().add(actionLayoutData);
- actionLayoutData.setOwner(owner);
+ actionLayoutData.owner(owner);
}
}