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/12/13 16:45:42 UTC

[isis] branch master updated: ISIS-2918: fine-tuning LocaleValueSemantics

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 805d846  ISIS-2918: fine-tuning LocaleValueSemantics
805d846 is described below

commit 805d846c6c6cce4fc7b6397acb7a481f1e0f2abf
Author: andi-huber <ah...@apache.org>
AuthorDate: Mon Dec 13 17:44:50 2021 +0100

    ISIS-2918: fine-tuning LocaleValueSemantics
---
 .../valuesemantics/LocaleValueSemantics.java       | 27 +++++++++++++++++++---
 .../secman/applib/IsisModuleExtSecmanApplib.java   |  2 ++
 .../secman/applib/user/dom/ApplicationUser.java    |  2 +-
 .../dom/mixins/ApplicationUser_updateLocale.java   | 25 +++++++++++++-------
 4 files changed, 44 insertions(+), 12 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/LocaleValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/LocaleValueSemantics.java
index a1c33ea..e51fe92 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/LocaleValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/LocaleValueSemantics.java
@@ -59,19 +59,40 @@ implements
 
     @Override
     public String toEncodedString(final Locale object) {
-        return object.toLanguageTag();
+        return object!=null
+                ? object.toLanguageTag()
+                : null;
     }
 
     @Override
     public Locale fromEncodedString(final String data) {
-        return Locale.forLanguageTag(data);
+        return data!=null
+                ? Locale.forLanguageTag(data)
+                : null;
     }
 
     // -- RENDERER
 
     @Override
     public String simpleTextPresentation(final ValueSemanticsProvider.Context context, final Locale value) {
-        return value == null ? "" : value.getDisplayLanguage(context.getInteractionContext().getLocale());
+
+        return render(value, v->{
+
+            val language = value.getDisplayLanguage(context.getInteractionContext().getLocale());
+            if(_Strings.isEmpty(language)) {
+                return toEncodedString(v);
+            }
+
+            val country = value.getDisplayCountry(context.getInteractionContext().getLocale());
+            if(_Strings.isEmpty(country)) {
+                return language;
+            }
+
+            return String.format("%s (%s)",
+                    value.getDisplayLanguage(context.getInteractionContext().getLocale()),
+                    value.getDisplayCountry(context.getInteractionContext().getLocale()));
+
+        });
     }
 
     // -- PARSER
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java
index 96aba84..6e7fbc3 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java
@@ -66,6 +66,7 @@ import org.apache.isis.extensions.secman.applib.user.dom.mixins.ApplicationUser_
 import org.apache.isis.extensions.secman.applib.user.dom.mixins.ApplicationUser_updateAtPath;
 import org.apache.isis.extensions.secman.applib.user.dom.mixins.ApplicationUser_updateEmailAddress;
 import org.apache.isis.extensions.secman.applib.user.dom.mixins.ApplicationUser_updateFaxNumber;
+import org.apache.isis.extensions.secman.applib.user.dom.mixins.ApplicationUser_updateLocale;
 import org.apache.isis.extensions.secman.applib.user.dom.mixins.ApplicationUser_updateName;
 import org.apache.isis.extensions.secman.applib.user.dom.mixins.ApplicationUser_updatePassword;
 import org.apache.isis.extensions.secman.applib.user.dom.mixins.ApplicationUser_updatePhoneNumber;
@@ -150,6 +151,7 @@ import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
         ApplicationUser_updateAtPath.class,
         ApplicationUser_updateEmailAddress.class,
         ApplicationUser_updateFaxNumber.class,
+        ApplicationUser_updateLocale.class,
         ApplicationUser_updateName.class,
         ApplicationUser_updatePassword.class,
         ApplicationUser_updatePhoneNumber.class,
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/dom/ApplicationUser.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/dom/ApplicationUser.java
index 052311b..79c44a0 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/dom/ApplicationUser.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/dom/ApplicationUser.java
@@ -391,7 +391,7 @@ public abstract class ApplicationUser
 
     @Property(
             domainEvent = UserLocale.DomainEvent.class,
-            editing = Editing.ENABLED,
+            editing = Editing.DISABLED, //  edit via update button
             maxLength = UserLocale.MAX_LENGTH
     )
     @PropertyLayout(
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/dom/mixins/ApplicationUser_updateLocale.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/dom/mixins/ApplicationUser_updateLocale.java
index bf79eb7..1d20b40 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/dom/mixins/ApplicationUser_updateLocale.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/dom/mixins/ApplicationUser_updateLocale.java
@@ -25,12 +25,12 @@ import java.util.stream.Collectors;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.MemberSupport;
-import org.apache.isis.applib.annotation.MinLength;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.core.metamodel.valuesemantics.LocaleValueSemantics;
 import org.apache.isis.extensions.secman.applib.IsisModuleExtSecmanApplib;
 import org.apache.isis.extensions.secman.applib.user.dom.ApplicationUser;
+import org.apache.isis.extensions.secman.applib.user.dom.ApplicationUser.UserLocale;
 import org.apache.isis.extensions.secman.applib.user.dom.mixins.ApplicationUser_updateLocale.DomainEvent;
 
 import lombok.RequiredArgsConstructor;
@@ -50,23 +50,32 @@ public class ApplicationUser_updateLocale {
     public static class DomainEvent
             extends IsisModuleExtSecmanApplib.ActionDomainEvent<ApplicationUser_updateLocale> {}
 
-    private final ApplicationUser target;
+    private final ApplicationUser mixee;
 
     @MemberSupport public ApplicationUser act(
+            @UserLocale
             final Locale locale) {
-        target.setLocale(locale);
-        return target;
+        mixee.setLocale(locale);
+        return mixee;
     }
 
     @MemberSupport public String disableAct() {
-        return target.isForSelfOrRunAsAdministrator()? null: "Can only update your own user record.";
+        return mixee.isForSelfOrRunAsAdministrator()? null: "Can only update your own user record.";
     }
-    @MemberSupport public Locale defaultLocale() { return target.getLocale(); }
 
-    @MemberSupport public List<Locale> autoCompleteLocale(@MinLength(1) final String search) {
+    @MemberSupport public Locale defaultLocale() {
+        return mixee.getLocale();
+    }
+
+    @MemberSupport public List<Locale> choicesLocale() {
         return LocaleValueSemantics.streamSupportedValues()
-                .filter(locale->locale.toLanguageTag().toLowerCase().contains(search.toLowerCase()))
                 .collect(Collectors.toList());
     }
 
+//    @MemberSupport public List<Locale> autoCompleteLocale(@MinLength(1) final String search) {
+//        return LocaleValueSemantics.streamSupportedValues()
+//                .filter(locale->locale.toLanguageTag().toLowerCase().contains(search.toLowerCase()))
+//                .collect(Collectors.toList());
+//    }
+
 }