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/04/17 12:26:24 UTC

[syncope] branch 2_1_X updated: White noise: cleanup and small improvements

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

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


The following commit(s) were added to refs/heads/2_1_X by this push:
     new ec67be0  White noise: cleanup and small improvements
ec67be0 is described below

commit ec67be071e8373ea5dedfb3f55cbaea18b228832
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Fri Apr 17 14:26:07 2020 +0200

    White noise: cleanup and small improvements
---
 .../syncope/client/console/layout/AnyLayout.java   |   2 +-
 .../console/notifications/NotificationWrapper.java |   2 +-
 .../syncope/client/console/panels/BeanPanel.java   |   7 +-
 .../client/console/panels/search/SearchUtils.java  |   7 +-
 .../client/console/reports/ReportletWrapper.java   |   4 +-
 .../status/ResourceStatusDirectoryPanel.java       |   2 +-
 .../client/console/tasks/PushTaskWrapper.java      |   2 +-
 .../wicket/markup/html/form/AjaxPalettePanel.java  | 196 ++++++++++++---------
 .../wicket/markup/html/form/NonI18nPalette.java    |  14 +-
 .../client/console/wizards/DynRealmWrapper.java    |   3 +-
 .../syncope/client/console/wizards/any/Groups.java |   1 -
 .../console/implementations/MyPushActions.groovy   |   2 +-
 12 files changed, 132 insertions(+), 110 deletions(-)

