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:10 UTC

[syncope] branch 2_1_X 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 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 3edd9b2  White noise: reflow, adjust, tweak, rename...
3edd9b2 is described below

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

    White noise: reflow, adjust, tweak, rename...
---
 .../client/console/commons/TaskDataProvider.java   |  3 --
 .../repeater/data/table/BooleanPropertyColumn.java |  2 +-
 .../wicket/markup/html/form/NonI18nPalette.java    | 12 ------
 .../client/console/wizards/any/AbstractAttrs.java  | 46 +++++++++++-----------
 .../wizards/any/AbstractAttrsWizardStep.java       | 15 +++----
 .../any/AnyObjectTemplateWizardBuilder.java        |  9 +++--
 .../wizards/any/AnyObjectWizardBuilder.java        |  9 +++--
 .../console/wizards/any/AnyWizardBuilder.java      | 16 +++-----
 .../client/console/wizards/any/DerAttrs.java       |  2 +-
 .../wizards/any/GroupTemplateWizardBuilder.java    |  9 +++--
 .../console/wizards/any/GroupWizardBuilder.java    | 42 ++++++++++----------
 .../client/console/wizards/any/GroupWrapper.java   | 28 ++++++-------
 .../client/console/wizards/any/PlainAttrs.java     | 46 +++++++++-------------
 .../wizards/any/UserTemplateWizardBuilder.java     |  9 +++--
 .../console/wizards/any/UserWizardBuilder.java     | 23 ++---------
 .../client/console/wizards/any/VirAttrs.java       |  2 +-
 .../java/pushpull/PullJobDelegate.java             |  2 +-
 .../console/panels/CamelRoutesDirectoryPanel.java  |  7 +---
 18 files changed, 117 insertions(+), 165 deletions(-)

diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
index b68ab42..d842f3c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
@@ -28,15 +28,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/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/BooleanPropertyColumn.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/BooleanPropertyColumn.java
index c069470..bfe7a36 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/BooleanPropertyColumn.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/BooleanPropertyColumn.java
@@ -47,7 +47,7 @@ public class BooleanPropertyColumn<T> extends PropertyColumn<T, String> {
         Object obj = bwi.getPropertyValue(getPropertyExpression());
 
         item.add(new Label(componentId, StringUtils.EMPTY));
-        if (Boolean.valueOf(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/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 c2313a5..6f055b3 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
@@ -21,7 +21,6 @@ package org.apache.syncope.client.console.wicket.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/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
index 40837db..c544e77 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
@@ -45,7 +45,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<>();
 
@@ -56,37 +56,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> loadMembershipAttrTOs() {
-        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) {
@@ -118,7 +117,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends AbstractAttrsWiz
     public void renderHead(final IHeaderResponse response) {
         super.renderHead(response);
         if (CollectionUtils.isEmpty(attrTOs.getObject())
-                && CollectionUtils.isEmpty(membershipTOs.getObject())) {
+                && CollectionUtils.isEmpty(memberships.getObject())) {
             response.render(OnDomReadyHeaderItem.forScript(
                     String.format("$('#emptyPlaceholder').append(\"%s\"); $('#attributes').hide();",
                             getString("attribute.empty.list"))));
@@ -128,8 +127,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends AbstractAttrsWiz
     @Override
     public boolean evaluate() {
         this.attrTOs.setObject(loadAttrTOs());
-        this.membershipTOs.setObject(loadMembershipAttrTOs());
-        return !attrTOs.getObject().isEmpty() || !membershipTOs.getObject().isEmpty();
+        this.memberships.setObject(loadMemberships());
+        return !attrTOs.getObject().isEmpty() || !memberships.getObject().isEmpty();
     }
-
 }
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrsWizardStep.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrsWizardStep.java
index 1ed8cbe..082d79a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrsWizardStep.java
+++ b/client/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.attrTOs = new ListModel<>(Collections.<AttrTO>emptyList());
+        this.attrTOs = 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 = Collections.emptyList();
-        } 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/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectTemplateWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectTemplateWizardBuilder.java
index 141aa9d..98e25cb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectTemplateWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectTemplateWizardBuilder.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.client.console.wizards.any;
 
 import java.util.List;
+import java.util.Optional;
 import org.apache.syncope.client.console.layout.AnyObjectFormLayoutInfo;
 import org.apache.syncope.client.console.wizards.AjaxWizard;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
@@ -55,10 +56,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/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
index 779b682..0c111ff 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
@@ -20,6 +20,7 @@ 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;
@@ -34,7 +35,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,
@@ -88,10 +89,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/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java
index 3ba260e..e629d17 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.client.console.wizards.any;
 
 import java.util.List;
+import java.util.Optional;
 import org.apache.syncope.client.console.layout.AbstractAnyFormLayout;
 import org.apache.syncope.client.console.layout.AnyForm;
 import org.apache.syncope.client.console.layout.AnyObjectFormLayoutInfo;
@@ -83,10 +84,7 @@ public abstract class AnyWizardBuilder<A extends AnyTO> extends AjaxWizardBuilde
     @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)
@@ -162,15 +160,11 @@ public abstract class AnyWizardBuilder<A extends AnyTO> extends AjaxWizardBuilde
         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/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java
index dd94bc2..a977029 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java
@@ -71,7 +71,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/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupTemplateWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupTemplateWizardBuilder.java
index d9199fe..68e2673 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupTemplateWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupTemplateWizardBuilder.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.client.console.wizards.any;
 
 import java.util.List;
+import java.util.Optional;
 import org.apache.syncope.client.console.layout.GroupFormLayoutInfo;
 import org.apache.syncope.client.console.wizards.AjaxWizard;
 import org.apache.syncope.common.lib.to.GroupTO;
@@ -53,10 +54,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/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
index a29078f..e680875 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
@@ -20,6 +20,7 @@ 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.cxf.common.util.CollectionUtils;
 import org.apache.syncope.client.console.layout.GroupForm;
@@ -37,7 +38,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,
@@ -83,35 +84,36 @@ 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) {
-            result = groupRestClient.create(inner);
+        if (updated.getKey() == null) {
+            result = groupRestClient.create(updated);
         } else {
-            fixPlainAndVirAttrs(inner, getOriginalItem().getInnerObject());
-            GroupPatch patch = 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();
+
+            GroupPatch patch = AnyOperations.diff(updated, original, false);
 
             // update just if it is changed
             if (patch.isEmpty() && !othersNotEqualsOrBlanks) {
                 result = new ProvisioningResult<>();
-                result.setEntity(inner);
+                result.setEntity(updated);
             } else {
-                result = groupRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
+                result = groupRestClient.update(original.getETagValue(), patch);
             }
         }
 
@@ -119,10 +121,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/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWrapper.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWrapper.java
index 8e82041..b5e1b08 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWrapper.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWrapper.java
@@ -75,25 +75,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/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
index 32467a2..7827483 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
@@ -94,9 +94,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) {
@@ -152,11 +152,9 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
 
     @Override
     protected void setAttrs() {
-        List<AttrTO> attrs = new ArrayList<>();
-
         Map<String, AttrTO> attrMap = EntityTOUtils.buildAttrMap(anyTO.getPlainAttrs());
 
-        attrs.addAll(schemas.values().stream().map(schema -> {
+        List<AttrTO> attrs = schemas.values().stream().map(schema -> {
             AttrTO attrTO = new AttrTO();
             attrTO.setSchema(schema.getKey());
             if (attrMap.get(schema.getKey()) == null || attrMap.get(schema.getKey()).getValues().isEmpty()) {
@@ -165,7 +163,7 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
                 attrTO = attrMap.get(schema.getKey());
             }
             return attrTO;
-        }).collect(Collectors.toList()));
+        }).collect(Collectors.toList());
 
         anyTO.getPlainAttrs().clear();
         anyTO.getPlainAttrs().addAll(attrs);
@@ -173,27 +171,22 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
 
     @Override
     protected void setAttrs(final MembershipTO membershipTO) {
-        List<AttrTO> attrs = new ArrayList<>();
-
-        final Map<String, AttrTO> 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<>();
-        }
+        Map<String, AttrTO> attrMap =
+                GroupableRelatableTO.class.cast(anyTO).getMembership(membershipTO.getGroupKey()).isPresent()
+                ? EntityTOUtils.buildAttrMap(GroupableRelatableTO.class.cast(anyTO).
+                        getMembership(membershipTO.getGroupKey()).get().getPlainAttrs())
+                : new HashMap<>();
 
-        attrs.addAll(membershipSchemas.get(membershipTO.getGroupKey()).values().stream().
-                map(schema -> {
-                    AttrTO attrTO = new AttrTO();
-                    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()));
+        List<AttrTO> attrs = membershipSchemas.get(membershipTO.getGroupKey()).values().stream().map(schema -> {
+            AttrTO attrTO = new AttrTO();
+            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());
 
         membershipTO.getPlainAttrs().clear();
         membershipTO.getPlainAttrs().addAll(attrs);
@@ -272,5 +265,4 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
             });
         }
     }
-
 }
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserTemplateWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserTemplateWizardBuilder.java
index 3c8111c..9cbf928 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserTemplateWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserTemplateWizardBuilder.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.client.console.wizards.any;
 
 import java.util.List;
+import java.util.Optional;
 import org.apache.syncope.client.console.layout.UserFormLayoutInfo;
 import org.apache.syncope.client.console.wizards.AjaxWizard;
 import org.apache.syncope.common.lib.to.RealmTO;
@@ -70,10 +71,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/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
index 5e17524..25b8adb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
@@ -20,6 +20,7 @@ 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.layout.UserForm;
 import org.apache.syncope.client.console.layout.UserFormLayoutInfo;
@@ -38,13 +39,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,
@@ -53,15 +47,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,
@@ -104,13 +89,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));
     }
 
     /**
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
index ef20e54..4738c51 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java
@@ -82,7 +82,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 a03a06e..f48b344 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
@@ -344,7 +344,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/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesDirectoryPanel.java b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesDirectoryPanel.java
index 00307c8..3032540 100644
--- a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesDirectoryPanel.java
+++ b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesDirectoryPanel.java
@@ -84,7 +84,7 @@ public class CamelRoutesDirectoryPanel extends DirectoryPanel<
 
     @Override
     protected CamelRoutesProvider dataProvider() {
-        return new CamelRoutesProvider(anyTypeKind, rows);
+        return new CamelRoutesProvider(rows);
     }
 
     @Override
@@ -148,13 +148,10 @@ public class CamelRoutesDirectoryPanel extends DirectoryPanel<
 
         private static final long serialVersionUID = -185944053385660794L;
 
-        private final AnyTypeKind anyTypeKind;
-
         private final SortableDataProviderComparator<CamelRouteTO> comparator;
 
-        private CamelRoutesProvider(final AnyTypeKind anyTypeKind, final int paginatorRows) {
+        private CamelRoutesProvider(final int paginatorRows) {
             super(paginatorRows);
-            this.anyTypeKind = anyTypeKind;
             comparator = new SortableDataProviderComparator<>(this);
         }