From db546bbe84d1b7d765241d9396f429cc0c50dee3 Mon Sep 17 00:00:00 2001
From: abobrov <abobrov@localhost>
Date: Thu, 01 Oct 2009 12:28:35 +0000
Subject: [PATCH] - [Issue 4257]  deleting recurring task throws error : rework recurring tasks and iterations cancellation process.

---
 opends/src/server/org/opends/server/backends/task/TaskBackend.java |   22 ++++++++++++++++++++--
 1 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/opends/src/server/org/opends/server/backends/task/TaskBackend.java b/opends/src/server/org/opends/server/backends/task/TaskBackend.java
index c2eba38..8b6bfbf 100644
--- a/opends/src/server/org/opends/server/backends/task/TaskBackend.java
+++ b/opends/src/server/org/opends/server/backends/task/TaskBackend.java
@@ -38,6 +38,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
+import java.util.GregorianCalendar;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -649,7 +650,16 @@
       if (TaskState.isPending(state))
       {
         if (t.isRecurring()) {
-          taskScheduler.removeRecurringTaskIteration(t.getTaskID());
+          taskScheduler.removePendingTask(t.getTaskID());
+          long scheduledStartTime = t.getScheduledStartTime();
+          long currentSystemTime = System.currentTimeMillis();
+          if (scheduledStartTime < currentSystemTime) {
+            scheduledStartTime = currentSystemTime;
+          }
+          GregorianCalendar calendar = new GregorianCalendar();
+          calendar.setTimeInMillis(scheduledStartTime);
+          taskScheduler.scheduleNextRecurringTaskIteration(t,
+                  calendar);
         } else {
           taskScheduler.removePendingTask(t.getTaskID());
         }
@@ -787,7 +797,15 @@
               TaskState.CANCELED_BEFORE_STARTING)
             {
               taskScheduler.removePendingTask(t.getTaskID());
-              taskScheduler.scheduleTask(newTask, true);
+              long scheduledStartTime = t.getScheduledStartTime();
+              long currentSystemTime = System.currentTimeMillis();
+              if (scheduledStartTime < currentSystemTime) {
+                scheduledStartTime = currentSystemTime;
+              }
+              GregorianCalendar calendar = new GregorianCalendar();
+              calendar.setTimeInMillis(scheduledStartTime);
+              taskScheduler.scheduleNextRecurringTaskIteration(
+                      newTask, calendar);
             }
             else if (newTask.getTaskState() ==
               TaskState.STOPPED_BY_ADMINISTRATOR)

--
Gitblit v1.10.0