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 2012/07/30 14:25:29 UTC

svn commit: r1367065 - in /incubator/syncope/trunk/core/src: main/java/org/apache/syncope/core/notification/ main/java/org/apache/syncope/core/persistence/beans/ main/java/org/apache/syncope/core/persistence/dao/impl/ main/java/org/apache/syncope/core/...

Author: ilgrosso
Date: Mon Jul 30 12:25:28 2012
New Revision: 1367065

URL: http://svn.apache.org/viewvc?rev=1367065&view=rev
Log:
[SYNCOPE-116] Reverting (part of) what done for SYNCOPE-54 - adding a boolean 'executed' field to NotificationTask for NotificationJob to be able to fetch only non-executed tasks

Modified:
    incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/notification/NotificationManager.java
    incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/NotificationTask.java
    incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/Task.java
    incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/TaskDAOImpl.java
    incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/ReportDataBinder.java
    incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java
    incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/AbstractTaskJob.java
    incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/NotificationJob.java
    incubator/syncope/trunk/core/src/test/resources/content.xml

Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/notification/NotificationManager.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/notification/NotificationManager.java?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/notification/NotificationManager.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/notification/NotificationManager.java Mon Jul 30 12:25:28 2012
@@ -259,23 +259,12 @@ public class NotificationManager {
     public TaskExec storeExecAndUpdateLatestExecStatus(final TaskExec execution) {
         NotificationTask task = taskDAO.find(execution.getTask().getId());
         task.addExec(execution);
-        task.setLatestExecStatus(execution.getStatus());
+        task.setExecuted(true);
         task = taskDAO.save(task);
         // NotificationTasks always have a single execution at most
         return task.getExecs().get(0);
     }
 
-    /**
-     * Update latest execution status of a NotificationTask.
-     *
-     * @param execution task execution
-     */
-    public void updateLatestExecStatus(final TaskExec execution) {
-        NotificationTask task = taskDAO.find(execution.getTask().getId());
-        task.setLatestExecStatus(execution.getStatus());
-        taskDAO.save(task);
-    }
-
     public Map<String, String> findAll() {
         Map<String, String> syncopeConfMap = new HashMap<String, String>();
         for (SyncopeConf conf : confDAO.findAll()) {

Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/NotificationTask.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/NotificationTask.java?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/NotificationTask.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/NotificationTask.java Mon Jul 30 12:25:28 2012
@@ -20,6 +20,7 @@ package org.apache.syncope.core.persiste
 
 import java.util.HashSet;
 import java.util.Set;
+import javax.persistence.Basic;
 import javax.persistence.Column;
 import javax.persistence.ElementCollection;
 import javax.persistence.Entity;
@@ -27,6 +28,8 @@ import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
 import javax.persistence.FetchType;
 import javax.persistence.Lob;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
 import org.apache.syncope.types.TraceLevel;
 
@@ -56,6 +59,11 @@ public class NotificationTask extends Ta
     @Lob
     private String htmlBody;
 
+    @Basic
+    @Min(0)
+    @Max(1)
+    private Integer executed;
+
     @Enumerated(EnumType.STRING)
     @NotNull
     private TraceLevel traceLevel;
@@ -64,6 +72,7 @@ public class NotificationTask extends Ta
         super();
 
         recipients = new HashSet<String>();
+        executed = getBooleanAsInteger(false);
     }
 
     public Set<String> getRecipients() {
@@ -117,6 +126,14 @@ public class NotificationTask extends Ta
         this.htmlBody = htmlBody;
     }
 
+    public boolean isExecuted() {
+        return isBooleanAsInteger(executed);
+    }
+
+    public void setExecuted(boolean executed) {
+        this.executed = getBooleanAsInteger(executed);
+    }
+
     public TraceLevel getTraceLevel() {
         return traceLevel;
     }

Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/Task.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/Task.java?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/Task.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/Task.java Mon Jul 30 12:25:28 2012
@@ -21,7 +21,6 @@ package org.apache.syncope.core.persiste
 import java.util.ArrayList;
 import java.util.List;
 import javax.persistence.CascadeType;
-import javax.persistence.Column;
 import javax.persistence.DiscriminatorColumn;
 import javax.persistence.Entity;
 import javax.persistence.Id;
@@ -41,9 +40,6 @@ public class Task extends AbstractBaseBe
     @Id
     private Long id;
 
-    @Column(nullable = true)
-    private String latestExecStatus;
-
     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "task")
     private List<TaskExec> executions;
 
@@ -57,14 +53,6 @@ public class Task extends AbstractBaseBe
         return id;
     }
 
