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