You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/06/29 19:47:48 UTC

[isis] branch master updated: ISIS-2780: install ObjectNamedFacet(s) onto mixin's object specs, such that getSingularName() can be used, to infer a (translated friendly) member name for mixin contributed members

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/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new b6c7f70  ISIS-2780: install ObjectNamedFacet(s) onto mixin's object specs, such that getSingularName() can be used, to infer a (translated friendly) member name for mixin contributed members
b6c7f70 is described below

commit b6c7f70416de9985588c3f4dc0f2233bfeb25086
Author: andi-huber <ah...@apache.org>
AuthorDate: Tue Jun 29 21:47:33 2021 +0200

    ISIS-2780: install ObjectNamedFacet(s) onto mixin's object specs, such
    that getSingularName() can be used, to infer a (translated friendly)
    member name for mixin contributed members
---
 .../all/i18n/SynthesizeObjectNamingPostProcessor.java | 19 +++++++++++++++++++
 .../specloader/specimpl/ObjectMemberAbstract.java     |  6 ++++--
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/all/i18n/SynthesizeObjectNamingPostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/all/i18n/SynthesizeObjectNamingPostProcessor.java
index bd86596..7327ff7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/all/i18n/SynthesizeObjectNamingPostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/all/i18n/SynthesizeObjectNamingPostProcessor.java
@@ -53,6 +53,18 @@ extends ObjectSpecificationPostProcessorAbstract {
 
         if(!(objectSpecification.isEntityOrViewModelOrAbstract()
                 || objectSpecification.isManagedBean())) {
+
+            // installed, so a mixin's object spec supports getSingularName() which is used to infer a
+            // (translated friendly) member name for mixin contributed members
+            // see ObjectMemberAbstract#determineNameFrom(final ObjectAction mixinAction)
+            if(objectSpecification.isMixin()) {
+                FacetUtil.addFacet(
+                        new ObjectNamedFacetSynthesized(
+                                nounFormsForMixin(objectSpecification),
+                                objectSpecification)
+                        );
+            }
+
             return;
         }
 
@@ -116,4 +128,11 @@ extends ObjectSpecificationPostProcessorAbstract {
         return StringExtensions.asPluralName(singular);
     }
 
+    private NounForms nounFormsForMixin(ObjectSpecification mixinSpec) {
+        return NounForms.builder()
+            .singular(mixinSpec.getFeatureIdentifier().getClassNaturalName())
+            .plural("") // not expected to be used
+            .build();
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index 8ae318c..0a68a7b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -302,6 +302,7 @@ implements
     }
 
     private static String suffix(final ObjectAction mixinAction) {
+        // getSingularName() implicitly uses an ObjectNamedFacet, which supports translation
         return deriveMemberNameFrom(mixinAction.getOnType().getSingularName());
     }
 
@@ -321,11 +322,12 @@ implements
         final int indexOfSeparator = singularName.lastIndexOf(separator);
         return occursNotAtEnd(singularName, indexOfSeparator)
                 ? singularName.substring(indexOfSeparator + 1)
-                        : singularName;
+                : singularName;
     }
 
     private static boolean occursNotAtEnd(final String singularName, final int indexOfUnderscore) {
-        return indexOfUnderscore != -1 && indexOfUnderscore != singularName.length() - 1;
+        return indexOfUnderscore != -1
+                && indexOfUnderscore != singularName.length() - 1;
     }
 
     // -- toString