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