This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch 3_0_X
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/3_0_X by this push:
     new 21609f06a0 Allow for easier override of supported locales for Console 
and Enduser login forms
21609f06a0 is described below

commit 21609f06a01565ff99d07d09b15558e54cc15050
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Fri May 19 10:03:58 2023 +0200

    Allow for easier override of supported locales for Console and Enduser 
login forms
---
 .../syncope/client/ui/commons/BaseLogin.java       |  24 ++--
 .../syncope/client/ui/commons/BaseSession.java     |  12 ++
 .../client/console/SyncopeWebApplication.java      |   1 -
 .../console/panels/SchemaTypeWizardBuilder.java    | 150 ++++++++++-----------
 .../client/enduser/SyncopeWebApplication.java      |   5 -
 pom.xml                                            |   2 +-
 6 files changed, 97 insertions(+), 97 deletions(-)

diff --git 
a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseLogin.java
 
b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseLogin.java
index bc0f008d6a..82c7eb3dc8 100644
--- 
a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseLogin.java
+++ 
b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseLogin.java
@@ -63,26 +63,22 @@ public abstract class BaseLogin extends WebPage {
 
     protected static final Logger LOG = 
LoggerFactory.getLogger(BaseLogin.class);
 
-    public static final List<Locale> SUPPORTED_LOCALES = List.of(
-            Locale.ENGLISH, Locale.CANADA_FRENCH, Locale.ITALIAN, 
Locale.JAPANESE, new Locale("pt", "BR"),
-            new Locale("ru"));
-
     @SpringBean
-    private DomainOps domainOps;
+    protected DomainOps domainOps;
 
     protected final NotificationPanel notificationPanel;
 
     protected final StatelessForm<Void> form;
 
-    private final TextField<String> usernameField;
+    protected final TextField<String> usernameField;
 
-    private final TextField<String> passwordField;
+    protected final TextField<String> passwordField;
 
     protected String notificationMessage;
 
     protected String notificationLevel;
 
-    private final LoadableDetachableModel<List<String>> domains = new 
LoadableDetachableModel<>() {
+    protected final LoadableDetachableModel<List<String>> domains = new 
LoadableDetachableModel<>() {
 
         private static final long serialVersionUID = 4659376149825914247L;
 
@@ -232,11 +228,11 @@ public abstract class BaseLogin extends WebPage {
     /**
      * Inner class which implements (custom) Locale DropDownChoice component.
      */
-    private class LocaleDropDown extends DropDownChoice<Locale> {
+    protected class LocaleDropDown extends DropDownChoice<Locale> {
 
         private static final long serialVersionUID = 2349382679992357202L;
 
-        private class LocaleRenderer extends ChoiceRenderer<Locale> {
+        protected class LocaleRenderer extends ChoiceRenderer<Locale> {
 
             private static final long serialVersionUID = -3657529581555164741L;
 
@@ -246,8 +242,8 @@ public abstract class BaseLogin extends WebPage {
             }
         }
 
-        LocaleDropDown(final String id) {
-            super(id, SUPPORTED_LOCALES);
+        protected LocaleDropDown(final String id) {
+            super(id, getBaseSession().getSupportedLocales());
 
             setChoiceRenderer(new LocaleRenderer());
             setModel(new IModel<>() {
@@ -277,7 +273,9 @@ public abstract class BaseLogin extends WebPage {
                     getHeader(HttpHeaders.ACCEPT_LANGUAGE);
             if (StringUtils.isNotBlank(acceptLanguage)) {
                 try {
-                    filtered = 
Locale.filter(Locale.LanguageRange.parse(acceptLanguage), SUPPORTED_LOCALES);
+                    filtered = Locale.filter(
+                            Locale.LanguageRange.parse(acceptLanguage),
+                            getBaseSession().getSupportedLocales());
                 } catch (Exception e) {
                     LOG.debug("Could not parse {} HTTP header value '{}'",
                             HttpHeaders.ACCEPT_LANGUAGE, acceptLanguage, e);
diff --git 
a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseSession.java
 
b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseSession.java
index acd67b4b66..6790183fb8 100644
--- 
a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseSession.java
+++ 
b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseSession.java
@@ -18,6 +18,8 @@
  */
 package org.apache.syncope.client.ui.commons;
 
+import java.util.List;
+import java.util.Locale;
 import java.util.concurrent.Callable;
 import java.util.concurrent.Future;
 import org.apache.syncope.client.lib.SyncopeClient;
@@ -76,4 +78,14 @@ public interface BaseSession {
     void onException(Exception e);
 
     <T> Future<T> execute(Callable<T> command);
+
+    default List<Locale> getSupportedLocales() {
+        return List.of(
+                Locale.ENGLISH,
+                Locale.CANADA_FRENCH,
+                Locale.ITALIAN,
+                Locale.JAPANESE,
+                new Locale("pt", "BR"),
+                new Locale("ru"));
+    }
 }
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeWebApplication.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeWebApplication.java
index a5de408b57..b6cf37835d 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeWebApplication.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeWebApplication.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console;
 
-
 import 
com.giffing.wicket.spring.boot.starter.app.WicketBootSecuredWebApplication;
 import de.agilecoders.wicket.core.Bootstrap;
 import de.agilecoders.wicket.core.settings.BootstrapSettings;
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypeWizardBuilder.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypeWizardBuilder.java
index 292ccffbd9..0880085295 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypeWizardBuilder.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypeWizardBuilder.java
@@ -27,12 +27,12 @@ import java.util.stream.Collectors;
 import org.apache.commons.lang3.LocaleUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.MutablePair;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.SyncopeWebApplication;
 import org.apache.syncope.client.console.rest.SchemaRestClient;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.client.console.wizards.BaseAjaxWizardBuilder;
-import org.apache.syncope.client.ui.commons.BaseLogin;
 import 
org.apache.syncope.client.ui.commons.markup.html.form.AjaxDropDownChoicePanel;
 import 
org.apache.syncope.client.ui.commons.markup.html.form.AjaxTextFieldPanel;
 import org.apache.syncope.common.lib.to.DerSchemaTO;
@@ -122,8 +122,7 @@ public class SchemaTypeWizardBuilder extends 
BaseAjaxWizardBuilder<SchemaTO> {
                 default:
                     detailsPanel = new PlainSchemaDetails("details", 
(PlainSchemaTO) modelObject);
             }
-            detailsPanel.setOutputMarkupId(true);
-            add(detailsPanel);
+            add(detailsPanel.setOutputMarkupId(true));
         }
     }
 
@@ -139,82 +138,80 @@ public class SchemaTypeWizardBuilder extends 
BaseAjaxWizardBuilder<SchemaTO> {
             modelObject.getLabels().forEach(
                     (locale, display) -> 
translations.getObject().add(MutablePair.of(locale, display)));
 
-            ListView<MutablePair<Locale, String>> labels =
-                new ListView<>("labels", translations) {
+            ListView<MutablePair<Locale, String>> labels = new 
ListView<>("labels", translations) {
 
-                    private static final long serialVersionUID = 
-8746795666847966508L;
+                private static final long serialVersionUID = 
-8746795666847966508L;
 
-                    @Override
-                    protected void populateItem(final 
ListItem<MutablePair<Locale, String>> item) {
-                        MutablePair<Locale, String> entry = 
item.getModelObject();
-
-                        AjaxTextFieldPanel locale = new 
AjaxTextFieldPanel("locale", "locale", new Model<>(), true);
-                        locale.getField().setModel(new IModel<>() {
-
-                            private static final long serialVersionUID = 
1500045101360533133L;
-
-                            @Override
-                            public String getObject() {
-                                return entry.getLeft() == null ? null : 
entry.getLeft().toString();
-                            }
-
-                            @Override
-                            public void setObject(final String object) {
-                                entry.setLeft(LocaleUtils.toLocale(object));
-                            }
-                        });
-                        locale.setRequired(true).hideLabel();
-                        locale.setChoices(BaseLogin.SUPPORTED_LOCALES.stream().
+                @Override
+                protected void populateItem(final ListItem<MutablePair<Locale, 
String>> item) {
+                    MutablePair<Locale, String> entry = item.getModelObject();
+
+                    AjaxTextFieldPanel locale = new 
AjaxTextFieldPanel("locale", "locale", new Model<>(), true);
+                    locale.getField().setModel(new IModel<>() {
+
+                        private static final long serialVersionUID = 
1500045101360533133L;
+
+                        @Override
+                        public String getObject() {
+                            return entry.getLeft() == null ? null : 
entry.getLeft().toString();
+                        }
+
+                        @Override
+                        public void setObject(final String object) {
+                            entry.setLeft(LocaleUtils.toLocale(object));
+                        }
+                    });
+                    locale.setRequired(true).hideLabel();
+                    
locale.setChoices(SyncopeConsoleSession.get().getSupportedLocales().stream().
                             
map(Objects::toString).collect(Collectors.toList()));
-                        locale.addValidator(validatable -> {
-                            try {
-                                LocaleUtils.toLocale(validatable.getValue());
-                            } catch (Exception e) {
-                                LOG.error("Invalid Locale: {}", 
validatable.getValue(), e);
-                                validatable.error(new ValidationError("Invalid 
Locale: " + validatable.getValue()));
-
-                                
RequestCycle.get().find(AjaxRequestTarget.class).
+                    locale.addValidator(validatable -> {
+                        try {
+                            LocaleUtils.toLocale(validatable.getValue());
+                        } catch (Exception e) {
+                            LOG.error("Invalid Locale: {}", 
validatable.getValue(), e);
+                            validatable.error(new ValidationError("Invalid 
Locale: " + validatable.getValue()));
+
+                            RequestCycle.get().find(AjaxRequestTarget.class).
                                     ifPresent(target -> 
target.add(Labels.this));
-                            }
-                        });
-                        item.add(locale);
-
-                        AjaxTextFieldPanel display = new 
AjaxTextFieldPanel("display", "display", new Model<>());
-                        display.getField().setModel(new IModel<>() {
-
-                            private static final long serialVersionUID = 
1500045101360533133L;
-
-                            @Override
-                            public String getObject() {
-                                return entry.getRight();
-                            }
-
-                            @Override
-                            public void setObject(final String object) {
-                                entry.setRight(object);
-                            }
-                        });
-                        display.setRequired(true).hideLabel();
-                        item.add(display);
-
-                        ActionsPanel<Serializable> actions = new 
ActionsPanel<>("toRemove", null);
-                        actions.add(new ActionLink<>() {
-
-                            private static final long serialVersionUID = 
-3722207913631435501L;
-
-                            @Override
-                            public void onClick(final AjaxRequestTarget 
target, final Serializable ignore) {
-                                
translations.getObject().remove(item.getIndex());
-
-                                item.getParent().removeAll();
-                                target.add(Labels.this);
-                            }
-                        }, ActionLink.ActionType.DELETE, 
IdRepoEntitlement.SCHEMA_UPDATE, true).hideLabel();
-                        item.add(actions);
-                    }
-                };
-            labels.setReuseItems(true);
-            add(labels);
+                        }
+                    });
+                    item.add(locale);
+
+                    AjaxTextFieldPanel display = new 
AjaxTextFieldPanel("display", "display", new Model<>());
+                    display.getField().setModel(new IModel<>() {
+
+                        private static final long serialVersionUID = 
1500045101360533133L;
+
+                        @Override
+                        public String getObject() {
+                            return entry.getRight();
+                        }
+
+                        @Override
+                        public void setObject(final String object) {
+                            entry.setRight(object);
+                        }
+                    });
+                    display.setRequired(true).hideLabel();
+                    item.add(display);
+
+                    ActionsPanel<Serializable> actions = new 
ActionsPanel<>("toRemove", null);
+                    actions.add(new ActionLink<>() {
+
+                        private static final long serialVersionUID = 
-3722207913631435501L;
+
+                        @Override
+                        public void onClick(final AjaxRequestTarget target, 
final Serializable ignore) {
+                            translations.getObject().remove(item.getIndex());
+
+                            item.getParent().removeAll();
+                            target.add(Labels.this);
+                        }
+                    }, ActionLink.ActionType.DELETE, 
IdRepoEntitlement.SCHEMA_UPDATE, true).hideLabel();
+                    item.add(actions);
+                }
+            };
+            add(labels.setReuseItems(true));
 
             IndicatingAjaxButton addLabel = new 
IndicatingAjaxButton("addLabel") {
 
@@ -226,8 +223,7 @@ public class SchemaTypeWizardBuilder extends 
BaseAjaxWizardBuilder<SchemaTO> {
                     target.add(Labels.this);
                 }
             };
-            addLabel.setDefaultFormProcessing(false);
-            add(addLabel);
+            add(addLabel.setDefaultFormProcessing(false));
         }
     }
 }
diff --git 
a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeWebApplication.java
 
b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeWebApplication.java
index 191102a92d..0647284544 100644
--- 
a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeWebApplication.java
+++ 
b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeWebApplication.java
@@ -26,8 +26,6 @@ import de.agilecoders.wicket.core.settings.BootstrapSettings;
 import de.agilecoders.wicket.core.settings.IBootstrapSettings;
 import de.agilecoders.wicket.core.settings.SingleThemeProvider;
 import java.io.InputStream;
-import java.util.List;
-import java.util.Locale;
 import java.util.Map;
 import 
org.apache.syncope.client.enduser.init.ClassPathScanImplementationLookup;
 import org.apache.syncope.client.enduser.layout.UserFormLayoutInfo;
@@ -73,9 +71,6 @@ public class SyncopeWebApplication extends 
WicketBootSecuredWebApplication {
 
     protected static final Logger LOG = 
LoggerFactory.getLogger(SyncopeWebApplication.class);
 
-    public static final List<Locale> SUPPORTED_LOCALES = List.of(
-            Locale.ENGLISH, Locale.ITALIAN, new Locale("pt", "BR"), new 
Locale("ru"), Locale.JAPANESE);
-
     protected static final JsonMapper MAPPER = 
JsonMapper.builder().findAndAddModules().build();
 
     public static SyncopeWebApplication get() {
diff --git a/pom.xml b/pom.xml
index 8345a98658..6e6f24b0ea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1650,7 +1650,7 @@ under the License.
         <plugin>
           <groupId>org.codehaus.cargo</groupId>
           <artifactId>cargo-maven3-plugin</artifactId>
-          <version>1.10.6</version>
+          <version>1.10.7</version>
           <configuration>
             <container>
               <log>${project.build.directory}/log/cargo.log</log>

Reply via email to