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 2019/11/07 08:14:06 UTC

[syncope] branch master updated: White noise: reflow, adjust, tweak, rename...

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 d605b6d  White noise: reflow, adjust, tweak, rename...
d605b6d is described below

commit d605b6d6dc4c656086f56bd27b38642fb4fbda63
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Thu Nov 7 08:44:40 2019 +0100

    White noise: reflow, adjust, tweak, rename...
---
 .../commons/markup/html/form/NonI18nPalette.java   | 12 -----
 .../client/console/commons/TaskDataProvider.java   |  3 --
 .../repeater/data/table/BooleanPropertyColumn.java |  6 +--
 .../client/console/wizards/any/AbstractAttrs.java  | 48 ++++++++---------
 .../wizards/any/AbstractAttrsWizardStep.java       | 15 +++---
 .../any/AnyObjectTemplateWizardBuilder.java        |  9 ++--
 .../wizards/any/AnyObjectWizardBuilder.java        | 11 ++--
 .../console/wizards/any/AnyWizardBuilder.java      | 16 ++----
 .../client/console/wizards/any/DerAttrs.java       |  2 +-
 .../wizards/any/GroupTemplateWizardBuilder.java    |  9 ++--
 .../console/wizards/any/GroupWizardBuilder.java    | 47 ++++++++--------
 .../client/console/wizards/any/GroupWrapper.java   | 28 +++++-----
 .../client/console/wizards/any/PlainAttrs.java     | 62 ++++++++++------------
 .../wizards/any/UserTemplateWizardBuilder.java     |  9 ++--
 .../console/wizards/any/UserWizardBuilder.java     | 27 ++--------
 .../client/console/wizards/any/VirAttrs.java       |  2 +-
 .../java/pushpull/PullJobDelegate.java             |  2 +-
 .../flowable/impl/FlowableUserRequestHandler.java  |  3 +-
 .../flowable/impl/FlowableUserWorkflowAdapter.java |  1 +
 19 files changed, 130 insertions(+), 182 deletions(-)

diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/NonI18nPalette.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/NonI18nPalette.java
index 224ff51..571218f 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/NonI18nPalette.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/NonI18nPalette.java
@@ -21,7 +21,6 @@ package org.apache.syncope.client.ui.commons.markup.html.form;
 import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.Map;
-import org.apache.wicket.Component;
 import org.apache.wicket.extensions.markup.html.form.palette.Palette;
 import org.apache.wicket.markup.html.form.IChoiceRenderer;
 import org.apache.wicket.model.IModel;
@@ -45,16 +44,6 @@ public class NonI18nPalette<T> extends Palette<T> {
     }
 
     @Override
