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 823daf9f8cb17a2fa113eaf40e8a51e4e74ab9b7..f8595a4f04e40eb00b97a2d3f4482908cbaca1b4 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 bf4c89d45b1789a28df66e0098703427c85a0158..a24c8e959e0ff0e154b206577b361e4393ca0a51 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 a88ef5d74fe2f2a151e7cf665de22eac33d698b5..515962f7280238340c8f2cf972692c660e065735 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 2697a9ba824086365ab169cfcc881021ff491dcb..f8298e2ce6ec1273aba60d7910fb5252862f3075 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();