You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2020/04/15 15:58:29 UTC

[syncope] branch master updated: [SYNCOPE-1500] init destionation realm for reconciliation and pull tasks

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 1624641  [SYNCOPE-1500] init destionation realm for reconciliation and pull tasks
1624641 is described below

commit 16246411e8a8eccf1c424f4e0944ed763fbd0b05
Author: Andrea Patricelli <an...@apache.org>
AuthorDate: Wed Apr 15 17:02:38 2020 +0200

    [SYNCOPE-1500] init destionation realm for reconciliation and pull tasks
---
 .../console/panels/ConnObjectListViewPanel.java    | 27 +++++++++++-----------
 .../syncope/client/console/panels/ConnObjects.java |  5 +++-
 .../client/console/status/ReconTaskPanel.java      | 11 +++++----
 .../console/tasks/SchedTaskDirectoryPanel.java     |  2 +-
 .../console/tasks/SchedTaskWizardBuilder.java      |  6 +++++
 .../apache/syncope/common/lib/to/ReconStatus.java  | 11 +++++++++
 .../syncope/core/logic/ReconciliationLogic.java    |  3 +++
 7 files changed, 46 insertions(+), 19 deletions(-)

diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java
index 338854f..831291a 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java
@@ -23,7 +23,6 @@ import de.agilecoders.wicket.core.markup.html.bootstrap.components.PopoverConfig
 import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipConfig;
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import org.apache.commons.lang3.StringUtils;
@@ -104,18 +103,17 @@ public abstract class ConnObjectListViewPanel extends Panel {
         final Model<Integer> model = Model.of(-1);
         final StringResourceModel res = new StringResourceModel("search.result", this, new Model<>(anyType));
 
-        final Accordion accordion = new Accordion("accordionPanel",
-                Collections.<ITab>singletonList(new AbstractTab(res) {
+        final Accordion accordion = new Accordion("accordionPanel", List.of(new AbstractTab(res) {
 
-                    private static final long serialVersionUID = 1037272333056449377L;
+            private static final long serialVersionUID = 1037272333056449377L;
 
-                    @Override
-                    public WebMarkupContainer getPanel(final String panelId) {
-                        searchPanel = getSearchPanel(panelId, anyType);
-                        return searchPanel;
-                    }
+            @Override
+            public WebMarkupContainer getPanel(final String panelId) {
+                searchPanel = getSearchPanel(panelId, anyType);
+                return searchPanel;
+            }
 
-                }), model) {
+        }), model) {
 
             private static final long serialVersionUID = 6581261306163L;
 
@@ -217,15 +215,17 @@ public abstract class ConnObjectListViewPanel extends Panel {
                 @Override
                 public void onClick(final AjaxRequestTarget target, final ConnObjectTO modelObject) {
                     String connObjectKeyValue = modelObject.getAttr(ConnIdSpecialName.UID).get().getValues().get(0);
-                    String anyKey = ReconciliationRestClient.status(new ReconQuery.Builder(anyType, resource.getKey()).
-                            connObjectKeyValue(connObjectKeyValue).build()).getAnyKey();
+                    ReconStatus status = ReconciliationRestClient.status(
+                            new ReconQuery.Builder(anyType, resource.getKey()).
+                                    connObjectKeyValue(connObjectKeyValue).build());
 
                     pullConnObject(
                             connObjectKeyValue,
                             target,
                             resource.getKey(),
                             anyType,
-                            StringUtils.isNotBlank(anyKey),
+                            status.getRealm(),
+                            StringUtils.isNotBlank(status.getAnyKey()),
                             pageRef);
                 }
             }, ActionLink.ActionType.RECONCILIATION_PULL, IdRepoEntitlement.TASK_EXECUTE);
@@ -276,6 +276,7 @@ public abstract class ConnObjectListViewPanel extends Panel {
             AjaxRequestTarget target,
             String resource,
             String anyType,
+            String realm,
             boolean isOnSyncope,
             PageReference pageRef);
 
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java
index 709e4a3..47350fb 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java
@@ -132,15 +132,18 @@ public class ConnObjects extends Panel implements ModalPanel {
                 final AjaxRequestTarget target,
                 final String resource,
                 final String anyType,
+                final String realm,
                 final boolean isOnSyncope,
                 final PageReference pageRef) {
             anyTypes.setEnabled(false);
             target.add(anyTypes);
 
+            final PullTaskTO pullTaskTO = new PullTaskTO();
+            pullTaskTO.setDestinationRealm(realm);
             connObjects.next("PULL " + resource,
                     new ReconTaskPanel(
                             resource,
-                            new PullTaskTO(),
+                            pullTaskTO,
                             anyType,
                             null,
                             connObjectKeyValue,
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
index 7a75688..14e6cf4 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
@@ -22,6 +22,7 @@ import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 import java.util.stream.Collectors;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.commons.RealmsUtils;
@@ -135,14 +136,16 @@ public class ReconTaskPanel extends MultilevelPanel.SecondLevel {
                 }
             };
 
-            form.add(realm);
             realm.addRequiredLabel();
             realm.setOutputMarkupId(true);
-
-            if (isOnSyncope) {
+            // add a default destination realm if missing in the task
+            if (StringUtils.isBlank(PullTaskTO.class.cast(taskTO).getDestinationRealm())) {
                 realm.getField().setModelObject(SyncopeConstants.ROOT_REALM);
-                realm.setVisible(false);
             }
+            if (isOnSyncope) {
+                realm.setEnabled(false);
+            }
+            form.add(realm);
         }
 
         AjaxPalettePanel<String> actions = new AjaxPalettePanel.Builder<String>().
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
index 15b63e2..4885cee 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
@@ -103,7 +103,7 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
         try {
             schedTaskTO = reference.getDeclaredConstructor().newInstance();
         } catch (Exception e) {
-            LOG.error("Falure instantiating task", e);
+            LOG.error("Failure instantiating task", e);
         }
 
         this.addNewItemPanelBuilder(new SchedTaskWizardBuilder<>(taskType, schedTaskTO, pageRef), true);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
index ed2c880..60b1273 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
@@ -23,6 +23,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.apache.syncope.client.console.SyncopeWebApplication;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.commons.RealmsUtils;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.console.rest.RealmRestClient;
@@ -34,6 +35,7 @@ import org.apache.syncope.client.ui.commons.markup.html.form.AjaxPalettePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxSearchFieldPanel;
 import org.apache.syncope.client.console.wizards.BaseAjaxWizardBuilder;
 import org.apache.syncope.client.ui.commons.markup.html.form.AjaxTextFieldPanel;
+import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.to.ProvisioningTaskTO;
 import org.apache.syncope.common.lib.to.SchedTaskTO;
 import org.apache.syncope.common.lib.to.PullTaskTO;
@@ -206,6 +208,10 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends BaseAjaxWizar
 
             if (taskTO instanceof PullTaskTO) {
                 destinationRealm.addRequiredLabel();
+                if (StringUtils.isBlank(PullTaskTO.class.cast(taskTO).getDestinationRealm())) {
+                    // add a default destination realm if missing in the task
+                    destinationRealm.setModelObject(SyncopeConstants.ROOT_REALM);
+                }
             }
             pullTaskSpecifics.add(destinationRealm);
 
diff --git a/common/idm/lib/src/main/java/org/apache/syncope/common/lib/to/ReconStatus.java b/common/idm/lib/src/main/java/org/apache/syncope/common/lib/to/ReconStatus.java
index b7b4474..a78f4b2 100644
--- a/common/idm/lib/src/main/java/org/apache/syncope/common/lib/to/ReconStatus.java
+++ b/common/idm/lib/src/main/java/org/apache/syncope/common/lib/to/ReconStatus.java
@@ -38,6 +38,8 @@ public class ReconStatus implements Serializable {
 
     private String anyKey;
 
+    private String realm;
+
     private MatchType matchType;
 
     private ConnObjectTO onSyncope;
@@ -63,6 +65,15 @@ public class ReconStatus implements Serializable {
     }
 
     @Schema(accessMode = Schema.AccessMode.READ_ONLY)
+    public String getRealm() {
+        return realm;
+    }
+
+    public void setRealm(final String realm) {
+        this.realm = realm;
+    }
+
+    @Schema(accessMode = Schema.AccessMode.READ_ONLY)
     public MatchType getMatchType() {
         return matchType;
     }
diff --git a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
index 0697ada..8c8c23e 100644
--- a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
+++ b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
@@ -225,11 +225,13 @@ public class ReconciliationLogic extends AbstractTransactionalLogic<EntityTO> {
                             status.setMatchType(MatchType.ANY);
                             status.setAnyTypeKind(match.getAny().getType().getKind());
                             status.setAnyKey(match.getAny().getKey());
+                            status.setRealm(match.getAny().getRealm().getFullPath());
                             status.setOnSyncope(getOnSyncope(match.getAny(), connObjectKeyItem, provision));
                         } else if (match.getLinkedAccount() != null) {
                             status.setMatchType(MatchType.LINKED_ACCOUNT);
                             status.setAnyTypeKind(AnyTypeKind.USER);
                             status.setAnyKey(match.getLinkedAccount().getOwner().getKey());
+                            status.setRealm(match.getAny().getRealm().getFullPath());
                             status.setOnSyncope(getOnSyncope(match.getLinkedAccount(), connObjectKeyItem, provision));
                         }
                     });
@@ -254,6 +256,7 @@ public class ReconciliationLogic extends AbstractTransactionalLogic<EntityTO> {
             status.setMatchType(MatchType.ANY);
             status.setAnyTypeKind(any.getType().getKind());
             status.setAnyKey(any.getKey());
+            status.setRealm(any.getRealm().getFullPath());
             status.setOnSyncope(getOnSyncope(any, connObjectKeyItem, provision));
 
             List<ConnectorObject> connObjs = outboundMatcher.match(