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 2022/06/08 04:59:34 UTC

[syncope] branch master updated: Changes to simplify Console customizations

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 fd2646ff0c Changes to simplify Console customizations
fd2646ff0c is described below

commit fd2646ff0c67fd4c2f06db9c171c275dcc19cdd4
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Tue Jun 7 16:49:36 2022 +0200

    Changes to simplify Console customizations
---
 .../commons/layout/AbstractAnyFormBaseLayout.java  |  4 +--
 .../commons/markup/html/form/AjaxPalettePanel.java | 36 ++++++++++----------
 .../console/wizards/any/AnyObjectDetails.java      |  6 ++--
 .../wizards/any/AnyObjectWizardBuilder.java        |  7 ++--
 .../client/console/wizards/any/GroupDetails.java   |  6 ++--
 .../console/wizards/any/GroupWizardBuilder.java    |  7 ++--
 .../syncope/client/console/wizards/any/Groups.java | 39 +++++++++++-----------
 .../syncope/client/enduser/panels/any/Groups.java  | 12 +++----
 .../apache/syncope/core/logic/SyncopeLogic.java    |  9 +----
 9 files changed, 60 insertions(+), 66 deletions(-)

diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/layout/AbstractAnyFormBaseLayout.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/layout/AbstractAnyFormBaseLayout.java
index cdf465ecf5..ce8d6b03f8 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/layout/AbstractAnyFormBaseLayout.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/layout/AbstractAnyFormBaseLayout.java
@@ -26,7 +26,7 @@ public abstract class AbstractAnyFormBaseLayout<A extends AnyTO, F extends AnyFo
 
     private static final long serialVersionUID = -6061683026789976508L;
 
-    private Class<F> formClass;
+    private Class<? extends F> formClass;
 
     private boolean auxClasses = true;
 
@@ -46,7 +46,7 @@ public abstract class AbstractAnyFormBaseLayout<A extends AnyTO, F extends AnyFo
         return formClass == null ? getDefaultFormClass() : formClass;
     }
 
