You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by sk...@apache.org on 2019/12/12 08:40:31 UTC
[syncope] branch master updated: [SYNCOPE-957] Fixed missing Pull
report for linked accounts
This is an automated email from the ASF dual-hosted git repository.
skylark17 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 13fdf4b [SYNCOPE-957] Fixed missing Pull report for linked accounts
13fdf4b is described below
commit 13fdf4bab2dac37880226a5ded220a392933e662
Author: skylark17 <sk...@apache.org>
AuthorDate: Wed Dec 11 14:36:37 2019 +0100
[SYNCOPE-957] Fixed missing Pull report for linked accounts
---
.../pushpull/AbstractProvisioningJobDelegate.java | 137 +++++++++++++++++----
.../syncope/fit/core/LinkedAccountITCase.java | 3 +
2 files changed, 113 insertions(+), 27 deletions(-)
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java
index 7a3140e..5f06bfd 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java
@@ -23,12 +23,12 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.annotation.Resource;
+import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.TraceLevel;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
-import org.apache.syncope.core.persistence.api.entity.AnyType;
import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.api.entity.resource.Mapping;
import org.apache.syncope.core.persistence.api.entity.resource.Provision;
@@ -44,6 +44,12 @@ import org.springframework.beans.factory.annotation.Autowired;
public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask> extends AbstractSchedTaskJobDelegate {
+ private static final String USER = "USER";
+
+ private static final String GROUP = "GROUP";
+
+ private static final String LINKED_ACCOUNT = "LINKED_ACCOUNT";
+
@Resource(name = "adminUser")
protected String adminUser;
@@ -53,6 +59,9 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
@Autowired
protected ConnectorFactory connFactory;
+ /**
+ * AnyTypeDAO DAO
+ */
@Autowired
protected AnyTypeDAO anyTypeDAO;
@@ -127,27 +136,36 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
List<ProvisioningReport> aFailDelete = new ArrayList<>();
List<ProvisioningReport> aSuccNone = new ArrayList<>();
List<ProvisioningReport> aIgnore = new ArrayList<>();
+ List<ProvisioningReport> laSuccCreate = new ArrayList<>();
+ List<ProvisioningReport> laFailCreate = new ArrayList<>();
+ List<ProvisioningReport> laSuccUpdate = new ArrayList<>();
+ List<ProvisioningReport> laFailUpdate = new ArrayList<>();
+ List<ProvisioningReport> laSuccDelete = new ArrayList<>();
+ List<ProvisioningReport> laFailDelete = new ArrayList<>();
+ List<ProvisioningReport> laSuccNone = new ArrayList<>();
+ List<ProvisioningReport> laIgnore = new ArrayList<>();
for (ProvisioningReport provResult : provResults) {
- AnyType anyType = anyTypeDAO.find(provResult.getAnyType());
-
switch (provResult.getStatus()) {
case SUCCESS:
switch (provResult.getOperation()) {
case CREATE:
- if (anyType == null) {
+ if (StringUtils.isBlank(provResult.getAnyType())) {
rSuccCreate.add(provResult);
} else {
- switch (anyType.getKind()) {
+ switch (provResult.getAnyType()) {
case USER:
uSuccCreate.add(provResult);
break;
+ case LINKED_ACCOUNT:
+ laSuccCreate.add(provResult);
+ break;
+
case GROUP:
gSuccCreate.add(provResult);
break;
- case ANY_OBJECT:
default:
aSuccCreate.add(provResult);
}
@@ -155,19 +173,22 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
break;
case UPDATE:
- if (anyType == null) {
+ if (StringUtils.isBlank(provResult.getAnyType())) {
rSuccUpdate.add(provResult);
} else {
- switch (anyType.getKind()) {
+ switch (provResult.getAnyType()) {
case USER:
uSuccUpdate.add(provResult);
break;
+ case LINKED_ACCOUNT:
+ laSuccUpdate.add(provResult);
+ break;
+
case GROUP:
gSuccUpdate.add(provResult);
break;
- case ANY_OBJECT:
default:
aSuccUpdate.add(provResult);
}
@@ -175,19 +196,22 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
break;
case DELETE:
- if (anyType == null) {
+ if (StringUtils.isBlank(provResult.getAnyType())) {
rSuccDelete.add(provResult);
} else {
- switch (anyType.getKind()) {
+ switch (provResult.getAnyType()) {
case USER:
uSuccDelete.add(provResult);
break;
+ case LINKED_ACCOUNT:
+ laSuccDelete.add(provResult);
+ break;
+
case GROUP:
gSuccDelete.add(provResult);
break;
- case ANY_OBJECT:
default:
aSuccDelete.add(provResult);
}
@@ -195,19 +219,22 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
break;
case NONE:
- if (anyType == null) {
+ if (StringUtils.isBlank(provResult.getAnyType())) {
rSuccNone.add(provResult);
} else {
- switch (anyType.getKind()) {
+ switch (provResult.getAnyType()) {
case USER:
uSuccNone.add(provResult);
break;
+ case LINKED_ACCOUNT:
+ laSuccNone.add(provResult);
+ break;
+
case GROUP:
gSuccNone.add(provResult);
break;
- case ANY_OBJECT:
default:
aSuccNone.add(provResult);
}
@@ -221,19 +248,22 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
case FAILURE:
switch (provResult.getOperation()) {
case CREATE:
- if (anyType == null) {
+ if (StringUtils.isBlank(provResult.getAnyType())) {
rFailCreate.add(provResult);
} else {
- switch (anyType.getKind()) {
+ switch (provResult.getAnyType()) {
case USER:
uFailCreate.add(provResult);
break;
+ case LINKED_ACCOUNT:
+ laFailCreate.add(provResult);
+ break;
+
case GROUP:
gFailCreate.add(provResult);
break;
- case ANY_OBJECT:
default:
aFailCreate.add(provResult);
}
@@ -241,19 +271,22 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
break;
case UPDATE:
- if (anyType == null) {
+ if (StringUtils.isBlank(provResult.getAnyType())) {
rFailUpdate.add(provResult);
} else {
- switch (anyType.getKind()) {
+ switch (provResult.getAnyType()) {
case USER:
uFailUpdate.add(provResult);
break;
+ case LINKED_ACCOUNT:
+ laFailUpdate.add(provResult);
+ break;
+
case GROUP:
gFailUpdate.add(provResult);
break;
- case ANY_OBJECT:
default:
aFailUpdate.add(provResult);
}
@@ -261,19 +294,22 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
break;
case DELETE:
- if (anyType == null) {
+ if (StringUtils.isBlank(provResult.getAnyType())) {
rFailDelete.add(provResult);
} else {
- switch (anyType.getKind()) {
+ switch (provResult.getAnyType()) {
case USER:
uFailDelete.add(provResult);
break;
+ case LINKED_ACCOUNT:
+ laFailDelete.add(provResult);
+ break;
+
case GROUP:
gFailDelete.add(provResult);
break;
- case ANY_OBJECT:
default:
aFailDelete.add(provResult);
}
@@ -285,19 +321,22 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
break;
case IGNORE:
- if (anyType == null) {
+ if (StringUtils.isBlank(provResult.getAnyType())) {
rIgnore.add(provResult);
} else {
- switch (anyType.getKind()) {
+ switch (provResult.getAnyType()) {
case USER:
uIgnore.add(provResult);
break;
+ case LINKED_ACCOUNT:
+ laIgnore.add(provResult);
+ break;
+
case GROUP:
gIgnore.add(provResult);
break;
- case ANY_OBJECT:
default:
aIgnore.add(provResult);
}
@@ -325,6 +364,16 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
append(' ').
append("[no operation/ignored]: ").append(uSuccNone.size()).append('/').append(uIgnore.size()).
append('\n');
+
+ report.append("Accounts ").
+ append("[created/failures]: ").append(laSuccCreate.size()).append('/').append(laFailCreate.size()).
+ append(' ').
+ append("[updated/failures]: ").append(laSuccUpdate.size()).append('/').append(laFailUpdate.size()).
+ append(' ').
+ append("[deleted/failures]: ").append(laSuccDelete.size()).append('/').append(laFailDelete.size()).
+ append(' ').
+ append("[no operation/ignored]: ").append(laSuccNone.size()).append('/').append(laIgnore.size()).
+ append('\n');
}
if (includeGroup) {
report.append("Groups ").
@@ -373,6 +422,19 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
report.append("\nUsers failed to delete: ");
report.append(ProvisioningReport.generate(uFailDelete, traceLevel));
}
+
+ if (!laFailCreate.isEmpty()) {
+ report.append("\n\nAccounts failed to create: ");
+ report.append(ProvisioningReport.generate(laFailCreate, traceLevel));
+ }
+ if (!laFailUpdate.isEmpty()) {
+ report.append("\nAccounts failed to update: ");
+ report.append(ProvisioningReport.generate(laFailUpdate, traceLevel));
+ }
+ if (!laFailDelete.isEmpty()) {
+ report.append("\nAccounts failed to delete: ");
+ report.append(ProvisioningReport.generate(laFailDelete, traceLevel));
+ }
}
if (includeGroup) {
@@ -442,6 +504,27 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
report.append("\nUsers ignored:\n").
append(ProvisioningReport.generate(uIgnore, traceLevel));
}
+
+ if (!laSuccCreate.isEmpty()) {
+ report.append("\n\nAccounts created:\n").
+ append(ProvisioningReport.generate(laSuccCreate, traceLevel));
+ }
+ if (!laSuccUpdate.isEmpty()) {
+ report.append("\nAccounts updated:\n").
+ append(ProvisioningReport.generate(laSuccUpdate, traceLevel));
+ }
+ if (!laSuccDelete.isEmpty()) {
+ report.append("\nAccounts deleted:\n").
+ append(ProvisioningReport.generate(laSuccDelete, traceLevel));
+ }
+ if (!laSuccNone.isEmpty()) {
+ report.append("\nAccounts no operation:\n").
+ append(ProvisioningReport.generate(laSuccNone, traceLevel));
+ }
+ if (!laIgnore.isEmpty()) {
+ report.append("\nAccounts ignored:\n").
+ append(ProvisioningReport.generate(laIgnore, traceLevel));
+ }
}
if (includeGroup) {
if (!gSuccCreate.isEmpty()) {
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LinkedAccountITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LinkedAccountITCase.java
index a04a07f..b5c3357 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LinkedAccountITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LinkedAccountITCase.java
@@ -403,6 +403,7 @@ public class LinkedAccountITCase extends AbstractITCase {
ExecTO exec = AbstractTaskITCase.execProvisioningTask(taskService, TaskType.PULL, pullTaskKey, 50, false);
assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(exec.getStatus()));
+ assertTrue(exec.getMessage().contains("Accounts created"));
accounts = userService.read("vivaldi").getLinkedAccounts();
assertEquals(3, accounts.size());
@@ -451,6 +452,8 @@ public class LinkedAccountITCase extends AbstractITCase {
// 4. execute pull task again and verify linked accounts were pulled
exec = AbstractTaskITCase.execProvisioningTask(taskService, TaskType.PULL, pullTaskKey, 50, false);
assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(exec.getStatus()));
+ assertTrue(exec.getMessage().contains("Accounts updated"));
+ assertTrue(exec.getMessage().contains("Accounts deleted"));
accounts = userService.read("vivaldi").getLinkedAccounts();
assertEquals(2, accounts.size());