You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2020/03/26 09:07:24 UTC

[syncope] branch master updated: Enhancing group search for user edit

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 8d16e1a  Enhancing group search for user edit
8d16e1a is described below

commit 8d16e1ac0ab023fa39432bdfe172f35defac6f8d
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Thu Mar 26 09:53:40 2020 +0100

    Enhancing group search for user edit
---
 .../ui/commons/StyledNotificationBehavior.java     |  4 +-
 .../commons/markup/html/form/AjaxPalettePanel.java | 49 ++++++++--------
 .../ui/commons/panels/NotificationPanel.java       |  6 +-
 .../syncope/client/console/wizards/any/Groups.java | 27 +++++----
 .../console/SyncopeWebApplication.properties       |  1 +
 .../console/SyncopeWebApplication_fr_CA.properties | 66 ++++++++++++----------
 .../console/SyncopeWebApplication_it.properties    |  1 +
 .../console/SyncopeWebApplication_ja.properties    |  1 +
 .../console/SyncopeWebApplication_pt_BR.properties |  5 +-
 .../console/SyncopeWebApplication_ru.properties    |  1 +
 10 files changed, 89 insertions(+), 72 deletions(-)

diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/StyledNotificationBehavior.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/StyledNotificationBehavior.java
index 00cac9c..dbaacbf 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/StyledNotificationBehavior.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/StyledNotificationBehavior.java
@@ -46,8 +46,8 @@ public class StyledNotificationBehavior extends NotificationBehavior {
     public static String jQueryShow(final CharSequence message, final String widget, final String level) {
         return String.format("%s.options.autoHideAfter = %s; %s.show( { message: '%s' } , '%s');",
                 widget,
-                Notification.SUCCESS.equalsIgnoreCase(level)
-                || Notification.INFO.equalsIgnoreCase(level) ? AUTOHIDEAFTER_SUCCESS : AUTOHIDEAFTER_ERROR,
+                Notification.SUCCESS.equalsIgnoreCase(level) || Notification.INFO.equalsIgnoreCase(level)
+                ? AUTOHIDEAFTER_SUCCESS : AUTOHIDEAFTER_ERROR,
                 widget,
                 message,
                 level.toLowerCase());
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.java
index 4b8c1f5..ceb1b55 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.java
@@ -30,7 +30,9 @@ import org.apache.commons.collections4.ListUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.ui.commons.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
+import org.apache.syncope.client.ui.commons.pages.BaseWebPage;
 import org.apache.wicket.Component;
+import org.apache.wicket.Session;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.extensions.markup.html.form.palette.Palette;
@@ -58,15 +60,16 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
 
     public AjaxPalettePanel(
             final String id, final IModel<List<T>> model, final Builder.Query<T> choices, final Builder<T> builder) {
+
         super(id, builder.name == null ? id : builder.name, model);
 
-        choicesModel = new PaletteLoadableDetachableModel(builder) {
+        choicesModel = new PaletteLoadableDetachableModel() {
 
             private static final long serialVersionUID = -108100712154481840L;
 
             @Override
             protected List<T> getChoices() {
-                return choices.execute(getFilter());
+                return choices.execute(queryFilter.getObject());
             }
         };
         initialize(model, builder);
@@ -76,14 +79,14 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
             final String id, final IModel<List<T>> model, final IModel<List<T>> choices, final Builder<T> builder) {
         super(id, builder.name == null ? id : builder.name, model);
 
-        choicesModel = new PaletteLoadableDetachableModel(builder) {
+        choicesModel = new PaletteLoadableDetachableModel() {
 
             private static final long serialVersionUID = -108100712154481840L;
 
             @Override
             protected List<T> getChoices() {
                 return builder.filtered
-                        ? getFilteredList(choices.getObject(), getFilter().replaceAll("\\*", "\\.\\*"))
+                        ? getFilteredList(choices.getObject(), queryFilter.getObject().replaceAll("\\*", "\\.\\*"))
                         : choices.getObject();
             }
         };
@@ -176,6 +179,7 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
         Form<?> form = new Form<>("form");
         add(form.setEnabled(builder.filtered).setVisible(builder.filtered));
 
+        queryFilter.setObject(builder.filter);
         AjaxTextFieldPanel filter = new AjaxTextFieldPanel("filter", "filter", queryFilter, false);
         form.add(filter.hideLabel().setOutputMarkupId(true));
 
@@ -185,6 +189,12 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
 
             @Override
             protected void onSubmit(final AjaxRequestTarget target) {
+                if (StringUtils.isEmpty(queryFilter.getObject())) {
+                    Session.get().warn(getString("nomatch"));
+                    ((BaseWebPage) getPage()).getNotificationPanel().refresh(target);
+                } else {
+                    ((BaseWebPage) getPage()).getNotificationPanel().hide(target);
+                }
                 target.add(palette);
             }
         };
@@ -310,19 +320,8 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
 
         private static final long serialVersionUID = -7745220313769774616L;
 
-        private final Builder<T> builder;
-
-        PaletteLoadableDetachableModel(final Builder<T> builder) {
-            super();
-            this.builder = builder;
-        }
-
         protected abstract List<T> getChoices();
 
-        protected String getFilter() {
-            return StringUtils.isBlank(queryFilter.getObject()) ? builder.filter : queryFilter.getObject();
-        }
-
         @Override
         protected List<T> load() {
             final List<T> selected = availableBefore.isEmpty()
@@ -335,14 +334,14 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
         }
 
         private List<T> getSelectedList(final Collection<T> choices, final String selection) {
-            final IChoiceRenderer<? super T> renderer = palette.getChoiceRenderer();
-            final List<T> selected = new ArrayList<>();
+            IChoiceRenderer<? super T> renderer = palette.getChoiceRenderer();
+            List<T> selected = new ArrayList<>();
 
-            final Map<T, String> idForChoice = new HashMap<>();
+            Map<T, String> idForChoice = new HashMap<>();
             choices.forEach(choice -> idForChoice.put(choice, renderer.getIdValue(choice, 0)));
 
-            for (final String id : Strings.split(selection, ',')) {
-                final Iterator<T> iter = choices.iterator();
+            for (String id : Strings.split(selection, ',')) {
+                Iterator<T> iter = choices.iterator();
                 boolean found = false;
                 while (!found && iter.hasNext()) {
                     final T choice = iter.next();
@@ -358,16 +357,16 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
         }
 
         protected List<T> getFilteredList(final Collection<T> choices, final String filter) {
-            final IChoiceRenderer<? super T> renderer = palette.getChoiceRenderer();
-            final List<T> selected = new ArrayList<>(choices.size());
+            IChoiceRenderer<? super T> renderer = palette.getChoiceRenderer();
+            List<T> selected = new ArrayList<>(choices.size());
 
-            final Map<T, String> idForChoice = new HashMap<>();
+            Map<T, String> idForChoice = new HashMap<>();
             choices.forEach(choice -> idForChoice.put(choice, renderer.getIdValue(choice, 0)));
 
-            final Pattern pattern = Pattern.compile(filter, Pattern.CASE_INSENSITIVE);
+            Pattern pattern = Pattern.compile(filter, Pattern.CASE_INSENSITIVE);
 
             choices.forEach(choice -> {
-                final String idValue = idForChoice.get(choice);
+                String idValue = idForChoice.get(choice);
                 if (pattern.matcher(idValue).matches()) {
                     selected.add(choice);
                 }
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/panels/NotificationPanel.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/panels/NotificationPanel.java
index 74311ed..2cb4821 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/panels/NotificationPanel.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/panels/NotificationPanel.java
@@ -41,7 +41,7 @@ public class NotificationPanel extends Panel
     public NotificationPanel(final String id) {
         super(id);
 
-        final Options options = new Options();
+        Options options = new Options();
         options.set("appendTo", "'#appendto'");
         options.set("stacking", "'up'");
         options.set("templates",
@@ -63,6 +63,10 @@ public class NotificationPanel extends Panel
         add(notification);
     }
 
+    public final void hide(final IPartialPageRequestHandler handler) {
+        this.notification.hide(handler);
+    }
+
     public final void refresh(final IPartialPageRequestHandler handler) {
         this.getModelObject().forEach(message -> {
             if (message.isError()) {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
index 6661345..ba6433e 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.client.console.wizards.any;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -128,7 +129,7 @@ public class Groups extends AbstractGroups {
                         }
                     });
 
-            groupsContainer.add(builder.setAllowOrder(true).withFilter().build("groups",
+            groupsContainer.add(builder.setAllowOrder(true).withFilter("*").build("groups",
                     new ListModel<MembershipTO>() {
 
                 private static final long serialVersionUID = -2583290457773357445L;
@@ -144,16 +145,20 @@ public class Groups extends AbstractGroups {
 
                 @Override
                 public List<MembershipTO> execute(final String filter) {
-                    return (StringUtils.isEmpty(filter) || "*".equals(filter)
-                            ? groupsModel.getObject()
-                            : groupRestClient.search(
-                                    anyTO.getRealm(),
-                                    SyncopeClient.getGroupSearchConditionBuilder().
-                                            isAssignable().and().is("name").equalToIgnoreCase(filter).query(),
-                                    1, Constants.MAX_GROUP_LIST_SIZE,
-                                    new SortParam<>("name", true),
-                                    null)).stream().map(input -> new MembershipTO.Builder(input.getKey())
-                            .groupName(input.getName()).build()).collect(Collectors.toList());
+                    return StringUtils.isEmpty(filter)
+                            ? Collections.emptyList()
+                            : ("*".equals(filter)
+                                    ? groupsModel.getObject()
+                                    : groupRestClient.search(
+                                            anyTO.getRealm(),
+                                            SyncopeClient.getGroupSearchConditionBuilder().
+                                                    isAssignable().and("name").equalToIgnoreCase(filter).query(),
+                                            1, Constants.MAX_GROUP_LIST_SIZE,
+                                            new SortParam<>("name", true),
+                                            null)).stream().
+                                    map(group -> new MembershipTO.Builder(group.getKey()).
+                                    groupName(group.getName()).build()).
+                                    collect(Collectors.toList());
                 }
             }).hideLabel().setOutputMarkupId(true));
 
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication.properties
index fdfc2ef..4bc667c 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication.properties
@@ -77,3 +77,4 @@ after=After
 networkservices=Network Services
 keymaster=Keymaster
 domains=Domains
+nomatch=No matches found
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_fr_CA.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_fr_CA.properties
index f3824d7..4550a2c 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_fr_CA.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_fr_CA.properties
@@ -20,56 +20,60 @@ configuration=Configuration
 resources=Ressources
 connectors=Raccordements
 reports=Rapports
-tasks=T�ches
-logout=D�connexion
-schema=Sch�ma
-operation_succeeded=Op�ration compl�t�e avec succ�s
-operation_error=Une erreur s'est produite pendant l'op�ration
+tasks=T\u00e2ches
+logout=D\u00e9connexion
+schema=Sch\u00e9ma
+operation_succeeded=Op\u00e9ration compl\u00e9t\u00e9e avec succ\u00e8s
+operation_error=Une erreur s'est produite pendant l'op\u00e9ration
 alert=Alerte:
-confirmDelete=Voulez-vous vraiment supprimer le(s) article(s) s�lectionn�(s)?
-confirmUnlink=Voulez-vous vraiment supprimer le lien entre le(s) article(s) s�lectionn�(s) et la ressource?
-confirmUnassign=Souhaitez-vous vraiment supprimer l'affectation entre le(s) article(s) s�lectionn�(s) et la ressource?
-confirmDeprovision=Souhaitez-vous vraiment d�provisionner le(s) article(s) s�lectionn�(s)?
-confirmProvision=Souhaitez-vous vraiment approvisionner le(s) article(s) s�lectionn�(s)?
-confirmClone=Voulez-vous vraiment cloner le(s) article(s) s�lectionn�(s)?
+confirmDelete=Voulez-vous vraiment supprimer le(s) article(s) s\u00e9lectionn\u00e9(s)?
+confirmUnlink=Voulez-vous vraiment supprimer le lien entre le(s) article(s) s\u00e9lectionn\u00e9(s) et la ressource?
+confirmUnassign=Souhaitez-vous vraiment supprimer l'affectation entre le(s) article(s) s\u00e9lectionn\u00e9(s) et la ressource?
+confirmDeprovision=Souhaitez-vous vraiment d\u00e9provisionner le(s) article(s) s\u00e9lectionn\u00e9(s)?
+confirmProvision=Souhaitez-vous vraiment approvisionner le(s) article(s) s\u00e9lectionn\u00e9(s)?
+confirmClone=Voulez-vous vraiment cloner le(s) article(s) s\u00e9lectionn\u00e9(s)?
 dropDownChoiceField.nullValid=Faire un choix
-DateTimeField$HoursValidator=La valeur horaire doit �tre dans la gamme (1, 12)
+DateTimeField$HoursValidator=La valeur horaire doit \u00eatre dans la gamme (1, 12)
 error=Erreur
-generic_error=Une erreur s'est produite pendant l'op�ration
-id=Cl�
+generic_error=Une erreur s'est produite pendant l'op\u00e9ration
+id=Cl\u00e9
 name=Nom
 palette.available=Disponible
-palette.selected=S�lectionn�
+palette.selected=S\u00e9lectionn\u00e9
 jexl_info=Ce champ requiert une expression JEXL, par exemple:
-jexl_ex1=nom de famille + ',' + pr�nom
+jexl_ex1=nom de famille + ',' + pr\u00e9nom
 jexl_ex2=new.' + nom de famille
-jexl_syntax_url=R�f�rence JEXL compl�te
-create=Cr�er
-key=Cl�
+jexl_syntax_url=R\u00e9f\u00e9rence JEXL compl\u00e8te
+create=Cr\u00e9er
+key=Cl\u00e9
 types=Types
 dashboard=Page d'accueil
 realms=Domaines
 topology=Topologie
-roles=R�les
+roles=R\u00f4les
 policies=Politiques
 workflow=Flux
 logs=Registres
 layouts=Dispositions
 notifications=Notifications
-parameters=Param�tres
+parameters=Param\u00e8tres
 extensions=Extensions
-NavigatorLabel=Affichage des rang�es ${from} � ${to} de ${of}
-displayRows=Rang�es � afficher
+NavigatorLabel=Affichage des rang\u00e9es ${from} \u00e0 ${to} de ${of}
+displayRows=Rang\u00e9es \u00e0 afficher
 OrderByLink.CSS.ascending=tri_asc
 OrderByLink.CSS.descending=tri_desc
 OrderByLink.CSS.none=tri
-entitlements=Droits et privil�ges
+entitlements=Droits et privil\u00e8ges
 audit=Audit
-connectors.confirm.reload=Cette demande est potentiellement dangereuse pour le d�roulement des op�rations, continuer?
-intAttrNameInfo.help=En plus des attributs auto-compl�t�s, vous pouvez �galement faire r�f�rence � des groupes, des objets, des appartenances ou des privil�ges, par exemple:
-confirmGlobalLogout=Voulez-vous vraiment effectuer une d�connexion compl�te?
-implementations=Impl�mentations
-timeout=L'op�ration prend trop de temps: elle sera ex�cut�e en arri�re-plan. Veuillez v�rifier plus tard le r�sultat (les erreurs ne seront pas d�tect�es).
-security=S�curit�
+connectors.confirm.reload=Cette demande est potentiellement dangereuse pour le d\u00e9roulement des op\u00e9rations, continuer?
+intAttrNameInfo.help=En plus des attributs auto-compl\u00e9t\u00e9s, vous pouvez \u00e9galement faire r\u00e9f\u00e9rence \u00e0 des groupes, des objets, des appartenances ou des privil\u00e8ges, par exemple:
+confirmGlobalLogout=Voulez-vous vraiment effectuer une d\u00e9connexion compl\u00e8te?
+implementations=Impl\u00e9mentations
+timeout=L'op\u00e9ration prend trop de temps: elle sera ex\u00e9cut\u00e9e en arri\u00e8re-plan. Veuillez v\u00e9rifier plus tard le r\u00e9sultat (les erreurs ne seront pas d\u00e9tect\u00e9es).
+security=S\u00e9curit\u00e9
 before=Avant
-after=Apr�s
+after=Apr\u00e8s
+networkservices=Services r\u00e9seau
+keymaster=Keymaster
+domains=Domaines
+nomatch=Aucune correspondance trouv\u00e9e
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_it.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_it.properties
index 5dbcbe1..40a9a30 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_it.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_it.properties
@@ -77,3 +77,4 @@ after=Dopo
 networkservices=Servizi di Rete
 keymaster=Keymaster
 domains=Domini
+nomatch=Nessun risultato trovato
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ja.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ja.properties
index 87bc444..4d52f95 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ja.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ja.properties
@@ -75,3 +75,4 @@ after=\u5f8c
 networkservices=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30b5\u30fc\u30d3\u30b9
 keymaster=\u30ad\u30fc\u30de\u30b9\u30bf\u30fc
 domains=\u30c9\u30e1\u30a4\u30f3
+nomatch=No matches found
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_pt_BR.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_pt_BR.properties
index 4da4f99..995c12c 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_pt_BR.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_pt_BR.properties
@@ -74,6 +74,7 @@ timeout=Operation is taking too long: it will be executed in background. Please
 security=Security
 before=Before
 after=After
-networkservices=Network Services
+networkservices=Servi\u00e7os de Rede
 keymaster=Keymaster
-domains=Domains
+domains=Dom\u00ednios
+nomatch=Nenhuma correspond\u00eancia encontrada
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ru.properties b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ru.properties
index 6d3c060..5a94577 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ru.properties
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/SyncopeWebApplication_ru.properties
@@ -76,3 +76,4 @@ after=After
 networkservices=Network Services
 keymaster=Keymaster
 domains=Domains
+nomatch=No matches found