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 2015/06/11 16:17:33 UTC
[43/70] syncope git commit: [SYNCOPE-666] All tests are green,
time to add more
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java
index 73a7896..6a67ccf 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java
@@ -51,6 +51,7 @@ import org.apache.syncope.core.misc.ExceptionUtils2;
import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
import org.apache.syncope.core.persistence.api.entity.Any;
import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
+import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
import org.apache.syncope.core.persistence.api.entity.group.Group;
import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.api.entity.resource.Provision;
@@ -72,9 +73,6 @@ import org.springframework.transaction.annotation.Transactional;
@Transactional(rollbackFor = { Throwable.class })
public abstract class AbstractPropagationTaskExecutor implements PropagationTaskExecutor {
- /**
- * Logger.
- */
protected static final Logger LOG = LoggerFactory.getLogger(PropagationTaskExecutor.class);
/**
@@ -299,9 +297,11 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
Any<?, ?, ?> any = getAny(task);
Collection<String> resources = any instanceof User
? userDAO.findAllResourceNames((User) any)
- : any instanceof Group
- ? ((Group) any).getResourceNames()
- : Collections.<String>emptySet();
+ : any instanceof AnyObject
+ ? anyObjectDAO.findAllResourceNames((AnyObject) any)
+ : any instanceof Group
+ ? ((Group) any).getResourceNames()
+ : Collections.<String>emptySet();
if (!resources.contains(task.getResource().getKey())) {
LOG.debug("Delete {} on {}", beforeObj.getUid(), task.getResource().getKey());
@@ -339,13 +339,7 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
Connector connector = null;
Result result;
try {
- Any<?, ?, ?> any = getAny(task);
- provision = task.getResource().getProvision(any.getType());
- if (provision == null) {
- throw new IllegalArgumentException("No provision found for " + any.getType() + " on " + task.
- getResource());
- }
-
+ provision = task.getResource().getProvision(new ObjectClass(task.getObjectClassName()));
connector = connFactory.getConnector(task.getResource());
// Try to read remote object BEFORE any actual operation
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java
index 6d795d8..6dbd0eb 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java
@@ -46,7 +46,7 @@ import org.springframework.transaction.annotation.Transactional;
* Simple action for propagating group memberships to LDAP groups, when the same resource is configured for both users
* and groups.
*
- * @see org.apache.syncope.core.sync.impl.LDAPMembershipSyncActions
+ * @see org.apache.syncope.core.provisioning.java.sync.LDAPMembershipSyncActions
*/
public class LDAPMembershipPropagationActions extends DefaultPropagationActions {
@@ -85,7 +85,7 @@ public class LDAPMembershipPropagationActions extends DefaultPropagationActions
JexlContext jexlContext = new MapContext();
JexlUtils.addFieldsToContext(group, jexlContext);
- JexlUtils.addAttrsToContext(group.getPlainAttrs(), jexlContext);
+ JexlUtils.addPlainAttrsToContext(group.getPlainAttrs(), jexlContext);
JexlUtils.addDerAttrsToContext(group.getDerAttrs(), group.getPlainAttrs(), jexlContext);
String groupConnObjectLinkLink =
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
index 8f52059..2649623 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
@@ -30,7 +30,6 @@ import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.mod.AttrMod;
import org.apache.syncope.common.lib.mod.UserMod;
import org.apache.syncope.common.lib.to.AttrTO;
-import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.MappingPurpose;
import org.apache.syncope.common.lib.types.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
@@ -45,7 +44,6 @@ import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
import org.apache.syncope.core.provisioning.api.propagation.PropagationManager;
import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor;
-import org.apache.syncope.core.provisioning.java.VirAttrHandler;
import org.apache.syncope.core.misc.ConnObjectUtils;
import org.apache.syncope.core.misc.MappingUtils;
import org.apache.syncope.core.misc.jexl.JexlUtils;
@@ -57,6 +55,7 @@ import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.api.entity.resource.MappingItem;
import org.apache.syncope.core.persistence.api.entity.resource.Provision;
+import org.apache.syncope.core.provisioning.api.VirAttrHandler;
import org.identityconnectors.framework.common.objects.Attribute;
import org.identityconnectors.framework.common.objects.AttributeBuilder;
import org.identityconnectors.framework.common.objects.AttributeUtil;
@@ -71,9 +70,6 @@ import org.springframework.transaction.annotation.Transactional;
@Transactional(rollbackFor = { Throwable.class })
public class PropagationManagerImpl implements PropagationManager {
- /**
- * Logger.
- */
protected static final Logger LOG = LoggerFactory.getLogger(PropagationManager.class);
protected AnyObjectDAO anyObjectDAO;
@@ -129,7 +125,7 @@ public class PropagationManagerImpl implements PropagationManager {
AnyObject anyObject = anyObjectDAO.authFind(key);
if (vAttrs != null && !vAttrs.isEmpty()) {
- virAttrHandler.fillVirtual(anyObject, vAttrs, anyUtilsFactory.getInstance(AnyTypeKind.ANY_OBJECT));
+ virAttrHandler.fillVirtual(anyObject, vAttrs);
}
return getCreateTaskIds(anyObject, null, null, propByRes, noPropResourceNames);
@@ -146,7 +142,7 @@ public class PropagationManagerImpl implements PropagationManager {
User user = userDAO.authFind(key);
if (vAttrs != null && !vAttrs.isEmpty()) {
- virAttrHandler.fillVirtual(user, vAttrs, anyUtilsFactory.getInstance(AnyTypeKind.USER));
+ virAttrHandler.fillVirtual(user, vAttrs);
}
return getCreateTaskIds(user, password, enable, propByRes, noPropResourceNames);
}
@@ -169,7 +165,7 @@ public class PropagationManagerImpl implements PropagationManager {
Group group = groupDAO.authFind(key);
if (vAttrs != null && !vAttrs.isEmpty()) {
- virAttrHandler.fillVirtual(group, vAttrs, anyUtilsFactory.getInstance(AnyTypeKind.GROUP));
+ virAttrHandler.fillVirtual(group, vAttrs);
}
return getCreateTaskIds(group, null, null, propByRes, noPropResourceNames);
@@ -287,11 +283,13 @@ public class PropagationManagerImpl implements PropagationManager {
final Set<String> vAttrsToBeRemoved, final Set<AttrMod> vAttrsToBeUpdated,
final PropagationByResource propByRes, final Collection<String> noPropResourceNames) {
- PropagationByResource localPropByRes = virAttrHandler.fillVirtual(any, vAttrsToBeRemoved == null
- ? Collections.<String>emptySet()
- : vAttrsToBeRemoved, vAttrsToBeUpdated == null
+ PropagationByResource localPropByRes = virAttrHandler.fillVirtual(
+ any,
+ vAttrsToBeRemoved == null
+ ? Collections.<String>emptySet()
+ : vAttrsToBeRemoved, vAttrsToBeUpdated == null
? Collections.<AttrMod>emptySet()
- : vAttrsToBeUpdated, anyUtilsFactory.getInstance(any));
+ : vAttrsToBeUpdated);
if (propByRes == null || propByRes.isEmpty()) {
localPropByRes.addAll(ResourceOperation.UPDATE, any.getResourceNames());
@@ -419,7 +417,7 @@ public class PropagationManagerImpl implements PropagationManager {
if (!propByRes.get(ResourceOperation.CREATE).isEmpty()
&& vAttrsToBeRemoved != null && vAttrsToBeUpdated != null) {
- connObjectUtils.retrieveVirAttrValues(any);
+ virAttrHandler.retrieveVirAttrValues(any);
// update vAttrsToBeUpdated as well
for (VirAttr<?> virAttr : any.getVirAttrs()) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractProvisioningJob.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractProvisioningJob.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractProvisioningJob.java
index 4f7b744..8f80ac0 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractProvisioningJob.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractProvisioningJob.java
@@ -302,7 +302,8 @@ public abstract class AbstractProvisioningJob<T extends ProvisioningTask, A exte
append(' ').
append("[deleted/failures]: ").append(gSuccDelete.size()).append('/').append(gFailDelete.size()).
append(' ').
- append("[no operation/ignored]: ").append(gSuccNone.size()).append('/').append(gIgnore.size());
+ append("[no operation/ignored]: ").append(gSuccNone.size()).append('/').append(gIgnore.size()).
+ append('\n');
report.append("Any objects ").
append("[created/failures]: ").append(aSuccCreate.size()).append('/').append(aFailCreate.size()).
append(' ').
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractPushResultHandler.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractPushResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractPushResultHandler.java
index 275f648..fd5a482 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractPushResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractPushResultHandler.java
@@ -116,14 +116,13 @@ public abstract class AbstractPushResultHandler extends AbstractSyncopeResultHan
Object output = null;
Result resultStatus = null;
- ConnectorObject beforeObj = null;
String operation = null;
- // Try to read remote object (user / group) BEFORE any actual operation
+ // Try to read remote object BEFORE any actual operation
Provision provision = profile.getTask().getResource().getProvision(any.getType());
String connObjecKey = MappingUtils.getConnObjectKeyValue(any, provision);
- beforeObj = getRemoteObject(connObjecKey, provision.getObjectClass());
+ ConnectorObject beforeObj = getRemoteObject(connObjecKey, provision.getObjectClass());
Boolean status = profile.getTask().isSyncStatus() ? enabled : null;
@@ -186,7 +185,6 @@ public abstract class AbstractPushResultHandler extends AbstractSyncopeResultHan
default:
// do nothing
}
-
} else {
operation = MatchingRule.toEventName(profile.getTask().getMatchingRule());
result.setOperation(getResourceOperation(profile.getTask().getMatchingRule()));
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncResultHandler.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncResultHandler.java
index 1ead6a7..6d8986a 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncResultHandler.java
@@ -109,7 +109,7 @@ public abstract class AbstractSyncResultHandler extends AbstractSyncopeResultHan
anyTO.getResources().add(profile.getTask().getResource().getKey());
- final ProvisioningResult result = new ProvisioningResult();
+ ProvisioningResult result = new ProvisioningResult();
result.setOperation(ResourceOperation.CREATE);
result.setAnyType(provision.getAnyType().getKey());
result.setStatus(ProvisioningResult.Status.SUCCESS);
@@ -149,7 +149,7 @@ public abstract class AbstractSyncResultHandler extends AbstractSyncopeResultHan
AnyTO transformed = anyTransformer.transform(anyTO);
LOG.debug("Transformed: {}", transformed);
- final ProvisioningResult result = new ProvisioningResult();
+ ProvisioningResult result = new ProvisioningResult();
result.setOperation(ResourceOperation.CREATE);
result.setAnyType(provision.getAnyType().getKey());
result.setStatus(ProvisioningResult.Status.SUCCESS);
@@ -270,7 +270,7 @@ public abstract class AbstractSyncResultHandler extends AbstractSyncopeResultHan
workingDelta = action.beforeUpdate(this.getProfile(), workingDelta, before, anyMod);
}
- final AnyTO updated = doUpdate(before, anyMod, workingDelta, result);
+ AnyTO updated = doUpdate(before, anyMod, workingDelta, result);
for (SyncActions action : profile.getActions()) {
action.after(this.getProfile(), workingDelta, updated, result);
@@ -335,13 +335,13 @@ public abstract class AbstractSyncResultHandler extends AbstractSyncopeResultHan
Object output;
Result resultStatus;
- final ProvisioningResult result = new ProvisioningResult();
+ ProvisioningResult result = new ProvisioningResult();
result.setOperation(ResourceOperation.DELETE);
result.setAnyType(provision.getAnyType().getKey());
result.setStatus(ProvisioningResult.Status.SUCCESS);
result.setKey(id);
- final AnyTO before = getAnyTO(id);
+ AnyTO before = getAnyTO(id);
if (before == null) {
result.setStatus(ProvisioningResult.Status.FAILURE);
@@ -427,8 +427,8 @@ public abstract class AbstractSyncResultHandler extends AbstractSyncopeResultHan
final List<ProvisioningResult> updResults = new ArrayList<>();
- for (Long id : anys) {
- LOG.debug("About to unassign resource {}", id);
+ for (Long key : anys) {
+ LOG.debug("About to unassign resource {}", key);
Object output;
Result resultStatus;
@@ -437,13 +437,13 @@ public abstract class AbstractSyncResultHandler extends AbstractSyncopeResultHan
result.setOperation(ResourceOperation.NONE);
result.setAnyType(provision.getAnyType().getKey());
result.setStatus(ProvisioningResult.Status.SUCCESS);
- result.setKey(id);
+ result.setKey(key);
- final AnyTO before = getAnyTO(id);
+ AnyTO before = getAnyTO(key);
if (before == null) {
result.setStatus(ProvisioningResult.Status.FAILURE);
- result.setMessage(String.format("Any '%s(%d)' not found", provision.getAnyType().getKey(), id));
+ result.setMessage(String.format("Any '%s(%d)' not found", provision.getAnyType().getKey(), key));
}
if (!profile.isDryRun()) {
@@ -471,7 +471,7 @@ public abstract class AbstractSyncResultHandler extends AbstractSyncopeResultHan
}
resultStatus = Result.SUCCESS;
- LOG.debug("{} {} successfully updated", provision.getAnyType().getKey(), id);
+ LOG.debug("{} {} successfully updated", provision.getAnyType().getKey(), key);
} catch (IgnoreProvisionException e) {
throw e;
} catch (PropagationException e) {
@@ -527,11 +527,10 @@ public abstract class AbstractSyncResultHandler extends AbstractSyncopeResultHan
Object output;
Result resultStatus = Result.FAILURE;
- AnyTO before = null;
- final ProvisioningResult result = new ProvisioningResult();
+ ProvisioningResult result = new ProvisioningResult();
try {
- before = getAnyTO(id);
+ AnyTO before = getAnyTO(id);
result.setKey(id);
result.setName(getName(before));
@@ -590,7 +589,7 @@ public abstract class AbstractSyncResultHandler extends AbstractSyncopeResultHan
LOG.debug("Any to ignore {}", delta.getObject().getUid().getUidValue());
final List<ProvisioningResult> ignoreResults = new ArrayList<>();
- final ProvisioningResult result = new ProvisioningResult();
+ ProvisioningResult result = new ProvisioningResult();
result.setKey(null);
result.setName(delta.getObject().getUid().getUidValue());
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncopeResultHandler.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncopeResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncopeResultHandler.java
index fccecc4..cf08d8d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncopeResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/AbstractSyncopeResultHandler.java
@@ -49,10 +49,7 @@ import org.springframework.beans.factory.annotation.Autowired;
public abstract class AbstractSyncopeResultHandler<T extends ProvisioningTask, A extends ProvisioningActions>
implements SyncopeResultHandler<T, A> {
- /**
- * Logger.
- */
- protected static final Logger LOG = LoggerFactory.getLogger(AbstractSyncopeResultHandler.class);
+ protected static final Logger LOG = LoggerFactory.getLogger(SyncopeResultHandler.class);
@Autowired
protected AnyObjectDAO anyObjectDAO;
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/GroupSyncResultHandlerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/GroupSyncResultHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/GroupSyncResultHandlerImpl.java
index b6d5ccb..860e10b 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/GroupSyncResultHandlerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/GroupSyncResultHandlerImpl.java
@@ -36,7 +36,7 @@ import org.identityconnectors.framework.common.objects.SyncDelta;
public class GroupSyncResultHandlerImpl extends AbstractSyncResultHandler implements GroupSyncResultHandler {
- protected Map<Long, String> groupOwnerMap = new HashMap<>();
+ protected final Map<Long, String> groupOwnerMap = new HashMap<>();
@Override
public Map<Long, String> getGroupOwnerMap() {
@@ -107,7 +107,7 @@ public class GroupSyncResultHandlerImpl extends AbstractSyncResultHandler implem
// moved after group provisioning manager
String groupOwner = null;
for (AttrMod attrMod : groupMod.getPlainAttrsToUpdate()) {
- if (attrMod.getSchema().isEmpty()) {
+ if (attrMod.getSchema().isEmpty() && !attrMod.getValuesToBeAdded().isEmpty()) {
groupOwner = attrMod.getValuesToBeAdded().iterator().next();
}
}
@@ -115,7 +115,7 @@ public class GroupSyncResultHandlerImpl extends AbstractSyncResultHandler implem
groupOwnerMap.put(updated.getKey(), groupOwner);
}
- final GroupTO after = groupDataBinder.getGroupTO(updated.getKey());
+ GroupTO after = groupDataBinder.getGroupTO(updated.getKey());
result.setName(getName(after));
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java
index fb2f9a4..873232f 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/LDAPMembershipSyncActions.java
@@ -46,6 +46,7 @@ import org.apache.syncope.core.provisioning.api.sync.ProvisioningProfile;
import org.apache.syncope.core.provisioning.api.sync.ProvisioningResult;
import org.apache.syncope.core.misc.AuditManager;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
+import org.apache.syncope.core.persistence.api.dao.UserDAO;
import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.api.entity.user.UMembership;
import org.apache.syncope.core.provisioning.api.notification.NotificationManager;
@@ -63,7 +64,7 @@ import org.springframework.beans.factory.annotation.Autowired;
* Simple action for synchronizing LDAP groups memberships to Syncope group memberships, when the same resource is
* configured for both users and groups.
*
- * @see org.apache.syncope.core.propagation.impl.LDAPMembershipPropagationActions
+ * @see org.apache.syncope.core.provisioning.java.propagation.LDAPMembershipPropagationActions
*/
public class LDAPMembershipSyncActions extends DefaultSyncActions {
@@ -73,6 +74,9 @@ public class LDAPMembershipSyncActions extends DefaultSyncActions {
protected AnyTypeDAO anyTypeDAO;
@Autowired
+ protected UserDAO userDAO;
+
+ @Autowired
protected GroupDAO groupDAO;
@Autowired
@@ -182,7 +186,7 @@ public class LDAPMembershipSyncActions extends DefaultSyncActions {
Attribute membAttr = delta.getObject().getAttributeByName(groupMemberName);
// if not found, perform an additional read on the underlying connector for the same connector object
if (membAttr == null) {
- final OperationOptionsBuilder oob = new OperationOptionsBuilder();
+ OperationOptionsBuilder oob = new OperationOptionsBuilder();
oob.setAttributesToGet(groupMemberName);
membAttr = connector.getObjectAttribute(ObjectClass.GROUP, delta.getUid(), oob.build(), groupMemberName);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/PushJobImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/PushJobImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/PushJobImpl.java
index b13213a..b658bc4 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/PushJobImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/PushJobImpl.java
@@ -27,7 +27,6 @@ import org.apache.syncope.core.persistence.api.dao.GroupDAO;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
import org.apache.syncope.core.persistence.api.entity.task.PushTask;
-import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.provisioning.api.Connector;
import org.apache.syncope.core.provisioning.api.sync.ProvisioningProfile;
import org.apache.syncope.core.provisioning.api.sync.PushActions;
@@ -39,7 +38,9 @@ import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
import org.apache.syncope.core.persistence.api.entity.Any;
import org.apache.syncope.core.persistence.api.entity.resource.Provision;
import org.apache.syncope.core.provisioning.api.job.PushJob;
+import org.apache.syncope.core.provisioning.api.sync.AnyObjectPushResultHandler;
import org.apache.syncope.core.provisioning.api.sync.GroupPushResultHandler;
+import org.apache.syncope.core.provisioning.api.sync.SyncopePushResultHandler;
import org.apache.syncope.core.provisioning.api.sync.UserPushResultHandler;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
@@ -111,15 +112,20 @@ public class PushJobImpl extends AbstractProvisioningJob<PushTask, PushActions>
profile.setDryRun(dryRun);
profile.setResAct(null);
+ AnyObjectPushResultHandler ahandler =
+ (AnyObjectPushResultHandler) ApplicationContextProvider.getApplicationContext().getBeanFactory().
+ createBean(AnyObjectPushResultHandlerImpl.class, AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
+ ahandler.setProfile(profile);
+
UserPushResultHandler uhandler =
(UserPushResultHandler) ApplicationContextProvider.getApplicationContext().getBeanFactory().
createBean(UserPushResultHandlerImpl.class, AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
uhandler.setProfile(profile);
- GroupPushResultHandler rhandler =
+ GroupPushResultHandler ghandler =
(GroupPushResultHandler) ApplicationContextProvider.getApplicationContext().getBeanFactory().
createBean(GroupPushResultHandlerImpl.class, AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
- rhandler.setProfile(profile);
+ ghandler.setProfile(profile);
if (actions != null && !profile.isDryRun()) {
for (PushActions action : actions) {
@@ -138,16 +144,32 @@ public class PushJobImpl extends AbstractProvisioningJob<PushTask, PushActions>
for (int page = 1; page <= (count / PAGE_SIZE) + 1; page++) {
List<? extends Any<?, ?, ?>> localAnys = StringUtils.isBlank(filter)
? anyDAO.findAll(SyncopeConstants.FULL_ADMIN_REALMS, page, PAGE_SIZE)
- : searchDAO.<User>search(SyncopeConstants.FULL_ADMIN_REALMS,
+ : searchDAO.search(SyncopeConstants.FULL_ADMIN_REALMS,
SearchCondConverter.convert(filter),
Collections.<OrderByClause>emptyList(), provision.getAnyType().getKind());
for (Any<?, ?, ?> any : localAnys) {
+ SyncopePushResultHandler handler;
+ switch (provision.getAnyType().getKind()) {
+ case USER:
+ handler = uhandler;
+ break;
+
+ case GROUP:
+ handler = ghandler;
+ break;
+
+ case ANY_OBJECT:
+ default:
+ handler = ahandler;
+ }
+
try {
- uhandler.handle(any.getKey());
+ handler.handle(any.getKey());
} catch (Exception e) {
- LOG.warn("Failure pushing user '{}' on '{}'", any, pushTask.getResource(), e);
- throw new JobExecutionException("While pushing users on connector", e);
+ LOG.warn("Failure pushing '{}' on '{}'", any, pushTask.getResource(), e);
+ throw new JobExecutionException(
+ "While pushing " + any + " on " + pushTask.getResource(), e);
}
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncJobImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncJobImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncJobImpl.java
index 1e19d02..479d342 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncJobImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncJobImpl.java
@@ -60,8 +60,8 @@ public class SyncJobImpl extends AbstractProvisioningJob<SyncTask, SyncActions>
@Autowired
protected SyncUtils syncUtils;
- protected void setGroupOwners(final GroupSyncResultHandler rhandler) {
- for (Map.Entry<Long, String> entry : rhandler.getGroupOwnerMap().entrySet()) {
+ protected void setGroupOwners(final GroupSyncResultHandler ghandler) {
+ for (Map.Entry<Long, String> entry : ghandler.getGroupOwnerMap().entrySet()) {
GroupMod groupMod = new GroupMod();
groupMod.setKey(entry.getKey());
@@ -72,15 +72,15 @@ public class SyncJobImpl extends AbstractProvisioningJob<SyncTask, SyncActions>
Long userKey = syncUtils.findMatchingAnyKey(
anyTypeDAO.findUser(),
entry.getValue(),
- rhandler.getProfile().getTask().getResource(),
- rhandler.getProfile().getConnector());
+ ghandler.getProfile().getTask().getResource(),
+ ghandler.getProfile().getConnector());
if (userKey == null) {
Long groupKey = syncUtils.findMatchingAnyKey(
anyTypeDAO.findGroup(),
entry.getValue(),
- rhandler.getProfile().getTask().getResource(),
- rhandler.getProfile().getConnector());
+ ghandler.getProfile().getTask().getResource(),
+ ghandler.getProfile().getConnector());
if (groupKey != null) {
groupMod.setGroupOwner(new ReferenceMod(groupKey));
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncUtils.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncUtils.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncUtils.java
index 8982824..b748345 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncUtils.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/sync/SyncUtils.java
@@ -32,9 +32,7 @@ import org.apache.syncope.core.persistence.api.attrvalue.validation.ParsingValid
import org.apache.syncope.core.persistence.api.dao.AnyDAO;
import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
-import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
-import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
import org.apache.syncope.core.persistence.api.dao.GroupDAO;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
import org.apache.syncope.core.persistence.api.dao.search.AnyCond;
@@ -69,52 +67,40 @@ import org.springframework.stereotype.Component;
@Component
public class SyncUtils {
- /**
- * Logger.
- */
- protected static final Logger LOG = LoggerFactory.getLogger(SyncUtils.class);
-
- /**
- * Policy DAO.
- */
- @Autowired
- protected PolicyDAO policyDAO;
+ private static final Logger LOG = LoggerFactory.getLogger(SyncUtils.class);
/**
* Schema DAO.
*/
@Autowired
- protected PlainSchemaDAO plainSchemaDAO;
-
- @Autowired
- protected AnyTypeDAO anyTypeDAO;
+ private PlainSchemaDAO plainSchemaDAO;
/**
* Any Object DAO.
*/
@Autowired
- protected AnyObjectDAO anyObjectDAO;
+ private AnyObjectDAO anyObjectDAO;
/**
* User DAO.
*/
@Autowired
- protected UserDAO userDAO;
+ private UserDAO userDAO;
/**
* Group DAO.
*/
@Autowired
- protected GroupDAO groupDAO;
+ private GroupDAO groupDAO;
/**
* Search DAO.
*/
@Autowired
- protected AnySearchDAO searchDAO;
+ private AnySearchDAO searchDAO;
@Autowired
- protected AnyUtilsFactory anyUtilsFactory;
+ private AnyUtilsFactory anyUtilsFactory;
public Long findMatchingAnyKey(
final AnyType anyType,
@@ -180,7 +166,8 @@ public class SyncUtils {
switch (connObjectKeyItem.getIntMappingType()) {
case UserPlainSchema:
case GroupPlainSchema:
- final PlainAttrValue value = anyUtils.newPlainAttrValue();
+ case AnyPlainSchema:
+ PlainAttrValue value = anyUtils.newPlainAttrValue();
PlainSchema schema = plainSchemaDAO.find(connObjectKeyItem.getIntAttrName());
if (schema == null) {
@@ -203,21 +190,24 @@ public class SyncUtils {
case UserDerivedSchema:
case GroupDerivedSchema:
+ case AnyDerivedSchema:
anys = getAnyDAO(connObjectKeyItem).findByDerAttrValue(connObjectKeyItem.getIntAttrName(), uid);
for (Any<?, ?, ?> any : anys) {
result.add(any.getKey());
}
break;
- case Username:
- User user = userDAO.find(uid);
- if (user != null) {
- result.add(user.getKey());
+ case UserId:
+ case GroupId:
+ case AnyId:
+ Any<?, ?, ?> any = getAnyDAO(connObjectKeyItem).find(Long.parseLong(uid));
+ if (any != null) {
+ result.add(any.getKey());
}
break;
- case UserId:
- user = userDAO.find(Long.parseLong(uid));
+ case Username:
+ User user = userDAO.find(uid);
if (user != null) {
result.add(user.getKey());
}
@@ -230,13 +220,6 @@ public class SyncUtils {
}
break;
- case GroupId:
- group = groupDAO.find(Long.parseLong(uid));
- if (group != null) {
- result.add(group.getKey());
- }
- break;
-
default:
LOG.error("Invalid connObjectKey type '{}'", connObjectKeyItem.getIntMappingType());
}
@@ -354,7 +337,7 @@ public class SyncUtils {
}
/**
- * Find users / groups based on mapped uid value (or previous uid value, if updated).
+ * Find any objects based on mapped uid value (or previous uid value, if updated).
*
* @param uid for finding by connObjectKey
* @param connObj for finding by attribute value
@@ -381,9 +364,10 @@ public class SyncUtils {
altSearchSchemas = getAltSearchSchemas(provision, syncPolicySpec);
}
- return syncRule == null ? altSearchSchemas == null || altSearchSchemas.isEmpty()
- ? findByConnObjectKeyItem(uid, provision, anyUtils)
- : findByAnySearch(connObj, altSearchSchemas, provision, anyUtils)
+ return syncRule == null
+ ? altSearchSchemas == null || altSearchSchemas.isEmpty()
+ ? findByConnObjectKeyItem(uid, provision, anyUtils)
+ : findByAnySearch(connObj, altSearchSchemas, provision, anyUtils)
: findByCorrelationRule(connObj, syncRule, anyUtils.getAnyTypeKind());
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderTest.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderTest.java b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderTest.java
index 039337f..f2eb839 100644
--- a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderTest.java
+++ b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderTest.java
@@ -79,7 +79,7 @@ public class ResourceDataBinderTest extends AbstractTest {
ResourceTO resourceTO = new ResourceTO();
resourceTO.setKey("resource-issue42");
- resourceTO.setConnectorId(100L);
+ resourceTO.setConnector(100L);
resourceTO.setPropagationMode(PropagationMode.ONE_PHASE);
resourceTO.setEnforceMandatoryCondition(true);
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java
index f031c92..18f6101 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java
@@ -51,6 +51,7 @@ import org.apache.syncope.core.persistence.api.attrvalue.validation.ParsingValid
import org.apache.syncope.core.persistence.api.dao.DuplicateException;
import org.apache.syncope.core.persistence.api.dao.MalformedPathException;
import org.apache.syncope.core.persistence.api.dao.NotFoundException;
+import org.apache.syncope.core.persistence.api.dao.UnallowedSchemaException;
import org.apache.syncope.core.workflow.api.WorkflowException;
import org.identityconnectors.framework.common.exceptions.ConfigurationException;
import org.identityconnectors.framework.common.exceptions.ConnectorException;
@@ -114,6 +115,8 @@ public class RestServiceExceptionMapper implements ExceptionMapper<Exception>, R
header(HttpHeaders.WWW_AUTHENTICATE, BASIC_REALM_UNAUTHORIZED);
} else if (ex instanceof UnauthorizedException) {
builder = builder(ClientExceptionType.Unauthorized, ExceptionUtils.getRootCauseMessage(ex));
+ } else if (ex instanceof UnallowedSchemaException) {
+ builder = builder(ClientExceptionType.UnallowedSchemas, ExceptionUtils.getRootCauseMessage(ex));
} else if (ex instanceof EntityExistsException || ex instanceof DuplicateException) {
builder = builder(ClientExceptionType.EntityExists, getJPAMessage(ex));
} else if (ex instanceof DataIntegrityViolationException || ex instanceof JpaSystemException) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyTypeClassServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyTypeClassServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyTypeClassServiceImpl.java
new file mode 100644
index 0000000..47cdde2
--- /dev/null
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyTypeClassServiceImpl.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.core.rest.cxf.service;
+
+import java.net.URI;
+import java.util.List;
+import javax.ws.rs.core.Response;
+import org.apache.syncope.common.lib.to.AnyTypeClassTO;
+import org.apache.syncope.common.rest.api.RESTHeaders;
+import org.apache.syncope.common.rest.api.service.AnyTypeClassService;
+import org.apache.syncope.core.logic.AnyTypeClassLogic;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AnyTypeClassServiceImpl extends AbstractServiceImpl implements AnyTypeClassService {
+
+ @Autowired
+ private AnyTypeClassLogic logic;
+
+ @Override
+ public List<AnyTypeClassTO> list() {
+ return logic.list();
+ }
+
+ @Override
+ public AnyTypeClassTO read(final String key) {
+ return logic.read(key);
+ }
+
+ @Override
+ public Response create(final AnyTypeClassTO anyTypeTO) {
+ AnyTypeClassTO created = logic.create(anyTypeTO);
+ URI location = uriInfo.getAbsolutePathBuilder().path(String.valueOf(created.getKey())).build();
+ return Response.created(location).
+ header(RESTHeaders.RESOURCE_ID, created.getKey()).
+ build();
+ }
+
+ @Override
+ public void update(final String key, final AnyTypeClassTO anyTypeTO) {
+ anyTypeTO.setKey(key);
+ logic.update(anyTypeTO);
+ }
+
+ @Override
+ public void delete(final String key) {
+ logic.delete(key);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyTypeServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyTypeServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyTypeServiceImpl.java
new file mode 100644
index 0000000..9b289d5
--- /dev/null
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyTypeServiceImpl.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.core.rest.cxf.service;
+
+import java.net.URI;
+import java.util.List;
+import javax.ws.rs.core.Response;
+import org.apache.syncope.common.lib.to.AnyTypeTO;
+import org.apache.syncope.common.rest.api.RESTHeaders;
+import org.apache.syncope.common.rest.api.service.AnyTypeService;
+import org.apache.syncope.core.logic.AnyTypeLogic;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AnyTypeServiceImpl extends AbstractServiceImpl implements AnyTypeService {
+
+ @Autowired
+ private AnyTypeLogic logic;
+
+ @Override
+ public List<AnyTypeTO> list() {
+ return logic.list();
+ }
+
+ @Override
+ public AnyTypeTO read(final String key) {
+ return logic.read(key);
+ }
+
+ @Override
+ public Response create(final AnyTypeTO anyTypeTO) {
+ AnyTypeTO created = logic.create(anyTypeTO);
+ URI location = uriInfo.getAbsolutePathBuilder().path(String.valueOf(created.getKey())).build();
+ return Response.created(location).
+ header(RESTHeaders.RESOURCE_ID, created.getKey()).
+ build();
+ }
+
+ @Override
+ public void update(final String key, final AnyTypeTO anyTypeTO) {
+ anyTypeTO.setKey(key);
+ logic.update(anyTypeTO);
+ }
+
+ @Override
+ public void delete(final String key) {
+ logic.delete(key);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java
index 618b245..9f6099c 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java
@@ -135,12 +135,13 @@ public class ConnectorServiceImpl extends AbstractServiceImpl implements Connect
BulkActionResult result = new BulkActionResult();
if (bulkAction.getOperation() == BulkAction.Type.DELETE) {
- for (String id : bulkAction.getTargets()) {
+ for (String key : bulkAction.getTargets()) {
try {
- result.add(logic.delete(Long.valueOf(id)).getKey(), BulkActionResult.Status.SUCCESS);
+ result.getResults().put(
+ String.valueOf(logic.delete(Long.valueOf(key)).getKey()), BulkActionResult.Status.SUCCESS);
} catch (Exception e) {
- LOG.error("Error performing delete for connector {}", id, e);
- result.add(id, BulkActionResult.Status.FAILURE);
+ LOG.error("Error performing delete for connector {}", key, e);
+ result.getResults().put(key, BulkActionResult.Status.FAILURE);
}
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/GroupServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/GroupServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/GroupServiceImpl.java
index c8e42a1..5c640f0 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/GroupServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/GroupServiceImpl.java
@@ -155,21 +155,23 @@ public class GroupServiceImpl extends AbstractServiceImpl implements GroupServic
updated = logic.read(groupKey);
}
- final BulkActionResult res = new BulkActionResult();
+ BulkActionResult result = new BulkActionResult();
if (type == ResourceDeassociationActionType.UNLINK) {
for (ResourceName resourceName : resourceNames) {
- res.add(resourceName.getElement(), updated.getResources().contains(resourceName.getElement())
- ? BulkActionResult.Status.FAILURE
- : BulkActionResult.Status.SUCCESS);
+ result.getResults().put(resourceName.getElement(),
+ updated.getResources().contains(resourceName.getElement())
+ ? BulkActionResult.Status.FAILURE
+ : BulkActionResult.Status.SUCCESS);
}
} else {
for (PropagationStatus propagationStatusTO : updated.getPropagationStatusTOs()) {
- res.add(propagationStatusTO.getResource(), propagationStatusTO.getStatus().toString());
+ result.getResults().put(propagationStatusTO.getResource(),
+ BulkActionResult.Status.valueOf(propagationStatusTO.getStatus().toString()));
}
}
- return modificationResponse(res);
+ return modificationResponse(result);
}
@Override
@@ -198,21 +200,23 @@ public class GroupServiceImpl extends AbstractServiceImpl implements GroupServic
updated = logic.read(groupKey);
}
- final BulkActionResult res = new BulkActionResult();
+ BulkActionResult result = new BulkActionResult();
if (type == ResourceAssociationActionType.LINK) {
for (ResourceName resourceName : resourceNames) {
- res.add(resourceName.getElement(), updated.getResources().contains(resourceName.getElement())
- ? BulkActionResult.Status.FAILURE
- : BulkActionResult.Status.SUCCESS);
+ result.getResults().put(resourceName.getElement(),
+ updated.getResources().contains(resourceName.getElement())
+ ? BulkActionResult.Status.FAILURE
+ : BulkActionResult.Status.SUCCESS);
}
} else {
for (PropagationStatus propagationStatusTO : updated.getPropagationStatusTOs()) {
- res.add(propagationStatusTO.getResource(), propagationStatusTO.getStatus().toString());
+ result.getResults().put(propagationStatusTO.getResource(),
+ BulkActionResult.Status.valueOf(propagationStatusTO.getStatus().toString()));
}
}
- return modificationResponse(res);
+ return modificationResponse(result);
}
@Override
@@ -222,10 +226,12 @@ public class GroupServiceImpl extends AbstractServiceImpl implements GroupServic
if (bulkAction.getOperation() == BulkAction.Type.DELETE) {
for (String groupKey : bulkAction.getTargets()) {
try {
- result.add(logic.delete(Long.valueOf(groupKey)).getKey(), BulkActionResult.Status.SUCCESS);
+ result.getResults().put(
+ String.valueOf(logic.delete(Long.valueOf(groupKey)).getKey()),
+ BulkActionResult.Status.SUCCESS);
} catch (Exception e) {
LOG.error("Error performing delete for group {}", groupKey, e);
- result.add(groupKey, BulkActionResult.Status.FAILURE);
+ result.getResults().put(groupKey, BulkActionResult.Status.FAILURE);
}
}
} else {
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java
index 7ace502..28b834b 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java
@@ -107,7 +107,7 @@ public class ResourceServiceImpl extends AbstractServiceImpl implements Resource
? groupLogic
: anyObjectLogic;
- BulkActionResult res = new BulkActionResult();
+ BulkActionResult result = new BulkActionResult();
for (AnyKey key : keys) {
Set<String> resources = Collections.singleton(resourceKey);
@@ -128,14 +128,14 @@ public class ResourceServiceImpl extends AbstractServiceImpl implements Resource
default:
}
- res.add(key, BulkActionResult.Status.SUCCESS);
+ result.getResults().put(String.valueOf(key.getElement()), BulkActionResult.Status.SUCCESS);
} catch (Exception e) {
LOG.warn("While executing {} on {} {}", type, anyTypeKey, key.getElement(), e);
- res.add(key, BulkActionResult.Status.FAILURE);
+ result.getResults().put(String.valueOf(key.getElement()), BulkActionResult.Status.FAILURE);
}
}
- return res;
+ return result;
}
@Override
@@ -145,10 +145,10 @@ public class ResourceServiceImpl extends AbstractServiceImpl implements Resource
if (bulkAction.getOperation() == BulkAction.Type.DELETE) {
for (String name : bulkAction.getTargets()) {
try {
- result.add(logic.delete(name).getKey(), BulkActionResult.Status.SUCCESS);
+ result.getResults().put(logic.delete(name).getKey(), BulkActionResult.Status.SUCCESS);
} catch (Exception e) {
LOG.error("Error performing delete for resource {}", name, e);
- result.add(name, BulkActionResult.Status.FAILURE);
+ result.getResults().put(name, BulkActionResult.Status.FAILURE);
}
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
index 9da72aa..d42ed6a 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
@@ -129,10 +129,12 @@ public class TaskServiceImpl extends AbstractServiceImpl implements TaskService
case DELETE:
for (String taskKey : bulkAction.getTargets()) {
try {
- result.add(logic.delete(Long.valueOf(taskKey)).getKey(), BulkActionResult.Status.SUCCESS);
+ result.getResults().put(
+ String.valueOf(logic.delete(Long.valueOf(taskKey)).getKey()),
+ BulkActionResult.Status.SUCCESS);
} catch (Exception e) {
LOG.error("Error performing delete for task {}", taskKey, e);
- result.add(taskKey, BulkActionResult.Status.FAILURE);
+ result.getResults().put(taskKey, BulkActionResult.Status.FAILURE);
}
}
break;
@@ -141,10 +143,10 @@ public class TaskServiceImpl extends AbstractServiceImpl implements TaskService
for (String taskKey : bulkAction.getTargets()) {
try {
logic.execute(Long.valueOf(taskKey), true);
- result.add(taskKey, BulkActionResult.Status.SUCCESS);
+ result.getResults().put(taskKey, BulkActionResult.Status.SUCCESS);
} catch (Exception e) {
LOG.error("Error performing dryrun for task {}", taskKey, e);
- result.add(taskKey, BulkActionResult.Status.FAILURE);
+ result.getResults().put(taskKey, BulkActionResult.Status.FAILURE);
}
}
break;
@@ -153,10 +155,10 @@ public class TaskServiceImpl extends AbstractServiceImpl implements TaskService
for (String taskKey : bulkAction.getTargets()) {
try {
logic.execute(Long.valueOf(taskKey), false);
- result.add(taskKey, BulkActionResult.Status.SUCCESS);
+ result.getResults().put(taskKey, BulkActionResult.Status.SUCCESS);
} catch (Exception e) {
LOG.error("Error performing execute for task {}", taskKey, e);
- result.add(taskKey, BulkActionResult.Status.FAILURE);
+ result.getResults().put(taskKey, BulkActionResult.Status.FAILURE);
}
}
break;
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserServiceImpl.java
index 919cb0a..83f09a4 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserServiceImpl.java
@@ -60,7 +60,7 @@ public class UserServiceImpl extends AbstractServiceImpl implements UserService
}
@Override
- public Response getUserId(final String username) {
+ public Response getUserKey(final String username) {
return Response.ok().header(HttpHeaders.ALLOW, OPTIONS_ALLOW).
header(RESTHeaders.USER_ID, logic.getKey(username)).
build();
@@ -179,21 +179,23 @@ public class UserServiceImpl extends AbstractServiceImpl implements UserService
updated = logic.read(userKey);
}
- final BulkActionResult res = new BulkActionResult();
+ BulkActionResult result = new BulkActionResult();
if (type == ResourceDeassociationActionType.UNLINK) {
for (ResourceName resourceName : resourceNames) {
- res.add(resourceName.getElement(), updated.getResources().contains(resourceName.getElement())
- ? BulkActionResult.Status.FAILURE
- : BulkActionResult.Status.SUCCESS);
+ result.getResults().put(
+ resourceName.getElement(), updated.getResources().contains(resourceName.getElement())
+ ? BulkActionResult.Status.FAILURE
+ : BulkActionResult.Status.SUCCESS);
}
} else {
for (PropagationStatus propagationStatusTO : updated.getPropagationStatusTOs()) {
- res.add(propagationStatusTO.getResource(), propagationStatusTO.getStatus().toString());
+ result.getResults().put(propagationStatusTO.getResource(),
+ BulkActionResult.Status.valueOf(propagationStatusTO.getStatus().toString()));
}
}
- return modificationResponse(res);
+ return modificationResponse(result);
}
@Override
@@ -232,21 +234,23 @@ public class UserServiceImpl extends AbstractServiceImpl implements UserService
updated = logic.read(userKey);
}
- final BulkActionResult res = new BulkActionResult();
+ BulkActionResult result = new BulkActionResult();
if (type == ResourceAssociationActionType.LINK) {
for (ResourceName resourceName : associationMod.getTargetResources()) {
- res.add(resourceName.getElement(), updated.getResources().contains(resourceName.getElement())
- ? BulkActionResult.Status.FAILURE
- : BulkActionResult.Status.SUCCESS);
+ result.getResults().put(resourceName.getElement(),
+ updated.getResources().contains(resourceName.getElement())
+ ? BulkActionResult.Status.FAILURE
+ : BulkActionResult.Status.SUCCESS);
}
} else {
for (PropagationStatus propagationStatusTO : updated.getPropagationStatusTOs()) {
- res.add(propagationStatusTO.getResource(), propagationStatusTO.getStatus().toString());
+ result.getResults().put(propagationStatusTO.getResource(),
+ BulkActionResult.Status.valueOf(propagationStatusTO.getStatus().toString()));
}
}
- return modificationResponse(res);
+ return modificationResponse(result);
}
@Override
@@ -257,10 +261,12 @@ public class UserServiceImpl extends AbstractServiceImpl implements UserService
case DELETE:
for (String key : bulkAction.getTargets()) {
try {
- result.add(logic.delete(Long.valueOf(key)).getKey(), BulkActionResult.Status.SUCCESS);
+ result.getResults().put(
+ String.valueOf(logic.delete(Long.valueOf(key)).getKey()),
+ BulkActionResult.Status.SUCCESS);
} catch (Exception e) {
LOG.error("Error performing delete for user {}", key, e);
- result.add(key, BulkActionResult.Status.FAILURE);
+ result.getResults().put(key, BulkActionResult.Status.FAILURE);
}
}
break;
@@ -271,10 +277,11 @@ public class UserServiceImpl extends AbstractServiceImpl implements UserService
statusMod.setKey(Long.valueOf(key));
statusMod.setType(StatusMod.ModType.SUSPEND);
try {
- result.add(logic.status(statusMod).getKey(), BulkActionResult.Status.SUCCESS);
+ result.getResults().put(
+ String.valueOf(logic.status(statusMod).getKey()), BulkActionResult.Status.SUCCESS);
} catch (Exception e) {
LOG.error("Error performing suspend for user {}", key, e);
- result.add(key, BulkActionResult.Status.FAILURE);
+ result.getResults().put(key, BulkActionResult.Status.FAILURE);
}
}
break;
@@ -285,10 +292,11 @@ public class UserServiceImpl extends AbstractServiceImpl implements UserService
statusMod.setKey(Long.valueOf(key));
statusMod.setType(StatusMod.ModType.REACTIVATE);
try {
- result.add(logic.status(statusMod).getKey(), BulkActionResult.Status.SUCCESS);
+ result.getResults().put(
+ String.valueOf(logic.status(statusMod).getKey()), BulkActionResult.Status.SUCCESS);
} catch (Exception e) {
LOG.error("Error performing reactivate for user {}", key, e);
- result.add(key, BulkActionResult.Status.FAILURE);
+ result.getResults().put(key, BulkActionResult.Status.FAILURE);
}
}
break;
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java
index 938081f..2e00cb9 100644
--- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java
+++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUserWorkflowAdapter.java
@@ -84,15 +84,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
/**
- * Activiti {
- *
- * @see http://www.activiti.org/} based implementation.
+ * Activiti {@link http://www.activiti.org/} based implementation.
*/
public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
- /**
- * Logger.
- */
private static final Logger LOG = LoggerFactory.getLogger(ActivitiUserWorkflowAdapter.class);
private static final String[] PROPERTY_IGNORE_PROPS = { "type" };
@@ -258,7 +253,7 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
public WorkflowResult<Pair<Long, Boolean>> create(final UserTO userTO, final boolean disablePwdPolicyCheck,
final Boolean enabled, final boolean storePassword) {
- final Map<String, Object> variables = new HashMap<>();
+ Map<String, Object> variables = new HashMap<>();
variables.put(WF_EXECUTOR, AuthContextUtils.getAuthenticatedUsername());
variables.put(USER_TO, userTO);
variables.put(ENABLED, enabled);
@@ -271,8 +266,7 @@ public class ActivitiUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
throwException(e, "While starting " + WF_PROCESS_ID + " instance");
}
- User user =
- runtimeService.getVariable(processInstance.getProcessInstanceId(), USER, User.class);
+ User user = runtimeService.getVariable(processInstance.getProcessInstanceId(), USER, User.class);
Boolean updatedEnabled =
runtimeService.getVariable(processInstance.getProcessInstanceId(), ENABLED, Boolean.class);
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUtils.java
----------------------------------------------------------------------
diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUtils.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUtils.java
new file mode 100644
index 0000000..f598410
--- /dev/null
+++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/ActivitiUtils.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.core.workflow.activiti;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
+import org.apache.syncope.core.persistence.api.entity.user.UMembership;
+import org.apache.syncope.core.persistence.api.entity.user.User;
+import org.springframework.transaction.annotation.Transactional;
+
+public class ActivitiUtils {
+
+ @Transactional(readOnly = true)
+ public boolean isUserIngroup(final User user, final Long groupKey) {
+ return CollectionUtils.exists(user.getMemberships(), new Predicate<UMembership>() {
+
+ @Override
+ public boolean evaluate(final UMembership membership) {
+ return groupKey != null && groupKey.equals(membership.getRightEnd().getKey());
+ }
+ });
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserManager.java
----------------------------------------------------------------------
diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserManager.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserManager.java
index 2b568b1..658795c 100644
--- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserManager.java
+++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/SyncopeUserManager.java
@@ -75,8 +75,8 @@ public class SyncopeUserManager implements UserIdentityManager, SyncopeSession {
org.apache.syncope.core.persistence.api.entity.user.User user = userDAO.find(userKey);
if (user != null) {
result = new ArrayList<>();
- for (Long groupId : userDAO.findAllGroupKeys(user)) {
- result.add(new GroupEntity(groupId.toString()));
+ for (Long groupKey : userDAO.findAllGroupKeys(user)) {
+ result.add(new GroupEntity(groupKey.toString()));
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/core/workflow-activiti/src/main/resources/workflowActivitiContext.xml
----------------------------------------------------------------------
diff --git a/core/workflow-activiti/src/main/resources/workflowActivitiContext.xml b/core/workflow-activiti/src/main/resources/workflowActivitiContext.xml
index d5e9b02..75f0c38 100644
--- a/core/workflow-activiti/src/main/resources/workflowActivitiContext.xml
+++ b/core/workflow-activiti/src/main/resources/workflowActivitiContext.xml
@@ -30,6 +30,8 @@ under the License.
<property name="fallback" value="classpath:userWorkflow.bpmn20.xml"/>
</bean>
+ <bean id="activitiUtils" class="org.apache.syncope.core.workflow.activiti.ActivitiUtils"/>
+
<bean id="syncopeActivitiUserManager" class="org.apache.syncope.core.workflow.activiti.SyncopeUserManager"/>
<bean id="syncopeActivitiGroupManager" class="org.apache.syncope.core.workflow.activiti.SyncopeGroupManager"/>
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupUpdateProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupUpdateProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupUpdateProcessor.java
index 7a2f455..2aaec2a 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupUpdateProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/GroupUpdateProcessor.java
@@ -18,14 +18,18 @@
*/
package org.apache.syncope.core.provisioning.camel.processor;
+import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.syncope.common.lib.mod.GroupMod;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.lib.types.PropagationByResource;
import org.apache.syncope.core.misc.spring.ApplicationContextProvider;
import org.apache.syncope.core.persistence.api.entity.task.PropagationTask;
+import org.apache.syncope.core.provisioning.api.VirAttrHandler;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
import org.apache.syncope.core.provisioning.api.propagation.PropagationException;
import org.apache.syncope.core.provisioning.api.propagation.PropagationManager;
@@ -47,15 +51,30 @@ public class GroupUpdateProcessor implements Processor {
@Autowired
protected PropagationTaskExecutor taskExecutor;
+ @Autowired
+ protected VirAttrHandler virtAttrHandler;
+
@SuppressWarnings("unchecked")
@Override
public void process(final Exchange exchange) {
WorkflowResult<Long> updated = (WorkflowResult) exchange.getIn().getBody();
- GroupMod anyMod = exchange.getProperty("anyMod", GroupMod.class);
+ GroupMod groupMod = exchange.getProperty("anyMod", GroupMod.class);
Set<String> excludedResources = exchange.getProperty("excludedResources", Set.class);
List<PropagationTask> tasks = propagationManager.getGroupUpdateTasks(updated,
- anyMod.getVirAttrsToRemove(), anyMod.getVirAttrsToUpdate(), excludedResources);
+ groupMod.getVirAttrsToRemove(), groupMod.getVirAttrsToUpdate(), excludedResources);
+ if (tasks.isEmpty()) {
+ // SYNCOPE-459: take care of user virtual attributes ...
+ PropagationByResource propByResVirAttr = virtAttrHandler.fillVirtual(
+ updated.getResult(),
+ AnyTypeKind.GROUP,
+ groupMod.getVirAttrsToRemove(),
+ groupMod.getVirAttrsToUpdate());
+ tasks.addAll(!propByResVirAttr.isEmpty()
+ ? propagationManager.getGroupUpdateTasks(updated, null, null, null)
+ : Collections.<PropagationTask>emptyList());
+ }
+
PropagationReporter propagationReporter =
ApplicationContextProvider.getApplicationContext().getBean(PropagationReporter.class);
try {
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserUpdateProcessor.java
----------------------------------------------------------------------
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserUpdateProcessor.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserUpdateProcessor.java
index 355080b..e71a15a 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserUpdateProcessor.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/processor/UserUpdateProcessor.java
@@ -25,15 +25,16 @@ import org.apache.camel.Processor;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.mod.UserMod;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.PropagationByResource;
import org.apache.syncope.core.misc.spring.ApplicationContextProvider;
import org.apache.syncope.core.persistence.api.entity.task.PropagationTask;
+import org.apache.syncope.core.provisioning.api.VirAttrHandler;
import org.apache.syncope.core.provisioning.api.WorkflowResult;
import org.apache.syncope.core.provisioning.api.propagation.PropagationException;
import org.apache.syncope.core.provisioning.api.propagation.PropagationManager;
import org.apache.syncope.core.provisioning.api.propagation.PropagationReporter;
import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor;
-import org.apache.syncope.core.provisioning.java.VirAttrHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -57,15 +58,16 @@ public class UserUpdateProcessor implements Processor {
@SuppressWarnings("unchecked")
public void process(final Exchange exchange) {
WorkflowResult<Pair<UserMod, Boolean>> updated = (WorkflowResult) exchange.getIn().getBody();
- UserMod actual = exchange.getProperty("actual", UserMod.class);
+ UserMod userMod = exchange.getProperty("actual", UserMod.class);
List<PropagationTask> tasks = propagationManager.getUserUpdateTasks(updated);
if (tasks.isEmpty()) {
// SYNCOPE-459: take care of user virtual attributes ...
- final PropagationByResource propByResVirAttr = virtAttrHandler.fillVirtual(
+ PropagationByResource propByResVirAttr = virtAttrHandler.fillVirtual(
updated.getResult().getKey().getKey(),
- actual.getVirAttrsToRemove(),
- actual.getVirAttrsToUpdate());
+ AnyTypeKind.USER,
+ userMod.getVirAttrsToRemove(),
+ userMod.getVirAttrsToUpdate());
tasks.addAll(!propByResVirAttr.isEmpty()
? propagationManager.getUserUpdateTasks(updated, false, null)
: Collections.<PropagationTask>emptyList());
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/fit/core-reference/src/main/resources/all/provisioning.properties
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/main/resources/all/provisioning.properties b/fit/core-reference/src/main/resources/all/provisioning.properties
index 5061502..4d0ecaf 100644
--- a/fit/core-reference/src/main/resources/all/provisioning.properties
+++ b/fit/core-reference/src/main/resources/all/provisioning.properties
@@ -18,4 +18,4 @@ camel.directory=${conf.directory}
userProvisioningManager=org.apache.syncope.core.provisioning.camel.CamelUserProvisioningManager
groupProvisioningManager=org.apache.syncope.core.provisioning.camel.CamelGroupProvisioningManager
anyObjectProvisioningManager=org.apache.syncope.core.provisioning.java.DefaultAnyObjectProvisioningManager
-virAttrCache=org.apache.syncope.core.provisioning.java.cache.MemoryVirAttrCache
+virAttrCache=org.apache.syncope.core.provisioning.java.cache.MemoryVirAttrCache
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/fit/core-reference/src/main/resources/userWorkflow.bpmn20.xml
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/main/resources/userWorkflow.bpmn20.xml b/fit/core-reference/src/main/resources/userWorkflow.bpmn20.xml
index 9a6ee5b..df292b8 100644
--- a/fit/core-reference/src/main/resources/userWorkflow.bpmn20.xml
+++ b/fit/core-reference/src/main/resources/userWorkflow.bpmn20.xml
@@ -34,10 +34,14 @@ under the License.
<sequenceFlow id="flow2" sourceRef="create" targetRef="createGW"/>
<exclusiveGateway id="createGW"/>
<sequenceFlow id="createAsAnonymous2Approval" sourceRef="createGW" targetRef="createApproval">
- <conditionExpression xsi:type="tFormalExpression"><![CDATA[${wfExecutor == 'anonymous' || user.getStaticGroupKeys().contains(9)}]]></conditionExpression>
+ <conditionExpression xsi:type="tFormalExpression">
+ <![CDATA[${wfExecutor == 'anonymous' || activitiUtils.isUserIngroup(user, 9)}]]>
+ </conditionExpression>
</sequenceFlow>
<sequenceFlow id="create2Activate" sourceRef="createGW" targetRef="enableGW">
- <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!user.getStaticGroupKeys().contains(9)}]]></conditionExpression>
+ <conditionExpression xsi:type="tFormalExpression">
+ <![CDATA[${!activitiUtils.isUserIngroup(user, 9)}]]>
+ </conditionExpression>
</sequenceFlow>
<userTask id="createApproval" name="Create approval" activiti:candidateGroups="7" activiti:formKey="createApproval">
<extensionElements>
@@ -56,7 +60,9 @@ under the License.
</sequenceFlow>
<exclusiveGateway id="enableGW"/>
<sequenceFlow id="createApprovalGW2OptIn" sourceRef="enableGW" targetRef="generateToken">
- <conditionExpression xsi:type="tFormalExpression"><![CDATA[${user.getStaticGroupKeys().contains(11)}]]></conditionExpression>
+ <conditionExpression xsi:type="tFormalExpression">
+ <![CDATA[${activitiUtils.isUserIngroup(user, 11)}]]>
+ </conditionExpression>
</sequenceFlow>
<sequenceFlow id="createApprovalGW2Activate" sourceRef="enableGW" targetRef="activate">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${enabled == null}]]></conditionExpression>
http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractITCase.java
index 3984c5e..97fc9d0 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AbstractITCase.java
@@ -48,6 +48,8 @@ import org.apache.syncope.common.lib.to.UserTO;
import org.apache.syncope.common.lib.types.ConnConfProperty;
import org.apache.syncope.common.lib.types.SchemaType;
import org.apache.syncope.common.rest.api.RESTHeaders;
+import org.apache.syncope.common.rest.api.service.AnyTypeClassService;
+import org.apache.syncope.common.rest.api.service.AnyTypeService;
import org.apache.syncope.common.rest.api.service.CamelRouteService;
import org.apache.syncope.common.rest.api.service.ConfigurationService;
import org.apache.syncope.common.rest.api.service.ConnectorService;
@@ -147,6 +149,10 @@ public abstract class AbstractITCase {
protected static SyncopeService syncopeService;
+ protected static AnyTypeClassService anyTypeClassService;
+
+ protected static AnyTypeService anyTypeService;
+
protected static RealmService realmService;
protected static RoleService roleService;
@@ -217,6 +223,8 @@ public abstract class AbstractITCase {
adminClient = clientFactory.create(ADMIN_UNAME, ADMIN_PWD);
syncopeService = adminClient.getService(SyncopeService.class);
+ anyTypeClassService = adminClient.getService(AnyTypeClassService.class);
+ anyTypeService = adminClient.getService(AnyTypeService.class);
realmService = adminClient.getService(RealmService.class);
roleService = adminClient.getService(RoleService.class);
userService = adminClient.getService(UserService.class);
@@ -272,7 +280,7 @@ public abstract class AbstractITCase {
protected UserTO readUser(final String username) {
return userService.read(Long.valueOf(
- userService.getUserId(username).getHeaderString(RESTHeaders.USER_ID)));
+ userService.getUserKey(username).getHeaderString(RESTHeaders.USER_ID)));
}
protected UserTO updateUser(final UserMod userMod) {
@@ -361,7 +369,7 @@ public abstract class AbstractITCase {
throws NamingException {
ResourceTO ldapRes = resourceService.read(RESOURCE_NAME_LDAP);
final Map<String, ConnConfProperty> ldapConnConf =
- connectorService.read(ldapRes.getConnectorId()).getConfigurationMap();
+ connectorService.read(ldapRes.getConnector()).getConfigurationMap();
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");