You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/07/20 08:33:35 UTC
[causeway] 02/03: CAUSEWAY-3533: prepare removal of NounForm (plural is no longer used)
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 12e54b980dea4e407748c4905a04b434036435b9
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jul 20 10:22:31 2023 +0200
CAUSEWAY-3533: prepare removal of NounForm (plural is no longer used)
---
.../ROOT/pages/2023/2.0.0-RC3/mignotes.adoc | 2 +-
.../layout/component/DomainObjectLayoutData.java | 1 -
.../metamodel/facets/all/i8n/noun/HasNoun.java | 17 +++----
.../facets/all/i8n/noun/HasNounFacetAbstract.java | 21 ++++----
.../metamodel/facets/all/i8n/noun/NounForms.java | 58 +++++++---------------
.../core/metamodel/layout/LayoutFacetUtil.java | 9 ++--
.../i18n/SynthesizeObjectNamingPostProcessor.java | 6 +--
.../specimpl/ObjectSpecificationAbstract.java | 3 +-
8 files changed, 47 insertions(+), 70 deletions(-)
diff --git a/antora/components/relnotes/modules/ROOT/pages/2023/2.0.0-RC3/mignotes.adoc b/antora/components/relnotes/modules/ROOT/pages/2023/2.0.0-RC3/mignotes.adoc
index 2fb3b27d39..23a53cc0dc 100644
--- a/antora/components/relnotes/modules/ROOT/pages/2023/2.0.0-RC3/mignotes.adoc
+++ b/antora/components/relnotes/modules/ROOT/pages/2023/2.0.0-RC3/mignotes.adoc
@@ -15,4 +15,4 @@ As previously marked deprecated for removal:
* `Collection#hidden` ... use `CollectionLayout#hidden` instead
* `Property#hidden` ... use `PropertyLayout#hidden` instead
* `@LogicalTypeName(..)` ... use `@Named(..)` instead
-
+* `DomainObjectLayoutData#plural` (XML)
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 8e9c4f0b85..1931da59dc 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
@@ -43,7 +43,6 @@ import org.apache.causeway.applib.layout.links.Link;
, propOrder = {
"named"
, "describedAs"
- , "plural"
, "cssClass"
, "cssClassFa"
, "cssClassFaPosition"
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/noun/HasNoun.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/noun/HasNoun.java
index 8d376e4857..f376e921d5 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/noun/HasNoun.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/noun/HasNoun.java
@@ -22,11 +22,8 @@ import java.util.Optional;
import org.springframework.lang.Nullable;
-import org.apache.causeway.commons.collections.ImmutableEnumSet;
import org.apache.causeway.core.metamodel.facets.all.i8n.HasMemoizableTranslation;
-import lombok.NonNull;
-
public interface HasNoun
extends HasMemoizableTranslation {
@@ -34,19 +31,21 @@ extends HasMemoizableTranslation {
* Originating text to be translated before use in the UI.
* @return {@code Optional.empty()} if {@code nounForm} is not supported
*/
- Optional<String> text(@NonNull NounForm nounForm);
+ Optional<String> text();
/**
* Translated text to be used in the UI.
* @return {@code Optional.empty()} if {@code nounForm} is not supported
*/
- Optional<String> translated(@NonNull NounForm nounForm);
+ Optional<String> translated();
- ImmutableEnumSet<NounForm> getSupportedNounForms();
+ boolean isNounPresent();
@Override
default void memoizeTranslations() {
- getSupportedNounForms().forEach(this::translated);
+ if(isNounPresent()) {
+ translated();
+ }
}
// -- SHORTCUTS
@@ -55,14 +54,14 @@ extends HasMemoizableTranslation {
* Originating text of singular noun-form to be translated before use in the UI.
*/
default @Nullable String singular() {
- return text(NounForm.SINGULAR).orElse(null);
+ return text().orElse(null);
}
/**
* Translated text of singular noun-form to be used in the UI.
*/
default @Nullable String singularTranslated() {
- return translated(NounForm.SINGULAR).orElse(null);
+ return translated().orElse(null);
}
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 e332d31d6b..e3dd7631ee 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
@@ -24,7 +24,6 @@ import java.util.function.BiConsumer;
import java.util.stream.Collectors;
import org.apache.causeway.applib.services.i18n.TranslationContext;
-import org.apache.causeway.commons.collections.ImmutableEnumSet;
import org.apache.causeway.commons.internal.base._Lazy;
import org.apache.causeway.core.metamodel.facetapi.Facet;
import org.apache.causeway.core.metamodel.facetapi.FacetAbstract;
@@ -64,18 +63,18 @@ implements HasNoun {
}
@Override
- public final Optional<String> text(final @NonNull NounForm nounForm) {
- return nounForms.lookup(nounForm);
+ public boolean isNounPresent() {
+ return nounForms.isNounPresent();
}
@Override
- public final Optional<String> translated(final @NonNull NounForm nounForm) {
- return translatedNounForms.get().lookup(nounForm);
+ public final Optional<String> text() {
+ return nounForms.lookup();
}
@Override
- public ImmutableEnumSet<NounForm> getSupportedNounForms() {
- return nounForms.getSupportedNounForms();
+ public final Optional<String> translated() {
+ return translatedNounForms.get().lookup();
}
@Override
@@ -83,15 +82,15 @@ implements HasNoun {
super.visitAttributes(visitor);
visitor.accept("context", translationContext);
visitor.accept("nounForms",
- getSupportedNounForms()
+ nounForms.getSupportedNounForms()
.stream()
.map(NounForm::name)
.collect(Collectors.joining(", ")));
- getSupportedNounForms()
+ nounForms.getSupportedNounForms()
.forEach(nounForm->{
- visitor.accept("originalText." + nounForm, text(nounForm));
- visitor.accept("translated." + nounForm, translated(nounForm)); // memoizes as a side-effect
+ visitor.accept("originalText." + nounForm, text());
+ visitor.accept("translated." + nounForm, translated()); // memoizes as a side-effect
});
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/noun/NounForms.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/noun/NounForms.java
index c116cb3b8d..1abb9a27fb 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/noun/NounForms.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/i8n/noun/NounForms.java
@@ -26,10 +26,8 @@ import org.springframework.lang.Nullable;
import org.apache.causeway.applib.services.i18n.TranslationContext;
import org.apache.causeway.applib.services.i18n.TranslationService;
import org.apache.causeway.commons.collections.ImmutableEnumSet;
-import org.apache.causeway.commons.internal.exceptions._Exceptions;
import lombok.Builder;
-import lombok.Getter;
import lombok.NonNull;
import lombok.Value;
import lombok.val;
@@ -48,32 +46,8 @@ public class NounForms {
private final @Nullable String singular;
- @Getter(lazy = true)
- final ImmutableEnumSet<NounForm> supportedNounForms = supportedNounForms();
-
- private ImmutableEnumSet<NounForm> supportedNounForms() {
-
- val supportedNounForms = EnumSet.noneOf(NounForm.class);
-
- if(singular!=null) {
- supportedNounForms.add(NounForm.SINGULAR);
- }
-
- return ImmutableEnumSet.from(supportedNounForms);
- }
-
- public Optional<String> lookup(final @NonNull NounForm nounForm) {
- if(!getSupportedNounForms().contains(nounForm)) {
- return Optional.empty();
- };
- switch(nounForm) {
- case SINGULAR:
- // non-null, as nulls are guarded by getSupportedNounForms()
- return Optional.of(getSingular());
- default:
- break;
- }
- throw _Exceptions.unmatchedCase(nounForm);
+ public boolean isNounPresent() {
+ return singular!=null;
}
public NounForms translate(
@@ -83,20 +57,26 @@ public class NounForms {
val builder = NounForms
.builder();
- getSupportedNounForms()
- .forEach(nounForm->{
+ if(isNounPresent()) {
+ builder.singular(translationService.translate(context, singular));
+ }
+ return builder.build();
+ }
- switch(nounForm) {
- case SINGULAR:
- builder.singular(translationService.translate(context, singular));
- break;
- default:
- throw _Exceptions.unmatchedCase(nounForm);
- }
+ public ImmutableEnumSet<NounForm> getSupportedNounForms() {
- });
+ val enumSet = singular!=null
+ ? EnumSet.of(NounForm.SINGULAR)
+ : EnumSet.noneOf(NounForm.class);
- return builder.build();
+ return ImmutableEnumSet.from(enumSet);
}
+ public Optional<String> lookup() {
+ return isNounPresent()
+ ? Optional.of(getSingular())
+ : Optional.empty();
+ }
+
+
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/layout/LayoutFacetUtil.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/layout/LayoutFacetUtil.java
index 72f8a8bd26..e0b6639ba8 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/layout/LayoutFacetUtil.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/layout/LayoutFacetUtil.java
@@ -20,7 +20,11 @@ package org.apache.causeway.core.metamodel.layout;
import java.util.Comparator;
-import org.apache.causeway.applib.annotation.*;
+import org.apache.causeway.applib.annotation.ActionLayout;
+import org.apache.causeway.applib.annotation.BookmarkPolicy;
+import org.apache.causeway.applib.annotation.LabelPosition;
+import org.apache.causeway.applib.annotation.TableDecorator;
+import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.applib.layout.component.ActionLayoutData;
import org.apache.causeway.applib.layout.component.CollectionLayoutData;
import org.apache.causeway.applib.layout.component.DomainObjectLayoutData;
@@ -41,7 +45,6 @@ import org.apache.causeway.core.metamodel.facets.actions.position.ActionPosition
import org.apache.causeway.core.metamodel.facets.all.described.MemberDescribedFacet;
import org.apache.causeway.core.metamodel.facets.all.described.ObjectDescribedFacet;
import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
-import org.apache.causeway.core.metamodel.facets.all.i8n.noun.NounForm;
import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet;
import org.apache.causeway.core.metamodel.facets.all.named.ObjectNamedFacet;
import org.apache.causeway.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet;
@@ -137,7 +140,7 @@ public class LayoutFacetUtil {
final FacetHolder facetHolder) {
facetHolder.lookupNonFallbackFacet(ObjectNamedFacet.class)
- .filter(namedFacet->namedFacet.getSupportedNounForms().contains(NounForm.SINGULAR))
+ .filter(ObjectNamedFacet::isNounPresent)
.map(ObjectNamedFacet::singularTranslated)
.ifPresent(hasNamed::setNamed);
}
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 79cd799c07..3dcabee686 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
@@ -24,7 +24,6 @@ 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.NounForm;
import org.apache.causeway.core.metamodel.facets.all.i8n.noun.NounForms;
import org.apache.causeway.core.metamodel.facets.all.named.ObjectNamedFacet;
import org.apache.causeway.core.metamodel.facets.all.named.ObjectNamedFacetSynthesized;
@@ -44,8 +43,7 @@ extends MetaModelPostProcessorAbstract {
@Override
public void postProcessObject(final ObjectSpecification objectSpecification) {
- if(!(objectSpecification.isEntityOrViewModelOrAbstract()
- || objectSpecification.isInjectable())) {
+ if((!objectSpecification.isEntityOrViewModelOrAbstract() && !objectSpecification.isInjectable())) {
return;
}
@@ -58,7 +56,7 @@ extends MetaModelPostProcessorAbstract {
val singular = topRank
.stream()
- .filter(objectNamedFacet->objectNamedFacet.getSupportedNounForms().contains(NounForm.SINGULAR))
+ .filter(objectNamedFacet->objectNamedFacet.isNounPresent())
.findFirst()
.map(ObjectNamedFacet::singular)
.filter(_Strings::isNotEmpty)
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index e2f04d2039..d8014c37a2 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -56,7 +56,6 @@ import org.apache.causeway.core.metamodel.facetapi.FeatureType;
import org.apache.causeway.core.metamodel.facets.all.described.ObjectDescribedFacet;
import org.apache.causeway.core.metamodel.facets.all.help.HelpFacet;
import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
-import org.apache.causeway.core.metamodel.facets.all.i8n.noun.NounForm;
import org.apache.causeway.core.metamodel.facets.all.named.ObjectNamedFacet;
import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacet;
import org.apache.causeway.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
@@ -516,7 +515,7 @@ implements ObjectSpecification {
@Override
public String getSingularName() {
return lookupFacet(ObjectNamedFacet.class)
- .flatMap(textFacet->textFacet.translated(NounForm.SINGULAR))
+ .flatMap(textFacet->textFacet.translated())
// unexpected code reach, however keep for JUnit testing
.orElseGet(()->String.format(
"(%s has neither title- nor object-named-facet)",