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)",