-    public void setFormClass(final Class<F> formClass) {
+    public void setFormClass(final Class<? extends F> formClass) {
         this.formClass = formClass;
     }
 
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 8806ce2c61..1e27e6cad5 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
@@ -49,6 +49,7 @@ import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.util.string.Strings;
+import org.danekja.java.util.function.serializable.SerializableFunction;
 
 public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel<List<T>> {
 
@@ -130,7 +131,7 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
 
     protected Palette<T> buildPalette(final IModel<List<T>> model, final Builder<T> builder) {
         return new NonI18nPalette<>(
-            "paletteField", model, choicesModel, builder.renderer, 8, builder.allowOrder, builder.allowMoveAll) {
+                "paletteField", model, choicesModel, builder.renderer, 8, builder.allowOrder, builder.allowMoveAll) {
 
             private static final long serialVersionUID = -3074655279011678437L;
 
@@ -173,7 +174,7 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
 
                         // reduce number of method calls by building a lookup table
                         Map<T, String> idForChoice = choices.stream().collect(Collectors.toMap(
-                            Function.identity(), choice -> renderer.getIdValue(choice, 0), (c1, c2) -> c1));
+                                Function.identity(), choice -> renderer.getIdValue(choice, 0), (c1, c2) -> c1));
 
                         List<T> selected = new ArrayList<>(choices.size());
                         builder.idExtractor.apply(getValue()).forEach(id -> {
@@ -205,8 +206,8 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
             @Override
             protected Map<String, String> getAdditionalAttributes(final Object choice) {
                 return builder.additionalAttributes == null
-                    ? super.getAdditionalAttributes(choice)
-                    : builder.additionalAttributes.apply(choice);
+                        ? super.getAdditionalAttributes(choice)
+                        : builder.additionalAttributes.apply(choice);
             }
         };
     }
@@ -267,12 +268,12 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
 
         protected boolean warnIfEmptyFilter = true;
 
-        protected Function<String, Stream<String>> idExtractor =
-                (Function<String, Stream<String>> & Serializable) input -> Stream.of(Strings.split(input, ','));
+        protected SerializableFunction<String, Stream<String>> idExtractor =
+                input -> Stream.of(Strings.split(input, ','));
 
-        protected Function<AjaxRequestTarget, Boolean> event;
+        protected SerializableFunction<AjaxRequestTarget, Boolean> event;
 
-        protected Function<Object, Map<String, String>> additionalAttributes;
+        protected SerializableFunction<Object, Map<String, String>> additionalAttributes;
 
         public Builder<T> setName(final String name) {
             this.name = name;
@@ -320,17 +321,19 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
             return this;
         }
 
-        public Builder<T> idExtractor(final Function<String, Stream<String>> idExtractor) {
+        public Builder<T> idExtractor(final SerializableFunction<String, Stream<String>> idExtractor) {
             this.idExtractor = idExtractor;
             return this;
         }
 
-        public Builder<T> event(final Function<AjaxRequestTarget, Boolean> event) {
+        public Builder<T> event(final SerializableFunction<AjaxRequestTarget, Boolean> event) {
             this.event = event;
             return this;
         }
 
-        public Builder<T> additionalAttributes(final Function<Object, Map<String, String>> additionalAttributes) {
+        public Builder<T> additionalAttributes(
+                final SerializableFunction<Object, Map<String, String>> additionalAttributes) {
+
             this.additionalAttributes = additionalAttributes;
             return this;
         }
@@ -404,14 +407,9 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
 
             Pattern pattern = Pattern.compile(filter, Pattern.CASE_INSENSITIVE);
 
-            List<T> filtered = new ArrayList<>(choices.size());
-            choices.forEach(choice -> {
-                if (pattern.matcher(idForChoice.get(choice)).matches()) {
-                    filtered.add(choice);
-                }
-            });
-
-            return filtered;
+            return choices.stream().
+                    filter(choice -> pattern.matcher(idForChoice.get(choice)).matches()).
+                    collect(Collectors.toList());
         }
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectDetails.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectDetails.java
index 0f2458f79b..e5de64e735 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectDetails.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectDetails.java
@@ -29,6 +29,8 @@ public class AnyObjectDetails extends Details<AnyObjectTO> {
 
     private static final long serialVersionUID = 855618618337931784L;
 
+    protected final AjaxTextFieldPanel name;
+
     public AnyObjectDetails(
             final AnyWrapper<AnyObjectTO> wrapper,
             final boolean templateMode,
@@ -37,7 +39,7 @@ public class AnyObjectDetails extends Details<AnyObjectTO> {
 
         super(wrapper, templateMode, includeStatusPanel, pageRef);
 
-        AjaxTextFieldPanel name = new AjaxTextFieldPanel(
+        name = new AjaxTextFieldPanel(
                 Constants.NAME_FIELD_NAME, Constants.NAME_FIELD_NAME,
                 new PropertyModel<>(wrapper.getInnerObject(), Constants.NAME_FIELD_NAME), false);
         if (templateMode) {
@@ -45,6 +47,6 @@ public class AnyObjectDetails extends Details<AnyObjectTO> {
         } else {
             name.addRequiredLabel();
         }
-        this.add(name);
+        add(name);
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
index 30ad682f07..30830f9556 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
@@ -46,8 +46,8 @@ public class AnyObjectWizardBuilder extends AnyWizardBuilder<AnyObjectTO> implem
             final AnyObjectFormLayoutInfo formLayoutInfo,
             final PageReference pageRef) {
 
-        super(Optional.ofNullable(anyObjectTO).map(AnyObjectWrapper::new)
-                .orElse(null), anyTypeClasses, formLayoutInfo, pageRef);
+        super(Optional.ofNullable(anyObjectTO).map(AnyObjectWrapper::new).
+                orElse(null), anyTypeClasses, formLayoutInfo, pageRef);
     }
 
     /**
@@ -100,6 +100,7 @@ public class AnyObjectWizardBuilder extends AnyWizardBuilder<AnyObjectTO> implem
         return Optional.of(new AnyObjectDetails(
                 modelObject,
                 mode == AjaxWizard.Mode.TEMPLATE,
-                modelObject.getInnerObject().getKey() != null, pageRef));
+                modelObject.getInnerObject().getKey() != null,
+                pageRef));
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupDetails.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupDetails.java
index 3ae8889acc..52b5166677 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupDetails.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupDetails.java
@@ -28,6 +28,8 @@ public class GroupDetails extends Details<GroupTO> {
 
     private static final long serialVersionUID = 855618618337931784L;
 
+    protected final AjaxTextFieldPanel name;
+
     public GroupDetails(
             final GroupWrapper wrapper,
             final boolean templateMode,
@@ -36,7 +38,7 @@ public class GroupDetails extends Details<GroupTO> {
 
         super(wrapper, templateMode, includeStatusPanel, pageRef);
 
-        AjaxTextFieldPanel name = new AjaxTextFieldPanel(
+        name = new AjaxTextFieldPanel(
                 Constants.NAME_FIELD_NAME, Constants.NAME_FIELD_NAME,
                 new PropertyModel<>(wrapper.getInnerObject(), Constants.NAME_FIELD_NAME), false);
         if (templateMode) {
@@ -44,6 +46,6 @@ public class GroupDetails extends Details<GroupTO> {
         } else {
             name.addRequiredLabel();
         }
-        this.add(name);
+        add(name);
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
index e6a9da90a6..2b87ac8de3 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
@@ -49,8 +49,8 @@ public class GroupWizardBuilder extends AnyWizardBuilder<GroupTO> implements Gro
             final GroupFormLayoutInfo formLayoutInfo,
             final PageReference pageRef) {
 
-        super(Optional.ofNullable(groupTO).map(GroupWrapper::new)
-                .orElse(null), anyTypeClasses, formLayoutInfo, pageRef);
+        super(Optional.ofNullable(groupTO).map(GroupWrapper::new).
+                orElse(null), anyTypeClasses, formLayoutInfo, pageRef);
     }
 
     /**
@@ -131,6 +131,7 @@ public class GroupWizardBuilder extends AnyWizardBuilder<GroupTO> implements Gro
         return Optional.of(new GroupDetails(
                 GroupWrapper.class.cast(modelObject),
                 mode == AjaxWizard.Mode.TEMPLATE,
-                modelObject.getInnerObject().getKey() != null, pageRef));
+                modelObject.getInnerObject().getKey() != null,
+                pageRef));
     }
 }
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 b4d88faf04..852d606265 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
@@ -68,6 +68,8 @@ public class Groups extends AbstractGroups {
 
     protected final ConsoleGroupsModel groupsModel;
 
+    protected AjaxPalettePanel.Builder<MembershipTO> groups;
+
     public <T extends AnyTO> Groups(final AnyWrapper<T> modelObject, final boolean templateMode) {
         super(modelObject);
         this.templateMode = templateMode;
@@ -110,31 +112,30 @@ public class Groups extends AbstractGroups {
             dyngroupsContainer.add(new Label("dyngroups").setVisible(false));
             dyngroupsContainer.setVisible(false);
         } else {
-            AjaxPalettePanel.Builder<MembershipTO> builder = new AjaxPalettePanel.Builder<MembershipTO>().
-                    setRenderer(new IChoiceRenderer<>() {
+            groups = new AjaxPalettePanel.Builder<MembershipTO>().setRenderer(new IChoiceRenderer<>() {
 
-                        private static final long serialVersionUID = -3086661086073628855L;
+                private static final long serialVersionUID = -3086661086073628855L;
 
-                        @Override
-                        public Object getDisplayValue(final MembershipTO object) {
-                            return object.getGroupName();
-                        }
+                @Override
+                public Object getDisplayValue(final MembershipTO object) {
+                    return object.getGroupName();
+                }
 
-                        @Override
-                        public String getIdValue(final MembershipTO object, final int index) {
-                            return object.getGroupName();
-                        }
+                @Override
+                public String getIdValue(final MembershipTO object, final int index) {
+                    return object.getGroupName();
+                }
 
-                        @Override
-                        public MembershipTO getObject(
-                                final String id, final IModel<? extends List<? extends MembershipTO>> choices) {
+                @Override
+                public MembershipTO getObject(
+                        final String id, final IModel<? extends List<? extends MembershipTO>> choices) {
 
-                            return choices.getObject().stream().
-                                    filter(object -> id.equalsIgnoreCase(object.getGroupName())).findAny().orElse(null);
-                        }
-                    });
+                    return choices.getObject().stream().
+                            filter(object -> id.equalsIgnoreCase(object.getGroupName())).findAny().orElse(null);
+                }
+            });
 
-            groupsContainer.add(builder.setAllowOrder(true).withFilter("*").build("groups", new ListModel<>() {
+            groupsContainer.add(groups.setAllowOrder(true).withFilter("*").build("groups", new ListModel<>() {
 
                 private static final long serialVersionUID = -2583290457773357445L;
 
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/any/Groups.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/any/Groups.java
index e70468f52b..3c8fbca2de 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/any/Groups.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/any/Groups.java
@@ -29,9 +29,7 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.IChoiceRenderer;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.util.ListModel;
-import java.io.Serializable;
 import java.util.List;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 import org.apache.commons.collections4.ListUtils;
 import org.apache.syncope.client.ui.commons.ajax.markup.html.LabelInfo;
@@ -43,6 +41,7 @@ import org.apache.syncope.common.lib.to.MembershipTO;
 import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.panel.Panel;
+import org.danekja.java.util.function.serializable.SerializableFunction;
 
 public class Groups extends Panel {
 
@@ -50,7 +49,7 @@ public class Groups extends Panel {
 
     protected static final int MAX_GROUP_LIST_CARDINALITY = 30;
 
-    private final EnduserGroupsModel groupsModel;
+    protected final EnduserGroupsModel groupsModel;
 
     protected final AnyTO anyTO;
 
@@ -94,8 +93,8 @@ public class Groups extends Panel {
         addDynamicRealmsContainer();
     }
 
-    private Function<AjaxRequestTarget, Boolean> getEventFunction() {
-        return (Function<AjaxRequestTarget, Boolean> & Serializable) (target) -> {
+    protected SerializableFunction<AjaxRequestTarget, Boolean> getEventFunction() {
+        return target -> {
             send(Groups.this.getPage(), Broadcast.BREADTH,
                     new AjaxPalettePanel.UpdateActionEvent((UserTO) anyTO, target));
             return true;
@@ -231,7 +230,4 @@ public class Groups extends Panel {
             }
         }
     }
-
-    public interface SerializableFunction extends Function<AjaxRequestTarget, Boolean>, Serializable {
-    }
 }
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
index 167840cadf..7aaea2ecca 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
@@ -130,14 +130,7 @@ public class SyncopeLogic extends AbstractLogic<EntityTO> {
         if (StringUtils.isNotBlank(term)) {
             AnyCond termCond = new AnyCond(AttrCond.Type.ILIKE);
             termCond.setSchema("name");
-
-            String termSearchableValue = (term.startsWith("*") && !term.endsWith("*"))
-                    ? term + '%'
-                    : (!term.startsWith("*") && term.endsWith("*"))
-                    ? '%' + term
-                    : (term.startsWith("*") && term.endsWith("*")
-                    ? term : '%' + term + '%');
-            termCond.setExpression(termSearchableValue);
+            termCond.setExpression(term.replace("*", "%"));
 
             searchCond = SearchCond.getAnd(
                     SearchCond.getLeaf(assignableCond),