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 2d76c2556f1 CAUSEWAY-3859: Java record refactoring (part 15)
2d76c2556f1 is described below

commit 2d76c2556f1970a442f6c19f64f9c0d9545b9d36
Author: Andi Huber <[email protected]>
AuthorDate: Wed Feb 19 07:34:51 2025 +0100

    CAUSEWAY-3859: Java record refactoring (part 15)
---
 .../core/metamodel/facets/HasImperativeAspect.java |  4 +--
 .../core/metamodel/facets/ImperativeAspect.java    | 35 +++++++---------------
 .../facets/all/i8n/noun/HasNounFacetAbstract.java  |  4 +--
 .../core/metamodel/facets/all/i8n/noun/Noun.java   | 33 ++++++++++++--------
 .../all/named/ObjectNamedFacetSynthesized.java     |  2 +-
 ...tNamedFacetForDomainObjectLayoutAnnotation.java | 22 ++++----------
 .../ObjectNamedFacetForDomainObjectLayoutXml.java  | 21 ++++---------
 ...NamedFacetForDomainServiceLayoutAnnotation.java | 11 +++----
 .../i18n/SynthesizeObjectNamingPostProcessor.java  | 11 +++----
 9 files changed, 54 insertions(+), 89 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/HasImperativeAspect.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/HasImperativeAspect.java
index 97fe2b890a3..e7c034df9a6 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/HasImperativeAspect.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/HasImperativeAspect.java
@@ -28,12 +28,12 @@ public interface HasImperativeAspect
 
     @Override
     default Can<MethodFacade> getMethods() {
-        return getImperativeAspect().getMethods();
+        return getImperativeAspect().methods();
     }
 
     @Override
     default Intent getIntent() {
-        return getImperativeAspect().getIntent();
+        return getImperativeAspect().intent();
     }
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/ImperativeAspect.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/ImperativeAspect.java
index ba5d5bcd3f0..20980c854f7 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/ImperativeAspect.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/ImperativeAspect.java
@@ -19,7 +19,6 @@
 package org.apache.causeway.core.metamodel.facets;
 
 import java.util.function.BiConsumer;
-import java.util.stream.Collectors;
 
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.commons.internal.base._Casts;
@@ -30,34 +29,23 @@
 import org.apache.causeway.core.metamodel.object.ManagedObjects;
 import org.apache.causeway.core.metamodel.object.MmInvokeUtils;
 
