You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2014/06/06 14:15:35 UTC
svn commit: r1600864 - in /syncope/trunk:
common/src/main/java/org/apache/syncope/common/to/
common/src/main/java/org/apache/syncope/common/types/
core/src/main/java/org/apache/syncope/core/init/
core/src/main/java/org/apache/syncope/core/persistence/b...
Author: fmartelli
Date: Fri Jun 6 12:15:34 2014
New Revision: 1600864
URL: http://svn.apache.org/r1600864
Log:
Fix for SYNCOPE-472
Added:
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushPolicy.java
- copied, changed from r1556257, syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/SyncPolicy.java
Removed:
syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSyncopeSyncResultHandler.java
Modified:
syncope/trunk/common/src/main/java/org/apache/syncope/common/to/PushTaskTO.java
syncope/trunk/common/src/main/java/org/apache/syncope/common/types/PolicyType.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/init/JobInstanceLoader.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/ExternalResource.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushTask.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/PolicyDAO.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/PolicyDAOImpl.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/services/TaskServiceImpl.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/DefaultPushActions.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/DefaultSyncActions.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/PushActions.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/SyncActions.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSyncJob.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSyncopeResultHandler.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/LDAPMembershipSyncActions.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/PushJob.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncJob.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncopePushResultHandler.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncopeSyncResultHandler.java
syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TaskTest.java
syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/relationships/TaskTest.java
syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java
syncope/trunk/core/src/test/java/org/apache/syncope/core/sync/TestSyncActions.java
Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/to/PushTaskTO.java
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/to/PushTaskTO.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/to/PushTaskTO.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/to/PushTaskTO.java Fri Jun 6 12:15:34 2014
@@ -27,4 +27,23 @@ public class PushTaskTO extends Abstract
private static final long serialVersionUID = -2143537546915809018L;
+ private String userFilter;
+
+ private String roleFilter;
+
+ public String getUserFilter() {
+ return userFilter;
+ }
+
+ public void setUserFilter(String filter) {
+ this.userFilter = filter;
+ }
+
+ public String getRoleFilter() {
+ return roleFilter;
+ }
+
+ public void setRoleFilter(String roleFilter) {
+ this.roleFilter = roleFilter;
+ }
}
Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/types/PolicyType.java
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/types/PolicyType.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/types/PolicyType.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/types/PolicyType.java Fri Jun 6 12:15:34 2014
@@ -29,18 +29,21 @@ public enum PolicyType {
*/
ACCOUNT("Account Policy"),
GLOBAL_ACCOUNT("Account Global Policy"),
-
/**
* Password policy regarding password syntax.
*/
PASSWORD("Password Policy"),
GLOBAL_PASSWORD("Password Global Policy"),
-
/**
* SYNC policy regarding account conflicts resolution.
*/
SYNC("Synchronization Policy"),
- GLOBAL_SYNC("Synchronization Global Policy");
+ GLOBAL_SYNC("Synchronization Global Policy"),
+ /**
+ * PUSH policy regarding account conflicts resolution.
+ */
+ PUSH("Push Policy"),
+ GLOBAL_PUSH("Push Global Policy");
private String description;
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/init/JobInstanceLoader.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/init/JobInstanceLoader.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/init/JobInstanceLoader.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/init/JobInstanceLoader.java Fri Jun 6 12:15:34 2014
@@ -25,6 +25,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.core.notification.NotificationJob;
+import org.apache.syncope.core.persistence.beans.AbstractSyncTask;
import org.apache.syncope.core.persistence.beans.PushTask;
import org.apache.syncope.core.persistence.beans.Report;
import org.apache.syncope.core.persistence.beans.SchedTask;
@@ -36,12 +37,10 @@ import org.apache.syncope.core.persisten
import org.apache.syncope.core.persistence.dao.TaskDAO;
import org.apache.syncope.core.quartz.TaskJob;
import org.apache.syncope.core.report.ReportJob;
+import org.apache.syncope.core.sync.AbstractSyncActions;
import org.apache.syncope.core.sync.DefaultPushActions;
import org.apache.syncope.core.sync.DefaultSyncActions;
-import org.apache.syncope.core.sync.PushActions;
-import org.apache.syncope.core.sync.SyncActions;
-import org.apache.syncope.core.sync.impl.PushJob;
-import org.apache.syncope.core.sync.impl.SyncJob;
+import org.apache.syncope.core.sync.impl.AbstractSyncJob;
import org.apache.syncope.core.util.ApplicationContextProvider;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
@@ -159,45 +158,48 @@ public class JobInstanceLoader {
}
}
+ @SuppressWarnings("unchecked")
public void registerJob(final Task task, final String jobClassName, final String cronExpression)
throws ClassNotFoundException, SchedulerException, ParseException {
- Class<?> jobClass = Class.forName(jobClassName);
+ final Class<?> jobClass = Class.forName(jobClassName);
Job jobInstance = (Job) ApplicationContextProvider.getBeanFactory().
createBean(jobClass, AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false);
if (jobInstance instanceof TaskJob) {
((TaskJob) jobInstance).setTaskId(task.getId());
}
- if (jobInstance instanceof SyncJob && task instanceof SyncTask) {
- String jobActionsClassName = ((SyncTask) task).getActionsClassName();
- Class<?> syncActionsClass = DefaultSyncActions.class;
- if (StringUtils.isNotBlank(jobActionsClassName)) {
- try {
- syncActionsClass = Class.forName(jobActionsClassName);
- } catch (Exception e) {
- LOG.error("Class {} not found, reverting to {}", jobActionsClassName,
- syncActionsClass.getName(), e);
- }
- }
- SyncActions syncActions = (SyncActions) ApplicationContextProvider.getBeanFactory().
- createBean(syncActionsClass, AbstractBeanDefinition.AUTOWIRE_BY_TYPE, true);
- ((SyncJob) jobInstance).setActions(syncActions);
- } else if (jobInstance instanceof PushJob && task instanceof PushTask) {
- String jobActionsClassName = ((PushTask) task).getActionsClassName();
- Class<?> syncActionsClass = DefaultPushActions.class;
- if (StringUtils.isNotBlank(jobActionsClassName)) {
+ // In case of synchronization job/task retrieve and set synchronization actions:
+ // actions cannot be changed at runtime but connector and synchronization policies (reloaded at execution time).
+ if (jobInstance instanceof AbstractSyncJob && task instanceof AbstractSyncTask) {
+ final String jobActionsClassName = ((AbstractSyncTask) task).getActionsClassName();
+
+ try {
+
+ Class<?> syncActionsClass = Class.forName(jobActionsClassName);
+
+ final AbstractSyncActions<?> syncActions =
+ (AbstractSyncActions<?>) ApplicationContextProvider.getBeanFactory().
+ createBean(syncActionsClass, AbstractBeanDefinition.AUTOWIRE_BY_TYPE, true);
+
+ // Assume that syncActions object implements the right interface:
+ // * SyncActions for a SyncJob;
+ // * PushActions for a PushJob.
+ ((AbstractSyncJob) jobInstance).setActions(syncActions);
+
+ } catch (Exception e) {
+ final Class<? extends AbstractSyncActions<?>> defaultSyncActions =
+ task instanceof SyncTask ? DefaultSyncActions.class : DefaultPushActions.class;
+
+ LOG.info("Class '{}' not found, reverting to {}", jobActionsClassName, defaultSyncActions.getName());
+
try {
- syncActionsClass = Class.forName(jobActionsClassName);
- } catch (Exception e) {
- LOG.error("Class {} not found, reverting to {}", jobActionsClassName,
- syncActionsClass.getName(), e);
+ ((AbstractSyncJob) jobInstance).setActions(defaultSyncActions.newInstance());
+ } catch (Exception ie) {
+ // Shouldn't happen, BTW ...
+ LOG.error("Default action class {} instantiation failed", defaultSyncActions.getName(), ie);
}
}
- PushActions pushActions = (PushActions) ApplicationContextProvider.getBeanFactory().
- createBean(syncActionsClass, AbstractBeanDefinition.AUTOWIRE_BY_TYPE, true);
-
- ((PushJob) jobInstance).setActions(pushActions);
}
registerJob(getJobName(task), jobInstance, cronExpression);
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/ExternalResource.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/ExternalResource.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/ExternalResource.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/ExternalResource.java Fri Jun 6 12:15:34 2014
@@ -141,6 +141,9 @@ public class ExternalResource extends Ab
@ManyToOne(fetch = FetchType.EAGER, optional = true)
private SyncPolicy syncPolicy;
+ @ManyToOne(fetch = FetchType.EAGER, optional = true)
+ private PushPolicy pushPolicy;
+
/**
* Configuration properties that are overridden from the connector instance.
*/
@@ -312,6 +315,14 @@ public class ExternalResource extends Ab
this.syncPolicy = syncPolicy;
}
+ public PushPolicy getPushPolicy() {
+ return pushPolicy;
+ }
+
+ public void setPushPolicy(PushPolicy pushPolicy) {
+ this.pushPolicy = pushPolicy;
+ }
+
public Set<ConnConfProperty> getConnInstanceConfiguration() {
Set<ConnConfProperty> result = null;
if (StringUtils.isNotBlank(xmlConfiguration)) {
Copied: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushPolicy.java (from r1556257, syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/SyncPolicy.java)
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushPolicy.java?p2=syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushPolicy.java&p1=syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/SyncPolicy.java&r1=1556257&r2=1600864&rev=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/SyncPolicy.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushPolicy.java Fri Jun 6 12:15:34 2014
@@ -22,15 +22,15 @@ import javax.persistence.Entity;
import org.apache.syncope.common.types.PolicyType;
@Entity
-public class SyncPolicy extends Policy {
+public class PushPolicy extends Policy {
private static final long serialVersionUID = -6090413855809521279L;
- public SyncPolicy() {
+ public PushPolicy() {
this(false);
}
- public SyncPolicy(boolean global) {
+ public PushPolicy(boolean global) {
super();
this.type = global
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushTask.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushTask.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushTask.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/PushTask.java Fri Jun 6 12:15:34 2014
@@ -25,10 +25,30 @@ public class PushTask extends AbstractSy
private static final long serialVersionUID = -4141057723006682564L;
+ private String userFilter;
+
+ private String roleFilter;
+
/**
* Default constructor.
*/
public PushTask() {
super("org.apache.syncope.core.sync.impl.PushJob");
}
+
+ public String getUserFilter() {
+ return userFilter;
+ }
+
+ public void setUserFilter(final String filter) {
+ this.userFilter = filter;
+ }
+
+ public String getRoleFilter() {
+ return roleFilter;
+ }
+
+ public void setRoleFilter(String roleFilter) {
+ this.roleFilter = roleFilter;
+ }
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/PolicyDAO.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/PolicyDAO.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/PolicyDAO.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/PolicyDAO.java Fri Jun 6 12:15:34 2014
@@ -24,6 +24,7 @@ import org.apache.syncope.common.types.P
import org.apache.syncope.core.persistence.beans.AccountPolicy;
import org.apache.syncope.core.persistence.beans.PasswordPolicy;
import org.apache.syncope.core.persistence.beans.Policy;
+import org.apache.syncope.core.persistence.beans.PushPolicy;
import org.apache.syncope.core.persistence.beans.SyncPolicy;
public interface PolicyDAO extends DAO {
@@ -38,6 +39,8 @@ public interface PolicyDAO extends DAO {
SyncPolicy getGlobalSyncPolicy();
+ PushPolicy getGlobalPushPolicy();
+
List<Policy> findAll();
<T extends Policy> T save(T policy);
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/PolicyDAOImpl.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/PolicyDAOImpl.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/PolicyDAOImpl.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/PolicyDAOImpl.java Fri Jun 6 12:15:34 2014
@@ -25,6 +25,7 @@ import org.apache.syncope.common.types.P
import org.apache.syncope.core.persistence.beans.AccountPolicy;
import org.apache.syncope.core.persistence.beans.PasswordPolicy;
import org.apache.syncope.core.persistence.beans.Policy;
+import org.apache.syncope.core.persistence.beans.PushPolicy;
import org.apache.syncope.core.persistence.beans.SyncPolicy;
import org.apache.syncope.core.persistence.dao.PolicyDAO;
import org.apache.syncope.core.persistence.validation.entity.InvalidEntityException;
@@ -72,6 +73,14 @@ public class PolicyDAOImpl extends Abstr
}
@Override
+ public PushPolicy getGlobalPushPolicy() {
+ List<? extends Policy> policies = find(PolicyType.GLOBAL_PUSH);
+ return policies == null || policies.isEmpty()
+ ? null
+ : (PushPolicy) policies.get(0);
+ }
+
+ @Override
public List<Policy> findAll() {
TypedQuery<Policy> query = entityManager.createQuery("SELECT e FROM Policy e", Policy.class);
return query.getResultList();
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java Fri Jun 6 12:15:34 2014
@@ -34,11 +34,13 @@ import org.apache.syncope.common.types.T
import org.apache.syncope.common.util.BeanUtils;
import org.apache.syncope.common.SyncopeClientException;
import org.apache.syncope.common.to.AbstractSyncTaskTO;
+import org.apache.syncope.common.to.PushTaskTO;
import org.apache.syncope.core.init.JobInstanceLoader;
import org.apache.syncope.core.persistence.beans.AbstractSyncTask;
import org.apache.syncope.core.persistence.beans.ExternalResource;
import org.apache.syncope.core.persistence.beans.NotificationTask;
import org.apache.syncope.core.persistence.beans.PropagationTask;
+import org.apache.syncope.core.persistence.beans.PushTask;
import org.apache.syncope.core.persistence.beans.SchedTask;
import org.apache.syncope.core.persistence.beans.SyncTask;
import org.apache.syncope.core.persistence.beans.Task;
@@ -96,7 +98,13 @@ public class TaskDataBinder {
private void fill(final AbstractSyncTask task, final AbstractSyncTaskTO taskTO) {
SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidSyncTask);
- if (task instanceof SyncTask && taskTO instanceof SyncTaskTO) {
+ if (task instanceof PushTask && taskTO instanceof PushTaskTO) {
+ final PushTask pushTask = (PushTask) task;
+ final PushTaskTO pushTaskTO = (PushTaskTO) taskTO;
+
+ pushTask.setUserFilter(pushTaskTO.getUserFilter());
+
+ } else if (task instanceof SyncTask && taskTO instanceof SyncTaskTO) {
final SyncTask syncTask = (SyncTask) task;
final SyncTaskTO syncTaskTO = (SyncTaskTO) taskTO;
@@ -170,7 +178,7 @@ public class TaskDataBinder {
if (resource == null) {
throw new NotFoundException("Resource " + syncTaskTO.getResource());
}
- ((SyncTask) task).setResource(resource);
+ ((AbstractSyncTask) task).setResource(resource);
fill((AbstractSyncTask) task, syncTaskTO);
}
@@ -287,6 +295,16 @@ public class TaskDataBinder {
((SyncTaskTO) taskTO).setDescription(((SyncTask) task).getDescription());
((SyncTaskTO) taskTO).setResource(((SyncTask) task).getResource().getName());
break;
+ case PUSH:
+ if (!(task instanceof PushTask)) {
+ throw new ClassCastException("taskUtil is type Push but task is not PushTask: "
+ + task.getClass().getName());
+ }
+ setExecTime((SchedTaskTO) taskTO, task);
+ ((PushTaskTO) taskTO).setName(((PushTask) task).getName());
+ ((PushTaskTO) taskTO).setDescription(((PushTask) task).getDescription());
+ ((PushTaskTO) taskTO).setResource(((PushTask) task).getResource().getName());
+ break;
case NOTIFICATION:
if (((NotificationTask) task).isExecuted() && StringUtils.isBlank(taskTO.getLatestExecStatus())) {
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/services/TaskServiceImpl.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/services/TaskServiceImpl.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/services/TaskServiceImpl.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/services/TaskServiceImpl.java Fri Jun 6 12:15:34 2014
@@ -33,6 +33,7 @@ import org.apache.syncope.common.to.Sync
import org.apache.syncope.common.to.TaskExecTO;
import org.apache.syncope.common.to.AbstractTaskTO;
import org.apache.syncope.common.reqres.PagedResult;
+import org.apache.syncope.common.to.PushTaskTO;
import org.apache.syncope.common.types.RESTHeaders;
import org.apache.syncope.common.types.PropagationTaskExecStatus;
import org.apache.syncope.common.types.TaskType;
@@ -52,7 +53,7 @@ public class TaskServiceImpl extends Abs
@Override
public <T extends SchedTaskTO> Response create(final T taskTO) {
T createdTask;
- if (taskTO instanceof SyncTaskTO || taskTO instanceof SchedTaskTO) {
+ if (taskTO instanceof SyncTaskTO || taskTO instanceof PushTaskTO || taskTO instanceof SchedTaskTO) {
createdTask = controller.createSchedTask(taskTO);
} else {
throw new BadRequestException();
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/DefaultPushActions.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/DefaultPushActions.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/DefaultPushActions.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/DefaultPushActions.java Fri Jun 6 12:15:34 2014
@@ -33,36 +33,37 @@ import org.quartz.JobExecutionException;
public class DefaultPushActions implements PushActions {
@Override
- public void beforeAll(final AbstractSyncopeResultHandler handler) throws JobExecutionException {
+ public void beforeAll(final AbstractSyncopeResultHandler<?, ?> handler) throws JobExecutionException {
}
@Override
public <T extends AbstractAttributable> Map.Entry<String, Set<Attribute>> beforeCreate(
- final AbstractSyncopeResultHandler handler,
- final T subject,
- final Map.Entry<String, Set<Attribute>> delta) throws JobExecutionException {
+ final AbstractSyncopeResultHandler<?, ?> handler,
+ final Map.Entry<String, Set<Attribute>> delta,
+ final T subject) throws JobExecutionException {
return delta;
}
@Override
public <T extends AbstractAttributable> Map.Entry<String, Set<Attribute>> beforeUpdate(
- final AbstractSyncopeResultHandler handler,
- final T subject,
- final Map.Entry<String, Set<Attribute>> delta) throws JobExecutionException {
+ final AbstractSyncopeResultHandler<?, ?> handler,
+ final Map.Entry<String, Set<Attribute>> delta,
+ final T subject) throws JobExecutionException {
return delta;
}
@Override
public <T extends AbstractAttributable> void after(
- final AbstractSyncopeResultHandler handler,
+ final AbstractSyncopeResultHandler<?, ?> handler,
+ final Map.Entry<String, Set<Attribute>> delta,
final T subject,
- final Map.Entry<String, Set<Attribute>> delta, SyncResult result) throws JobExecutionException {
+ SyncResult result) throws JobExecutionException {
}
@Override
public void afterAll(
- final AbstractSyncopeResultHandler handler,
+ final AbstractSyncopeResultHandler<?, ?> handler,
final List<SyncResult> results)
throws JobExecutionException {
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/DefaultSyncActions.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/DefaultSyncActions.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/DefaultSyncActions.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/DefaultSyncActions.java Fri Jun 6 12:15:34 2014
@@ -22,7 +22,7 @@ import java.util.List;
import org.apache.syncope.common.mod.AbstractAttributableMod;
import org.apache.syncope.common.to.AbstractAttributableTO;
-import org.apache.syncope.core.sync.impl.AbstractSyncopeSyncResultHandler;
+import org.apache.syncope.core.sync.impl.AbstractSyncopeResultHandler;
import org.identityconnectors.framework.common.objects.SyncDelta;
import org.quartz.JobExecutionException;
@@ -32,12 +32,12 @@ import org.quartz.JobExecutionException;
public class DefaultSyncActions implements SyncActions {
@Override
- public void beforeAll(final AbstractSyncopeSyncResultHandler handler) throws JobExecutionException {
+ public void beforeAll(final AbstractSyncopeResultHandler<?, ?> handler) throws JobExecutionException {
}
@Override
public <T extends AbstractAttributableTO> SyncDelta beforeCreate(
- final AbstractSyncopeSyncResultHandler handler,
+ final AbstractSyncopeResultHandler<?, ?> handler,
final SyncDelta delta,
final T subject) throws JobExecutionException {
@@ -46,7 +46,7 @@ public class DefaultSyncActions implemen
@Override
public <T extends AbstractAttributableTO, K extends AbstractAttributableMod> SyncDelta beforeUpdate(
- final AbstractSyncopeSyncResultHandler handler,
+ final AbstractSyncopeResultHandler<?, ?> handler,
final SyncDelta delta,
final T subject,
final K subjectMod)
@@ -57,7 +57,7 @@ public class DefaultSyncActions implemen
@Override
public <T extends AbstractAttributableTO> SyncDelta beforeDelete(
- final AbstractSyncopeSyncResultHandler handler,
+ final AbstractSyncopeResultHandler<?, ?> handler,
final SyncDelta delta,
final T subject) throws JobExecutionException {
@@ -66,7 +66,7 @@ public class DefaultSyncActions implemen
@Override
public <T extends AbstractAttributableTO> void after(
- final AbstractSyncopeSyncResultHandler handler,
+ final AbstractSyncopeResultHandler<?, ?> handler,
final SyncDelta delta,
final T subject,
final SyncResult result) throws JobExecutionException {
@@ -74,7 +74,7 @@ public class DefaultSyncActions implemen
@Override
public void afterAll(
- final AbstractSyncopeSyncResultHandler handler,
+ final AbstractSyncopeResultHandler<?, ?> handler,
final List<SyncResult> results)
throws JobExecutionException {
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/PushActions.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/PushActions.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/PushActions.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/PushActions.java Fri Jun 6 12:15:34 2014
@@ -28,48 +28,48 @@ import org.quartz.JobExecutionException;
/**
* Interface for actions to be performed during PushJob execution.
*/
-public interface PushActions extends AbstractSyncActions<AbstractSyncopeResultHandler> {
+public interface PushActions extends AbstractSyncActions<AbstractSyncopeResultHandler<?, ?>> {
/**
* Action to be executed before to create a synchronized user locally.
*
* @param handler synchronization handler being executed.
- * @param subject user / role to be created
- * @param delta info to be pushed out (accountId, attributes)
+ * @param delta info to be pushed out (accountId, attributes).
+ * @param subject user / role to be created.
* @return info to be pushed out (accountId, attributes).
* @throws JobExecutionException in case of generic failure
*/
<T extends AbstractAttributable> Map.Entry<String, Set<Attribute>> beforeCreate(
- final AbstractSyncopeResultHandler handler,
- final T subject,
- final Map.Entry<String, Set<Attribute>> delta) throws JobExecutionException;
+ final AbstractSyncopeResultHandler<?, ?> handler,
+ final Map.Entry<String, Set<Attribute>> delta,
+ final T subject) throws JobExecutionException;
/**
* Action to be executed before to update a synchronized user locally.
*
* @param handler synchronization handler being executed.
- * @param subject user / role to be created
- * @param delta info to be pushed out (accountId, attributes)
+ * @param delta info to be pushed out (accountId, attributes).
+ * @param subject user / role to be updated.
* @return info to be pushed out (accountId, attributes).
* @throws JobExecutionException in case of generic failure
*/
<T extends AbstractAttributable> Map.Entry<String, Set<Attribute>> beforeUpdate(
- final AbstractSyncopeResultHandler handler,
- final T subject,
- final Map.Entry<String, Set<Attribute>> delta) throws JobExecutionException;
+ final AbstractSyncopeResultHandler<?, ?> handler,
+ final Map.Entry<String, Set<Attribute>> delta,
+ final T subject) throws JobExecutionException;
/**
* Action to be executed after each local user synchronization.
*
* @param handler synchronization handler being executed.
- * @param subject user / role to be created
* @param delta info pushed out (accountId, attributes)
+ * @param subject synchronized user / role.
* @param result operation result.
* @throws JobExecutionException in case of generic failure
*/
<T extends AbstractAttributable> void after(
- final AbstractSyncopeResultHandler handler,
- final T subject,
+ final AbstractSyncopeResultHandler<?, ?> handler,
final Map.Entry<String, Set<Attribute>> delta,
+ final T subject,
final SyncResult result) throws JobExecutionException;
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/SyncActions.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/SyncActions.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/SyncActions.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/SyncActions.java Fri Jun 6 12:15:34 2014
@@ -20,14 +20,14 @@ package org.apache.syncope.core.sync;
import org.apache.syncope.common.mod.AbstractAttributableMod;
import org.apache.syncope.common.to.AbstractAttributableTO;
-import org.apache.syncope.core.sync.impl.AbstractSyncopeSyncResultHandler;
+import org.apache.syncope.core.sync.impl.AbstractSyncopeResultHandler;
import org.identityconnectors.framework.common.objects.SyncDelta;
import org.quartz.JobExecutionException;
/**
* Interface for actions to be performed during SyncJob execution.
*/
-public interface SyncActions extends AbstractSyncActions<AbstractSyncopeSyncResultHandler> {
+public interface SyncActions extends AbstractSyncActions<AbstractSyncopeResultHandler<?, ?>> {
/**
* Action to be executed before to create a synchronized user locally.
@@ -39,7 +39,7 @@ public interface SyncActions extends Abs
* @throws JobExecutionException in case of generic failure
*/
<T extends AbstractAttributableTO> SyncDelta beforeCreate(
- final AbstractSyncopeSyncResultHandler handler,
+ final AbstractSyncopeResultHandler<?, ?> handler,
final SyncDelta delta,
final T subject) throws JobExecutionException;
@@ -54,7 +54,7 @@ public interface SyncActions extends Abs
* @throws JobExecutionException in case of generic failure.
*/
<T extends AbstractAttributableTO, K extends AbstractAttributableMod> SyncDelta beforeUpdate(
- final AbstractSyncopeSyncResultHandler handler,
+ final AbstractSyncopeResultHandler<?, ?> handler,
final SyncDelta delta,
final T subject,
final K subjectMod)
@@ -65,12 +65,12 @@ public interface SyncActions extends Abs
*
* @param handler synchronization handler being executed.
* @param delta retrieved synchronization information
- * @param subject lcao user / role to be deleted
+ * @param subject local user / role to be deleted
* @return synchronization information used for logging and to be passed to the 'after' method.
* @throws JobExecutionException in case of generic failure
*/
<T extends AbstractAttributableTO> SyncDelta beforeDelete(
- final AbstractSyncopeSyncResultHandler handler,
+ final AbstractSyncopeResultHandler<?, ?> handler,
final SyncDelta delta,
final T subject) throws JobExecutionException;
@@ -84,7 +84,8 @@ public interface SyncActions extends Abs
* @throws JobExecutionException in case of generic failure
*/
<T extends AbstractAttributableTO> void after(
- final AbstractSyncopeSyncResultHandler handler,
+ final AbstractSyncopeResultHandler<?, ?> handler,
final SyncDelta delta,
- final T subject, final SyncResult result) throws JobExecutionException;
+ final T subject,
+ final SyncResult result) throws JobExecutionException;
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSyncJob.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSyncJob.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSyncJob.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSyncJob.java Fri Jun 6 12:15:34 2014
@@ -18,16 +18,24 @@
*/
package org.apache.syncope.core.sync.impl;
+import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;
+import org.apache.syncope.common.types.SyncPolicySpec;
import org.apache.syncope.common.types.TraceLevel;
import org.apache.syncope.core.persistence.beans.AbstractSyncTask;
import org.apache.syncope.core.persistence.beans.Entitlement;
+import org.apache.syncope.core.persistence.beans.PushPolicy;
import org.apache.syncope.core.persistence.beans.PushTask;
+import org.apache.syncope.core.persistence.beans.SyncPolicy;
import org.apache.syncope.core.persistence.beans.SyncTask;
import org.apache.syncope.core.persistence.beans.TaskExec;
+import org.apache.syncope.core.persistence.beans.role.RMapping;
+import org.apache.syncope.core.persistence.beans.user.UMapping;
import org.apache.syncope.core.persistence.dao.EntitlementDAO;
+import org.apache.syncope.core.persistence.dao.PolicyDAO;
import org.apache.syncope.core.persistence.dao.ResourceDAO;
+import org.apache.syncope.core.propagation.Connector;
import org.apache.syncope.core.propagation.ConnectorFactory;
import org.apache.syncope.core.quartz.AbstractTaskJob;
import org.apache.syncope.core.sync.AbstractSyncActions;
@@ -48,7 +56,7 @@ import org.springframework.security.core
* @see SyncTask
* @see PushTask
*/
-public abstract class AbstractSyncJob<H extends AbstractSyncopeResultHandler, A extends AbstractSyncActions<?>>
+public abstract class AbstractSyncJob<T extends AbstractSyncTask, A extends AbstractSyncActions<?>>
extends AbstractTaskJob {
/**
@@ -70,6 +78,12 @@ public abstract class AbstractSyncJob<H
protected EntitlementDAO entitlementDAO;
/**
+ * Policy DAO.
+ */
+ @Autowired
+ protected PolicyDAO policyDAO;
+
+ /**
* SyncJob actions.
*/
protected A actions;
@@ -292,14 +306,57 @@ public abstract class AbstractSyncJob<H
new UsernamePasswordAuthenticationToken(userDetails, "FAKE_PASSWORD", authorities));
try {
- return executeWithSecurityContext(dryRun);
+ final Class<T> clazz = getTaskClassReference();
+ if (!clazz.isAssignableFrom(task.getClass())) {
+ throw new JobExecutionException("Task " + taskId + " isn't a SyncTask");
+ }
+
+ final T syncTask = clazz.cast(this.task);
+
+ final Connector connector;
+ try {
+ connector = connFactory.getConnector(syncTask.getResource());
+ } catch (Exception e) {
+ final String msg = String.
+ format("Connector instance bean for resource %s and connInstance %s not found",
+ syncTask.getResource(), syncTask.getResource().getConnector());
+
+ throw new JobExecutionException(msg, e);
+ }
+
+ final UMapping uMapping = syncTask.getResource().getUmapping();
+ if (uMapping != null && uMapping.getAccountIdItem() == null) {
+ throw new JobExecutionException("Invalid user account id mapping for resource " + syncTask.getResource());
+ }
+ final RMapping rMapping = syncTask.getResource().getRmapping();
+ if (rMapping != null && rMapping.getAccountIdItem() == null) {
+ throw new JobExecutionException("Invalid role account id mapping for resource " + syncTask.getResource());
+ }
+ if (uMapping == null && rMapping == null) {
+ return "No mapping configured for both users and roles: aborting...";
+ }
+
+ return executeWithSecurityContext(
+ syncTask,
+ getSyncPolicySpec(syncTask),
+ connector,
+ uMapping,
+ rMapping,
+ dryRun);
+
} finally {
// POST: clean up the SecurityContextHolder
SecurityContextHolder.clearContext();
}
}
- protected abstract String executeWithSecurityContext(final boolean dryRun) throws JobExecutionException;
+ protected abstract String executeWithSecurityContext(
+ final T task,
+ final SyncPolicySpec syncPolicySpec,
+ final Connector connector,
+ final UMapping uMapping,
+ final RMapping rMapping,
+ final boolean dryRun) throws JobExecutionException;
@Override
protected boolean hasToBeRegistered(final TaskExec execution) {
@@ -310,4 +367,32 @@ public abstract class AbstractSyncJob<H
&& syncTask.getResource().getSyncTraceLevel().ordinal() >= TraceLevel.FAILURES.ordinal())
|| syncTask.getResource().getSyncTraceLevel().ordinal() >= TraceLevel.SUMMARY.ordinal();
}
+
+ private SyncPolicySpec getSyncPolicySpec(final AbstractSyncTask syncTask) {
+ SyncPolicySpec syncPolicySpec;
+
+ if (syncTask instanceof SyncTask) {
+ final SyncPolicy syncPolicy = syncTask.getResource().getSyncPolicy() == null
+ ? policyDAO.getGlobalSyncPolicy()
+ : syncTask.getResource().getSyncPolicy();
+
+ syncPolicySpec = syncPolicy == null ? null : (SyncPolicySpec) syncPolicy.getSpecification();
+ } else if (syncTask instanceof PushTask) {
+ final PushPolicy pushPolicy = syncTask.getResource().getPushPolicy() == null
+ ? policyDAO.getGlobalPushPolicy()
+ : syncTask.getResource().getPushPolicy();
+
+ syncPolicySpec = pushPolicy == null ? null : (SyncPolicySpec) pushPolicy.getSpecification();
+ } else {
+ syncPolicySpec = null;
+ }
+
+ // step required because the call <policy>.getSpecification() could return a null value
+ return syncPolicySpec == null ? new SyncPolicySpec() : syncPolicySpec;
+ }
+
+ @SuppressWarnings("unchecked")
+ private Class<T> getTaskClassReference() {
+ return (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
+ }
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSyncopeResultHandler.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSyncopeResultHandler.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSyncopeResultHandler.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/AbstractSyncopeResultHandler.java Fri Jun 6 12:15:34 2014
@@ -20,12 +20,20 @@ package org.apache.syncope.core.sync.imp
import java.util.Collection;
import org.apache.syncope.common.types.ConflictResolutionAction;
+import org.apache.syncope.core.audit.AuditManager;
+import org.apache.syncope.core.connid.ConnObjectUtil;
+import org.apache.syncope.core.notification.NotificationManager;
+import org.apache.syncope.core.persistence.beans.AbstractSyncTask;
import org.apache.syncope.core.propagation.Connector;
+import org.apache.syncope.core.rest.data.RoleDataBinder;
+import org.apache.syncope.core.rest.data.UserDataBinder;
+import org.apache.syncope.core.sync.AbstractSyncActions;
import org.apache.syncope.core.sync.SyncResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
-public abstract class AbstractSyncopeResultHandler {
+public abstract class AbstractSyncopeResultHandler<T extends AbstractSyncTask, A extends AbstractSyncActions<?>> {
/**
* Logger.
@@ -33,6 +41,36 @@ public abstract class AbstractSyncopeRes
protected static final Logger LOG = LoggerFactory.getLogger(AbstractSyncopeResultHandler.class);
/**
+ * User data binder.
+ */
+ @Autowired
+ protected UserDataBinder userDataBinder;
+
+ /**
+ * Role data binder.
+ */
+ @Autowired
+ protected RoleDataBinder roleDataBinder;
+
+ /**
+ * ConnectorObject util.
+ */
+ @Autowired
+ protected ConnObjectUtil connObjectUtil;
+
+ /**
+ * Notification Manager.
+ */
+ @Autowired
+ protected NotificationManager notificationManager;
+
+ /**
+ * Audit Manager.
+ */
+ @Autowired
+ protected AuditManager auditManager;
+
+ /**
* Syncing connector.
*/
protected Connector connector;
@@ -43,6 +81,26 @@ public abstract class AbstractSyncopeRes
protected ConflictResolutionAction resAct;
+ protected A actions;
+
+ protected T syncTask;
+
+ public A getActions() {
+ return actions;
+ }
+
+ public void setActions(A actions) {
+ this.actions = actions;
+ }
+
+ public T getSyncTask() {
+ return syncTask;
+ }
+
+ public void setSyncTask(T syncTask) {
+ this.syncTask = syncTask;
+ }
+
public Connector getConnector() {
return connector;
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/LDAPMembershipSyncActions.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/LDAPMembershipSyncActions.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/LDAPMembershipSyncActions.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/LDAPMembershipSyncActions.java Fri Jun 6 12:15:34 2014
@@ -121,8 +121,10 @@ public class LDAPMembershipSyncActions e
@Transactional(readOnly = true)
@Override
public <T extends AbstractAttributableTO, K extends AbstractAttributableMod> SyncDelta beforeUpdate(
- final AbstractSyncopeSyncResultHandler handler, final SyncDelta delta, final T subject, final K subjectMod)
- throws JobExecutionException {
+ final AbstractSyncopeResultHandler<?, ?> handler,
+ final SyncDelta delta,
+ final T subject,
+ final K subjectMod) throws JobExecutionException {
if (subject instanceof RoleTO) {
// search for all users assigned to given role
@@ -283,7 +285,7 @@ public class LDAPMembershipSyncActions e
*/
@Override
public <T extends AbstractAttributableTO> void after(
- final AbstractSyncopeSyncResultHandler handler,
+ final AbstractSyncopeResultHandler<?, ?> handler,
final SyncDelta delta,
final T subject,
final SyncResult result) throws JobExecutionException {
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/PushJob.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/PushJob.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/PushJob.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/PushJob.java Fri Jun 6 12:15:34 2014
@@ -19,19 +19,27 @@
package org.apache.syncope.core.sync.impl;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Set;
+import org.apache.commons.lang.StringUtils;
+import org.apache.syncope.common.types.AttributableType;
+import org.apache.syncope.common.types.SyncPolicySpec;
import org.apache.syncope.core.persistence.beans.PushTask;
import org.apache.syncope.core.persistence.beans.role.RMapping;
import org.apache.syncope.core.persistence.beans.role.SyncopeRole;
import org.apache.syncope.core.persistence.beans.user.SyncopeUser;
import org.apache.syncope.core.persistence.beans.user.UMapping;
+import org.apache.syncope.core.persistence.dao.AttributableSearchDAO;
import org.apache.syncope.core.persistence.dao.RoleDAO;
import org.apache.syncope.core.persistence.dao.UserDAO;
+import org.apache.syncope.core.persistence.dao.search.OrderByClause;
import org.apache.syncope.core.propagation.Connector;
+import org.apache.syncope.core.rest.data.SearchCondConverter;
import org.apache.syncope.core.sync.PushActions;
import org.apache.syncope.core.sync.SyncResult;
import org.apache.syncope.core.util.ApplicationContextProvider;
+import org.apache.syncope.core.util.AttributableUtil;
import org.apache.syncope.core.util.EntitlementUtil;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
@@ -44,7 +52,7 @@ import org.springframework.beans.factory
* @see AbstractSyncJob
* @see PushTask
*/
-public class PushJob extends AbstractSyncJob<AbstractSyncopeResultHandler, PushActions> {
+public class PushJob extends AbstractSyncJob<PushTask, PushActions> {
/**
* User DAO.
@@ -53,6 +61,12 @@ public class PushJob extends AbstractSyn
private UserDAO userDAO;
/**
+ * Search DAO.
+ */
+ @Autowired
+ private AttributableSearchDAO searchDAO;
+
+ /**
* Role DAO.
*/
@Autowired
@@ -61,42 +75,19 @@ public class PushJob extends AbstractSyn
private final int PAGE_SIZE = 1000;
@Override
- protected String executeWithSecurityContext(final boolean dryRun) throws JobExecutionException {
- if (!(task instanceof PushTask)) {
- throw new JobExecutionException("Task " + taskId + " isn't a PushTask");
- }
-
- final PushTask pushTask = (PushTask) this.task;
-
- Connector connector;
- try {
- connector = connFactory.getConnector(pushTask.getResource());
- } catch (Exception e) {
- final String msg = String.format("Connector instance bean for resource %s and connInstance %s not found",
- pushTask.getResource(), pushTask.getResource().getConnector());
-
- throw new JobExecutionException(msg, e);
- }
-
- UMapping uMapping = pushTask.getResource().getUmapping();
- if (uMapping != null && uMapping.getAccountIdItem() == null) {
- throw new JobExecutionException("Invalid user account id mapping for resource " + pushTask.getResource());
- }
- RMapping rMapping = pushTask.getResource().getRmapping();
- if (rMapping != null && rMapping.getAccountIdItem() == null) {
- throw new JobExecutionException("Invalid role account id mapping for resource " + pushTask.getResource());
- }
- if (uMapping == null && rMapping == null) {
- return "No mapping configured for both users and roles: aborting...";
- }
-
+ protected String executeWithSecurityContext(
+ final PushTask pushTask,
+ final SyncPolicySpec syncPolicySpec,
+ final Connector connector,
+ final UMapping uMapping,
+ final RMapping rMapping,
+ final boolean dryRun) throws JobExecutionException {
LOG.debug("Execute synchronization (push) with resource {}", pushTask.getResource());
final List<SyncResult> results = new ArrayList<SyncResult>();
final Set<Long> authorizations = EntitlementUtil.getRoleIds(entitlementDAO.findAll());
- // Prepare handler for SyncDelta objects
final SyncopePushResultHandler handler =
(SyncopePushResultHandler) ((DefaultListableBeanFactory) ApplicationContextProvider.
getApplicationContext().getBeanFactory()).createBean(
@@ -112,7 +103,7 @@ public class PushJob extends AbstractSyn
if (uMapping != null) {
final int count = userDAO.count(authorizations);
for (int page = 1; page <= (count / PAGE_SIZE) + 1; page++) {
- final List<SyncopeUser> localUsers = userDAO.findAll(authorizations, page, PAGE_SIZE);
+ final List<SyncopeUser> localUsers = getUsers(authorizations, pushTask, page);
for (SyncopeUser localUser : localUsers) {
try {
@@ -129,7 +120,7 @@ public class PushJob extends AbstractSyn
}
if (rMapping != null) {
- final List<SyncopeRole> localRoles = roleDAO.findAll();
+ final List<SyncopeRole> localRoles = getRoles(authorizations, pushTask, PAGE_SIZE);
for (SyncopeRole localRole : localRoles) {
try {
@@ -156,4 +147,26 @@ public class PushJob extends AbstractSyn
protected boolean continueOnError() {
return true;
}
+
+ private List<SyncopeUser> getUsers(final Set<Long> authorizations, final PushTask pushTask, final int page) {
+ final String filter = pushTask.getUserFilter();
+ if (StringUtils.isBlank(filter)) {
+ return userDAO.findAll(authorizations, page, PAGE_SIZE);
+ } else {
+ return searchDAO.<SyncopeUser>search(
+ authorizations, SearchCondConverter.convert(filter),
+ Collections.<OrderByClause>emptyList(), AttributableUtil.getInstance(AttributableType.USER));
+ }
+ }
+
+ private List<SyncopeRole> getRoles(final Set<Long> authorizations, final PushTask pushTask, final int page) {
+ final String filter = pushTask.getRoleFilter();
+ if (StringUtils.isBlank(filter)) {
+ return roleDAO.findAll();
+ } else {
+ return searchDAO.<SyncopeRole>search(
+ authorizations, SearchCondConverter.convert(filter),
+ Collections.<OrderByClause>emptyList(), AttributableUtil.getInstance(AttributableType.ROLE));
+ }
+ }
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncJob.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncJob.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncJob.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncJob.java Fri Jun 6 12:15:34 2014
@@ -24,10 +24,8 @@ import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.mod.ReferenceMod;
import org.apache.syncope.common.mod.RoleMod;
-import org.apache.syncope.common.types.ConflictResolutionAction;
import org.apache.syncope.common.types.SyncPolicySpec;
import org.apache.syncope.core.persistence.beans.ExternalResource;
-import org.apache.syncope.core.persistence.beans.SyncPolicy;
import org.apache.syncope.core.persistence.beans.SyncTask;
import org.apache.syncope.core.persistence.beans.role.RMapping;
import org.apache.syncope.core.persistence.beans.user.UMapping;
@@ -51,7 +49,7 @@ import org.springframework.beans.factory
* @see AbstractSyncJob
* @see SyncTask
*/
-public class SyncJob extends AbstractSyncJob<AbstractSyncopeSyncResultHandler, SyncActions> {
+public class SyncJob extends AbstractSyncJob<SyncTask, SyncActions> {
/**
* Role workflow adapter.
@@ -86,43 +84,17 @@ public class SyncJob extends AbstractSyn
}
@Override
- protected String executeWithSecurityContext(final boolean dryRun) throws JobExecutionException {
- if (!(task instanceof SyncTask)) {
- throw new JobExecutionException("Task " + taskId + " isn't a SyncTask");
- }
- final SyncTask syncTask = (SyncTask) this.task;
-
- Connector connector;
- try {
- connector = connFactory.getConnector(syncTask.getResource());
- } catch (Exception e) {
- final String msg = String.format("Connector instance bean for resource %s and connInstance %s not found",
- syncTask.getResource(), syncTask.getResource().getConnector());
-
- throw new JobExecutionException(msg, e);
- }
-
- UMapping uMapping = syncTask.getResource().getUmapping();
- if (uMapping != null && uMapping.getAccountIdItem() == null) {
- throw new JobExecutionException("Invalid user account id mapping for resource " + syncTask.getResource());
- }
- RMapping rMapping = syncTask.getResource().getRmapping();
- if (rMapping != null && rMapping.getAccountIdItem() == null) {
- throw new JobExecutionException("Invalid role account id mapping for resource " + syncTask.getResource());
- }
- if (uMapping == null && rMapping == null) {
- return "No mapping configured for both users and roles: aborting...";
- }
-
+ protected String executeWithSecurityContext(
+ final SyncTask syncTask,
+ final SyncPolicySpec syncPolicySpec,
+ final Connector connector,
+ final UMapping uMapping,
+ final RMapping rMapping,
+ final boolean dryRun) throws JobExecutionException {
LOG.debug("Execute synchronization with token {}", syncTask.getResource().getUsyncToken());
final List<SyncResult> results = new ArrayList<SyncResult>();
- final SyncPolicy syncPolicy = syncTask.getResource().getSyncPolicy();
- final ConflictResolutionAction resAct = syncPolicy == null || syncPolicy.getSpecification() == null
- ? ConflictResolutionAction.IGNORE
- : ((SyncPolicySpec) syncPolicy.getSpecification()).getConflictResolutionAction();
-
// Prepare handler for SyncDelta objects
final SyncopeSyncResultHandler handler =
(SyncopeSyncResultHandler) ((DefaultListableBeanFactory) ApplicationContextProvider.
@@ -131,7 +103,7 @@ public class SyncJob extends AbstractSyn
handler.setConnector(connector);
handler.setActions(actions);
handler.setDryRun(dryRun);
- handler.setResAct(resAct);
+ handler.setResAct(syncPolicySpec.getConflictResolutionAction());
handler.setResults(results);
handler.setSyncTask(syncTask);
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncopePushResultHandler.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncopePushResultHandler.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncopePushResultHandler.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncopePushResultHandler.java Fri Jun 6 12:15:34 2014
@@ -28,9 +28,6 @@ import org.apache.syncope.common.types.A
import org.apache.syncope.common.types.AuditElements;
import org.apache.syncope.common.types.AuditElements.Result;
import org.apache.syncope.common.types.ResourceOperation;
-import org.apache.syncope.core.audit.AuditManager;
-import org.apache.syncope.core.connid.ConnObjectUtil;
-import org.apache.syncope.core.notification.NotificationManager;
import org.apache.syncope.core.persistence.beans.AbstractAttributable;
import org.apache.syncope.core.persistence.beans.AbstractMappingItem;
import org.apache.syncope.core.persistence.beans.PushTask;
@@ -38,8 +35,6 @@ import org.apache.syncope.core.persisten
import org.apache.syncope.core.persistence.beans.user.SyncopeUser;
import org.apache.syncope.core.propagation.TimeoutException;
import org.apache.syncope.core.propagation.impl.AbstractPropagationTaskExecutor;
-import org.apache.syncope.core.rest.data.RoleDataBinder;
-import org.apache.syncope.core.rest.data.UserDataBinder;
import org.apache.syncope.core.sync.PushActions;
import org.apache.syncope.core.sync.SyncResult;
import org.apache.syncope.core.util.AttributableUtil;
@@ -49,66 +44,12 @@ import org.identityconnectors.framework.
import org.identityconnectors.framework.common.objects.ObjectClass;
import org.identityconnectors.framework.common.objects.Uid;
import org.quartz.JobExecutionException;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-public class SyncopePushResultHandler extends AbstractSyncopeResultHandler {
-
- /**
- * User data binder.
- */
- @Autowired
- protected UserDataBinder userDataBinder;
-
- /**
- * Role data binder.
- */
- @Autowired
- protected RoleDataBinder roleDataBinder;
-
- /**
- * ConnectorObject util.
- */
- @Autowired
- protected ConnObjectUtil connObjectUtil;
-
- /**
- * Notification Manager.
- */
- @Autowired
- protected NotificationManager notificationManager;
-
- /**
- * Audit Manager.
- */
- @Autowired
- protected AuditManager auditManager;
+public class SyncopePushResultHandler extends AbstractSyncopeResultHandler<PushTask, PushActions> {
protected Map<Long, String> roleOwnerMap = new HashMap<Long, String>();
- /**
- * SyncJob actions.
- */
- protected PushActions actions;
-
- protected PushTask syncTask;
-
- public PushActions getActions() {
- return actions;
- }
-
- public void setActions(final PushActions actions) {
- this.actions = actions;
- }
-
- public PushTask getSyncTask() {
- return syncTask;
- }
-
- public void setSyncTask(final PushTask syncTask) {
- this.syncTask = syncTask;
- }
-
public Map<Long, String> getRoleOwnerMap() {
return roleOwnerMap;
}
@@ -187,10 +128,10 @@ public class SyncopePushResultHandler ex
if (beforeObj == null) {
result.setOperation(ResourceOperation.CREATE);
- actions.beforeCreate(this, toBeHandled, values);
+ actions.beforeCreate(this, values, toBeHandled);
} else {
result.setOperation(ResourceOperation.UPDATE);
- actions.beforeUpdate(this, toBeHandled, values);
+ actions.beforeUpdate(this, values, toBeHandled);
}
AbstractPropagationTaskExecutor.createOrUpdate(
@@ -216,7 +157,7 @@ public class SyncopePushResultHandler ex
throw new JobExecutionException(e);
} finally {
- actions.after(this, toBeHandled, values, result);
+ actions.after(this, values, toBeHandled, result);
notificationManager.createTasks(
AuditElements.EventCategoryType.PUSH,
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncopeSyncResultHandler.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncopeSyncResultHandler.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncopeSyncResultHandler.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/sync/impl/SyncopeSyncResultHandler.java Fri Jun 6 12:15:34 2014
@@ -42,15 +42,13 @@ import org.apache.syncope.common.types.A
import org.apache.syncope.common.types.MappingPurpose;
import org.apache.syncope.common.types.ResourceOperation;
import org.apache.syncope.common.types.SyncPolicySpec;
-import org.apache.syncope.core.audit.AuditManager;
-import org.apache.syncope.core.connid.ConnObjectUtil;
-import org.apache.syncope.core.notification.NotificationManager;
import org.apache.syncope.core.persistence.beans.AbstractAttrValue;
import org.apache.syncope.core.persistence.beans.AbstractAttributable;
import org.apache.syncope.core.persistence.beans.AbstractMappingItem;
import org.apache.syncope.core.persistence.beans.AbstractNormalSchema;
import org.apache.syncope.core.persistence.beans.PropagationTask;
import org.apache.syncope.core.persistence.beans.SyncPolicy;
+import org.apache.syncope.core.persistence.beans.SyncTask;
import org.apache.syncope.core.persistence.beans.role.SyncopeRole;
import org.apache.syncope.core.persistence.beans.user.SyncopeUser;
import org.apache.syncope.core.persistence.dao.AttributableSearchDAO;
@@ -68,8 +66,7 @@ import org.apache.syncope.core.propagati
import org.apache.syncope.core.propagation.impl.PropagationManager;
import org.apache.syncope.core.rest.controller.UnauthorizedRoleException;
import org.apache.syncope.core.rest.data.AttributableTransformer;
-import org.apache.syncope.core.rest.data.RoleDataBinder;
-import org.apache.syncope.core.rest.data.UserDataBinder;
+import org.apache.syncope.core.sync.SyncActions;
import org.apache.syncope.core.sync.SyncResult;
import org.apache.syncope.core.sync.SyncCorrelationRule;
import org.apache.syncope.core.util.AttributableUtil;
@@ -85,11 +82,13 @@ import org.identityconnectors.framework.
import org.identityconnectors.framework.common.objects.OperationalAttributes;
import org.identityconnectors.framework.common.objects.SyncDelta;
import org.identityconnectors.framework.common.objects.SyncDeltaType;
+import org.identityconnectors.framework.common.objects.SyncResultsHandler;
import org.identityconnectors.framework.common.objects.filter.EqualsFilter;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
-public class SyncopeSyncResultHandler extends AbstractSyncopeSyncResultHandler {
+public class SyncopeSyncResultHandler extends AbstractSyncopeResultHandler<SyncTask, SyncActions>
+ implements SyncResultsHandler {
/**
* Policy DAO.
@@ -128,12 +127,6 @@ public class SyncopeSyncResultHandler ex
protected AttributableSearchDAO searchDAO;
/**
- * ConnectorObject util.
- */
- @Autowired
- protected ConnObjectUtil connObjectUtil;
-
- /**
* User workflow adapter.
*/
@Autowired
@@ -157,30 +150,6 @@ public class SyncopeSyncResultHandler ex
@Autowired
protected PropagationTaskExecutor taskExecutor;
- /**
- * User data binder.
- */
- @Autowired
- protected UserDataBinder userDataBinder;
-
- /**
- * Role data binder.
- */
- @Autowired
- protected RoleDataBinder roleDataBinder;
-
- /**
- * Notification Manager.
- */
- @Autowired
- protected NotificationManager notificationManager;
-
- /**
- * Audit Manager.
- */
- @Autowired
- protected AuditManager auditManager;
-
@Autowired
protected AttributableTransformer attrTransformer;
Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TaskTest.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TaskTest.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TaskTest.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/TaskTest.java Fri Jun 6 12:15:34 2014
@@ -31,7 +31,9 @@ import org.apache.syncope.common.types.A
import org.apache.syncope.common.types.PropagationMode;
import org.apache.syncope.common.types.ResourceOperation;
import org.apache.syncope.core.persistence.beans.ExternalResource;
+import org.apache.syncope.core.persistence.beans.NotificationTask;
import org.apache.syncope.core.persistence.beans.PropagationTask;
+import org.apache.syncope.core.persistence.beans.PushTask;
import org.apache.syncope.core.persistence.beans.SchedTask;
import org.apache.syncope.core.persistence.beans.SyncTask;
import org.apache.syncope.core.persistence.beans.user.SyncopeUser;
@@ -62,14 +64,11 @@ public class TaskTest extends AbstractDA
@Test
public void findAll() {
- List<PropagationTask> plist = taskDAO.findAll(PropagationTask.class);
- assertEquals(4, plist.size());
-
- List<SchedTask> sclist = taskDAO.findAll(SchedTask.class);
- assertEquals(1, sclist.size());
-
- List<SyncTask> sylist = taskDAO.findAll(SyncTask.class);
- assertEquals(6, sylist.size());
+ assertEquals(4, taskDAO.findAll(PropagationTask.class).size());
+ assertEquals(1, taskDAO.findAll(NotificationTask.class).size());
+ assertEquals(1, taskDAO.findAll(SchedTask.class).size());
+ assertEquals(6, taskDAO.findAll(SyncTask.class).size());
+ assertEquals(1, taskDAO.findAll(PushTask.class).size());
}
@Test
Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/relationships/TaskTest.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/relationships/TaskTest.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/relationships/TaskTest.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/relationships/TaskTest.java Fri Jun 6 12:15:34 2014
@@ -34,6 +34,7 @@ import org.apache.syncope.common.types.P
import org.apache.syncope.common.types.ResourceOperation;
import org.apache.syncope.core.persistence.beans.ExternalResource;
import org.apache.syncope.core.persistence.beans.PropagationTask;
+import org.apache.syncope.core.persistence.beans.PushTask;
import org.apache.syncope.core.persistence.beans.SyncTask;
import org.apache.syncope.core.persistence.beans.TaskExec;
import org.apache.syncope.core.persistence.beans.user.SyncopeUser;
@@ -152,6 +153,29 @@ public class TaskTest extends AbstractDA
}
@Test
+ public void addPushTaskExecution() {
+ PushTask task = taskDAO.find(13L);
+ assertNotNull(task);
+
+ int executionNumber = task.getExecs().size();
+
+ TaskExec execution = new TaskExec();
+ execution.setStatus("Text-free status");
+ execution.setTask(task);
+ task.addExec(execution);
+ execution.setMessage("A message");
+
+ task = taskDAO.save(task);
+
+ taskDAO.flush();
+
+ task = taskDAO.find(13L);
+ assertNotNull(task);
+
+ assertEquals(executionNumber + 1, task.getExecs().size());
+ }
+
+ @Test
public void deleteTask() {
taskDAO.delete(1L);
Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/TaskTestITCase.java Fri Jun 6 12:15:34 2014
@@ -55,6 +55,7 @@ import org.apache.syncope.common.types.T
import org.apache.syncope.common.types.TraceLevel;
import org.apache.syncope.common.SyncopeClientException;
import org.apache.syncope.common.to.PushTaskTO;
+import org.apache.syncope.common.wrap.PushActionClass;
import org.apache.syncope.core.sync.TestSyncActions;
import org.apache.syncope.core.sync.TestSyncRule;
import org.apache.syncope.core.sync.impl.SyncJob;
@@ -102,7 +103,14 @@ public class TaskTestITCase extends Abst
}
@Test
- public void create() {
+ public void getPushActionsClasses() {
+ List<PushActionClass> actions = taskService.getPushActionsClasses();
+ assertNotNull(actions);
+ assertFalse(actions.isEmpty());
+ }
+
+ @Test
+ public void createSyncTask() {
SyncTaskTO task = new SyncTaskTO();
task.setName("Test create Sync");
task.setResource(RESOURCE_NAME_WS2);
@@ -132,11 +140,33 @@ public class TaskTestITCase extends Abst
}
@Test
+ public void createPushTask() {
+ PushTaskTO task = new PushTaskTO();
+ task.setName("Test create Push");
+ task.setResource(RESOURCE_NAME_WS2);
+ task.setUserFilter(
+ SyncopeClient.getUserSearchConditionBuilder().hasNotResources(RESOURCE_NAME_TESTDB2).query());
+ task.setRoleFilter(
+ SyncopeClient.getRoleSearchConditionBuilder().isNotNull("cool").query());
+
+ final Response response = taskService.create(task);
+ final PushTaskTO actual = getObject(response.getLocation(), TaskService.class, PushTaskTO.class);
+ assertNotNull(actual);
+
+ task = taskService.read(actual.getId());
+ assertNotNull(task);
+ assertEquals(task.getId(), actual.getId());
+ assertEquals(task.getJobClassName(), actual.getJobClassName());
+ assertEquals(task.getUserFilter(), actual.getUserFilter());
+ assertEquals(task.getRoleFilter(), actual.getRoleFilter());
+ }
+
+ @Test
public void update() {
SchedTaskTO task = taskService.read(SCHED_TASK_ID);
assertNotNull(task);
- SchedTaskTO taskMod = new SchedTaskTO();
+ final SchedTaskTO taskMod = new SchedTaskTO();
taskMod.setId(5);
taskMod.setCronExpression(null);
@@ -148,13 +178,35 @@ public class TaskTestITCase extends Abst
}
@Test
- public void list() {
- PagedResult<PropagationTaskTO> tasks = taskService.list(TaskType.PROPAGATION);
+ public void listSchedTask() {
+ final PagedResult<SchedTaskTO> tasks = taskService.list(TaskType.SCHEDULED);
+ assertFalse(tasks.getResult().isEmpty());
+ for (AbstractTaskTO task : tasks.getResult()) {
+ if (!(task instanceof SchedTaskTO) || task instanceof SyncTaskTO || task instanceof PushTaskTO) {
+ fail();
+ }
+ }
+ }
- assertNotNull(tasks);
+ @Test
+ public void listSyncTask() {
+ final PagedResult<SyncTaskTO> tasks = taskService.list(TaskType.SYNCHRONIZATION);
assertFalse(tasks.getResult().isEmpty());
for (AbstractTaskTO task : tasks.getResult()) {
- assertNotNull(task);
+ if (!(task instanceof SyncTaskTO)) {
+ fail();
+ }
+ }
+ }
+
+ @Test
+ public void list() {
+ final PagedResult<PushTaskTO> tasks = taskService.list(TaskType.PUSH);
+ assertFalse(tasks.getResult().isEmpty());
+ for (AbstractTaskTO task : tasks.getResult()) {
+ if (!(task instanceof PushTaskTO)) {
+ fail();
+ }
}
}
@@ -917,14 +969,39 @@ public class TaskTestITCase extends Abst
// Read sync task
PushTaskTO task = taskService.<PushTaskTO>read(13L);
assertNotNull(task);
+
+ assertEquals("Vivaldi", userService.read(3L).getAttrMap().get("surname").getValues().get(0));
+
+ task.setUserFilter(SyncopeClient.getUserSearchConditionBuilder().is("surname").equalTo("Vivaldi").query());
+ taskService.update(13L, task);
+ assertEquals(task.getUserFilter(), taskService.<PushTaskTO>read(13L).getUserFilter());
execSyncTask(task.getId(), 50, false);
final JdbcTemplate jdbcTemplate = new JdbcTemplate(testDataSource);
+ assertEquals(1, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID<>'vivaldi'").size());
+ assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='bellini'").size());
+ assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='rossini'").size());
+ assertEquals(0, jdbcTemplate.queryForList("SELECT ID FROM test2 WHERE ID='puccini'").size());
+
+ assertEquals("vivaldi",
+ jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "vivaldi"));
+
+ jdbcTemplate.execute("DELETE FROM test2 WHERE ID='vivaldi'");
+
+ task.setUserFilter(null);
+ taskService.update(13L, task);
+ assertNull(taskService.<PushTaskTO>read(13L).getUserFilter());
+
+ execSyncTask(task.getId(), 50, false);
- assertEquals("vivaldi", jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "vivaldi"));
- assertEquals("bellini", jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "bellini"));
- assertEquals("rossini", jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "rossini"));
- assertEquals("puccini", jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "puccini"));
+ assertEquals("vivaldi",
+ jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "vivaldi"));
+ assertEquals("bellini",
+ jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "bellini"));
+ assertEquals("rossini",
+ jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "rossini"));
+ assertEquals("puccini",
+ jdbcTemplate.queryForObject("SELECT ID FROM test2 WHERE ID=?", String.class, "puccini"));
}
}
Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/sync/TestSyncActions.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/sync/TestSyncActions.java?rev=1600864&r1=1600863&r2=1600864&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/sync/TestSyncActions.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/sync/TestSyncActions.java Fri Jun 6 12:15:34 2014
@@ -22,7 +22,7 @@ import org.apache.syncope.common.mod.Abs
import org.apache.syncope.common.mod.AttributeMod;
import org.apache.syncope.common.to.AbstractAttributableTO;
import org.apache.syncope.common.to.AttributeTO;
-import org.apache.syncope.core.sync.impl.AbstractSyncopeSyncResultHandler;
+import org.apache.syncope.core.sync.impl.AbstractSyncopeResultHandler;
import org.identityconnectors.framework.common.objects.SyncDelta;
import org.quartz.JobExecutionException;
@@ -31,8 +31,10 @@ public class TestSyncActions extends Def
private int counter = 0;
@Override
- public <T extends AbstractAttributableTO> SyncDelta beforeCreate(final AbstractSyncopeSyncResultHandler handler,
- final SyncDelta delta, final T subject) throws JobExecutionException {
+ public <T extends AbstractAttributableTO> SyncDelta beforeCreate(
+ final AbstractSyncopeResultHandler<?, ?> handler,
+ final SyncDelta delta,
+ final T subject) throws JobExecutionException {
AttributeTO attrTO = null;
for (int i = 0; i < subject.getAttrs().size(); i++) {
@@ -53,8 +55,10 @@ public class TestSyncActions extends Def
@Override
public <T extends AbstractAttributableTO, K extends AbstractAttributableMod> SyncDelta beforeUpdate(
- final AbstractSyncopeSyncResultHandler handler, final SyncDelta delta, final T subject, final K subjectMod)
- throws JobExecutionException {
+ final AbstractSyncopeResultHandler<?, ?> handler,
+ final SyncDelta delta,
+ final T subject,
+ final K subjectMod) throws JobExecutionException {
subjectMod.getAttrsToRemove().add("fullname");