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