-    protected Component newAvailableHeader(final String componentId) {
-        return super.newAvailableHeader(componentId);
-    }
-
-    @Override
-    protected Component newSelectedHeader(final String componentId) {
-        return super.newSelectedHeader(componentId);
-    }
-
-    @Override
     protected Map<String, String> getAdditionalAttributesForChoices(final Object choice) {
         Map<String, String> map = new LinkedHashMap<>();
         map.put("title", choice.toString());
@@ -67,5 +56,4 @@ public class NonI18nPalette<T> extends Palette<T> {
         map.put("title", choice.toString());
         return map;
     }
-
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
index 9bf65de..0b76462 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
@@ -29,15 +29,12 @@ public abstract class TaskDataProvider<T extends TaskTO> extends DirectoryDataPr
 
     private static final long serialVersionUID = -20112718133295756L;
 
-    private final SortableDataProviderComparator<T> comparator;
-
     protected final TaskType taskType;
 
     public TaskDataProvider(final int paginatorRows, final TaskType taskType) {
         super(paginatorRows);
 
         setSort("start", SortOrder.ASCENDING);
-        comparator = new SortableDataProviderComparator<>(this);
         this.taskType = taskType;
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/BooleanPropertyColumn.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/BooleanPropertyColumn.java
index 283a01a..6a033b5 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/BooleanPropertyColumn.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/BooleanPropertyColumn.java
@@ -28,10 +28,10 @@ import org.apache.wicket.model.IModel;
 import org.springframework.beans.BeanWrapper;
 import org.springframework.beans.BeanWrapperImpl;
 
-import java.util.Objects;
-
 /**
  * Format column's value as boolean.
+ *
+ * @param <T> The Model object type
  */
 public class BooleanPropertyColumn<T> extends PropertyColumn<T, String> {
 
@@ -49,7 +49,7 @@ public class BooleanPropertyColumn<T> extends PropertyColumn<T, String> {
         Object obj = bwi.getPropertyValue(getPropertyExpression());
 
         item.add(new Label(componentId, StringUtils.EMPTY));
-        if (Boolean.parseBoolean(Objects.requireNonNull(obj).toString())) {
+        if (obj != null && Boolean.valueOf(obj.toString())) {
             item.add(new AttributeModifier("class", "glyphicon glyphicon-ok"));
             item.add(new AttributeModifier("style", "display: table-cell; text-align: center;"));
         }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
index c4638c3..fcf7672 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
@@ -25,7 +25,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 import org.apache.commons.collections4.CollectionUtils;
-import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
 import org.apache.syncope.client.console.rest.GroupRestClient;
 import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
 import org.apache.syncope.client.ui.commons.wizards.any.AnyWrapper;
@@ -47,7 +46,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends AbstractAttrsWiz
 
     private final GroupRestClient groupRestClient = new GroupRestClient();
 
-    protected final IModel<List<MembershipTO>> membershipTOs;
+    protected final IModel<List<MembershipTO>> memberships;
 
     protected final Map<String, Map<String, S>> membershipSchemas = new LinkedHashMap<>();
 
@@ -58,37 +57,36 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends AbstractAttrsWiz
 
         super(modelObject.getInnerObject(), AjaxWizard.Mode.CREATE, anyTypeClasses, whichAttrs, null);
 
-        this.membershipTOs = new ListModel<>(Collections.<MembershipTO>emptyList());
+        this.memberships = new ListModel<>(Collections.<MembershipTO>emptyList());
 
         this.setOutputMarkupId(true);
     }
 
     @SuppressWarnings("unchecked")
-    private List<MembershipTO> loadMembershipAttrs() {
-        List<MembershipTO> memberships = new ArrayList<>();
-        try {
-            membershipSchemas.clear();
+    private List<MembershipTO> loadMemberships() {
+        membershipSchemas.clear();
 
-            for (MembershipTO membership : (List<MembershipTO>) PropertyResolver.getPropertyField(
-                    "memberships", anyTO).get(anyTO)) {
-                setSchemas(membership.getGroupKey(),
-                        AnyTypeClassRestClient.list(getMembershipAuxClasses(membership, anyTO.getType())).
+        List<MembershipTO> membs = new ArrayList<>();
+        try {
+            ((List<MembershipTO>) PropertyResolver.getPropertyField("memberships", anyTO).get(anyTO)).forEach(memb -> {
+                setSchemas(memb.getGroupKey(),
+                        anyTypeClassRestClient.list(getMembershipAuxClasses(memb, anyTO.getType())).
                                 stream().map(EntityTO::getKey).collect(Collectors.toList()));
-                setAttrs(membership);
-
-                if (AbstractAttrs.this instanceof PlainAttrs && !membership.getPlainAttrs().isEmpty()) {
-                    memberships.add(membership);
-                } else if (AbstractAttrs.this instanceof DerAttrs && !membership.getDerAttrs().isEmpty()) {
-                    memberships.add(membership);
-                } else if (AbstractAttrs.this instanceof VirAttrs && !membership.getVirAttrs().isEmpty()) {
-                    memberships.add(membership);
+                setAttrs(memb);
+
+                if (this instanceof PlainAttrs && !memb.getPlainAttrs().isEmpty()) {
+                    membs.add(memb);
+                } else if (this instanceof DerAttrs && !memb.getDerAttrs().isEmpty()) {
+                    membs.add(memb);
+                } else if (this instanceof VirAttrs && !memb.getVirAttrs().isEmpty()) {
+                    membs.add(memb);
                 }
-            }
+            });
         } catch (WicketRuntimeException | IllegalArgumentException | IllegalAccessException ex) {
             // ignore
         }
 
-        return memberships;
+        return membs;
     }
 
     private void setSchemas(final String membership, final List<String> anyTypeClasses) {
@@ -119,8 +117,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends AbstractAttrsWiz
     @Override
     public void renderHead(final IHeaderResponse response) {
         super.renderHead(response);
-        if (CollectionUtils.isEmpty(attrs.getObject())
-                && CollectionUtils.isEmpty(membershipTOs.getObject())) {
+        if (CollectionUtils.isEmpty(attrs.getObject()) && CollectionUtils.isEmpty(memberships.getObject())) {
             response.render(OnDomReadyHeaderItem.forScript(
                     String.format("$('#emptyPlaceholder').append(\"%s\"); $('#attributes').hide();",
                             getString("attribute.empty.list"))));
@@ -130,8 +127,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends AbstractAttrsWiz
     @Override
     public boolean evaluate() {
         this.attrs.setObject(loadAttrs());
-        this.membershipTOs.setObject(loadMembershipAttrs());
-        return !attrs.getObject().isEmpty() || !membershipTOs.getObject().isEmpty();
+        this.memberships.setObject(loadMemberships());
+        return !attrs.getObject().isEmpty() || !memberships.getObject().isEmpty();
     }
-
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrsWizardStep.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrsWizardStep.java
index 047628e..f64f18e 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrsWizardStep.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrsWizardStep.java
@@ -104,7 +104,7 @@ public abstract class AbstractAttrsWizardStep<S extends SchemaTO> extends Wizard
 
         super();
         this.anyTypeClasses = anyTypeClasses;
-        this.attrs = new ListModel<>(Collections.<Attr>emptyList());
+        this.attrs = new ListModel<>(Collections.emptyList());
 
         this.setOutputMarkupId(true);
 
@@ -119,7 +119,7 @@ public abstract class AbstractAttrsWizardStep<S extends SchemaTO> extends Wizard
                 map(EntityTO::getKey).collect(Collectors.toList()));
         setSchemas(classes);
         setAttrs();
-        return AbstractAttrsWizardStep.this.getAttrsFromTO();
+        return getAttrsFromTO();
     }
 
     protected boolean reoderSchemas() {
@@ -133,17 +133,14 @@ public abstract class AbstractAttrsWizardStep<S extends SchemaTO> extends Wizard
     }
 
     protected void setSchemas(final List<String> anyTypeClasses, final Map<String, S> scs) {
-        final List<S> allSchemas;
-        if (anyTypeClasses.isEmpty()) {
-            allSchemas = new ArrayList<>();
-        } else {
-            allSchemas = SchemaRestClient.getSchemas(getSchemaType(), null, anyTypeClasses.toArray(new String[] {}));
-        }
+        List<S> allSchemas = anyTypeClasses.isEmpty()
+                ? Collections.emptyList()
+                : SchemaRestClient.getSchemas(getSchemaType(), null, anyTypeClasses.toArray(new String[] {}));
 
         scs.clear();
 
         if (reoderSchemas()) {
-            // 1. remove attributes not selected for display
+            // remove attributes not selected for display
             allSchemas.removeAll(allSchemas.stream().
                     filter(schemaTO -> !whichAttrs.contains(schemaTO.getKey())).collect(Collectors.toSet()));
         }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectTemplateWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectTemplateWizardBuilder.java
index 27b49fd..75bdeb0 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectTemplateWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectTemplateWizardBuilder.java
@@ -20,6 +20,7 @@ package org.apache.syncope.client.console.wizards.any;
 
 import org.apache.syncope.client.ui.commons.wizards.any.AnyWrapper;
 import java.util.List;
+import java.util.Optional;
 import org.apache.syncope.client.console.layout.AnyObjectFormLayoutInfo;
 import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
@@ -56,10 +57,10 @@ public class AnyObjectTemplateWizardBuilder extends AnyObjectWizardBuilder
     }
 
     @Override
-    protected Details<AnyObjectTO> addOptionalDetailsPanel(final AnyWrapper<AnyObjectTO> modelObject) {
-        final Details<AnyObjectTO> details = super.addOptionalDetailsPanel(modelObject);
-        if (templatable instanceof RealmTO) {
-            details.disableRealmSpecification();
+    protected Optional<Details<AnyObjectTO>> addOptionalDetailsPanel(final AnyWrapper<AnyObjectTO> modelObject) {
+        Optional<Details<AnyObjectTO>> details = super.addOptionalDetailsPanel(modelObject);
+        if (templatable instanceof RealmTO && details.isPresent()) {
+            details.get().disableRealmSpecification();
         }
         return details;
     }
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 8b9361d..30ad682 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
@@ -21,7 +21,6 @@ package org.apache.syncope.client.console.wizards.any;
 import java.io.Serializable;
 import java.util.List;
 import java.util.Optional;
-
 import org.apache.syncope.client.console.layout.AnyObjectForm;
 import org.apache.syncope.client.console.layout.AnyObjectFormLayoutInfo;
 import org.apache.syncope.client.console.rest.AnyObjectRestClient;
@@ -39,7 +38,7 @@ public class AnyObjectWizardBuilder extends AnyWizardBuilder<AnyObjectTO> implem
 
     private static final long serialVersionUID = -2480279868319546243L;
 
-    private final AnyObjectRestClient anyObjectRestClient = new AnyObjectRestClient();
+    protected final AnyObjectRestClient anyObjectRestClient = new AnyObjectRestClient();
 
     public AnyObjectWizardBuilder(
             final AnyObjectTO anyObjectTO,
@@ -48,7 +47,7 @@ public class AnyObjectWizardBuilder extends AnyWizardBuilder<AnyObjectTO> implem
             final PageReference pageRef) {
 
         super(Optional.ofNullable(anyObjectTO).map(AnyObjectWrapper::new)
-            .orElse(null), anyTypeClasses, formLayoutInfo, pageRef);
+                .orElse(null), anyTypeClasses, formLayoutInfo, pageRef);
     }
 
     /**
@@ -97,10 +96,10 @@ public class AnyObjectWizardBuilder extends AnyWizardBuilder<AnyObjectTO> implem
     }
 
     @Override
-    protected Details<AnyObjectTO> addOptionalDetailsPanel(final AnyWrapper<AnyObjectTO> modelObject) {
-        return new AnyObjectDetails(
+    protected Optional<Details<AnyObjectTO>> addOptionalDetailsPanel(final AnyWrapper<AnyObjectTO> modelObject) {
+        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/AnyWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java
index a6edfed..eca6f8a 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java
@@ -25,6 +25,7 @@ import java.util.concurrent.Future;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.SyncopeWebApplication;
+import java.util.Optional;
 import org.apache.syncope.client.console.layout.AnyObjectFormLayoutInfo;
 import org.apache.syncope.client.console.layout.GroupFormLayoutInfo;
 import org.apache.syncope.client.console.layout.UserFormLayoutInfo;
@@ -90,10 +91,7 @@ public abstract class AnyWizardBuilder<A extends AnyTO> extends AbstractAnyWizar
     @Override
     protected WizardModel buildModelSteps(final AnyWrapper<A> modelObject, final WizardModel wizardModel) {
         // optional details panel step
-        final Details<A> details = addOptionalDetailsPanel(modelObject);
-        if (details != null) {
-            wizardModel.add(details);
-        }
+        addOptionalDetailsPanel(modelObject).ifPresent(wizardModel::add);
 
         if ((this instanceof GroupWizardBuilder)
                 && (modelObject.getInnerObject() instanceof GroupTO)
@@ -167,15 +165,11 @@ public abstract class AnyWizardBuilder<A extends AnyTO> extends AbstractAnyWizar
         return wizardModel;
     }
 
-    protected Details<A> addOptionalDetailsPanel(final AnyWrapper<A> modelObject) {
+    protected Optional<Details<A>> addOptionalDetailsPanel(final AnyWrapper<A> modelObject) {
         if (modelObject.getInnerObject().getKey() == null) {
-            return null;
+            return Optional.empty();
         } else {
-            return new Details<>(
-                    modelObject,
-                    mode == AjaxWizard.Mode.TEMPLATE,
-                    true,
-                    pageRef);
+            return Optional.of(new Details<>(modelObject, mode == AjaxWizard.Mode.TEMPLATE, true, pageRef));
         }
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java
index 52f251f..7b7b3d6 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java
@@ -72,7 +72,7 @@ public class DerAttrs extends AbstractAttrs<DerSchemaTO> {
             }
         }), Model.of(0)).setOutputMarkupId(true));
 
-        add(new ListView<MembershipTO>("membershipsDerSchemas", membershipTOs) {
+        add(new ListView<MembershipTO>("membershipsDerSchemas", memberships) {
 
             private static final long serialVersionUID = 6741044372185745296L;
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupTemplateWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupTemplateWizardBuilder.java
index bab9f09..6e154df 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupTemplateWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupTemplateWizardBuilder.java
@@ -20,6 +20,7 @@ package org.apache.syncope.client.console.wizards.any;
 
 import org.apache.syncope.client.ui.commons.wizards.any.AnyWrapper;
 import java.util.List;
+import java.util.Optional;
 import org.apache.syncope.client.console.layout.GroupFormLayoutInfo;
 import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
 import org.apache.syncope.common.lib.to.GroupTO;
@@ -54,10 +55,10 @@ public class GroupTemplateWizardBuilder extends GroupWizardBuilder implements Te
     }
 
     @Override
-    protected Details<GroupTO> addOptionalDetailsPanel(final AnyWrapper<GroupTO> modelObject) {
-        final Details<GroupTO> details = super.addOptionalDetailsPanel(modelObject);
-        if (templatable instanceof RealmTO) {
-            details.disableRealmSpecification();
+    protected Optional<Details<GroupTO>> addOptionalDetailsPanel(final AnyWrapper<GroupTO> modelObject) {
+        Optional<Details<GroupTO>> details = super.addOptionalDetailsPanel(modelObject);
+        if (templatable instanceof RealmTO && details.isPresent()) {
+            details.get().disableRealmSpecification();
         }
         return details;
     }
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 eefa975..e6a9da9 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
@@ -18,11 +18,9 @@
  */
 package org.apache.syncope.client.console.wizards.any;
 
-import org.apache.syncope.client.ui.commons.wizards.any.AnyWrapper;
 import java.io.Serializable;
 import java.util.List;
 import java.util.Optional;
-
 import org.apache.commons.lang3.StringUtils;
 import org.apache.cxf.common.util.CollectionUtils;
 import org.apache.syncope.client.console.layout.GroupForm;
@@ -30,6 +28,7 @@ import org.apache.syncope.client.console.layout.GroupFormLayoutInfo;
 import org.apache.syncope.client.console.rest.GroupRestClient;
 import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
 import org.apache.syncope.client.ui.commons.wizards.AjaxWizardBuilder;
+import org.apache.syncope.client.ui.commons.wizards.any.AnyWrapper;
 import org.apache.syncope.common.lib.AnyOperations;
 import org.apache.syncope.common.lib.EntityTOUtils;
 import org.apache.syncope.common.lib.request.GroupCR;
@@ -42,7 +41,7 @@ public class GroupWizardBuilder extends AnyWizardBuilder<GroupTO> implements Gro
 
     private static final long serialVersionUID = 5945391813567245081L;
 
-    private final GroupRestClient groupRestClient = new GroupRestClient();
+    protected final GroupRestClient groupRestClient = new GroupRestClient();
 
     public GroupWizardBuilder(
             final GroupTO groupTO,
@@ -51,7 +50,7 @@ public class GroupWizardBuilder extends AnyWizardBuilder<GroupTO> implements Gro
             final PageReference pageRef) {
 
         super(Optional.ofNullable(groupTO).map(GroupWrapper::new)
-            .orElse(null), anyTypeClasses, formLayoutInfo, pageRef);
+                .orElse(null), anyTypeClasses, formLayoutInfo, pageRef);
     }
 
     /**
@@ -89,38 +88,38 @@ public class GroupWizardBuilder extends AnyWizardBuilder<GroupTO> implements Gro
 
     @Override
     protected Serializable onApplyInternal(final AnyWrapper<GroupTO> modelObject) {
-        GroupTO inner = modelObject instanceof GroupWrapper
+        GroupTO updated = modelObject instanceof GroupWrapper
                 ? GroupWrapper.class.cast(modelObject).fillDynamicConditions()
                 : modelObject.getInnerObject();
 
         ProvisioningResult<GroupTO> result;
-        if (inner.getKey() == null) {
+        if (updated.getKey() == null) {
             GroupCR req = new GroupCR();
-            EntityTOUtils.toAnyCR(inner, req);
-
+            EntityTOUtils.toAnyCR(updated, req);
             result = GroupRestClient.create(req);
         } else {
-            fixPlainAndVirAttrs(inner, getOriginalItem().getInnerObject());
-            GroupUR groupUR = AnyOperations.diff(inner, getOriginalItem().getInnerObject(), false);
-            GroupTO originaObj = getOriginalItem().getInnerObject();
+            GroupTO original = getOriginalItem().getInnerObject();
+            fixPlainAndVirAttrs(updated, original);
 
             // SYNCOPE-1170
             boolean othersNotEqualsOrBlanks =
-                    !inner.getADynMembershipConds().equals(originaObj.getADynMembershipConds())
-                    || (StringUtils.isNotBlank(originaObj.getUDynMembershipCond()) && StringUtils.isBlank(inner.
-                    getUDynMembershipCond()))
-                    || (StringUtils.isBlank(originaObj.getUDynMembershipCond()) && StringUtils.isNotBlank(inner.
-                    getUDynMembershipCond()))
-                    || StringUtils.isAllBlank(originaObj.getUDynMembershipCond(), inner.getUDynMembershipCond())
-                    || !inner.getUDynMembershipCond().equals(originaObj.getUDynMembershipCond())
-                    || !CollectionUtils.diff(inner.getTypeExtensions(), originaObj.getTypeExtensions()).isEmpty();
+                    !updated.getADynMembershipConds().equals(original.getADynMembershipConds())
+                    || (StringUtils.isNotBlank(original.getUDynMembershipCond())
+                    && StringUtils.isBlank(updated.getUDynMembershipCond()))
+                    || (StringUtils.isBlank(original.getUDynMembershipCond())
+                    && StringUtils.isNotBlank(updated.getUDynMembershipCond()))
+                    || StringUtils.isAllBlank(original.getUDynMembershipCond(), updated.getUDynMembershipCond())
+                    || !updated.getUDynMembershipCond().equals(original.getUDynMembershipCond())
+                    || !CollectionUtils.diff(updated.getTypeExtensions(), original.getTypeExtensions()).isEmpty();
+
+            GroupUR groupUR = AnyOperations.diff(updated, original, false);
 
             // update just if it is changed
             if (groupUR.isEmpty() && !othersNotEqualsOrBlanks) {
                 result = new ProvisioningResult<>();
-                result.setEntity(inner);
+                result.setEntity(updated);
             } else {
-                result = groupRestClient.update(getOriginalItem().getInnerObject().getETagValue(), groupUR);
+                result = groupRestClient.update(original.getETagValue(), groupUR);
             }
         }
 
@@ -128,10 +127,10 @@ public class GroupWizardBuilder extends AnyWizardBuilder<GroupTO> implements Gro
     }
 
     @Override
-    protected Details<GroupTO> addOptionalDetailsPanel(final AnyWrapper<GroupTO> modelObject) {
-        return new GroupDetails(
+    protected Optional<Details<GroupTO>> addOptionalDetailsPanel(final AnyWrapper<GroupTO> modelObject) {
+        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/GroupWrapper.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWrapper.java
index bce9de9..5bc5cf2 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWrapper.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWrapper.java
@@ -76,25 +76,23 @@ public class GroupWrapper extends AnyWrapper<GroupTO> {
     }
 
     public String getUDynMembershipCond() {
-        if (CollectionUtils.isEmpty(this.uDynClauses)) {
-            return null;
-        } else {
-            return SearchUtils.buildFIQL(this.uDynClauses, SyncopeClient.getUserSearchConditionBuilder());
-        }
+        return CollectionUtils.isEmpty(this.uDynClauses)
+                ? null
+                : SearchUtils.buildFIQL(this.uDynClauses, SyncopeClient.getUserSearchConditionBuilder());
     }
 
     public Map<String, String> getADynMembershipConds() {
-        final Map<String, String> res = new HashMap<>();
+        Map<String, String> res = new HashMap<>();
         if (this.aDynClauses != null && !this.aDynClauses.isEmpty()) {
-            for (Map.Entry<String, List<SearchClause>> entry : this.aDynClauses.entrySet()) {
-                if (CollectionUtils.isNotEmpty(entry.getValue())) {
-                    final String fiql = SearchUtils.buildFIQL(entry.getValue(),
-                            SyncopeClient.getAnyObjectSearchConditionBuilder(entry.getKey()));
-                    if (fiql != null) {
-                        res.put(entry.getKey(), fiql);
-                    }
-                }
-            }
+            this.aDynClauses.entrySet().stream().
+                    filter(entry -> CollectionUtils.isNotEmpty(entry.getValue())).
+                    forEach(entry -> {
+                        String fiql = SearchUtils.buildFIQL(entry.getValue(),
+                                SyncopeClient.getAnyObjectSearchConditionBuilder(entry.getKey()));
+                        if (fiql != null) {
+                            res.put(entry.getKey(), fiql);
+                        }
+                    });
         }
 
         return res;
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
index cd35090..d77e25c 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
@@ -18,8 +18,6 @@
  */
 package org.apache.syncope.client.console.wizards.any;
 
-import org.apache.syncope.client.ui.commons.wizards.any.UserWrapper;
-import org.apache.syncope.client.ui.commons.wizards.any.AnyWrapper;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -32,6 +30,8 @@ import org.apache.syncope.client.ui.commons.markup.html.form.AbstractFieldPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.MultiFieldPanel;
 import org.apache.syncope.client.ui.commons.markup.html.form.FieldPanel;
 import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
+import org.apache.syncope.client.ui.commons.wizards.any.UserWrapper;
+import org.apache.syncope.client.ui.commons.wizards.any.AnyWrapper;
 import org.apache.syncope.common.lib.EntityTOUtils;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.to.AnyTO;
@@ -96,9 +96,9 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
             }
         }), Model.of(0)).setOutputMarkupId(true));
 
-        add(new ListView<MembershipTO>("membershipsPlainSchemas", membershipTOs) {
+        add(new ListView<MembershipTO>("membershipsPlainSchemas", memberships) {
 
-            private static final long serialVersionUID = 1L;
+            private static final long serialVersionUID = 6741044372185745296L;
 
             @Override
             protected void populateItem(final ListItem<MembershipTO> item) {
@@ -154,20 +154,18 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
 
     @Override
     protected void setAttrs() {
-        List<Attr> attrs = new ArrayList<>();
-
         Map<String, Attr> attrMap = EntityTOUtils.buildAttrMap(anyTO.getPlainAttrs());
 
-        attrs.addAll(schemas.values().stream().map(schema -> {
-            Attr attrTO = new Attr();
-            attrTO.setSchema(schema.getKey());
+        List<Attr> attrs = schemas.values().stream().map(schema -> {
+            Attr attr = new Attr();
+            attr.setSchema(schema.getKey());
             if (attrMap.get(schema.getKey()) == null || attrMap.get(schema.getKey()).getValues().isEmpty()) {
-                attrTO.getValues().add("");
+                attr.getValues().add("");
             } else {
-                attrTO = attrMap.get(schema.getKey());
+                attr = attrMap.get(schema.getKey());
             }
-            return attrTO;
-        }).collect(Collectors.toList()));
+            return attr;
+        }).collect(Collectors.toList());
 
         anyTO.getPlainAttrs().clear();
         anyTO.getPlainAttrs().addAll(attrs);
@@ -175,27 +173,22 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
 
     @Override
     protected void setAttrs(final MembershipTO membershipTO) {
-        List<Attr> attrs = new ArrayList<>();
-
-        final Map<String, Attr> attrMap;
-        if (GroupableRelatableTO.class.cast(anyTO).getMembership(membershipTO.getGroupKey()).isPresent()) {
-            attrMap = EntityTOUtils.buildAttrMap(GroupableRelatableTO.class.cast(anyTO)
-                    .getMembership(membershipTO.getGroupKey()).get().getPlainAttrs());
-        } else {
-            attrMap = new HashMap<>();
-        }
-
-        attrs.addAll(membershipSchemas.get(membershipTO.getGroupKey()).values().stream().
-                map(schema -> {
-                    Attr attrTO = new Attr();
-                    attrTO.setSchema(schema.getKey());
-                    if (attrMap.get(schema.getKey()) == null || attrMap.get(schema.getKey()).getValues().isEmpty()) {
-                        attrTO.getValues().add(StringUtils.EMPTY);
-                    } else {
-                        attrTO.getValues().addAll(attrMap.get(schema.getKey()).getValues());
-                    }
-                    return attrTO;
-                }).collect(Collectors.toList()));
+        Map<String, Attr> attrMap =
+                GroupableRelatableTO.class.cast(anyTO).getMembership(membershipTO.getGroupKey()).isPresent()
+                ? EntityTOUtils.buildAttrMap(GroupableRelatableTO.class.cast(anyTO).
+                        getMembership(membershipTO.getGroupKey()).get().getPlainAttrs())
+                : new HashMap<>();
+
+        List<Attr> attrs = membershipSchemas.get(membershipTO.getGroupKey()).values().stream().map(schema -> {
+            Attr attr = new Attr();
+            attr.setSchema(schema.getKey());
+            if (attrMap.get(schema.getKey()) == null || attrMap.get(schema.getKey()).getValues().isEmpty()) {
+                attr.getValues().add(StringUtils.EMPTY);
+            } else {
+                attr.getValues().addAll(attrMap.get(schema.getKey()).getValues());
+            }
+            return attr;
+        }).collect(Collectors.toList());
 
         membershipTO.getPlainAttrs().clear();
         membershipTO.getPlainAttrs().addAll(attrs);
@@ -274,5 +267,4 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
             });
         }
     }
-
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserTemplateWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserTemplateWizardBuilder.java
index 43bbaeb..4ce27b9 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserTemplateWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserTemplateWizardBuilder.java
@@ -21,6 +21,7 @@ package org.apache.syncope.client.console.wizards.any;
 import org.apache.syncope.client.ui.commons.wizards.any.UserWrapper;
 import org.apache.syncope.client.ui.commons.wizards.any.AnyWrapper;
 import java.util.List;
+import java.util.Optional;
 import org.apache.syncope.client.console.layout.UserFormLayoutInfo;
 import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
 import org.apache.syncope.common.lib.to.RealmTO;
@@ -72,10 +73,10 @@ public class UserTemplateWizardBuilder extends UserWizardBuilder implements Temp
     }
 
     @Override
-    protected Details<UserTO> addOptionalDetailsPanel(final AnyWrapper<UserTO> modelObject) {
-        final Details<UserTO> details = super.addOptionalDetailsPanel(modelObject);
-        if (templatable instanceof RealmTO) {
-            details.disableRealmSpecification();
+    protected Optional<Details<UserTO>> addOptionalDetailsPanel(final AnyWrapper<UserTO> modelObject) {
+        Optional<Details<UserTO>> details = super.addOptionalDetailsPanel(modelObject);
+        if (templatable instanceof RealmTO && details.isPresent()) {
+            details.get().disableRealmSpecification();
         }
         return details;
     }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
index 0070207..c9e3c11 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
@@ -21,7 +21,6 @@ package org.apache.syncope.client.console.wizards.any;
 import java.io.Serializable;
 import java.util.List;
 import java.util.Optional;
-
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.rest.UserRestClient;
 import org.apache.syncope.client.ui.commons.layout.UserForm;
@@ -44,13 +43,6 @@ public class UserWizardBuilder extends AnyWizardBuilder<UserTO> implements UserF
 
     protected final UserRestClient userRestClient = new UserRestClient();
 
-    /**
-     * Constructor to be used for templating only.
-     *
-     * @param anyTypeClasses any type classes.
-     * @param formLayoutInfo form layout.
-     * @param pageRef reference page.
-     */
     public UserWizardBuilder(
             final List<String> anyTypeClasses,
             final UserFormLayoutInfo formLayoutInfo,
@@ -59,15 +51,6 @@ public class UserWizardBuilder extends AnyWizardBuilder<UserTO> implements UserF
         super(new UserWrapper(null), anyTypeClasses, formLayoutInfo, pageRef);
     }
 
-    /**
-     * Constructor to be used for Approval and Remediation details only.
-     *
-     * @param previousUserTO previous user status.
-     * @param userTO new user status to be approved.
-     * @param anyTypeClasses any type classes.
-     * @param formLayoutInfo from layout.
-     * @param pageRef reference page.
-     */
     public UserWizardBuilder(
             final UserTO previousUserTO,
             final UserTO userTO,
@@ -114,13 +97,13 @@ public class UserWizardBuilder extends AnyWizardBuilder<UserTO> implements UserF
     }
 
     @Override
-    protected Details<UserTO> addOptionalDetailsPanel(final AnyWrapper<UserTO> modelObject) {
-        return new UserDetails(
+    protected Optional<Details<UserTO>> addOptionalDetailsPanel(final AnyWrapper<UserTO> modelObject) {
+        return Optional.of(new UserDetails(
                 UserWrapper.class.cast(modelObject),
                 mode == AjaxWizard.Mode.TEMPLATE,
                 modelObject.getInnerObject().getKey() != null,
                 UserFormLayoutInfo.class.cast(formLayoutInfo).isPasswordManagement(),
-                pageRef);
+                pageRef));
     }
 
     /**
@@ -131,8 +114,8 @@ public class UserWizardBuilder extends AnyWizardBuilder<UserTO> implements UserF
      */
     @Override
     public UserWizardBuilder setItem(final AnyWrapper<UserTO> item) {
-        super.setItem(Optional.ofNullable(item)
-            .map(userTOAnyWrapper -> new UserWrapper(userTOAnyWrapper.getInnerObject())).orElse(null));
+        super.setItem(Optional.ofNullable(item).
+                map(userTOAnyWrapper -> new UserWrapper(userTOAnyWrapper.getInnerObject())).orElse(null));
         return this;
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
index 6272669..ded7b5d 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
@@ -84,7 +84,7 @@ public class VirAttrs extends AbstractAttrs<VirSchemaTO> {
             }
         }), Model.of(0)).setOutputMarkupId(true));
 
-        add(new ListView<MembershipTO>("membershipsVirSchemas", membershipTOs) {
+        add(new ListView<MembershipTO>("membershipsVirSchemas", memberships) {
 
             private static final long serialVersionUID = 9101744072914090143L;
 
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
index 6ddcca0..74c935e 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
@@ -342,7 +342,7 @@ public class PullJobDelegate extends AbstractProvisioningJobDelegate<PullTask> i
                     if (provision.getUidOnCreate() != null) {
                         AnyUtils anyUtils = anyUtilsFactory.getInstance(provision.getAnyType().getKind());
                         profile.getResults().stream().
-                                filter(result -> result.getUidValue() != null
+                                filter(result -> result.getUidValue() != null && result.getKey() != null
                                 && result.getOperation() == ResourceOperation.CREATE
                                 && result.getAnyType().equals(provision.getAnyType().getKey())).
                                 forEach(result -> {
diff --git a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java
index 3c9bc5d..5a12062 100644
--- a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java
+++ b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserRequestHandler.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.flowable.impl;
 
-import org.apache.syncope.core.flowable.api.UserRequestHandler;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -40,6 +39,7 @@ import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.ResourceOperation;
 import org.apache.syncope.common.lib.types.UserRequestFormPropertyType;
 import org.apache.syncope.core.flowable.api.DropdownValueProvider;
+import org.apache.syncope.core.flowable.api.UserRequestHandler;
 import org.apache.syncope.core.flowable.support.DomainProcessEngine;
 import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.UserDAO;
@@ -618,6 +618,7 @@ public class FlowableUserRequestHandler implements UserRequestHandler {
     }
 
     @Override
+    @SuppressWarnings("unchecked")
     public UserWorkflowResult<UserUR> submitForm(final UserRequestForm form) {
         Pair<Task, TaskFormData> parsed = parseTask(form.getTaskId());
 
diff --git a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserWorkflowAdapter.java b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserWorkflowAdapter.java
index 75d8b71..ee96967 100644
--- a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserWorkflowAdapter.java
+++ b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserWorkflowAdapter.java
@@ -232,6 +232,7 @@ public class FlowableUserWorkflowAdapter extends AbstractUserWorkflowAdapter imp
         // save some existing variable values for later processing, after actual update is made 
         UserUR beforeUpdate = engine.getRuntimeService().
                 getVariable(procInstID, FlowableRuntimeUtils.USER_UR, UserUR.class);
+        @SuppressWarnings("unchecked")
         PropagationByResource<String> propByResBeforeUpdate = engine.getRuntimeService().getVariable(
                 procInstID, FlowableRuntimeUtils.PROP_BY_RESOURCE, PropagationByResource.class);
         @SuppressWarnings("unchecked")