From 3742f83a6e41a5a3980c4e90e12df9b9f3886193 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Thu, 24 Mar 2011 09:18:16 +0000
Subject: [PATCH] LMS-2127 modified PostRegistrationMaintenanceTask and
 IPostRegistrationTask

SVN: 20482
---
 .../AbstractPostRegistrationTask.java         | 27 ++++++++++---------
 .../IPostRegistrationTask.java                | 15 +++++++++--
 ...nupTaskHandler.java => NoCleanupTask.java} | 11 +++++---
 .../PostRegistrationMaintenanceTask.java      | 18 ++++++++++---
 4 files changed, 51 insertions(+), 20 deletions(-)
 rename datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/{ICleanupTaskHandler.java => NoCleanupTask.java} (77%)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/AbstractPostRegistrationTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/AbstractPostRegistrationTask.java
index 823daf9f8cb..f8595a4f04e 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/AbstractPostRegistrationTask.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/AbstractPostRegistrationTask.java
@@ -16,30 +16,33 @@
 
 package ch.systemsx.cisd.etlserver.postregistration;
 
+import java.util.Properties;
+
 import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
 
 /**
- * 
+ * Abstract super class of all implementations of {@link IPostRegistrationTask}.
  *
  * @author Franz-Josef Elmer
  */
 public abstract class AbstractPostRegistrationTask implements IPostRegistrationTask
 {
+    private static final NoCleanupTask DEFAULT_CLEANUP_TASK = new NoCleanupTask();
+    
+    protected final Properties properties;
     protected final IEncapsulatedOpenBISService service;
 
-    public AbstractPostRegistrationTask(IEncapsulatedOpenBISService service)
+    public AbstractPostRegistrationTask(Properties properties, IEncapsulatedOpenBISService service)
     {
+        this.properties = properties;
         this.service = service;
     }
-    
-    public final void execute(String dataSetCode, ICleanupTaskHandler handler)
+
+    /**
+     * Returns a cleanup task which does nothing.
+     */
+    public ICleanupTask createCleanupTask(String dataSetCode)
     {
-        handler.handle(computeCleanupTask(dataSetCode));
-        processDataSet(dataSetCode);
+        return DEFAULT_CLEANUP_TASK;
     }
-
-    protected abstract ICleanupTask computeCleanupTask(String dataSetCode);
-
-    protected abstract void processDataSet(String dataSetCode);
-
-  }
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/IPostRegistrationTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/IPostRegistrationTask.java
index bf4c89d45b1..a24c8e959e0 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/IPostRegistrationTask.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/IPostRegistrationTask.java
@@ -16,13 +16,24 @@
 
 package ch.systemsx.cisd.etlserver.postregistration;
 
+import java.util.Properties;
+
+import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
+
 /**
- * Interface of a task executed after registration of a data set.
- *
+ * Interface of a task executed after registration of a data set. Implementing class should have a
+ * public constructor with two parameters: First is of type {@link Properties} and second is of type
+ * {@link IEncapsulatedOpenBISService}.
+ * 
  * @author Franz-Josef Elmer
  */
 public interface IPostRegistrationTask
 {
+    /**
+     * Returns <code>true</code> if this task needs a lock onto the data store.
+     */
+    public boolean requiresDataStoreLock();
+    
     /**
      * Creates a cleanup task for the specified data set. This method will be invoked before the
      * actual task is performed by the method {@link #execute(String)}.
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/ICleanupTaskHandler.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/NoCleanupTask.java
similarity index 77%
rename from datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/ICleanupTaskHandler.java
rename to datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/NoCleanupTask.java
index a88ef5d74fe..515962f7280 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/ICleanupTaskHandler.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/NoCleanupTask.java
@@ -17,11 +17,16 @@
 package ch.systemsx.cisd.etlserver.postregistration;
 
 /**
- * Interface for classes which can handle {@link ICleanupTask} instances.
+ * An implementation of {@link ICleanupTask} which does nothing.
  *
  * @author Franz-Josef Elmer
  */
-public interface ICleanupTaskHandler
+public class NoCleanupTask implements ICleanupTask
 {
-    public void handle(ICleanupTask cleanupTask);
+    private static final long serialVersionUID = 1L;
+
+    public void cleanup()
+    {
+    }
+
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/PostRegistrationMaintenanceTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/PostRegistrationMaintenanceTask.java
index 2697a9ba824..f8298e2ce6e 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/PostRegistrationMaintenanceTask.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/PostRegistrationMaintenanceTask.java
@@ -37,7 +37,7 @@ import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
 import ch.systemsx.cisd.common.filesystem.FileUtilities;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
-import ch.systemsx.cisd.common.maintenance.IMaintenanceTask;
+import ch.systemsx.cisd.common.maintenance.IDataStoreLockingMaintenanceTask;
 import ch.systemsx.cisd.common.utilities.ClassUtils;
 import ch.systemsx.cisd.common.utilities.PropertyParametersUtil;
 import ch.systemsx.cisd.common.utilities.PropertyParametersUtil.SectionProperties;
@@ -52,7 +52,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TrackingDataSetCriteria
  *
  * @author Franz-Josef Elmer
  */
-public class PostRegistrationMaintenanceTask implements IMaintenanceTask
+public class PostRegistrationMaintenanceTask implements IDataStoreLockingMaintenanceTask
 {
     private static final String POST_REGISTRATION_TASKS_PROPERTY = "post-registration-tasks";
     
@@ -79,6 +79,8 @@ public class PostRegistrationMaintenanceTask implements IMaintenanceTask
     
     private IEncapsulatedOpenBISService service;
     
+    private boolean needsLockOnDataStore;
+    
     private Set<Entry<String, IPostRegistrationTask>> tasks;
     
     private File cleanupTasksFolder;
@@ -87,6 +89,11 @@ public class PostRegistrationMaintenanceTask implements IMaintenanceTask
 
     private File newLastSeenDataSetFile;
 
+    public boolean requiresDataStoreLock()
+    {
+        return needsLockOnDataStore;
+    }
+
     public void setUp(String pluginName, Properties properties)
     {
         service = ServiceProvider.getOpenBISService();
@@ -100,7 +107,12 @@ public class PostRegistrationMaintenanceTask implements IMaintenanceTask
             Properties taskPorperties = sectionProperty.getProperties();
             String className = PropertyUtils.getMandatoryProperty(taskPorperties, "class");
             IPostRegistrationTask task =
-                    ClassUtils.create(IPostRegistrationTask.class, className, taskPorperties);
+                    ClassUtils.create(IPostRegistrationTask.class, className, taskPorperties,
+                            service);
+            if (task.requiresDataStoreLock())
+            {
+                needsLockOnDataStore = true;
+            }
             map.put(sectionProperty.getKey(), task);
         }
         tasks = map.entrySet();
-- 
GitLab