-import lombok.Value;
-
-@Value
-public class ImperativeAspect {
+public record ImperativeAspect(
+    Can<MethodFacade> methods,
+    Intent intent) {
 
     // -- FACTORIES
 
-    public static ImperativeAspect singleRegularMethod(final ResolvedMethod 
method, final Intent checkIfDisabled) {
-        return new 
ImperativeAspect(ImperativeFacet.singleRegularMethod(method), checkIfDisabled);
+    public static ImperativeAspect singleRegularMethod(final ResolvedMethod 
method, final Intent intent) {
+        return new 
ImperativeAspect(ImperativeFacet.singleRegularMethod(method), intent);
     }
 
     // --
 
-    private final Can<MethodFacade> methods;
-    private final Intent intent;
-
-    public Intent getIntent(final MethodFacade method) {
-        return intent;
-    }
-
     public void visitAttributes(final BiConsumer<String, Object> visitor) {
-        visitor.accept("methods",
-                getMethods().stream()
-                .map(MethodFacade::toString)
-                .collect(Collectors.joining(", ")));
-        getMethods().forEach(method->
+        visitor.accept("methods", methods().join(", "));
+        methods().forEach(method->
             visitor.accept(
-                    "intent." + method.getName(), getIntent(method)));
+                    "intent." + method.getName(), intent));
     }
 
     public Object invokeSingleMethod(final ManagedObject domainObject) {
@@ -69,16 +57,13 @@ public Object invokeSingleMethod(final ManagedObject 
domainObject) {
     public <T> T eval(
             final ManagedObject domainObject,
             final T fallback) {
-        if(ManagedObjects.isNullOrUnspecifiedOrEmpty(domainObject)) {
-            return fallback;
-        }
+        if(ManagedObjects.isNullOrUnspecifiedOrEmpty(domainObject)) return 
fallback;
+
         try {
             return _Casts.uncheckedCast(invokeSingleMethod(domainObject));
         } catch (final RuntimeException ex) {
-
             return fallback;
         }
-
     }
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/noun/HasNounFacetAbstract.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/noun/HasNounFacetAbstract.java
index 6fc446f96a4..9e6e3b69826 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/noun/HasNounFacetAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/noun/HasNounFacetAbstract.java
@@ -62,7 +62,7 @@ protected HasNounFacetAbstract(
 
     @Override
     public boolean isNounPresent() {
-        return noun.isLiteralPresent();
+        return noun.isPresent();
     }
 
     @Override
@@ -79,7 +79,7 @@ public final Optional<String> translated() {
     public void visitAttributes(final BiConsumer<String, Object> visitor) {
         super.visitAttributes(visitor);
         visitor.accept("context", translationContext);
-        if(noun.isLiteralPresent()) {
+        if(noun.isPresent()) {
             visitor.accept("hasNoun", "true");
             visitor.accept("originalText", text());
             visitor.accept("translated", translated()); // memoizes as a 
side-effect
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/noun/Noun.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/noun/Noun.java
index 03afdb81519..9956b95d78f 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/noun/Noun.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/noun/Noun.java
@@ -20,39 +20,46 @@
 
 import java.util.Optional;
 
+import org.jspecify.annotations.NonNull;
 import org.jspecify.annotations.Nullable;
 
+import org.springframework.util.StringUtils;
+
 import org.apache.causeway.applib.services.i18n.TranslationContext;
 import org.apache.causeway.applib.services.i18n.TranslationService;
 
-import org.jspecify.annotations.NonNull;
-
 /**
  * Immutable value object that holds the null-able literal (String) for a noun.
+ * For the Noun to be non-empty requires the literal to contain at least one 
non-whitespace character.
  *
  * @since 2.0
+ * @see StringUtils#hasText
  */
[email protected](staticConstructor = "singular")
-public class Noun {
+public record Noun(
+    @Nullable String nullableLiteral) {
 
-    private final @Nullable String singular;
-
-    public boolean isLiteralPresent() {
-        return singular!=null;
+    // canonical constructor
+    public Noun(
+        @Nullable final String nullableLiteral) {
+        this.nullableLiteral = StringUtils.hasText(nullableLiteral)
+            ? nullableLiteral
+            : null;
     }
 
+    public boolean isEmpty() { return nullableLiteral==null; }
+    public boolean isPresent() { return nullableLiteral!=null; }
+
     public Optional<String> literal() {
-        return isLiteralPresent()
-                ? Optional.of(getSingular())
+        return isPresent()
+                ? Optional.of(nullableLiteral)
                 : Optional.empty();
     }
 
     public Noun translate(
             final @NonNull TranslationService translationService,
             final TranslationContext context) {
-
-        return isLiteralPresent()
-                ? singular(translationService.translate(context, singular))
+        return isPresent()
+                ? new Noun(translationService.translate(context, 
nullableLiteral))
                 : this;
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/named/ObjectNamedFacetSynthesized.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/named/ObjectNamedFacetSynthesized.java
index 224cfa2cbc5..9e12d19644c 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/named/ObjectNamedFacetSynthesized.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/named/ObjectNamedFacetSynthesized.java
@@ -36,7 +36,7 @@ public ObjectNamedFacetSynthesized(
             final FacetHolder holder) {
         super(noun, holder, Precedence.SYNTHESIZED);
         // assert that we have a noun
-        _Assert.assertTrue(noun.isLiteralPresent());
+        _Assert.assertFalse(noun.isEmpty());
     }
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectLayoutAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectLayoutAnnotation.java
index 6bd6d9b82bf..a605a31e37a 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectLayoutAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectLayoutAnnotation.java
@@ -21,7 +21,6 @@
 import java.util.Optional;
 
 import org.apache.causeway.applib.annotation.DomainObjectLayout;
-import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 import org.apache.causeway.core.metamodel.facets.all.i8n.noun.Noun;
 import org.apache.causeway.core.metamodel.facets.all.named.ObjectNamedFacet;
@@ -34,24 +33,15 @@ public static Optional<ObjectNamedFacet> create(
             final Optional<DomainObjectLayout> domainObjectLayoutIfAny,
             final FacetHolder holder) {
 
-        if(!domainObjectLayoutIfAny.isPresent()) {
-            return Optional.empty();
-        }
+        if(!domainObjectLayoutIfAny.isPresent()) return Optional.empty();
 
         var domainObjectLayout = domainObjectLayoutIfAny.get();
+        var noun = new Noun(domainObjectLayout.named());
 
-        var singular = _Strings.emptyToNull(domainObjectLayout.named());
-
-        var noun = Noun.singular(singular);
-
-        if(!noun.isLiteralPresent()) {
-            return Optional.empty();
-        }
-
-        return Optional.of(
-                new ObjectNamedFacetForDomainObjectLayoutAnnotation(
-                            noun,
-                            holder));
+        return noun.isEmpty()
+            ? Optional.empty()
+            : Optional.of(
+                new ObjectNamedFacetForDomainObjectLayoutAnnotation(noun, 
holder));
     }
 
     private ObjectNamedFacetForDomainObjectLayoutAnnotation(
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectLayoutXml.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectLayoutXml.java
index ef53595088c..035ba112a2e 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectLayoutXml.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/ObjectNamedFacetForDomainObjectLayoutXml.java
@@ -21,7 +21,6 @@
 import java.util.Optional;
 
 import org.apache.causeway.applib.layout.component.DomainObjectLayoutData;
-import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.core.metamodel.facetapi.Facet;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 import org.apache.causeway.core.metamodel.facets.all.i8n.noun.Noun;
@@ -36,23 +35,13 @@ public static Optional<ObjectNamedFacet> create(
             final FacetHolder holder,
             final Facet.Precedence precedence) {
 
-        if(domainObjectLayout == null) {
-            return Optional.empty();
-        }
+        if(domainObjectLayout == null) return Optional.empty();
 
-        var singular = _Strings.emptyToNull(domainObjectLayout.getNamed());
+        var noun = new Noun(domainObjectLayout.getNamed());
 
-        var noun = Noun.singular(singular);
-
-        if(!noun.isLiteralPresent()) {
-            return Optional.empty();
-        }
-
-        return Optional.of(
-                new ObjectNamedFacetForDomainObjectLayoutXml(
-                        noun,
-                            holder,
-                            precedence));
+        return noun.isEmpty()
+            ? Optional.empty()
+            : Optional.of(new ObjectNamedFacetForDomainObjectLayoutXml(noun, 
holder, precedence));
     }
 
     private ObjectNamedFacetForDomainObjectLayoutXml(
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/ObjectNamedFacetForDomainServiceLayoutAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/ObjectNamedFacetForDomainServiceLayoutAnnotation.java
index 49d15841bbb..777f606b896 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/ObjectNamedFacetForDomainServiceLayoutAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/ObjectNamedFacetForDomainServiceLayoutAnnotation.java
@@ -21,7 +21,6 @@
 import java.util.Optional;
 
 import org.apache.causeway.applib.annotation.DomainServiceLayout;
-import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 import org.apache.causeway.core.metamodel.facets.all.i8n.noun.Noun;
 import org.apache.causeway.core.metamodel.facets.all.named.ObjectNamedFacet;
@@ -35,12 +34,10 @@ public static Optional<ObjectNamedFacet> create(
             final FacetHolder facetHolder) {
 
         return domainServiceLayoutIfAny
-                .map(DomainServiceLayout::named)
-                .filter(_Strings::isNotEmpty)
-                .map(serviceNamed->Noun.singular(serviceNamed))
-                .map(nounForms->new 
ObjectNamedFacetForDomainServiceLayoutAnnotation(
-                        nounForms,
-                        facetHolder));
+            .map(DomainServiceLayout::named)
+            .map(Noun::new)
+            .filter(Noun::isPresent)
+            .map(noun->new 
ObjectNamedFacetForDomainServiceLayoutAnnotation(noun, facetHolder));
     }
 
     private ObjectNamedFacetForDomainServiceLayoutAnnotation(
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/i18n/SynthesizeObjectNamingPostProcessor.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/i18n/SynthesizeObjectNamingPostProcessor.java
index aa83a32220d..d916cd8bc6b 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/i18n/SynthesizeObjectNamingPostProcessor.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/all/i18n/SynthesizeObjectNamingPostProcessor.java
@@ -20,8 +20,9 @@
 
 import jakarta.inject.Inject;
 
+import org.springframework.util.StringUtils;
+
 import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
 import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
 import org.apache.causeway.core.metamodel.facets.all.i8n.noun.Noun;
@@ -57,15 +58,11 @@ public void postProcessObject(final ObjectSpecification 
objectSpecification) {
                 .filter(objectNamedFacet->objectNamedFacet.isNounPresent())
                 .findFirst()
                 .map(ObjectNamedFacet::singular)
-                .filter(_Strings::isNotEmpty)
+                .filter(StringUtils::hasText)
                 .orElseGet(()->getSingularFallbackNoun(objectSpecification));
 
         FacetUtil.addFacet(
-                new ObjectNamedFacetSynthesized(
-                        Noun.singular(singular),
-                        objectSpecification)
-                );
-
+                new ObjectNamedFacetSynthesized(new Noun(singular), 
objectSpecification));
     }
 
     // -- HELEPR

Reply via email to