-    public String getLatestExecStatus() {
-        return latestExecStatus;
-    }
-
-    public void setLatestExecStatus(String latestExecStatus) {
-        this.latestExecStatus = latestExecStatus;
-    }
-
     public boolean addExec(TaskExec exec) {
         return exec != null && !executions.contains(exec) && executions.add(exec);
     }

Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/TaskDAOImpl.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/TaskDAOImpl.java?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/TaskDAOImpl.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/TaskDAOImpl.java Mon Jul 30 12:25:28 2012
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.List;
 import javax.persistence.Query;
 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.SchedTask;
 import org.apache.syncope.core.persistence.beans.SyncTask;
@@ -53,14 +54,18 @@ public class TaskDAOImpl extends Abstrac
     @Override
     public <T extends Task> List<T> findToExec(final Class<T> reference) {
         StringBuilder queryString = buildfindAllQuery(reference);
-        
+
         if (SchedTask.class.equals(reference)) {
             queryString.append("AND ");
         } else {
             queryString.append("WHERE ");
         }
-        
-        queryString.append("e.latestExecStatus IS NULL ");
+
+        if (reference.equals(NotificationTask.class)) {
+            queryString.append("e.executed = 0 ");
+        } else {
+            queryString.append("e.executions IS EMPTY ");
+        }
         queryString.append("ORDER BY e.id DESC");
 
         final Query query = entityManager.createQuery(queryString.toString());

Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/ReportDataBinder.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/ReportDataBinder.java?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/ReportDataBinder.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/ReportDataBinder.java Mon Jul 30 12:25:28 2012
@@ -20,16 +20,6 @@ package org.apache.syncope.core.rest.dat
 
 import java.util.HashSet;
 import java.util.Set;
-import org.quartz.Scheduler;
-import org.quartz.SchedulerException;
-import org.quartz.Trigger;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.quartz.SchedulerFactoryBean;
-import org.springframework.stereotype.Component;
-import org.springframework.util.ClassUtils;
 import org.apache.syncope.client.report.ReportletConf;
 import org.apache.syncope.client.to.ReportExecTO;
 import org.apache.syncope.client.to.ReportTO;
@@ -40,6 +30,16 @@ import org.apache.syncope.core.persisten
 import org.apache.syncope.core.persistence.dao.ReportExecDAO;
 import org.apache.syncope.core.report.Reportlet;
 import org.apache.syncope.core.report.ReportletConfClass;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import org.quartz.Trigger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.quartz.SchedulerFactoryBean;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ClassUtils;
 
 @Component
 public class ReportDataBinder {

Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/TaskDataBinder.java Mon Jul 30 12:25:28 2012
@@ -20,16 +20,6 @@ package org.apache.syncope.core.rest.dat
 
 import javassist.NotFoundException;
 import org.apache.commons.lang.StringUtils;
-import org.quartz.Scheduler;
-import org.quartz.SchedulerException;
-import org.quartz.Trigger;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.scheduling.quartz.SchedulerFactoryBean;
-import org.springframework.stereotype.Component;
 import org.apache.syncope.client.to.AbstractAttributableTO;
 import org.apache.syncope.client.to.AttributeTO;
 import org.apache.syncope.client.to.MembershipTO;
@@ -49,9 +39,20 @@ import org.apache.syncope.core.persisten
 import org.apache.syncope.core.persistence.beans.Task;
 import org.apache.syncope.core.persistence.beans.TaskExec;
 import org.apache.syncope.core.persistence.dao.ResourceDAO;
+import org.apache.syncope.core.persistence.dao.TaskExecDAO;
 import org.apache.syncope.core.util.JexlUtil;
 import org.apache.syncope.core.util.TaskUtil;
 import org.apache.syncope.types.SyncopeClientExceptionType;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import org.quartz.Trigger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.scheduling.quartz.SchedulerFactoryBean;
+import org.springframework.stereotype.Component;
 
 @Component
 public class TaskDataBinder {
@@ -61,7 +62,7 @@ public class TaskDataBinder {
      */
     private static final Logger LOG = LoggerFactory.getLogger(TaskDataBinder.class);
 
-    private static final String[] IGNORE_TASK_PROPERTIES = {"executions", "resource", "user"};
+    private static final String[] IGNORE_TASK_PROPERTIES = {"latestExecStatus", "executions", "resource", "user"};
 
     private static final String[] IGNORE_TASK_EXECUTION_PROPERTIES = {"id", "task"};
 
@@ -69,6 +70,9 @@ public class TaskDataBinder {
     private ResourceDAO resourceDAO;
 
     @Autowired
+    private TaskExecDAO taskExecDAO;
+
+    @Autowired
     private SchedulerFactoryBean scheduler;
 
     @Autowired
@@ -217,6 +221,11 @@ public class TaskDataBinder {
         TaskTO taskTO = taskUtil.newTaskTO();
         BeanUtils.copyProperties(task, taskTO, IGNORE_TASK_PROPERTIES);
 
+        TaskExec latestExec = taskExecDAO.findLatestStarted(task);
+        taskTO.setLatestExecStatus(latestExec == null
+                ? ""
+                : latestExec.getStatus());
+
         for (TaskExec execution : task.getExecs()) {
             taskTO.addExecution(getTaskExecTO(execution));
         }

Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/AbstractTaskJob.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/AbstractTaskJob.java?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/AbstractTaskJob.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/AbstractTaskJob.java Mon Jul 30 12:25:28 2012
@@ -88,7 +88,6 @@ public abstract class AbstractTaskJob im
 
     @Override
     public final void execute(final JobExecutionContext context) throws JobExecutionException {
-
         task = taskDAO.find(taskId);
         if (task == null) {
             throw new JobExecutionException("Task " + taskId + " not found");
@@ -117,7 +116,6 @@ public abstract class AbstractTaskJob im
             taskExecDAO.save(execution);
         }
 
-        task.setLatestExecStatus(execution.getStatus());
         task = taskDAO.save(task);
     }
 

Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/NotificationJob.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/NotificationJob.java?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/NotificationJob.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/scheduling/NotificationJob.java Mon Jul 30 12:25:28 2012
@@ -201,8 +201,6 @@ public class NotificationJob implements 
 
         if (hasToBeRegistered(execution)) {
             execution = notificationManager.storeExecAndUpdateLatestExecStatus(execution);
-        } else {
-            notificationManager.updateLatestExecStatus(execution);
         }
 
         return execution;

Modified: incubator/syncope/trunk/core/src/test/resources/content.xml
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/test/resources/content.xml?rev=1367065&r1=1367064&r2=1367065&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/test/resources/content.xml (original)
+++ incubator/syncope/trunk/core/src/test/resources/content.xml Mon Jul 30 12:25:28 2012
@@ -545,7 +545,7 @@ under the License.
                  mandatoryCondition="false" resource_name="resource-ldap"/>
                    
   <Task DTYPE="PropagationTask" id="1" propagationMode="TWO_PHASES" propagationOperation="UPDATE"
-        resource_name="ws-target-resource-2" syncopeUser_id="1" latestExecStatus="SUCCESS"
+        resource_name="ws-target-resource-2" syncopeUser_id="1"
         xmlAttributes="%3Cset%3E%0A++%3Corg.identityconnectors.framework.common.objects.Name%3E%0A++++%3Cname%3E__NAME__%3C%2Fname%3E%0A++++%3Cvalue+class%3D%22java.util.Collections%24UnmodifiableRandomAccessList%22+resolves-to%3D%22java.util.Collections%24UnmodifiableList%22%3E%0A++++++%3Cc+class%3D%22list%22%3E%0A++++++++%3Cstring%3EuserId%3C%2Fstring%3E%0A++++++%3C%2Fc%3E%0A++++++%3Clist+reference%3D%22..%2Fc%22%2F%3E%0A++++%3C%2Fvalue%3E%0A++%3C%2Forg.identityconnectors.framework.common.objects.Name%3E%0A++%3Corg.identityconnectors.framework.common.objects.Attribute%3E%0A++++%3Cname%3E__PASSWORD__%3C%2Fname%3E%0A++++%3Cvalue+class%3D%22java.util.Collections%24UnmodifiableRandomAccessList%22+resolves-to%3D%22java.util.Collections%24UnmodifiableList%22%3E%0A++++++%3Cc+class%3D%22list%22%3E%0A++++++++%3Corg.identityconnectors.common.security.GuardedString%3E%0A++++++++++%3C__readOnly%3Efalse%3C%2F__readOnly%3E%0A++++++++++%3C__disposed%3Efalse%3C%2F__disposed%3E%0A+++++++++
 +%3C__encryptedBytes%3EQTOgwEhIHqtAI%2FYlgDhYc37esEF8VLDMU2IY1ciltrg%3D%3C%2F__encryptedBytes%3E%0A++++++++++%3C__base64SHA1Hash%3EW5%2FrwtdCnI8gAnIUhKcahMEnMMc%3D%3C%2F__base64SHA1Hash%3E%0A++++++++%3C%2Forg.identityconnectors.common.security.GuardedString%3E%0A++++++%3C%2Fc%3E%0A++++++%3Clist+reference%3D%22..%2Fc%22%2F%3E%0A++++%3C%2Fvalue%3E%0A++%3C%2Forg.identityconnectors.framework.common.objects.Attribute%3E%0A++%3Corg.identityconnectors.framework.common.objects.Attribute%3E%0A++++%3Cname%3Etype%3C%2Fname%3E%0A++++%3Cvalue+class%3D%22java.util.Collections%24UnmodifiableRandomAccessList%22+resolves-to%3D%22java.util.Collections%24UnmodifiableList%22%3E%0A++++++%3Cc+class%3D%22list%22%3E%0A++++++++%3Cstring%3Etype%3C%2Fstring%3E%0A++++++%3C%2Fc%3E%0A++++++%3Clist+reference%3D%22..%2Fc%22%2F%3E%0A++++%3C%2Fvalue%3E%0A++%3C%2Forg.identityconnectors.framework.common.objects.Attribute%3E%0A++%3Corg.identityconnectors.framework.common.objects.Attribute%3E%0A++++%3Cname%3Eful
 lname%3C%2Fname%3E%0A++++%3Cvalue+class%3D%22java.util.Collections%24UnmodifiableRandomAccessList%22+resolves-to%3D%22java.util.Collections%24UnmodifiableList%22%3E%0A++++++%3Cc+class%3D%22list%22%3E%0A++++++++%3Cstring%3Efullname%3C%2Fstring%3E%0A++++++%3C%2Fc%3E%0A++++++%3Clist+reference%3D%22..%2Fc%22%2F%3E%0A++++%3C%2Fvalue%3E%0A++%3C%2Forg.identityconnectors.framework.common.objects.Attribute%3E%0A%3C%2Fset%3E%0A"/>
   <TaskExec id="1" task_id="1" status="SUCCESS"/>
   <Task DTYPE="PropagationTask" id="2" propagationMode="ONE_PHASE" propagationOperation="CREATE"