diff --git a/client/console/src/main/java/org/apache/syncope/client/console/layout/AnyLayout.java b/client/console/src/main/java/org/apache/syncope/client/console/layout/AnyLayout.java
index 2750851..1978f78 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/layout/AnyLayout.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/layout/AnyLayout.java
@@ -30,7 +30,7 @@ public class AnyLayout implements Serializable {
     private static final long serialVersionUID = 488645029994410970L;
 
     private String anyPanelClass = AnyPanel.class.getName();
-    
+
     @JsonProperty("USER")
     private UserFormLayoutInfo user;
 
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWrapper.java b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWrapper.java
index c100374..e58f485 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWrapper.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWrapper.java
@@ -81,7 +81,7 @@ public class NotificationWrapper implements Serializable {
         } else {
             Map<String, String> res = new HashMap<>();
             for (Pair<String, List<SearchClause>> pair : this.aboutClauses) {
-                AbstractFiqlSearchConditionBuilder builder;
+                AbstractFiqlSearchConditionBuilder<?, ?, ?> builder;
                 switch (pair.getLeft()) {
                     case "USER":
                         builder = SyncopeClient.getUserSearchConditionBuilder();
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
index 6fb90bf..e4e91c1 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
@@ -75,7 +75,7 @@ public class BeanPanel<T extends Serializable> extends Panel {
 
     private final List<String> excluded;
 
-    private final Map<String, Pair<AbstractFiqlSearchConditionBuilder, List<SearchClause>>> sCondWrapper;
+    private final Map<String, Pair<AbstractFiqlSearchConditionBuilder<?, ?, ?>, List<SearchClause>>> sCondWrapper;
 
     public BeanPanel(final String id, final IModel<T> bean, final String... excluded) {
         this(id, bean, null, excluded);
@@ -84,7 +84,7 @@ public class BeanPanel<T extends Serializable> extends Panel {
     public BeanPanel(
             final String id,
             final IModel<T> bean,
-            final Map<String, Pair<AbstractFiqlSearchConditionBuilder, List<SearchClause>>> sCondWrapper,
+            final Map<String, Pair<AbstractFiqlSearchConditionBuilder<?, ?, ?>, List<SearchClause>>> sCondWrapper,
             final String... excluded) {
         super(id, bean);
         setOutputMarkupId(true);
@@ -147,8 +147,7 @@ public class BeanPanel<T extends Serializable> extends Panel {
                         clauses = SearchUtils.getSearchClauses(fiql);
                     }
 
-                    final AbstractFiqlSearchConditionBuilder builder;
-
+                    final AbstractFiqlSearchConditionBuilder<?, ?, ?> builder;
                     switch (scondAnnot.type()) {
                         case "USER":
                             panel = new UserSearchPanel.Builder(
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
index 95c0663..5db3153 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
@@ -216,13 +216,16 @@ public final class SearchUtils implements Serializable {
         return clause;
     }
 
-    public static String buildFIQL(final List<SearchClause> clauses, final AbstractFiqlSearchConditionBuilder builder) {
+    public static String buildFIQL(
+            final List<SearchClause> clauses,
+            final AbstractFiqlSearchConditionBuilder<?, ?, ?> builder) {
+
         return buildFIQL(clauses, builder, Collections.emptyMap(), NO_CUSTOM_CONDITION);
     }
 
     public static String buildFIQL(
             final List<SearchClause> clauses,
-            final AbstractFiqlSearchConditionBuilder builder,
+            final AbstractFiqlSearchConditionBuilder<?, ?, ?> builder,
             final Map<String, PlainSchemaTO> availableSchemaTypes,
             final Function<SearchClause, CompleteCondition> customCondition) {
 
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletWrapper.java b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletWrapper.java
index be628a7..574804a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletWrapper.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportletWrapper.java
@@ -40,7 +40,7 @@ public class ReportletWrapper implements Serializable {
 
     private ReportletConf conf;
 
-    private final Map<String, Pair<AbstractFiqlSearchConditionBuilder, List<SearchClause>>> scondWrapper;
+    private final Map<String, Pair<AbstractFiqlSearchConditionBuilder<?, ?, ?>, List<SearchClause>>> scondWrapper;
 
     public ReportletWrapper(final boolean isNew) {
         this.isNew = isNew;
@@ -78,7 +78,7 @@ public class ReportletWrapper implements Serializable {
         return this;
     }
 
-    public Map<String, Pair<AbstractFiqlSearchConditionBuilder, List<SearchClause>>> getSCondWrapper() {
+    public Map<String, Pair<AbstractFiqlSearchConditionBuilder<?, ?, ?>, List<SearchClause>>> getSCondWrapper() {
         return scondWrapper;
     }
 }
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/status/ResourceStatusDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/status/ResourceStatusDirectoryPanel.java
index 4d17e11..39c1770 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/status/ResourceStatusDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/status/ResourceStatusDirectoryPanel.java
@@ -237,7 +237,7 @@ public class ResourceStatusDirectoryPanel
                 fiql = null;
                 restClient = null;
             } else {
-                AbstractFiqlSearchConditionBuilder bld;
+                AbstractFiqlSearchConditionBuilder<?, ?, ?> bld;
                 switch (type) {
                     case "USER":
                         bld = SyncopeClient.getUserSearchConditionBuilder();
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskWrapper.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskWrapper.java
index 0bded4b..69e3e17 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskWrapper.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskWrapper.java
@@ -57,7 +57,7 @@ public class PushTaskWrapper implements Serializable {
 
         for (Map.Entry<String, List<SearchClause>> entry : getFilterClauses().entrySet()) {
             if (!entry.getValue().isEmpty()) {
-                AbstractFiqlSearchConditionBuilder bld;
+                AbstractFiqlSearchConditionBuilder<?, ?, ?> bld;
                 switch (entry.getKey()) {
                     case "USER":
                         bld = SyncopeClient.getUserSearchConditionBuilder();
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java
index a09a02e..642b559 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java
@@ -20,13 +20,14 @@ package org.apache.syncope.client.console.wicket.markup.html.form;
 
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 import org.apache.commons.collections4.ListUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
@@ -53,24 +54,24 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
 
     protected Palette<T> palette;
 
-    private final Model<String> queryFilter = new Model<>(StringUtils.EMPTY);
+    protected final Model<String> queryFilter = new Model<>(StringUtils.EMPTY);
 
-    private final List<T> availableBefore = new ArrayList<>();
+    protected final List<T> availableBefore = new ArrayList<>();
 
     private final LoadableDetachableModel<List<T>> choicesModel;
 
     public AjaxPalettePanel(
-            final String id, final IModel<List<T>> model, final Builder.Query<T> choices, final Builder<T> builder) {
+            final String id, final IModel<List<T>> model, final Builder.Query<T> query, final Builder<T> builder) {
 
         super(id, builder.name == null ? id : builder.name, model);
 
-        choicesModel = new PaletteLoadableDetachableModel() {
+        choicesModel = new PaletteLoadableDetachableModel(builder) {
 
             private static final long serialVersionUID = -108100712154481840L;
 
             @Override
             protected List<T> getChoices() {
-                return choices.execute(queryFilter.getObject());
+                return query.execute(queryFilter.getObject());
             }
         };
         initialize(model, builder);
@@ -80,7 +81,7 @@ 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() {
+        choicesModel = new PaletteLoadableDetachableModel(builder) {
 
             private static final long serialVersionUID = -108100712154481840L;
 
@@ -94,10 +95,39 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
         initialize(model, builder);
     }
 
-    private void initialize(final IModel<List<T>> model, final Builder<T> builder) {
+    protected void initialize(final IModel<List<T>> model, final Builder<T> builder) {
         setOutputMarkupId(true);
 
-        palette = new NonI18nPalette<T>(
+        palette = buildPalette(model, builder);
+        add(palette.setLabel(new ResourceModel(name)).setOutputMarkupId(true));
+
+        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));
+
+        AjaxButton search = new AjaxButton("search") {
+
+            private static final long serialVersionUID = 8390605330558248736L;
+
+            @Override
+            protected void onSubmit(final AjaxRequestTarget target) {
+                if (builder.warnIfEmptyFilter && StringUtils.isEmpty(queryFilter.getObject())) {
+                    SyncopeConsoleSession.get().info(getString("nomatch"));
+                    ((BasePage) getPage()).getNotificationPanel().refresh(target);
+                }
+
+                target.add(palette);
+            }
+        };
+        search.setOutputMarkupId(true);
+        form.add(search);
+    }
+
+    protected Palette<T> buildPalette(final IModel<List<T>> model, final Builder<T> builder) {
+        return new NonI18nPalette<T>(
                 "paletteField", model, choicesModel, builder.renderer, 8, builder.allowOrder, builder.allowMoveAll) {
 
             private static final long serialVersionUID = -3074655279011678437L;
@@ -120,14 +150,13 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
 
                     @Override
                     public List<T> getUnselectedList() {
-                        final IChoiceRenderer<? super T> renderer = getPalette().getChoiceRenderer();
-                        final Collection<? extends T> choices = getPalette().getChoices();
-                        final List<T> unselected = new ArrayList<>(choices.size());
-                        final List<String> ids = Arrays.asList(getValue().split(","));
+                        IChoiceRenderer<? super T> renderer = getChoiceRenderer();
+                        Collection<? extends T> choices = getChoices();
 
+                        List<String> ids = builder.idExtractor.apply(getValue()).collect(Collectors.toList());
+                        List<T> unselected = new ArrayList<>(choices.size());
                         choices.forEach(choice -> {
-                            final String choiceId = renderer.getIdValue(choice, 0);
-                            if (!ids.contains(choiceId)) {
+                            if (!ids.contains(renderer.getIdValue(choice, 0))) {
                                 unselected.add(choice);
                             }
                         });
@@ -137,28 +166,22 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
 
                     @Override
                     public List<T> getSelectedList() {
-                        final IChoiceRenderer<? super T> renderer = getPalette().getChoiceRenderer();
-                        final Collection<? extends T> choices = getPalette().getChoices();
-                        final List<T> selected = new ArrayList<>(choices.size());
+                        IChoiceRenderer<? super T> renderer = getChoiceRenderer();
+                        Collection<? extends T> choices = getChoices();
 
                         // reduce number of method calls by building a lookup table
-                        final Map<T, String> idForChoice = new HashMap<>(choices.size());
-                        choices.forEach(choice -> {
-                            idForChoice.put(choice, renderer.getIdValue(choice, 0));
-                        });
-
-                        final String value = getValue();
-                        int start = value.indexOf(';') + 1;
+                        Map<T, String> idForChoice = choices.stream().collect(Collectors.toMap(
+                                Function.identity(), choice -> renderer.getIdValue(choice, 0), (c1, c2) -> c1));
 
-                        for (final String id : Strings.split(value.substring(start), ',')) {
-                            for (final T choice : choices) {
-                                final String idValue = idForChoice.get(choice);
-                                if (id.equals(idValue)) {
+                        List<T> selected = new ArrayList<>(choices.size());
+                        builder.idExtractor.apply(getValue()).forEach(id -> {
+                            for (T choice : choices) {
+                                if (id.equals(idForChoice.get(choice))) {
                                     selected.add(choice);
                                     break;
                                 }
                             }
-                        }
+                        });
 
                         return selected;
                     }
@@ -175,33 +198,18 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
 
                 return recorder;
             }
-        };
-
-        add(palette.setLabel(new ResourceModel(name)).setOutputMarkupId(true));
-
-        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));
-
-        AjaxButton search = new AjaxButton("search") {
-
-            private static final long serialVersionUID = 8390605330558248736L;
 
             @Override
-            protected void onSubmit(final AjaxRequestTarget target) {
-                if (builder.warnIfEmptyFilter && StringUtils.isEmpty(queryFilter.getObject())) {
-                    SyncopeConsoleSession.get().info(getString("nomatch"));
-                    ((BasePage) getPage()).getNotificationPanel().refresh(target);
-                }
-
-                target.add(palette);
+            protected Map<String, String> getAdditionalAttributes(final Object choice) {
+                return builder.additionalAttributes == null
+                        ? super.getAdditionalAttributes(choice)
+                        : builder.additionalAttributes.apply(choice);
             }
         };
-        search.setOutputMarkupId(true);
-        form.add(search);
+    }
+
+    public Recorder<T> getRecorderComponent() {
+        return palette.getRecorderComponent();
     }
 
     public LoadableDetachableModel<List<T>> getChoicesModel() {
@@ -238,30 +246,28 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
 
         private static final long serialVersionUID = 991248996001040352L;
 
-        private IChoiceRenderer<T> renderer;
+        protected String name;
 
-        private boolean allowOrder;
+        protected IChoiceRenderer<T> renderer = new SelectChoiceRenderer<>();
 
-        private boolean allowMoveAll;
+        protected boolean allowOrder;
 
-        private String selectedLabel;
+        protected boolean allowMoveAll;
 
-        private String availableLabel;
+        protected String selectedLabel;
 
-        private boolean filtered;
+        protected String availableLabel;
 
-        private String filter = "*";
+        protected boolean filtered;
 
-        private boolean warnIfEmptyFilter = true;
+        protected String filter = "*";
 
-        private String name;
+        protected boolean warnIfEmptyFilter = true;
 
-        public Builder() {
-            this.allowMoveAll = false;
-            this.allowOrder = false;
-            this.filtered = false;
-            this.renderer = new SelectChoiceRenderer<>();
-        }
+        protected Function<String, Stream<String>> idExtractor =
+                (Function<String, Stream<String>> & Serializable) input -> Stream.of(Strings.split(input, ','));
+
+        protected Function<Object, Map<String, String>> additionalAttributes;
 
         public Builder<T> setName(final String name) {
             this.name = name;
@@ -309,6 +315,16 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
             return this;
         }
 
+        public Builder<T> idExtractor(final Function<String, Stream<String>> idExtractor) {
+            this.idExtractor = idExtractor;
+            return this;
+        }
+
+        public Builder<T> additionalAttributes(final Function<Object, Map<String, String>> additionalAttributes) {
+            this.additionalAttributes = additionalAttributes;
+            return this;
+        }
+
         public AjaxPalettePanel<T> build(final String id, final IModel<List<T>> model, final IModel<List<T>> choices) {
             return new AjaxPalettePanel<>(id, model, choices, this);
         }
@@ -325,63 +341,67 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
         }
     }
 
-    private abstract class PaletteLoadableDetachableModel extends LoadableDetachableModel<List<T>> {
+    protected abstract class PaletteLoadableDetachableModel extends LoadableDetachableModel<List<T>> {
 
         private static final long serialVersionUID = -7745220313769774616L;
 
+        protected final Builder<T> builder;
+
+        public PaletteLoadableDetachableModel(final Builder<T> builder) {
+            this.builder = builder;
+        }
+
         protected abstract List<T> getChoices();
 
         @Override
         protected List<T> load() {
-            final List<T> selected = availableBefore.isEmpty()
+            List<T> selected = availableBefore.isEmpty()
                     ? new ArrayList<>(palette.getModelCollection())
-                    : getSelectedList(availableBefore, palette.getRecorderComponent().getValue());
+                    : getSelectedList(availableBefore);
 
             availableBefore.clear();
             availableBefore.addAll(ListUtils.sum(selected, getChoices()));
             return availableBefore;
         }
 
-        private List<T> getSelectedList(final Collection<T> choices, final String selection) {
+        protected List<T> getSelectedList(final Collection<T> choices) {
             IChoiceRenderer<? super T> renderer = palette.getChoiceRenderer();
-            List<T> selected = new ArrayList<>();
 
-            Map<T, String> idForChoice = new HashMap<>();
-            choices.forEach(choice -> idForChoice.put(choice, renderer.getIdValue(choice, 0)));
+            Map<T, String> idForChoice = choices.stream().collect(Collectors.toMap(
+                    Function.identity(), choice -> renderer.getIdValue(choice, 0), (c1, c2) -> c1));
 
-            for (String id : Strings.split(selection, ',')) {
+            List<T> selected = new ArrayList<>();
+            builder.idExtractor.apply(palette.getRecorderComponent().getValue()).forEach(id -> {
                 Iterator<T> iter = choices.iterator();
                 boolean found = false;
                 while (!found && iter.hasNext()) {
-                    final T choice = iter.next();
-                    final String idValue = idForChoice.get(choice);
-                    if (id.equals(idValue)) {
+                    T choice = iter.next();
+                    if (id.equals(idForChoice.get(choice))) {
                         selected.add(choice);
                         found = true;
                     }
                 }
-            }
+            });
 
             return selected;
         }
 
         protected List<T> getFilteredList(final Collection<T> choices, final String filter) {
             IChoiceRenderer<? super T> renderer = palette.getChoiceRenderer();
-            List<T> selected = new ArrayList<>(choices.size());
 
-            Map<T, String> idForChoice = new HashMap<>();
-            choices.forEach(choice -> idForChoice.put(choice, renderer.getIdValue(choice, 0)));
+            Map<T, String> idForChoice = choices.stream().collect(Collectors.toMap(
+                    Function.identity(), choice -> renderer.getIdValue(choice, 0), (c1, c2) -> c1));
 
             Pattern pattern = Pattern.compile(filter, Pattern.CASE_INSENSITIVE);
 
+            List<T> filtered = new ArrayList<>(choices.size());
             choices.forEach(choice -> {
-                String idValue = idForChoice.get(choice);
-                if (pattern.matcher(idValue).matches()) {
-                    selected.add(choice);
+                if (pattern.matcher(idForChoice.get(choice)).matches()) {
+                    filtered.add(choice);
                 }
             });
 
-            return selected;
+            return filtered;
         }
     }
 }
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/NonI18nPalette.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/NonI18nPalette.java
index 6f055b3..9527dc8 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/NonI18nPalette.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/NonI18nPalette.java
@@ -19,7 +19,7 @@
 package org.apache.syncope.client.console.wicket.markup.html.form;
 
 import java.util.Collection;
-import java.util.LinkedHashMap;
+import java.util.Collections;
 import java.util.Map;
 import org.apache.wicket.extensions.markup.html.form.palette.Palette;
 import org.apache.wicket.markup.html.form.IChoiceRenderer;
@@ -43,17 +43,17 @@ public class NonI18nPalette<T> extends Palette<T> {
         return false;
     }
 
+    protected Map<String, String> getAdditionalAttributes(final Object choice) {
+        return Collections.singletonMap("title", choice.toString());
+    }
+
     @Override
     protected Map<String, String> getAdditionalAttributesForChoices(final Object choice) {
-        Map<String, String> map = new LinkedHashMap<>();
-        map.put("title", choice.toString());
-        return map;
+        return getAdditionalAttributes(choice);
     }
 
     @Override
     protected Map<String, String> getAdditionalAttributesForSelection(final Object choice) {
-        Map<String, String> map = new LinkedHashMap<>();
-        map.put("title", choice.toString());
-        return map;
+        return getAdditionalAttributes(choice);
     }
 }
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/DynRealmWrapper.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/DynRealmWrapper.java
index de013a9..13caee2 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/DynRealmWrapper.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/DynRealmWrapper.java
@@ -61,7 +61,8 @@ public class DynRealmWrapper implements Serializable {
             this.dynClauses.entrySet().stream().
                     filter(entry -> (CollectionUtils.isNotEmpty(entry.getValue()))).
                     forEachOrdered(entry -> {
-                        AbstractFiqlSearchConditionBuilder builder = AnyTypeKind.USER.name().equals(entry.getKey())
+                        AbstractFiqlSearchConditionBuilder<?, ?, ?> builder =
+                                AnyTypeKind.USER.name().equals(entry.getKey())
                                 ? SyncopeClient.getUserSearchConditionBuilder()
                                 : AnyTypeKind.GROUP.name().equals(entry.getKey())
                                 ? SyncopeClient.getGroupSearchConditionBuilder()
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
index 98eff48..9f8796f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
@@ -160,7 +160,6 @@ public class Groups extends AbstractGroups {
 
             }, new ListModel<>(groupsModel.getObject().stream().map(GroupTO::getName).collect(Collectors.toList()))).
                     hideLabel().setEnabled(false).setOutputMarkupId(true));
-
         }
     }
 
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPushActions.groovy b/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPushActions.groovy
index 07bbffe..8664c44 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPushActions.groovy
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPushActions.groovy
@@ -20,9 +20,9 @@
 import groovy.transform.CompileStatic
 import java.util.Collections
 import java.util.Set
+import org.apache.syncope.common.lib.to.ProvisioningReport
 import org.apache.syncope.core.persistence.api.entity.Entity
 import org.apache.syncope.core.provisioning.api.pushpull.ProvisioningProfile
-import org.apache.syncope.core.provisioning.api.pushpull.ProvisioningReport
 import org.apache.syncope.core.provisioning.api.pushpull.PushActions
 import org.quartz.JobExecutionException