From ef9233dd38833fba121ef230880c398e36e40deb Mon Sep 17 00:00:00 2001
From: tpylak <tpylak>
Date: Wed, 9 Jun 2010 13:44:10 +0000
Subject: [PATCH] LMS-1568 BDS migration: allow to run maintanance plugin only
 once at the server startup

SVN: 16367
---
 .../systemsx/cisd/etlserver/MaintenancePlugin.java  | 13 +++++++++++--
 .../cisd/etlserver/MaintenanceTaskParameters.java   | 12 ++++++++++++
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/MaintenancePlugin.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/MaintenancePlugin.java
index 9da7146a77e..afd81ddf317 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/MaintenancePlugin.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/MaintenancePlugin.java
@@ -1,5 +1,6 @@
 package ch.systemsx.cisd.etlserver;
 
+import java.util.Date;
 import java.util.Timer;
 import java.util.TimerTask;
 
@@ -31,13 +32,21 @@ public class MaintenancePlugin
     {
         final String timerThreadName = parameters.getPluginName() + " - Maintenance Plugin";
         final Timer workerTimer = new Timer(timerThreadName);
-        workerTimer.schedule(new TimerTask()
+        TimerTask timerTask = new TimerTask()
             {
                 @Override
                 public void run()
                 {
                     task.execute();
                 }
-            }, parameters.getStartDate(), parameters.getIntervalSeconds() * 1000);
+            };
+        Date startDate = parameters.getStartDate();
+        if (parameters.isExecuteOnlyOnce())
+        {
+            workerTimer.schedule(timerTask, startDate);
+        } else
+        {
+            workerTimer.schedule(timerTask, startDate, parameters.getIntervalSeconds() * 1000);
+        }
     }
 }
\ No newline at end of file
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/MaintenanceTaskParameters.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/MaintenanceTaskParameters.java
index f3061cbe9c3..939605d887c 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/MaintenanceTaskParameters.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/MaintenanceTaskParameters.java
@@ -44,6 +44,10 @@ public class MaintenanceTaskParameters
 
     private static final String START_KEY = "start";
 
+    // If true the task will be executed exactly one, interval will be ignored. By default set to
+    // false.
+    private static final String ONE_TIME_EXECUTION_KEY = "execute-only-once";
+
     private final String pluginName;
 
     private final long interval;
@@ -54,6 +58,8 @@ public class MaintenanceTaskParameters
 
     private final Date startDate;
 
+    private final boolean executeOnlyOnce;
+
     public MaintenanceTaskParameters(Properties properties, String pluginName)
     {
         this.properties = properties;
@@ -61,6 +67,7 @@ public class MaintenanceTaskParameters
         interval = PropertyUtils.getLong(properties, INTERVAL_KEY, ONE_DAY_IN_SEC);
         className = PropertyUtils.getMandatoryProperty(properties, CLASS_KEY);
         startDate = extractStartDate(PropertyUtils.getProperty(properties, START_KEY));
+        executeOnlyOnce = PropertyUtils.getBoolean(properties, ONE_TIME_EXECUTION_KEY, false);
     }
 
     private static Date extractStartDate(String timeOrNull)
@@ -92,6 +99,11 @@ public class MaintenanceTaskParameters
         }
     }
 
+    public boolean isExecuteOnlyOnce()
+    {
+        return executeOnlyOnce;
+    }
+
     public long getIntervalSeconds()
     {
         return interval;
-- 
GitLab