Skip to content

Commit 48e41a7

Browse files
committed
CAUSEWAY-3859: converts GridFacetDefault to a record
1 parent 380274b commit 48e41a7

File tree

8 files changed

+37
-107
lines changed

8 files changed

+37
-107
lines changed

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/grid/GridFacet.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,8 @@
2929
/**
3030
* Obtain the current grid, derived either from a <code>.layout.xml</code> file, and normalized, or synthesized from
3131
* existing layout metadata (annotations or <code>layout.json</code>).
32-
*
3332
* <p>
34-
* Most of the heavy lifting is done by delegating to the {@link LayoutService} and {@link GridSystemService}
35-
* services.
36-
* </p>
33+
* Most of the heavy lifting is done by delegating to the {@link LayoutService} and {@link GridSystemService} services.
3734
*/
3835
public interface GridFacet extends Facet {
3936

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/grid/GridFacetDefault.java

+30-38
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
import java.util.Map;
2222
import java.util.Optional;
2323
import java.util.concurrent.ConcurrentHashMap;
24+
import java.util.function.BiConsumer;
2425

26+
import org.jspecify.annotations.NonNull;
2527
import org.jspecify.annotations.Nullable;
2628

2729
import org.apache.causeway.applib.layout.grid.Grid;
@@ -30,67 +32,59 @@
3032
import org.apache.causeway.commons.internal.base._Strings;
3133
import org.apache.causeway.commons.internal.exceptions._Exceptions;
3234
import org.apache.causeway.core.metamodel.facetapi.Facet;
33-
import org.apache.causeway.core.metamodel.facetapi.FacetAbstract;
3435
import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
3536
import org.apache.causeway.core.metamodel.facets.object.layout.LayoutPrefixFacet;
3637
import org.apache.causeway.core.metamodel.object.ManagedObject;
3738
import org.apache.causeway.core.metamodel.object.ManagedObjects;
3839
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
3940

40-
import org.jspecify.annotations.NonNull;
41-
42-
public class GridFacetDefault
43-
extends FacetAbstract
41+
record GridFacetDefault(
42+
GridService gridService,
43+
Map<String, Grid> gridByLayoutPrefix,
44+
_Lazy<LayoutPrefixFacet> layoutFacetLazy,
45+
@NonNull FacetHolder facetHolder,
46+
Facet.@NonNull Precedence precedence)
4447
implements GridFacet {
4548

46-
private static final Class<? extends Facet> type() {
47-
return GridFacet.class;
48-
}
49+
// -- FACTORIES
4950

5051
public static GridFacet create(
5152
final FacetHolder facetHolder,
5253
final GridService gridService) {
53-
return new GridFacetDefault(facetHolder, gridService);
54+
return new GridFacetDefault(gridService, new ConcurrentHashMap<>(),
55+
_Lazy.threadSafe(()->facetHolder.getFacet(LayoutPrefixFacet.class)),
56+
facetHolder, Precedence.DEFAULT);
5457
}
5558

56-
private final GridService gridService;
57-
58-
private final _Lazy<LayoutPrefixFacet> layoutFacetLazy = _Lazy.threadSafe(()->
59-
getFacetHolder().getFacet(LayoutPrefixFacet.class));
59+
// -- METHODS
6060

61-
private final Map<String, Grid> gridByLayoutName = new ConcurrentHashMap<>();
62-
63-
private GridFacetDefault(
64-
final FacetHolder facetHolder,
65-
final GridService gridService) {
66-
super(GridFacetDefault.type(), facetHolder);
67-
this.gridService = gridService;
68-
}
61+
@Override public Class<? extends Facet> facetType() { return GridFacet.class; }
62+
@Override public Precedence getPrecedence() { return precedence(); }
63+
@Override public FacetHolder getFacetHolder() { return facetHolder(); }
6964

7065
@Override
7166
public Grid getGrid(final @Nullable ManagedObject objectAdapter) {
72-
7367
guardAgainstObjectOfDifferentType(objectAdapter);
7468

7569
// gridByLayoutName is used as cache, unless gridService.supportsReloading() returns true
76-
return gridByLayoutName.compute(layoutNameFor(objectAdapter),
77-
(layoutName, cachedLayout)->
70+
return gridByLayoutPrefix.compute(layoutPrefixFor(objectAdapter),
71+
(layoutPrefix, cachedLayout)->
7872
(cachedLayout==null
7973
|| gridService.supportsReloading())
80-
? this.load(layoutName)
74+
? this.load(layoutPrefix)
8175
: cachedLayout
8276
);
77+
}
8378

79+
@Override
80+
public void visitAttributes(final BiConsumer<String, Object> visitor) {
81+
visitor.accept("precedence", getPrecedence().name());
8482
}
8583

8684
// -- HELPER
8785

8886
private void guardAgainstObjectOfDifferentType(final @Nullable ManagedObject objectAdapter) {
89-
90-
if(ManagedObjects.isNullOrUnspecifiedOrEmpty(objectAdapter)) {
91-
return; // cannot introspect
92-
}
93-
87+
if(ManagedObjects.isNullOrUnspecifiedOrEmpty(objectAdapter)) return; // cannot introspect
9488
if(!getSpecification().equals(objectAdapter.getSpecification())) {
9589
throw _Exceptions.unrecoverable(
9690
"getGrid(adapter) was called passing an adapter (type: %s), "
@@ -101,26 +95,24 @@ private void guardAgainstObjectOfDifferentType(final @Nullable ManagedObject obj
10195
}
10296
}
10397

104-
private String layoutNameFor(final @Nullable ManagedObject objectAdapter) {
105-
if(!hasLayoutFacet()
106-
|| ManagedObjects.isNullOrUnspecifiedOrEmpty(objectAdapter)) {
98+
private String layoutPrefixFor(final @Nullable ManagedObject objectAdapter) {
99+
if(ManagedObjects.isNullOrUnspecifiedOrEmpty(objectAdapter)
100+
|| !hasLayoutPrefixFacet()) {
107101
return "";
108102
}
109103
var layoutName = _Strings.nullToEmpty(layoutFacetLazy.get().layoutPrefix(objectAdapter));
110104
return layoutName;
111105
}
112106

113-
private boolean hasLayoutFacet() {
107+
private boolean hasLayoutPrefixFacet() {
114108
return layoutFacetLazy.get()!=null;
115109
}
116110

117-
private Grid load(final @NonNull String layoutName) {
118-
111+
private Grid load(final @NonNull String layoutPrefix) {
119112
var domainClass = getSpecification().getCorrespondingClass();
120-
121113
var grid = Optional.ofNullable(
122114
// loads from object's XML if available
123-
gridService.load(domainClass, _Strings.emptyToNull(layoutName)))
115+
gridService.load(domainClass, _Strings.emptyToNull(layoutPrefix)))
124116
// loads from default-XML if available
125117
.orElseGet(()->gridService.defaultGridFor(domainClass));
126118
return gridService.normalize(grid);

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/grid/GridFacetFactory.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,11 @@ public GridFacetFactory(final MetaModelContext mmc) {
3434

3535
@Override
3636
public void process(final ProcessClassContext processClassContext) {
37-
if(gridService.get()==null) {
38-
return;
39-
}
37+
if(gridService.get()==null) return;
38+
4039
var facetHolder = processClassContext.getFacetHolder();
41-
addFacet(
42-
GridFacetDefault
43-
.create(facetHolder, gridService.get()));
40+
addFacet(GridFacetDefault
41+
.create(facetHolder, gridService.get()));
4442
}
4543

4644
private final _Lazy<GridService> gridService = _Lazy.threadSafe(()->

extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml

-2
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757
<mml:attr name="value" value="org.apache.causeway.applib.events.lifecycle.ObjectUpdatingEvent.Default"/>
5858
</mml:facet>
5959
<mml:facet id="org.apache.causeway.core.metamodel.facets.object.grid.GridFacet" fqcn="org.apache.causeway.core.metamodel.facets.object.grid.GridFacetDefault">
60-
<mml:attr name="facet" value="GridFacetDefault"/>
6160
<mml:attr name="precedence" value="DEFAULT"/>
6261
</mml:facet>
6362
<mml:facet id="org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacet" fqcn="org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacetFromAuthorization">
@@ -1211,7 +1210,6 @@
12111210
<mml:attr name="value" value="org.apache.causeway.applib.events.lifecycle.ObjectUpdatingEvent.Default"/>
12121211
</mml:facet>
12131212
<mml:facet id="org.apache.causeway.core.metamodel.facets.object.grid.GridFacet" fqcn="org.apache.causeway.core.metamodel.facets.object.grid.GridFacetDefault">
1214-
<mml:attr name="facet" value="GridFacetDefault"/>
12151213
<mml:attr name="precedence" value="DEFAULT"/>
12161214
</mml:facet>
12171215
<mml:facet id="org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacet" fqcn="org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacetFromAuthorization">

extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml

-2
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757
<mml:attr name="value" value="org.apache.causeway.applib.events.lifecycle.ObjectUpdatingEvent.Default"/>
5858
</mml:facet>
5959
<mml:facet id="org.apache.causeway.core.metamodel.facets.object.grid.GridFacet" fqcn="org.apache.causeway.core.metamodel.facets.object.grid.GridFacetDefault">
60-
<mml:attr name="facet" value="GridFacetDefault"/>
6160
<mml:attr name="precedence" value="DEFAULT"/>
6261
</mml:facet>
6362
<mml:facet id="org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacet" fqcn="org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacetFromAuthorization">
@@ -1204,7 +1203,6 @@
12041203
<mml:attr name="value" value="org.apache.causeway.applib.events.lifecycle.ObjectUpdatingEvent.Default"/>
12051204
</mml:facet>
12061205
<mml:facet id="org.apache.causeway.core.metamodel.facets.object.grid.GridFacet" fqcn="org.apache.causeway.core.metamodel.facets.object.grid.GridFacetDefault">
1207-
<mml:attr name="facet" value="GridFacetDefault"/>
12081206
<mml:attr name="precedence" value="DEFAULT"/>
12091207
</mml:facet>
12101208
<mml:facet id="org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacet" fqcn="org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacetFromAuthorization">

extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml

-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757
<mml:attr name="value" value="org.apache.causeway.applib.events.lifecycle.ObjectUpdatingEvent.Default"/>
5858
</mml:facet>
5959
<mml:facet id="org.apache.causeway.core.metamodel.facets.object.grid.GridFacet" fqcn="org.apache.causeway.core.metamodel.facets.object.grid.GridFacetDefault">
60-
<mml:attr name="facet" value="GridFacetDefault"/>
6160
<mml:attr name="precedence" value="DEFAULT"/>
6261
</mml:facet>
6362
<mml:facet id="org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacet" fqcn="org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacetFromAuthorization">

extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml

-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757
<mml:attr name="value" value="org.apache.causeway.applib.events.lifecycle.ObjectUpdatingEvent.Default"/>
5858
</mml:facet>
5959
<mml:facet id="org.apache.causeway.core.metamodel.facets.object.grid.GridFacet" fqcn="org.apache.causeway.core.metamodel.facets.object.grid.GridFacetDefault">
60-
<mml:attr name="facet" value="GridFacetDefault"/>
6160
<mml:attr name="precedence" value="DEFAULT"/>
6261
</mml:facet>
6362
<mml:facet id="org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacet" fqcn="org.apache.causeway.core.metamodel.facets.object.hidden.HiddenTypeFacetFromAuthorization">

0 commit comments

Comments
 (0)