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:16:57 UTC
[07/70] syncope git commit: [SYNCOPE-666] Initial commit,
Travis CI builds disabled
http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/NotificationDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/NotificationDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/NotificationDataBinderImpl.java
index ae6d8a8..eec346e 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/NotificationDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/NotificationDataBinderImpl.java
@@ -18,18 +18,30 @@
*/
package org.apache.syncope.core.provisioning.java.data;
+import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.core.provisioning.api.data.NotificationDataBinder;
import org.apache.syncope.common.lib.to.NotificationTO;
import org.apache.syncope.core.persistence.api.entity.EntityFactory;
import org.apache.syncope.core.persistence.api.entity.Notification;
import org.apache.syncope.core.misc.spring.BeanUtils;
+import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
+import org.apache.syncope.core.persistence.api.entity.AnyAbout;
+import org.apache.syncope.core.persistence.api.entity.AnyType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class NotificationDataBinderImpl implements NotificationDataBinder {
- private static final String[] IGNORE_PROPERTIES = { "key", "about", "recipients" };
+ private static final Logger LOG = LoggerFactory.getLogger(NotificationDataBinder.class);
+
+ private static final String[] IGNORE_PROPERTIES = { "key", "abouts", "recipients" };
+
+ @Autowired
+ private AnyTypeDAO anyTypeDAO;
@Autowired
private EntityFactory entityFactory;
@@ -41,8 +53,10 @@ public class NotificationDataBinderImpl implements NotificationDataBinder {
BeanUtils.copyProperties(notification, result, IGNORE_PROPERTIES);
result.setKey(notification.getKey());
- result.setUserAbout(notification.getUserAbout());
- result.setGroupAbout(notification.getGroupAbout());
+ for (AnyAbout about : notification.getAbouts()) {
+ result.getAbouts().put(about.getAnyType().getKey(), about.get());
+ }
+
result.setRecipients(notification.getRecipients());
return result;
@@ -59,8 +73,22 @@ public class NotificationDataBinderImpl implements NotificationDataBinder {
public void update(final Notification notification, final NotificationTO notificationTO) {
BeanUtils.copyProperties(notificationTO, notification, IGNORE_PROPERTIES);
- notification.setUserAbout(notificationTO.getUserAbout());
- notification.setGroupAbout(notificationTO.getGroupAbout());
+ notification.getAbouts().clear();
+ for (Map.Entry<String, String> entry : notificationTO.getAbouts().entrySet()) {
+ if (StringUtils.isNotBlank(entry.getValue())) {
+ AnyType anyType = anyTypeDAO.find(entry.getKey());
+ if (anyType == null) {
+ LOG.warn("Invalid AnyType {} specified, ignoring...", entry.getKey());
+ } else {
+ AnyAbout about = entityFactory.newEntity(AnyAbout.class);
+ about.setAnyType(anyType);
+ about.setNotification(notification);
+
+ notification.add(about);
+ }
+ }
+ }
+
notification.setRecipients(notificationTO.getRecipients());
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/PolicyDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/PolicyDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/PolicyDataBinderImpl.java
index 3fe382c..b29f9fa 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/PolicyDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/PolicyDataBinderImpl.java
@@ -32,7 +32,7 @@ import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
import org.apache.syncope.core.persistence.api.dao.RealmDAO;
import org.apache.syncope.core.persistence.api.entity.AccountPolicy;
import org.apache.syncope.core.persistence.api.entity.EntityFactory;
-import org.apache.syncope.core.persistence.api.entity.ExternalResource;
+import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.api.entity.PasswordPolicy;
import org.apache.syncope.core.persistence.api.entity.Policy;
import org.apache.syncope.core.persistence.api.entity.Realm;
http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
index cf1339e..fae0f9f 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
@@ -27,6 +27,7 @@ import org.apache.syncope.common.lib.SyncopeClientCompositeException;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.to.MappingItemTO;
import org.apache.syncope.common.lib.to.MappingTO;
+import org.apache.syncope.common.lib.to.ProvisionTO;
import org.apache.syncope.common.lib.to.ResourceTO;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.IntMappingType;
@@ -36,34 +37,34 @@ import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
import org.apache.syncope.core.persistence.api.entity.AccountPolicy;
import org.apache.syncope.core.persistence.api.entity.ConnInstance;
import org.apache.syncope.core.persistence.api.entity.EntityFactory;
-import org.apache.syncope.core.persistence.api.entity.ExternalResource;
-import org.apache.syncope.core.persistence.api.entity.Mapping;
-import org.apache.syncope.core.persistence.api.entity.MappingItem;
+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.MappingItem;
import org.apache.syncope.core.persistence.api.entity.PasswordPolicy;
import org.apache.syncope.core.persistence.api.entity.SyncPolicy;
-import org.apache.syncope.core.persistence.api.entity.group.GMapping;
-import org.apache.syncope.core.persistence.api.entity.group.GMappingItem;
-import org.apache.syncope.core.persistence.api.entity.user.UMapping;
-import org.apache.syncope.core.persistence.api.entity.user.UMappingItem;
import org.apache.syncope.core.provisioning.api.ConnectorRegistry;
import org.apache.syncope.core.misc.jexl.JexlUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.syncope.core.misc.spring.BeanUtils;
+import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
+import org.apache.syncope.core.persistence.api.entity.AnyType;
+import org.apache.syncope.core.persistence.api.entity.resource.Provision;
+import org.identityconnectors.framework.common.objects.ObjectClass;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class ResourceDataBinderImpl implements ResourceDataBinder {
- /**
- * Logger.
- */
private static final Logger LOG = LoggerFactory.getLogger(ResourceDataBinder.class);
private static final String[] MAPPINGITEM_IGNORE_PROPERTIES = { "key", "mapping" };
@Autowired
+ private AnyTypeDAO anyTypeDAO;
+
+ @Autowired
private ConnectorRegistry connRegistry;
@Autowired
@@ -107,21 +108,34 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
resource.setPropagationMode(resourceTO.getPropagationMode());
- if (resourceTO.getUmapping() == null || resourceTO.getUmapping().getItems().isEmpty()) {
- resource.setUmapping(null);
- } else {
- UMapping mapping = entityFactory.newEntity(UMapping.class);
- mapping.setResource(resource);
- resource.setUmapping(mapping);
- populateMapping(resourceTO.getUmapping(), mapping, entityFactory.newEntity(UMappingItem.class));
- }
- if (resourceTO.getGmapping() == null || resourceTO.getGmapping().getItems().isEmpty()) {
- resource.setGmapping(null);
- } else {
- GMapping mapping = entityFactory.newEntity(GMapping.class);
- mapping.setResource(resource);
- resource.setGmapping(mapping);
- populateMapping(resourceTO.getGmapping(), mapping, entityFactory.newEntity(GMappingItem.class));
+ for (ProvisionTO provisionTO : resourceTO.getProvisions()) {
+ AnyType anyType = anyTypeDAO.find(provisionTO.getAnyType());
+ if (anyType == null) {
+ LOG.warn("Invalid type specified {}, ignoring...", provisionTO.getAnyType());
+ }
+
+ Provision provision = resource.getProvision(anyType);
+ if (provision == null) {
+ provision = entityFactory.newEntity(Provision.class);
+ provision.setResource(resource);
+ resource.add(provision);
+ provision.setAnyType(anyType);
+ }
+
+ provision.setObjectClass(new ObjectClass(provisionTO.getObjectClass()));
+
+ if (provisionTO.getSyncToken() == null) {
+ provision.setSyncToken(null);
+ }
+
+ if (provisionTO.getMapping() == null) {
+ provision.setMapping(null);
+ } else {
+ Mapping mapping = entityFactory.newEntity(Mapping.class);
+ mapping.setProvision(provision);
+ provision.setMapping(mapping);
+ populateMapping(provisionTO.getMapping(), mapping, entityFactory.newEntity(MappingItem.class));
+ }
}
resource.setCreateTraceLevel(resourceTO.getCreateTraceLevel());
@@ -140,13 +154,6 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
resource.setConnInstanceConfiguration(new HashSet<>(resourceTO.getConnConfProperties()));
- if (resourceTO.getUsyncToken() == null) {
- resource.setUsyncToken(null);
- }
- if (resourceTO.getRsyncToken() == null) {
- resource.setRsyncToken(null);
- }
-
resource.getPropagationActionsClassNames().clear();
resource.getPropagationActionsClassNames().addAll(resourceTO.getPropagationActionsClassNames());
@@ -155,16 +162,14 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
@SuppressWarnings({ "unchecked", "rawtypes" })
private void populateMapping(final MappingTO mappingTO, final Mapping mapping, final MappingItem prototype) {
- mapping.setAccountLink(mappingTO.getAccountLink());
+ mapping.setConnObjectLink(mappingTO.getConnObjectLink());
for (MappingItem item : getMappingItems(mappingTO.getItems(), prototype)) {
item.setMapping(mapping);
- if (item.isAccountid()) {
- mapping.setAccountIdItem(item);
- } else if (item.isPassword()) {
- ((UMapping) mapping).setPasswordItem((UMappingItem) item);
+ if (item.isConnObjectKey()) {
+ mapping.setConnObjectKeyItem(item);
} else {
- mapping.addItem(item);
+ mapping.add(item);
}
}
}
@@ -233,8 +238,8 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
return connRegistry.getOverriddenConnInstance(connInstanceClone, resourceTO.getConnConfProperties());
}
- private void populateMappingTO(final Mapping<?> mapping, final MappingTO mappingTO) {
- mappingTO.setAccountLink(mapping.getAccountLink());
+ private void populateMappingTO(final Mapping mapping, final MappingTO mappingTO) {
+ mappingTO.setConnObjectLink(mapping.getConnObjectLink());
for (MappingItem item : mapping.getItems()) {
MappingItemTO itemTO = new MappingItemTO();
@@ -242,11 +247,9 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
BeanUtils.copyProperties(item, itemTO, MAPPINGITEM_IGNORE_PROPERTIES);
if (itemTO.isAccountid()) {
- mappingTO.setAccountIdItem(itemTO);
- } else if (itemTO.isPassword()) {
- mappingTO.setPasswordItem(itemTO);
+ mappingTO.setConnObjectKeyItem(itemTO);
} else {
- mappingTO.addItem(itemTO);
+ mappingTO.add(itemTO);
}
}
}
@@ -274,16 +277,19 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
resourceTO.setConnectorId(connector == null ? null : connector.getKey());
resourceTO.setConnectorDisplayName(connector == null ? null : connector.getDisplayName());
- // set the mappings
- if (resource.getUmapping() != null) {
- MappingTO mappingTO = new MappingTO();
- resourceTO.setUmapping(mappingTO);
- populateMappingTO(resource.getUmapping(), mappingTO);
- }
- if (resource.getGmapping() != null) {
- MappingTO mappingTO = new MappingTO();
- resourceTO.setGmapping(mappingTO);
- populateMappingTO(resource.getGmapping(), mappingTO);
+ // set the provision information
+ for (Provision provision : resource.getProvisions()) {
+ ProvisionTO provisionTO = new ProvisionTO();
+ provisionTO.setKey(provision.getKey());
+ provisionTO.setAnyType(provision.getAnyType().getKey());
+ provisionTO.setObjectClass(provision.getObjectClass().getObjectClassValue());
+ provisionTO.setSyncToken(provision.getSerializedSyncToken());
+
+ if (provision.getMapping() != null) {
+ MappingTO mappingTO = new MappingTO();
+ provisionTO.setMapping(mappingTO);
+ populateMappingTO(provision.getMapping(), mappingTO);
+ }
}
resourceTO.setEnforceMandatoryCondition(resource.isEnforceMandatoryCondition());
@@ -312,9 +318,6 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
resourceTO.getConnConfProperties().addAll(resource.getConnInstanceConfiguration());
- resourceTO.setUsyncToken(resource.getSerializedUSyncToken());
- resourceTO.setRsyncToken(resource.getSerializedRSyncToken());
-
resourceTO.getPropagationActionsClassNames().addAll(resource.getPropagationActionsClassNames());
return resourceTO;
http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java
index 2f4fd2d..b286043 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RoleDataBinderImpl.java
@@ -26,10 +26,10 @@ import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.core.misc.search.SearchCondConverter;
import org.apache.syncope.core.persistence.api.dao.RealmDAO;
import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
-import org.apache.syncope.core.persistence.api.entity.DynRoleMembership;
import org.apache.syncope.core.persistence.api.entity.EntityFactory;
import org.apache.syncope.core.persistence.api.entity.Realm;
import org.apache.syncope.core.persistence.api.entity.Role;
+import org.apache.syncope.core.persistence.api.entity.user.DynRoleMembership;
import org.apache.syncope.core.provisioning.api.data.RoleDataBinder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -101,7 +101,7 @@ public class RoleDataBinderImpl implements RoleDataBinder {
} else if (role.getDynMembership() != null && roleTO.getDynMembershipCond() != null
&& !role.getDynMembership().getFIQLCond().equals(roleTO.getDynMembershipCond())) {
- role.getDynMembership().getUsers().clear();
+ role.getDynMembership().getMembers().clear();
setDynMembership(role, roleTO.getDynMembershipCond());
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java
index 0a34e61..e44198b 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java
@@ -19,22 +19,22 @@
package org.apache.syncope.core.provisioning.java.data;
import org.apache.syncope.core.provisioning.api.data.SchemaDataBinder;
-import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.lib.SyncopeClientCompositeException;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.to.DerSchemaTO;
import org.apache.syncope.common.lib.to.PlainSchemaTO;
import org.apache.syncope.common.lib.to.VirSchemaTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
-import org.apache.syncope.core.persistence.api.entity.AttributableUtils;
import org.apache.syncope.core.persistence.api.entity.DerSchema;
-import org.apache.syncope.core.persistence.api.entity.PlainAttr;
import org.apache.syncope.core.persistence.api.entity.PlainSchema;
import org.apache.syncope.core.persistence.api.entity.VirSchema;
import org.apache.syncope.core.misc.spring.BeanUtils;
import org.apache.syncope.core.misc.jexl.JexlUtils;
+import org.apache.syncope.core.persistence.api.entity.AnyUtils;
+import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -44,6 +44,9 @@ public class SchemaDataBinderImpl implements SchemaDataBinder {
@Autowired
private PlainSchemaDAO schemaDAO;
+ @Autowired
+ private AnyUtilsFactory anyUtilsFactory;
+
// --------------- PLAIN -----------------
private <T extends PlainSchema> void fill(final T schema, final PlainSchemaTO schemaTO) {
if (!JexlUtils.isExpressionValid(schemaTO.getMandatoryCondition())) {
@@ -61,13 +64,16 @@ public class SchemaDataBinderImpl implements SchemaDataBinder {
}
@Override
- public <T extends PlainSchema> void update(final PlainSchemaTO schemaTO, final T schema,
- final AttributableUtils attributableUtil) {
-
+ public <T extends PlainSchema> void update(final PlainSchemaTO schemaTO, final T schema) {
SyncopeClientCompositeException scce = SyncopeClientException.buildComposite();
- List<PlainAttr> attrs = schemaDAO.findAttrs(schema, attributableUtil.plainAttrClass());
- if (!attrs.isEmpty()) {
+ boolean hasAttrs = false;
+ for (AnyTypeKind anyTypeKind : AnyTypeKind.values()) {
+ AnyUtils anyUtils = anyUtilsFactory.getInstance(anyTypeKind);
+ hasAttrs &= schemaDAO.findAttrs(schema, anyUtils.plainAttrClass()).isEmpty();
+ }
+
+ if (hasAttrs) {
if (schema.getType() != schemaTO.getType()) {
SyncopeClientException e = SyncopeClientException.build(ClientExceptionType.InvalidPlainSchema);
e.getElements().add("Cannot change type since " + schema.getKey() + " has attributes");
@@ -90,9 +96,7 @@ public class SchemaDataBinderImpl implements SchemaDataBinder {
}
@Override
- public <T extends PlainSchema> PlainSchemaTO getPlainSchemaTO(
- final T schema, final AttributableUtils attributableUtil) {
-
+ public <T extends PlainSchema> PlainSchemaTO getPlainSchemaTO(final T schema) {
PlainSchemaTO schemaTO = new PlainSchemaTO();
BeanUtils.copyProperties(schema, schemaTO);
http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java
index 9fe733e..c25b3ed 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java
@@ -18,14 +18,14 @@
*/
package org.apache.syncope.core.provisioning.java.data;
+import java.util.Map;
import org.apache.syncope.core.provisioning.api.data.TaskDataBinder;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.lib.SyncopeClientException;
-import org.apache.syncope.common.lib.to.AbstractAttributableTO;
import org.apache.syncope.common.lib.to.AbstractProvisioningTaskTO;
import org.apache.syncope.common.lib.to.AbstractTaskTO;
+import org.apache.syncope.common.lib.to.AnyTO;
import org.apache.syncope.common.lib.to.AttrTO;
-import org.apache.syncope.common.lib.to.MembershipTO;
import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.to.PushTaskTO;
import org.apache.syncope.common.lib.to.GroupTO;
@@ -40,7 +40,6 @@ import org.apache.syncope.common.lib.types.UnmatchingRule;
import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
import org.apache.syncope.core.persistence.api.dao.NotFoundException;
import org.apache.syncope.core.persistence.api.dao.TaskExecDAO;
-import org.apache.syncope.core.persistence.api.entity.ExternalResource;
import org.apache.syncope.core.persistence.api.entity.task.NotificationTask;
import org.apache.syncope.core.persistence.api.entity.task.PropagationTask;
import org.apache.syncope.core.persistence.api.entity.task.ProvisioningTask;
@@ -53,7 +52,13 @@ import org.apache.syncope.core.persistence.api.entity.task.TaskUtils;
import org.apache.syncope.core.provisioning.api.job.JobNamer;
import org.apache.syncope.core.misc.spring.BeanUtils;
import org.apache.syncope.core.misc.jexl.JexlUtils;
+import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
import org.apache.syncope.core.persistence.api.dao.RealmDAO;
+import org.apache.syncope.core.persistence.api.entity.AnyType;
+import org.apache.syncope.core.persistence.api.entity.EntityFactory;
+import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
+import org.apache.syncope.core.persistence.api.entity.task.AnyFilter;
+import org.apache.syncope.core.persistence.api.entity.task.AnyTemplate;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
@@ -87,16 +92,22 @@ public class TaskDataBinderImpl implements TaskDataBinder {
private TaskExecDAO taskExecDAO;
@Autowired
+ private AnyTypeDAO anyTypeDAO;
+
+ @Autowired
+ private EntityFactory entityFactory;
+
+ @Autowired
private SchedulerFactoryBean scheduler;
- private void checkJexl(final AbstractAttributableTO attributableTO, final SyncopeClientException sce) {
- for (AttrTO attrTO : attributableTO.getPlainAttrs()) {
+ private void checkJexl(final AnyTO anyTO, final SyncopeClientException sce) {
+ for (AttrTO attrTO : anyTO.getPlainAttrs()) {
if (!attrTO.getValues().isEmpty() && !JexlUtils.isExpressionValid(attrTO.getValues().get(0))) {
sce.getElements().add("Invalid JEXL: " + attrTO.getValues().get(0));
}
}
- for (AttrTO attrTO : attributableTO.getVirAttrs()) {
+ for (AttrTO attrTO : anyTO.getVirAttrs()) {
if (!attrTO.getValues().isEmpty() && !JexlUtils.isExpressionValid(attrTO.getValues().get(0))) {
sce.getElements().add("Invalid JEXL: " + attrTO.getValues().get(0));
}
@@ -105,11 +116,17 @@ public class TaskDataBinderImpl implements TaskDataBinder {
private void fill(final ProvisioningTask task, final AbstractProvisioningTaskTO taskTO) {
if (task instanceof PushTask && taskTO instanceof PushTaskTO) {
- final PushTask pushTask = (PushTask) task;
- final PushTaskTO pushTaskTO = (PushTaskTO) taskTO;
+ PushTask pushTask = (PushTask) task;
+ PushTaskTO pushTaskTO = (PushTaskTO) taskTO;
+
+ for (Map.Entry<String, String> entry : pushTaskTO.getFilters().entrySet()) {
+ AnyFilter filter = entityFactory.newEntity(AnyFilter.class);
+ filter.setAnyType(anyTypeDAO.find(entry.getKey()));
+ filter.set(entry.getValue());
- pushTask.setUserFilter(pushTaskTO.getUserFilter());
- pushTask.setGroupFilter(pushTaskTO.getGroupFilter());
+ filter.setPushTask(pushTask);
+ pushTask.add(filter);
+ }
pushTask.setMatchingRule(pushTaskTO.getMatchingRule() == null
? MatchingRule.LINK : pushTaskTO.getMatchingRule());
@@ -131,42 +148,46 @@ public class TaskDataBinderImpl implements TaskDataBinder {
SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidSyncTask);
// 1. validate JEXL expressions in user and group templates
- if (syncTaskTO.getUserTemplate() != null) {
- UserTO template = syncTaskTO.getUserTemplate();
-
- if (StringUtils.isNotBlank(template.getUsername())
- && !JexlUtils.isExpressionValid(template.getUsername())) {
-
- sce.getElements().add("Invalid JEXL: " + template.getUsername());
- }
- if (StringUtils.isNotBlank(template.getPassword())
- && !JexlUtils.isExpressionValid(template.getPassword())) {
-
- sce.getElements().add("Invalid JEXL: " + template.getPassword());
- }
-
- checkJexl(template, sce);
-
- for (MembershipTO memb : template.getMemberships()) {
- checkJexl(memb, sce);
+ for (Map.Entry<String, AnyTO> entry : syncTaskTO.getTemplates().entrySet()) {
+ checkJexl(entry.getValue(), sce);
+
+ if (entry.getValue() instanceof UserTO) {
+ UserTO template = (UserTO) entry.getValue();
+ if (StringUtils.isNotBlank(template.getUsername())
+ && !JexlUtils.isExpressionValid(template.getUsername())) {
+
+ sce.getElements().add("Invalid JEXL: " + template.getUsername());
+ }
+ if (StringUtils.isNotBlank(template.getPassword())
+ && !JexlUtils.isExpressionValid(template.getPassword())) {
+
+ sce.getElements().add("Invalid JEXL: " + template.getPassword());
+ }
+ } else if (entry.getValue() instanceof GroupTO) {
+ GroupTO template = (GroupTO) entry.getValue();
+ if (StringUtils.isNotBlank(template.getName())
+ && !JexlUtils.isExpressionValid(template.getName())) {
+
+ sce.getElements().add("Invalid JEXL: " + template.getName());
+ }
}
}
- if (syncTaskTO.getGroupTemplate() != null) {
- GroupTO template = syncTaskTO.getGroupTemplate();
-
- if (StringUtils.isNotBlank(template.getName()) && !JexlUtils.isExpressionValid(template.getName())) {
- sce.getElements().add("Invalid JEXL: " + template.getName());
- }
-
- checkJexl(template, sce);
- }
if (!sce.isEmpty()) {
throw sce;
}
// 2. all JEXL expressions are valid: accept user and group templates
- syncTask.setUserTemplate(syncTaskTO.getUserTemplate());
- syncTask.setGroupTemplate(syncTaskTO.getGroupTemplate());
+ for (Map.Entry<String, AnyTO> entry : syncTaskTO.getTemplates().entrySet()) {
+ AnyType type = anyTypeDAO.find(entry.getKey());
+ if (type != null) {
+ AnyTemplate anyTemplate = entityFactory.newEntity(AnyTemplate.class);
+ anyTemplate.setAnyType(type);
+ anyTemplate.set(entry.getValue());
+ anyTemplate.setSyncTask(syncTask);
+
+ syncTask.add(anyTemplate);
+ }
+ }
syncTask.setFullReconciliation(syncTaskTO.isFullReconciliation());
}
@@ -176,12 +197,16 @@ public class TaskDataBinderImpl implements TaskDataBinder {
task.setPerformUpdate(taskTO.isPerformUpdate());
task.setPerformDelete(taskTO.isPerformDelete());
task.setSyncStatus(taskTO.isSyncStatus());
- task.getActionsClassNames().clear();
- task.getActionsClassNames().addAll(taskTO.getActionsClassNames());
+ task.getActionsClassNames()
+ .clear();
+ task.getActionsClassNames()
+ .addAll(taskTO.getActionsClassNames());
}
@Override
- public SchedTask createSchedTask(final SchedTaskTO taskTO, final TaskUtils taskUtils) {
+ public SchedTask createSchedTask(final SchedTaskTO taskTO,
+ final TaskUtils taskUtils
+ ) {
final Class<? extends AbstractTaskTO> taskTOClass = taskUtils.taskTOClass();
if (taskTOClass == null || !taskTOClass.equals(taskTO.getClass())) {
@@ -212,7 +237,10 @@ public class TaskDataBinderImpl implements TaskDataBinder {
}
@Override
- public void updateSchedTask(final SchedTask task, final SchedTaskTO taskTO, final TaskUtils taskUtils) {
+ public void updateSchedTask(final SchedTask task,
+ final SchedTaskTO taskTO,
+ final TaskUtils taskUtils
+ ) {
Class<? extends Task> taskClass = taskUtils.taskClass();
Class<? extends AbstractTaskTO> taskTOClass = taskUtils.taskTOClass();
@@ -240,7 +268,8 @@ public class TaskDataBinderImpl implements TaskDataBinder {
}
@Override
- public TaskExecTO getTaskExecTO(final TaskExec execution) {
+ public TaskExecTO getTaskExecTO(final TaskExec execution
+ ) {
TaskExecTO executionTO = new TaskExecTO();
BeanUtils.copyProperties(execution, executionTO, IGNORE_TASK_EXECUTION_PROPERTIES);
http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
index 317fce2..e7ec3cd 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
@@ -19,7 +19,6 @@
package org.apache.syncope.core.provisioning.java.data;
import java.util.Collection;
-import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.Map;
@@ -31,24 +30,15 @@ import org.apache.commons.collections4.Transformer;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.lib.SyncopeClientCompositeException;
import org.apache.syncope.common.lib.SyncopeClientException;
-import org.apache.syncope.common.lib.mod.MembershipMod;
import org.apache.syncope.common.lib.mod.UserMod;
import org.apache.syncope.common.lib.to.MembershipTO;
import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.lib.types.AttributableType;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.CipherAlgorithm;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.persistence.api.dao.ConfDAO;
import org.apache.syncope.core.persistence.api.dao.SecurityQuestionDAO;
-import org.apache.syncope.core.persistence.api.entity.DerAttr;
-import org.apache.syncope.core.persistence.api.entity.ExternalResource;
-import org.apache.syncope.core.persistence.api.entity.PlainAttr;
-import org.apache.syncope.core.persistence.api.entity.VirAttr;
-import org.apache.syncope.core.persistence.api.entity.membership.MDerAttr;
-import org.apache.syncope.core.persistence.api.entity.membership.MPlainAttr;
-import org.apache.syncope.core.persistence.api.entity.membership.MVirAttr;
-import org.apache.syncope.core.persistence.api.entity.membership.Membership;
import org.apache.syncope.core.persistence.api.entity.group.Group;
import org.apache.syncope.core.persistence.api.entity.user.SecurityQuestion;
import org.apache.syncope.core.persistence.api.entity.user.User;
@@ -60,13 +50,14 @@ import org.apache.syncope.core.misc.spring.BeanUtils;
import org.apache.syncope.core.misc.ConnObjectUtils;
import org.apache.syncope.core.persistence.api.dao.RoleDAO;
import org.apache.syncope.core.persistence.api.entity.Role;
+import org.apache.syncope.core.persistence.api.entity.user.UMembership;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@Component
@Transactional(rollbackFor = { Throwable.class })
-public class UserDataBinderImpl extends AbstractAttributableDataBinder implements UserDataBinder {
+public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDataBinder {
private static final String[] IGNORE_USER_PROPERTIES = {
"realm", "roles", "memberships", "plainAttrs", "derAttrs", "virAttrs", "resources",
@@ -118,7 +109,7 @@ public class UserDataBinderImpl extends AbstractAttributableDataBinder implement
@Transactional(readOnly = true)
@Override
public boolean verifyPassword(final String username, final String password) {
- return verifyPassword(userDAO.authFetch(username), password);
+ return verifyPassword(userDAO.authFind(username), password);
}
@Transactional(readOnly = true)
@@ -153,40 +144,35 @@ public class UserDataBinderImpl extends AbstractAttributableDataBinder implement
if (role == null) {
LOG.warn("Ignoring unknown role with id {}", roleKey);
} else {
- user.addRole(role);
+ user.add(role);
}
}
// memberships
- Group group;
for (MembershipTO membershipTO : userTO.getMemberships()) {
- group = groupDAO.find(membershipTO.getGroupKey());
+ Group group = groupDAO.find(membershipTO.getRightKey());
if (group == null) {
if (LOG.isDebugEnabled()) {
LOG.debug("Ignoring invalid group " + membershipTO.getGroupName());
}
} else {
- Membership membership = null;
+ UMembership membership = null;
if (user.getKey() != null) {
- membership = user.getMembership(group.getKey()) == null
- ? membershipDAO.find(user, group)
- : user.getMembership(group.getKey());
+ membership = user.getMembership(group.getKey());
}
if (membership == null) {
- membership = entityFactory.newEntity(Membership.class);
- membership.setGroup(group);
- membership.setUser(user);
+ membership = entityFactory.newEntity(UMembership.class);
+ membership.setRightEnd(group);
+ membership.setLeftEnd(user);
- user.addMembership(membership);
+ user.add(membership);
}
-
- fill(membership, membershipTO, attrUtilsFactory.getInstance(AttributableType.MEMBERSHIP), scce);
}
}
// realm, attributes, derived attributes, virtual attributes and resources
- fill(user, userTO, attrUtilsFactory.getInstance(AttributableType.USER), scce);
+ fill(user, userTO, anyUtilsFactory.getInstance(AnyTypeKind.USER), scce);
// set password
if (StringUtils.isBlank(userTO.getPassword()) || !storePassword) {
@@ -228,7 +214,7 @@ public class UserDataBinderImpl extends AbstractAttributableDataBinder implement
Collection<String> currentResources = userDAO.findAllResourceNames(user);
// fetch account ids before update
- Map<String, String> oldAccountIds = getAccountIds(user, AttributableType.USER);
+ Map<String, String> oldConnObjectKeys = getConnObjectKeys(user);
// realm
setRealm(user, userMod);
@@ -272,7 +258,7 @@ public class UserDataBinderImpl extends AbstractAttributableDataBinder implement
if (role == null) {
LOG.warn("Ignoring unknown role with id {}", roleKey);
} else {
- user.removeRole(role);
+ user.remove(role);
}
}
});
@@ -284,100 +270,57 @@ public class UserDataBinderImpl extends AbstractAttributableDataBinder implement
if (role == null) {
LOG.warn("Ignoring unknown role with id {}", roleKey);
} else {
- user.addRole(role);
+ user.add(role);
}
}
});
// attributes, derived attributes, virtual attributes and resources
- propByRes.merge(fill(user, userMod, attrUtilsFactory.getInstance(AttributableType.USER), scce));
+ propByRes.merge(fill(user, userMod, anyUtilsFactory.getInstance(AnyTypeKind.USER), scce));
// store the group ids of membership required to be added
- Set<Long> membershipToBeAddedGroupKeys = CollectionUtils.collect(userMod.getMembershipsToAdd(),
- new Transformer<MembershipMod, Long>() {
-
- @Override
- public Long transform(final MembershipMod membToBeAdded) {
- return membToBeAdded.getGroup();
- }
- }, new HashSet<Long>());
+ Set<Long> membershipToBeAddedGroupKeys = new HashSet<>(userMod.getMembershipsToAdd());
final Set<String> toBeDeprovisioned = new HashSet<>();
final Set<String> toBeProvisioned = new HashSet<>();
// memberships to be removed
- for (Long membKey : userMod.getMembershipsToRemove()) {
- LOG.debug("Membership to be removed: {}", membKey);
+ for (Long groupKey : userMod.getMembershipsToRemove()) {
+ LOG.debug("Membership to be removed for group {}", groupKey);
- Membership membership = membershipDAO.find(membKey);
+ UMembership membership = user.getMembership(groupKey);
if (membership == null) {
- LOG.warn("Invalid membership id specified to be removed: {}", membKey);
+ LOG.warn("Invalid group key specified for membership to be removed: {}", groupKey);
} else {
- if (!membershipToBeAddedGroupKeys.contains(membership.getGroup().getKey())) {
- toBeDeprovisioned.addAll(membership.getGroup().getResourceNames());
+ if (!membershipToBeAddedGroupKeys.contains(membership.getRightEnd().getKey())) {
+ toBeDeprovisioned.addAll(membership.getRightEnd().getResourceNames());
}
- // In order to make the removeMembership() below to work,
- // we need to be sure to take exactly the same membership
- // of the user object currently in memory (which has potentially
- // some modifications compared to the one stored in the DB
- membership = user.getMembership(membership.getGroup().getKey());
- if (membershipToBeAddedGroupKeys.contains(membership.getGroup().getKey())) {
- Set<Long> attrKeys = new HashSet<>(membership.getPlainAttrs().size());
- for (PlainAttr plainAttr : membership.getPlainAttrs()) {
- attrKeys.add(plainAttr.getKey());
- }
- for (Long attrKey : attrKeys) {
- plainAttrDAO.delete(attrKey, MPlainAttr.class);
- }
- attrKeys.clear();
-
- // remove derived attributes
- for (DerAttr derAttr : membership.getDerAttrs()) {
- attrKeys.add(derAttr.getKey());
- }
- for (Long derAttrId : attrKeys) {
- derAttrDAO.delete(derAttrId, MDerAttr.class);
- }
- attrKeys.clear();
-
- // remove virtual attributes
- for (VirAttr virAttr : membership.getVirAttrs()) {
- attrKeys.add(virAttr.getKey());
- }
- for (Long virAttrId : attrKeys) {
- virAttrDAO.delete(virAttrId, MVirAttr.class);
- }
- attrKeys.clear();
+ if (!membershipToBeAddedGroupKeys.contains(membership.getRightEnd().getKey())) {
} else {
- user.removeMembership(membership);
-
- membershipDAO.delete(membKey);
+ user.remove(membership);
}
}
}
// memberships to be added
- for (MembershipMod membershipMod : userMod.getMembershipsToAdd()) {
- LOG.debug("Membership to be added: group({})", membershipMod.getGroup());
+ for (Long groupKey : userMod.getMembershipsToAdd()) {
+ LOG.debug("Membership to be added for group {}", groupKey);
- Group group = groupDAO.find(membershipMod.getGroup());
+ Group group = groupDAO.find(groupKey);
if (group == null) {
- LOG.debug("Ignoring invalid group {}", membershipMod.getGroup());
+ LOG.debug("Ignoring invalid group {}", groupKey);
} else {
- Membership membership = user.getMembership(group.getKey());
+ UMembership membership = user.getMembership(group.getKey());
if (membership == null) {
- membership = entityFactory.newEntity(Membership.class);
- membership.setGroup(group);
- membership.setUser(user);
+ membership = entityFactory.newEntity(UMembership.class);
+ membership.setRightEnd(group);
+ membership.setLeftEnd(user);
- user.addMembership(membership);
+ user.add(membership);
toBeProvisioned.addAll(group.getResourceNames());
}
-
- propByRes.merge(fill(membership, membershipMod,
- attrUtilsFactory.getInstance(AttributableType.MEMBERSHIP), scce));
}
}
@@ -394,8 +337,8 @@ public class UserDataBinderImpl extends AbstractAttributableDataBinder implement
}
// check if some account id was changed by the update above
- Map<String, String> newAccountIds = getAccountIds(user, AttributableType.USER);
- for (Map.Entry<String, String> entry : oldAccountIds.entrySet()) {
+ Map<String, String> newAccountIds = getConnObjectKeys(user);
+ for (Map.Entry<String, String> entry : oldConnObjectKeys.entrySet()) {
if (newAccountIds.containsKey(entry.getKey())
&& !entry.getValue().equals(newAccountIds.get(entry.getKey()))) {
@@ -418,29 +361,16 @@ public class UserDataBinderImpl extends AbstractAttributableDataBinder implement
userTO.setSecurityQuestion(user.getSecurityQuestion().getKey());
}
- connObjectUtils.retrieveVirAttrValues(user, attrUtilsFactory.getInstance(AttributableType.USER));
+ connObjectUtils.retrieveVirAttrValues(user);
fillTO(userTO, user.getRealm().getFullPath(),
user.getPlainAttrs(), user.getDerAttrs(), user.getVirAttrs(), userDAO.findAllResources(user));
- for (Membership membership : user.getMemberships()) {
+ for (UMembership membership : user.getMemberships()) {
MembershipTO membershipTO = new MembershipTO();
- // set sys info
- membershipTO.setCreator(membership.getCreator());
- membershipTO.setCreationDate(membership.getCreationDate());
- membershipTO.setLastModifier(membership.getLastModifier());
- membershipTO.setLastChangeDate(membership.getLastChangeDate());
-
membershipTO.setKey(membership.getKey());
- membershipTO.setGroupKey(membership.getGroup().getKey());
- membershipTO.setGroupName(membership.getGroup().getName());
-
- // SYNCOPE-458 retrieve also membership virtual attributes
- connObjectUtils.retrieveVirAttrValues(
- membership, attrUtilsFactory.getInstance(AttributableType.MEMBERSHIP));
- fillTO(membershipTO, null,
- membership.getPlainAttrs(), membership.getDerAttrs(), membership.getVirAttrs(),
- Collections.<ExternalResource>emptyList());
+ membershipTO.setRightKey(membership.getRightEnd().getKey());
+ membershipTO.setGroupName(membership.getRightEnd().getName());
userTO.getMemberships().add(membershipTO);
}
@@ -467,13 +397,13 @@ public class UserDataBinderImpl extends AbstractAttributableDataBinder implement
@Transactional(readOnly = true)
@Override
public UserTO getUserTO(final String username) {
- return getUserTO(userDAO.authFetch(username));
+ return getUserTO(userDAO.authFind(username));
}
@Transactional(readOnly = true)
@Override
public UserTO getUserTO(final Long key) {
- return getUserTO(userDAO.authFetch(key));
+ return getUserTO(userDAO.authFind(key));
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
index 7153529..776b8db 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
@@ -30,26 +30,21 @@ import java.util.Set;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.to.GroupTO;
import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.lib.types.AttributableType;
import org.apache.syncope.common.lib.types.AuditElements;
import org.apache.syncope.common.lib.types.AuditElements.Result;
import org.apache.syncope.common.lib.types.AuditLoggerName;
import org.apache.syncope.common.lib.types.IntMappingType;
-import org.apache.syncope.common.lib.types.SubjectType;
-import org.apache.syncope.common.lib.CollectionUtils2;
+import org.apache.syncope.common.lib.to.AnyObjectTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.core.persistence.api.dao.ConfDAO;
import org.apache.syncope.core.persistence.api.dao.NotificationDAO;
import org.apache.syncope.core.persistence.api.dao.GroupDAO;
-import org.apache.syncope.core.persistence.api.dao.SubjectSearchDAO;
import org.apache.syncope.core.persistence.api.dao.TaskDAO;
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.Attributable;
-import org.apache.syncope.core.persistence.api.entity.AttributableUtilsFactory;
import org.apache.syncope.core.persistence.api.entity.EntityFactory;
import org.apache.syncope.core.persistence.api.entity.Notification;
import org.apache.syncope.core.persistence.api.entity.PlainAttr;
-import org.apache.syncope.core.persistence.api.entity.Subject;
import org.apache.syncope.core.persistence.api.entity.group.Group;
import org.apache.syncope.core.persistence.api.entity.task.NotificationTask;
import org.apache.syncope.core.persistence.api.entity.task.TaskExec;
@@ -61,6 +56,12 @@ import org.apache.syncope.core.provisioning.api.data.GroupDataBinder;
import org.apache.syncope.core.provisioning.api.data.UserDataBinder;
import org.apache.syncope.core.misc.ConnObjectUtils;
import org.apache.syncope.core.misc.search.SearchCondConverter;
+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.entity.Any;
+import org.apache.syncope.core.persistence.api.entity.AnyAbout;
+import org.apache.syncope.core.persistence.api.entity.AnyType;
+import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.context.Context;
@@ -100,6 +101,12 @@ public class NotificationManagerImpl implements NotificationManager {
private ConfDAO confDAO;
/**
+ * AnyObject DAO.
+ */
+ @Autowired
+ private AnyObjectDAO anyObjectDAO;
+
+ /**
* User DAO.
*/
@Autowired
@@ -112,10 +119,10 @@ public class NotificationManagerImpl implements NotificationManager {
private GroupDAO groupDAO;
/**
- * User Search DAO.
+ * Search DAO.
*/
@Autowired
- private SubjectSearchDAO searchDAO;
+ private AnySearchDAO searchDAO;
/**
* Task DAO.
@@ -148,7 +155,7 @@ public class NotificationManagerImpl implements NotificationManager {
private EntityFactory entityFactory;
@Autowired
- private AttributableUtilsFactory attrUtilsFactory;
+ private AnyUtilsFactory anyUtilsFactory;
@Transactional(readOnly = true)
@Override
@@ -160,19 +167,17 @@ public class NotificationManagerImpl implements NotificationManager {
* Create a notification task.
*
* @param notification notification to take as model
- * @param attributable the user this task is about
+ * @param any the any object this task is about
* @param model Velocity model
* @return notification task, fully populated
*/
private NotificationTask getNotificationTask(
final Notification notification,
- final Attributable<?, ?, ?> attributable,
+ final Any<?, ?, ?> any,
final Map<String, Object> model) {
- if (attributable != null) {
- connObjectUtils.retrieveVirAttrValues(attributable,
- attrUtilsFactory.getInstance(
- attributable instanceof User ? AttributableType.USER : AttributableType.GROUP));
+ if (any != null) {
+ connObjectUtils.retrieveVirAttrValues(any);
}
final List<User> recipients = new ArrayList<>();
@@ -180,17 +185,17 @@ public class NotificationManagerImpl implements NotificationManager {
if (notification.getRecipients() != null) {
recipients.addAll(searchDAO.<User>search(SyncopeConstants.FULL_ADMIN_REALMS,
SearchCondConverter.convert(notification.getRecipients()),
- Collections.<OrderByClause>emptyList(), SubjectType.USER));
+ Collections.<OrderByClause>emptyList(), AnyTypeKind.USER));
}
- if (notification.isSelfAsRecipient() && attributable instanceof User) {
- recipients.add((User) attributable);
+ if (notification.isSelfAsRecipient() && any instanceof User) {
+ recipients.add((User) any);
}
final Set<String> recipientEmails = new HashSet<>();
final List<UserTO> recipientTOs = new ArrayList<>(recipients.size());
for (User recipient : recipients) {
- connObjectUtils.retrieveVirAttrValues(recipient, attrUtilsFactory.getInstance(AttributableType.USER));
+ connObjectUtils.retrieveVirAttrValues(recipient);
String email = getRecipientEmail(notification.getRecipientAttrType(),
notification.getRecipientAttrName(), recipient);
@@ -266,42 +271,42 @@ public class NotificationManagerImpl implements NotificationManager {
final Object output,
final Object... input) {
- SubjectType subjectType = null;
- Subject<?, ?, ?> subject = null;
+ Any<?, ?, ?> any = null;
if (before instanceof UserTO) {
- subjectType = SubjectType.USER;
- subject = userDAO.find(((UserTO) before).getKey());
+ any = userDAO.find(((UserTO) before).getKey());
} else if (output instanceof UserTO) {
- subjectType = SubjectType.USER;
- subject = userDAO.find(((UserTO) output).getKey());
+ any = userDAO.find(((UserTO) output).getKey());
+ } else if (before instanceof AnyObjectTO) {
+ any = anyObjectDAO.find(((AnyObjectTO) before).getKey());
+ } else if (output instanceof AnyObjectTO) {
+ any = anyObjectDAO.find(((AnyObjectTO) output).getKey());
} else if (before instanceof GroupTO) {
- subjectType = SubjectType.GROUP;
- subject = groupDAO.find(((GroupTO) before).getKey());
+ any = groupDAO.find(((GroupTO) before).getKey());
} else if (output instanceof GroupTO) {
- subjectType = SubjectType.GROUP;
- subject = groupDAO.find(((GroupTO) output).getKey());
+ any = groupDAO.find(((GroupTO) output).getKey());
}
- LOG.debug("Search notification for [{}]{}", subjectType, subject);
+ AnyType anyType = any == null ? null : any.getType();
+ LOG.debug("Search notification for [{}]{}", anyType, any);
for (Notification notification : notificationDAO.findAll()) {
- LOG.debug("Notification available user about {}", notification.getUserAbout());
- LOG.debug("Notification available group about {}", notification.getGroupAbout());
+ if (LOG.isDebugEnabled()) {
+ for (AnyAbout about : notification.getAbouts()) {
+ LOG.debug("Notification about {} defined: {}", about.getAnyType(), about.get());
+ }
+ }
if (notification.isActive()) {
String currentEvent = AuditLoggerName.buildEvent(type, category, subcategory, event, condition);
if (!notification.getEvents().contains(currentEvent)) {
- LOG.debug("No events found about {}", subject);
- } else if (subjectType == null || subject == null
- || (subjectType == SubjectType.USER && (notification.getUserAbout() == null
- || searchDAO.matches(subject,
- SearchCondConverter.convert(notification.getUserAbout()), subjectType)))
- || subjectType == SubjectType.GROUP && (notification.getGroupAbout() == null
- || searchDAO.matches(subject,
- SearchCondConverter.convert(notification.getGroupAbout()), subjectType))) {
+ LOG.debug("No events found about {}", any);
+ } else if (anyType == null || any == null
+ || notification.getAbout(anyType) == null
+ || searchDAO.matches(any,
+ SearchCondConverter.convert(notification.getAbout(anyType).get()), anyType.getKind())) {
- LOG.debug("Creating notification task for event {} about {}", currentEvent, subject);
+ LOG.debug("Creating notification task for event {} about {}", currentEvent, any);
final Map<String, Object> model = new HashMap<>();
model.put("type", type);
@@ -313,18 +318,16 @@ public class NotificationManagerImpl implements NotificationManager {
model.put("output", output);
model.put("input", input);
- if (subject instanceof User) {
- model.put("user", userDataBinder.getUserTO((User) subject));
- } else if (subject instanceof Group) {
- model.put("group", groupDataBinder.getGroupTO((Group) subject));
+ if (any instanceof User) {
+ model.put("user", userDataBinder.getUserTO((User) any));
+ } else if (any instanceof Group) {
+ model.put("group", groupDataBinder.getGroupTO((Group) any));
}
- taskDAO.save(getNotificationTask(notification, subject, model));
+ taskDAO.save(getNotificationTask(notification, any, model));
}
} else {
- LOG.debug("Notification {}, userAbout {}, groupAbout {} is deactivated, "
- + "notification task will not be created", notification.getKey(),
- notification.getUserAbout(), notification.getGroupAbout());
+ LOG.debug("Notification {} is not active, task will not be created", notification.getKey());
}
}
}
@@ -342,7 +345,7 @@ public class NotificationManagerImpl implements NotificationManager {
case UserPlainSchema:
UPlainAttr attr = user.getPlainAttr(recipientAttrName);
if (attr != null) {
- email = CollectionUtils2.getFirstOrNull(attr.getValuesAsStrings());
+ email = attr.getValuesAsStrings().isEmpty() ? null : attr.getValuesAsStrings().get(0);
}
break;
@@ -356,7 +359,7 @@ public class NotificationManagerImpl implements NotificationManager {
case UserVirtualSchema:
UVirAttr virAttr = user.getVirAttr(recipientAttrName);
if (virAttr != null) {
- email = CollectionUtils2.getFirstOrNull(virAttr.getValues());
+ email = virAttr.getValues().isEmpty() ? null : virAttr.getValues().get(0);
}
break;
@@ -402,7 +405,7 @@ public class NotificationManagerImpl implements NotificationManager {
protected Map<String, String> findAllSyncopeConfs() {
Map<String, String> syncopeConfMap = new HashMap<>();
- for (PlainAttr attr : confDAO.get().getPlainAttrs()) {
+ for (PlainAttr<?> attr : confDAO.get().getPlainAttrs()) {
syncopeConfMap.put(attr.getSchema().getKey(), attr.getValuesAsStrings().get(0));
}
return syncopeConfMap;
http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/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 6408987..5c89dbb 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
@@ -35,10 +35,7 @@ import org.apache.syncope.common.lib.types.TraceLevel;
import org.apache.syncope.core.persistence.api.dao.GroupDAO;
import org.apache.syncope.core.persistence.api.dao.TaskDAO;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
-import org.apache.syncope.core.persistence.api.entity.AttributableUtilsFactory;
import org.apache.syncope.core.persistence.api.entity.EntityFactory;
-import org.apache.syncope.core.persistence.api.entity.ExternalResource;
-import org.apache.syncope.core.persistence.api.entity.Subject;
import org.apache.syncope.core.persistence.api.entity.task.PropagationTask;
import org.apache.syncope.core.persistence.api.entity.task.TaskExec;
import org.apache.syncope.core.provisioning.api.Connector;
@@ -51,7 +48,12 @@ import org.apache.syncope.core.misc.AuditManager;
import org.apache.syncope.core.misc.spring.ApplicationContextProvider;
import org.apache.syncope.core.misc.ConnObjectUtils;
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.group.Group;
+import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
+import org.apache.syncope.core.persistence.api.entity.resource.Provision;
import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.provisioning.api.notification.NotificationManager;
import org.identityconnectors.framework.common.exceptions.ConnectorException;
@@ -88,6 +90,12 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
protected ConnObjectUtils connObjectUtils;
/**
+ * Any object DAO.
+ */
+ @Autowired
+ protected AnyObjectDAO anyObjectDAO;
+
+ /**
* User DAO.
*/
@Autowired
@@ -118,7 +126,7 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
protected AuditManager auditManager;
@Autowired
- protected AttributableUtilsFactory attrUtilsFactory;
+ protected AnyUtilsFactory anyUtilsFactory;
@Autowired
protected EntityFactory entityFactory;
@@ -232,40 +240,46 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
}
}
- protected Subject<?, ?, ?> getSubject(final PropagationTask task) {
- Subject<?, ?, ?> subject = null;
+ protected Any<?, ?, ?> getAny(final PropagationTask task) {
+ Any<?, ?, ?> any = null;
- if (task.getSubjectKey() != null) {
- switch (task.getSubjectType()) {
+ if (task.getAnyKey() != null) {
+ switch (task.getAnyTypeKind()) {
case USER:
try {
- subject = userDAO.authFetch(task.getSubjectKey());
+ any = userDAO.authFind(task.getAnyKey());
} catch (Exception e) {
- LOG.error("Could not read user {}", task.getSubjectKey(), e);
+ LOG.error("Could not read user {}", task.getAnyKey(), e);
}
break;
case GROUP:
try {
- subject = groupDAO.authFetch(task.getSubjectKey());
+ any = groupDAO.authFind(task.getAnyKey());
} catch (Exception e) {
- LOG.error("Could not read group {}", task.getSubjectKey(), e);
+ LOG.error("Could not read group {}", task.getAnyKey(), e);
}
break;
- case MEMBERSHIP:
+ case ANY_OBJECT:
default:
+ try {
+ any = anyObjectDAO.authFind(task.getAnyKey());
+ } catch (Exception e) {
+ LOG.error("Could not read any object {}", task.getAnyKey(), e);
+ }
+ break;
}
}
- return subject;
+ return any;
}
protected void delete(final PropagationTask task, final ConnectorObject beforeObj,
final Connector connector, final Set<String> propagationAttempted) {
if (beforeObj == null) {
- LOG.debug("{} not found on external resource: ignoring delete", task.getAccountId());
+ LOG.debug("{} not found on external resource: ignoring delete", task.getConnObjectKey());
} else {
/*
* We must choose here whether to
@@ -282,7 +296,7 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
* update, this user / group used to have the current resource assigned by more than one mean (for example,
* two different memberships with the same resource).
*/
- Subject<?, ?, ?> subject = getSubject(task);
+ Any<?, ?, ?> subject = getAny(task);
Collection<String> resources = subject instanceof User
? userDAO.findAllResourceNames((User) subject)
: subject instanceof Group
@@ -305,11 +319,11 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
@Override
public TaskExec execute(final PropagationTask task, final PropagationReporter reporter) {
- final List<PropagationActions> actions = getPropagationActions(task.getResource());
+ List<PropagationActions> actions = getPropagationActions(task.getResource());
- final Date startDate = new Date();
+ Date startDate = new Date();
- final TaskExec execution = entityFactory.newEntity(TaskExec.class);
+ TaskExec execution = entityFactory.newEntity(TaskExec.class);
execution.setStatus(PropagationTaskExecStatus.CREATED.name());
String taskExecutionMessage = null;
@@ -321,13 +335,21 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
ConnectorObject beforeObj = null;
ConnectorObject afterObj = null;
+ Provision provision = null;
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());
+ }
+
connector = connFactory.getConnector(task.getResource());
- // Try to read remote object (user / group) BEFORE any actual operation
- beforeObj = getRemoteObject(task, connector, false);
+ // Try to read remote object BEFORE any actual operation
+ beforeObj = getRemoteObject(task, connector, provision, false);
for (PropagationActions action : actions) {
action.before(task, beforeObj);
@@ -390,10 +412,10 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
action.onError(task, execution, e);
}
} finally {
- // Try to read remote object (user / group) AFTER any actual operation
+ // Try to read remote object AFTER any actual operation
if (connector != null) {
try {
- afterObj = getRemoteObject(task, connector, true);
+ afterObj = getRemoteObject(task, connector, provision, true);
} catch (Exception ignore) {
// ignore exception
LOG.error("Error retrieving after object", ignore);
@@ -434,7 +456,7 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
notificationManager.createTasks(
AuditElements.EventCategoryType.PROPAGATION,
- task.getSubjectType().name().toLowerCase(),
+ task.getAnyTypeKind().name().toLowerCase(),
task.getResource().getKey(),
task.getPropagationOperation().name().toLowerCase(),
result,
@@ -444,7 +466,7 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
auditManager.audit(
AuditElements.EventCategoryType.PROPAGATION,
- task.getSubjectType().name().toLowerCase(),
+ task.getAnyTypeKind().name().toLowerCase(),
task.getResource().getKey(),
task.getPropagationOperation().name().toLowerCase(),
result,
@@ -504,29 +526,30 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
*
* @param connector connector facade proxy.
* @param task current propagation task.
+ * @param provision provision
* @param latest 'FALSE' to retrieve object using old accountId if not null.
* @return remote connector object.
*/
protected ConnectorObject getRemoteObject(final PropagationTask task, final Connector connector,
- final boolean latest) {
+ final Provision provision, final boolean latest) {
- String accountId = latest || task.getOldAccountId() == null
- ? task.getAccountId()
- : task.getOldAccountId();
+ String connObjectKey = latest || task.getOldConnObjectKey() == null
+ ? task.getConnObjectKey()
+ : task.getOldConnObjectKey();
ConnectorObject obj = null;
try {
obj = connector.getObject(task.getPropagationMode(),
task.getPropagationOperation(),
new ObjectClass(task.getObjectClassName()),
- new Uid(accountId),
- connector.getOperationOptions(attrUtilsFactory.getInstance(task.getSubjectType()).
- getMappingItems(task.getResource(), MappingPurpose.PROPAGATION)));
+ new Uid(connObjectKey),
+ connector.getOperationOptions(anyUtilsFactory.getInstance(task.getAnyTypeKind()).
+ getMappingItems(provision, MappingPurpose.PROPAGATION)));
} catch (TimeoutException toe) {
LOG.debug("Request timeout", toe);
throw toe;
} catch (RuntimeException ignore) {
- LOG.debug("While resolving {}", accountId, ignore);
+ LOG.debug("While resolving {}", connObjectKey, ignore);
}
return obj;
http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java
index 1e75acb..6b4760b 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DBPasswordPropagationActions.java
@@ -22,7 +22,7 @@ import java.util.HashSet;
import java.util.Set;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
-import org.apache.syncope.common.lib.types.AttributableType;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.CipherAlgorithm;
import org.apache.syncope.common.lib.types.ConnConfProperty;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
@@ -56,8 +56,8 @@ public class DBPasswordPropagationActions extends DefaultPropagationActions {
public void before(final PropagationTask task, final ConnectorObject beforeObj) {
super.before(task, beforeObj);
- if (AttributableType.USER == task.getSubjectType()) {
- User user = userDAO.find(task.getSubjectKey());
+ if (AnyTypeKind.USER == task.getAnyTypeKind()) {
+ User user = userDAO.find(task.getAnyKey());
if (user != null && user.getPassword() != null) {
Attribute missing = AttributeUtil.find(
@@ -72,7 +72,7 @@ public class DBPasswordPropagationActions extends DefaultPropagationActions {
Attribute passwordAttribute = AttributeBuilder.buildPassword(
new GuardedString(user.getPassword().toCharArray()));
- Set<Attribute> attributes = new HashSet<Attribute>(task.getAttributes());
+ Set<Attribute> attributes = new HashSet<>(task.getAttributes());
attributes.add(passwordAttribute);
attributes.remove(missing);
http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/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 c246d8f..d01b5c5 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
@@ -25,12 +25,14 @@ import java.util.Set;
import org.apache.commons.jexl2.JexlContext;
import org.apache.commons.jexl2.MapContext;
import org.apache.commons.lang3.StringUtils;
-import org.apache.syncope.common.lib.types.AttributableType;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
import org.apache.syncope.core.persistence.api.entity.group.Group;
import org.apache.syncope.core.persistence.api.entity.task.PropagationTask;
import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.misc.jexl.JexlUtils;
+import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
+import org.apache.syncope.core.persistence.api.entity.resource.Provision;
import org.identityconnectors.framework.common.objects.Attribute;
import org.identityconnectors.framework.common.objects.AttributeBuilder;
import org.identityconnectors.framework.common.objects.AttributeUtil;
@@ -51,6 +53,9 @@ public class LDAPMembershipPropagationActions extends DefaultPropagationActions
protected static final Logger LOG = LoggerFactory.getLogger(LDAPMembershipPropagationActions.class);
@Autowired
+ protected AnyTypeDAO anyTypeDAO;
+
+ @Autowired
protected UserDAO userDAO;
/**
@@ -67,23 +72,24 @@ public class LDAPMembershipPropagationActions extends DefaultPropagationActions
public void before(final PropagationTask task, final ConnectorObject beforeObj) {
super.before(task, beforeObj);
- if (AttributableType.USER == task.getSubjectType() && task.getResource().getGmapping() != null) {
- User user = userDAO.find(task.getSubjectKey());
+ Provision provision = task.getResource().getProvision(anyTypeDAO.findGroup());
+ if (AnyTypeKind.USER == task.getAnyTypeKind() && provision.getMapping() != null) {
+ User user = userDAO.find(task.getAnyKey());
if (user != null) {
List<String> groupAccountLinks = new ArrayList<>();
for (Group group : userDAO.findAllGroups(user)) {
if (group.getResourceNames().contains(task.getResource().getKey())
- && StringUtils.isNotBlank(task.getResource().getGmapping().getAccountLink())) {
+ && StringUtils.isNotBlank(provision.getMapping().getConnObjectLink())) {
LOG.debug("Evaluating accountLink for {}", group);
- final JexlContext jexlContext = new MapContext();
+ JexlContext jexlContext = new MapContext();
JexlUtils.addFieldsToContext(group, jexlContext);
JexlUtils.addAttrsToContext(group.getPlainAttrs(), jexlContext);
JexlUtils.addDerAttrsToContext(group.getDerAttrs(), group.getPlainAttrs(), jexlContext);
- final String groupAccountLink =
- JexlUtils.evaluate(task.getResource().getGmapping().getAccountLink(), jexlContext);
+ String groupAccountLink =
+ JexlUtils.evaluate(provision.getMapping().getConnObjectLink(), jexlContext);
LOG.debug("AccountLink for {} is '{}'", group, groupAccountLink);
if (StringUtils.isNotBlank(groupAccountLink)) {
groupAccountLinks.add(groupAccountLink);
http://git-wip-us.apache.org/repos/asf/syncope/blob/081d9a04/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java
index 35358af..dca9084 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java
@@ -22,7 +22,7 @@ import java.util.HashSet;
import java.util.Set;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
-import org.apache.syncope.common.lib.types.AttributableType;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.CipherAlgorithm;
import org.apache.syncope.common.lib.types.ConnConfProperty;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
@@ -58,8 +58,8 @@ public class LDAPPasswordPropagationActions extends DefaultPropagationActions {
public void before(final PropagationTask task, final ConnectorObject beforeObj) {
super.before(task, beforeObj);
- if (AttributableType.USER == task.getSubjectType()) {
- User user = userDAO.find(task.getSubjectKey());
+ if (AnyTypeKind.USER == task.getAnyTypeKind()) {
+ User user = userDAO.find(task.getAnyKey());
if (user != null && user.getPassword() != null) {
Attribute missing = AttributeUtil.find(