Skip to content
Snippets Groups Projects
Commit 62014983 authored by tpylak's avatar tpylak
Browse files

LMS-2499 fix post-registration task: do not throw exception (which blocks...

LMS-2499 fix post-registration task: do not throw exception (which blocks registration of all subsequent datasets) if dataset does not have some properties used in the template

SVN: 22788
parent 0e367bc7
No related branches found
No related tags found
No related merge requests found
...@@ -22,6 +22,11 @@ import java.util.Set; ...@@ -22,6 +22,11 @@ import java.util.Set;
import ch.systemsx.cisd.bds.StringUtils; import ch.systemsx.cisd.bds.StringUtils;
import ch.systemsx.cisd.common.filesystem.FileUtilities; import ch.systemsx.cisd.common.filesystem.FileUtilities;
import ch.systemsx.cisd.common.logging.ISimpleLogger;
import ch.systemsx.cisd.common.logging.Log4jSimpleLogger;
import ch.systemsx.cisd.common.logging.LogCategory;
import ch.systemsx.cisd.common.logging.LogFactory;
import ch.systemsx.cisd.common.logging.LogLevel;
import ch.systemsx.cisd.common.utilities.PropertyUtils; import ch.systemsx.cisd.common.utilities.PropertyUtils;
import ch.systemsx.cisd.common.utilities.Template; import ch.systemsx.cisd.common.utilities.Template;
import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
...@@ -53,6 +58,8 @@ public class NotifyingTask extends AbstractPostRegistrationTask ...@@ -53,6 +58,8 @@ public class NotifyingTask extends AbstractPostRegistrationTask
private static final String DATA_SET_CODE_PLACE_HOLDER = "data-set-code"; private static final String DATA_SET_CODE_PLACE_HOLDER = "data-set-code";
private final ISimpleLogger logger;
private final Template messageTemplate; private final Template messageTemplate;
private final Template destinationPathTemplate; private final Template destinationPathTemplate;
...@@ -60,8 +67,15 @@ public class NotifyingTask extends AbstractPostRegistrationTask ...@@ -60,8 +67,15 @@ public class NotifyingTask extends AbstractPostRegistrationTask
private final String[] includeDatasetTypePatternsOrNull; private final String[] includeDatasetTypePatternsOrNull;
public NotifyingTask(Properties properties, IEncapsulatedOpenBISService service) public NotifyingTask(Properties properties, IEncapsulatedOpenBISService service)
{
this(properties, service, new Log4jSimpleLogger(LogFactory.getLogger(LogCategory.OPERATION,
NotifyingTask.class)));
}
NotifyingTask(Properties properties, IEncapsulatedOpenBISService service, ISimpleLogger logger)
{ {
super(properties, service); super(properties, service);
this.logger = logger;
messageTemplate = messageTemplate =
new Template(PropertyUtils.getMandatoryProperty(properties, MESSAGE_TEMPLATE_KEY)); new Template(PropertyUtils.getMandatoryProperty(properties, MESSAGE_TEMPLATE_KEY));
destinationPathTemplate = destinationPathTemplate =
...@@ -102,11 +116,13 @@ public class NotifyingTask extends AbstractPostRegistrationTask ...@@ -102,11 +116,13 @@ public class NotifyingTask extends AbstractPostRegistrationTask
throw new IllegalArgumentException("Unknown data set: " + dataSetCode); throw new IllegalArgumentException("Unknown data set: " + dataSetCode);
} }
return new Executor(dataSet, messageTemplate.createFreshCopy(), return new Executor(dataSet, messageTemplate.createFreshCopy(),
destinationPathTemplate.createFreshCopy(), includeDatasetTypePatternsOrNull); destinationPathTemplate.createFreshCopy(), includeDatasetTypePatternsOrNull, logger);
} }
private static final class Executor implements IPostRegistrationTaskExecutor private static final class Executor implements IPostRegistrationTaskExecutor
{ {
private final ISimpleLogger logger;
private final ExternalData dataSet; private final ExternalData dataSet;
private final Template messageTemplate; private final Template messageTemplate;
...@@ -116,12 +132,14 @@ public class NotifyingTask extends AbstractPostRegistrationTask ...@@ -116,12 +132,14 @@ public class NotifyingTask extends AbstractPostRegistrationTask
private final String[] includeDatasetTypePatternsOrNull; private final String[] includeDatasetTypePatternsOrNull;
public Executor(ExternalData dataSet, Template messageTemplate, public Executor(ExternalData dataSet, Template messageTemplate,
Template destinationPathTemplate, String[] includeDatasetTypePatternsOrNull) Template destinationPathTemplate, String[] includeDatasetTypePatternsOrNull,
ISimpleLogger logger)
{ {
this.dataSet = dataSet; this.dataSet = dataSet;
this.messageTemplate = messageTemplate; this.messageTemplate = messageTemplate;
this.destinationPathTemplate = destinationPathTemplate; this.destinationPathTemplate = destinationPathTemplate;
this.includeDatasetTypePatternsOrNull = includeDatasetTypePatternsOrNull; this.includeDatasetTypePatternsOrNull = includeDatasetTypePatternsOrNull;
this.logger = logger;
} }
public ICleanupTask createCleanupTask() public ICleanupTask createCleanupTask()
...@@ -133,9 +151,22 @@ public class NotifyingTask extends AbstractPostRegistrationTask ...@@ -133,9 +151,22 @@ public class NotifyingTask extends AbstractPostRegistrationTask
{ {
if (typeMatches()) if (typeMatches())
{ {
String messageText = fillTemplate(messageTemplate); String messageText;
FileUtilities.writeToFile(new File(fillTemplate(destinationPathTemplate)), String fileName;
messageText); try
{
messageText = fillTemplate(messageTemplate);
fileName = fillTemplate(destinationPathTemplate);
} catch (UnknownPropertyRequested ex)
{
logger.log(
LogLevel.WARN,
String.format(
"Could not produce post registration confirmation file for dataset '%s': %s",
dataSet.getCode(), ex.getMessage()));
return;
}
FileUtilities.writeToFile(new File(fileName), messageText);
} }
} }
...@@ -156,7 +187,7 @@ public class NotifyingTask extends AbstractPostRegistrationTask ...@@ -156,7 +187,7 @@ public class NotifyingTask extends AbstractPostRegistrationTask
return false; return false;
} }
private String fillTemplate(Template template) private String fillTemplate(Template template) throws UnknownPropertyRequested
{ {
Set<String> placeholderNames = template.getPlaceholderNames(); Set<String> placeholderNames = template.getPlaceholderNames();
for (String placeholderName : placeholderNames) for (String placeholderName : placeholderNames)
...@@ -178,7 +209,7 @@ public class NotifyingTask extends AbstractPostRegistrationTask ...@@ -178,7 +209,7 @@ public class NotifyingTask extends AbstractPostRegistrationTask
return messageText; return messageText;
} }
private String getProperty(String propertyName) private String getProperty(String propertyName) throws UnknownPropertyRequested
{ {
for (IEntityProperty property : dataSet.getProperties()) for (IEntityProperty property : dataSet.getProperties())
{ {
...@@ -187,9 +218,20 @@ public class NotifyingTask extends AbstractPostRegistrationTask ...@@ -187,9 +218,20 @@ public class NotifyingTask extends AbstractPostRegistrationTask
return property.tryGetAsString(); return property.tryGetAsString();
} }
} }
throw new IllegalArgumentException("Unknown property: " + propertyName); throw new UnknownPropertyRequested(String.format("Property '%s' is not set.",
propertyName));
} }
} }
private final static class UnknownPropertyRequested extends Exception
{
private static final long serialVersionUID = 1L;
public UnknownPropertyRequested(String message)
{
super(message);
}
}
} }
...@@ -2,4 +2,4 @@ message-template = storage_provider.storage.status = STORAGE_SUCCESSFUL\n\ ...@@ -2,4 +2,4 @@ message-template = storage_provider.storage.status = STORAGE_SUCCESSFUL\n\
storage_provider.dataset.id = ${data-set-code}\n\ storage_provider.dataset.id = ${data-set-code}\n\
ibrain2.dataset.id = ${property:ibrain-data-set-id}\n ibrain2.dataset.id = ${property:ibrain-data-set-id}\n
destination-path-template = targets/ibrain-${property:ibrain-data-set-id}.txt destination-path-template = targets/ibrain-${property:ibrain-data-set-id}.txt
include-dataset-type-patterns = .*XYZ.*, ABC include-dataset-type-patterns = .*XYZ.*, accepted-type
...@@ -30,6 +30,8 @@ import org.testng.annotations.Test; ...@@ -30,6 +30,8 @@ import org.testng.annotations.Test;
import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase; import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase;
import ch.systemsx.cisd.common.filesystem.FileUtilities; import ch.systemsx.cisd.common.filesystem.FileUtilities;
import ch.systemsx.cisd.common.logging.AssertingLogger;
import ch.systemsx.cisd.common.logging.LogLevel;
import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.DataSetBuilder; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.DataSetBuilder;
...@@ -44,6 +46,8 @@ public class NotifyingTaskTest extends AbstractFileSystemTestCase ...@@ -44,6 +46,8 @@ public class NotifyingTaskTest extends AbstractFileSystemTestCase
private static final String DATA_SET_CODE_3 = "ds-3"; private static final String DATA_SET_CODE_3 = "ds-3";
private static final String DATA_SET_CODE_4 = "ds-4";
private Mockery context; private Mockery context;
private IEncapsulatedOpenBISService service; private IEncapsulatedOpenBISService service;
...@@ -78,8 +82,11 @@ public class NotifyingTaskTest extends AbstractFileSystemTestCase ...@@ -78,8 +82,11 @@ public class NotifyingTaskTest extends AbstractFileSystemTestCase
IOUtils.closeQuietly(inStream); IOUtils.closeQuietly(inStream);
} }
final DataSetBuilder dataSet1 = createDataset(DATA_SET_CODE_1, "ooo_XYZ_ooo", "ibrain-2"); final DataSetBuilder dataSet1 = createDataset(DATA_SET_CODE_1, "ooo_XYZ_ooo", "ibrain-2");
final DataSetBuilder dataSet2 = createDataset(DATA_SET_CODE_2, "ABC", "ibrain-3"); final DataSetBuilder dataSet2 = createDataset(DATA_SET_CODE_2, "accepted-type", "ibrain-3");
final DataSetBuilder filteredDataSet = createDataset(DATA_SET_CODE_3, "ibrain-4", null); final DataSetBuilder filteredDataSet =
createDataset(DATA_SET_CODE_3, "filtered-type", null);
final DataSetBuilder noPropertiesDataSet =
createDataset(DATA_SET_CODE_4, "accepted-type", null);
context.checking(new Expectations() context.checking(new Expectations()
{ {
...@@ -92,9 +99,13 @@ public class NotifyingTaskTest extends AbstractFileSystemTestCase ...@@ -92,9 +99,13 @@ public class NotifyingTaskTest extends AbstractFileSystemTestCase
one(service).tryGetDataSet(DATA_SET_CODE_3); one(service).tryGetDataSet(DATA_SET_CODE_3);
will(returnValue(filteredDataSet.getDataSet())); will(returnValue(filteredDataSet.getDataSet()));
one(service).tryGetDataSet(DATA_SET_CODE_4);
will(returnValue(noPropertiesDataSet.getDataSet()));
} }
}); });
NotifyingTask notifyingTask = new NotifyingTask(properties, service); AssertingLogger logger = new AssertingLogger();
NotifyingTask notifyingTask = new NotifyingTask(properties, service, logger);
IPostRegistrationTaskExecutor executor = execute(notifyingTask, DATA_SET_CODE_1); IPostRegistrationTaskExecutor executor = execute(notifyingTask, DATA_SET_CODE_1);
ICleanupTask cleanupTask = executor.createCleanupTask(); ICleanupTask cleanupTask = executor.createCleanupTask();
...@@ -109,9 +120,16 @@ public class NotifyingTaskTest extends AbstractFileSystemTestCase ...@@ -109,9 +120,16 @@ public class NotifyingTaskTest extends AbstractFileSystemTestCase
"targets/ibrain-ibrain-3.txt").isFile()); "targets/ibrain-ibrain-3.txt").isFile());
execute(notifyingTask, DATA_SET_CODE_3); execute(notifyingTask, DATA_SET_CODE_3);
assertFalse("confirnation file for " + DATA_SET_CODE_3 + " should not be created!", assertFalse("confirmation file for " + DATA_SET_CODE_3 + " should not be created!",
new File("targets/ibrain-ibrain-4.txt").exists()); new File("targets/ibrain-ibrain-4.txt").exists());
execute(notifyingTask, DATA_SET_CODE_4);
logger.assertNumberOfMessage(1);
logger.assertEq(
0,
LogLevel.WARN,
"Could not produce post registration confirmation file for dataset 'ds-4': Property 'ibrain-data-set-id' is not set.");
context.assertIsSatisfied(); context.assertIsSatisfied();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment