diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/ArchivingPostRegistrationTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/ArchivingPostRegistrationTask.java index 328725e8fdccd276ecd9150280edc2a481a2ccbf..1ac4a458d6e56fdf26ef32505471d7a6fe8b1179 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/ArchivingPostRegistrationTask.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/ArchivingPostRegistrationTask.java @@ -71,7 +71,7 @@ public class ArchivingPostRegistrationTask extends AbstractPostRegistrationTask { return new Executor(dataSetCode); } - + private final class Executor implements IPostRegistrationTaskExecutor { private final String dataSetCode; @@ -98,13 +98,19 @@ public class ArchivingPostRegistrationTask extends AbstractPostRegistrationTask return; } - DatasetDescription dataSet = tryGetDatasetDescription(dataSetCode, service); + ExternalData dataSet = tryGetExternalData(dataSetCode, service); if (dataSet == null) { - operationLog.warn("Data set with code " + dataSetCode - + " is no longer available in openBIS. Archiving post-registration " - + "task will be skipped..."); + operationLog.warn("Data set '" + dataSetCode + + "' is no longer available in openBIS." + + "Archiving post-registration task will be skipped..."); + return; + } else if (dataSet.isContainer()) + { + operationLog.warn("Data set '" + dataSetCode + "' is a container data set." + + " Archiving post-registration task will be skipped..."); return; + } boolean statusUpdated = @@ -112,7 +118,10 @@ public class ArchivingPostRegistrationTask extends AbstractPostRegistrationTask false); if (statusUpdated) { - List<DatasetDescription> dataSetAsList = Collections.singletonList(dataSet); + DatasetDescription dataSetDescription = + DataSetTranslator.translateToDescription(dataSet); + List<DatasetDescription> dataSetAsList = + Collections.singletonList(dataSetDescription); ProcessingStatus processingStatus = archiver.archive(dataSetAsList, createArchiverContext(), false); if (false == processingStatus.getErrorStatuses().isEmpty()) @@ -129,7 +138,7 @@ public class ArchivingPostRegistrationTask extends AbstractPostRegistrationTask String failedMessage = String.format("Eager archiving of dataset '%s' has failed. \n", dataSetCode); message.append(failedMessage); - for (Status status : processingStatus.getErrorStatuses()) + for (Status status : processingStatus.getErrorStatuses()) { if (status.tryGetErrorMessage() != null) { @@ -141,7 +150,7 @@ public class ArchivingPostRegistrationTask extends AbstractPostRegistrationTask String.format("If you wish to archive the dataset in the future, " + "you can configure an '%s'.", AutoArchiverTask.class.getSimpleName()); message.append(footer); - + notificationLog.error(message); } @@ -151,7 +160,7 @@ public class ArchivingPostRegistrationTask extends AbstractPostRegistrationTask } } - private static DatasetDescription tryGetDatasetDescription(String dataSetCode, + private static ExternalData tryGetExternalData(String dataSetCode, IEncapsulatedOpenBISService service) { List<String> codeAsList = Collections.singletonList(dataSetCode); @@ -162,13 +171,20 @@ public class ArchivingPostRegistrationTask extends AbstractPostRegistrationTask } ExternalData data = dataList.get(0); - return DataSetTranslator.translateToDescription(data); + return data; + } + + private static DatasetDescription tryGetDatasetWithLocation(String dataSetCode, + IEncapsulatedOpenBISService service) + { + ExternalData data = tryGetExternalData(dataSetCode, service); + return (data != null) ? DataSetTranslator.translateToDescription(data) : null; } + private static ArchiverTaskContext createArchiverContext() { - return new ArchiverTaskContext(ServiceProvider.getDataStoreService() - .getDataSetDirectoryProvider()); + return new ArchiverTaskContext(ServiceProvider.getDataStoreService().getDataSetDirectoryProvider()); } private static class ArchivingCleanupTask implements ICleanupTask @@ -185,18 +201,16 @@ public class ArchivingPostRegistrationTask extends AbstractPostRegistrationTask public void cleanup(ISimpleLogger logger) { IEncapsulatedOpenBISService openBISService = ServiceProvider.getOpenBISService(); - boolean statusUpdated = - openBISService.compareAndSetDataSetStatus(dataSetCode, BACKUP_PENDING, - AVAILABLE, false); - - if (statusUpdated == false) - { - // invalid data set status, do not continue + boolean statusUpdated = openBISService + .compareAndSetDataSetStatus(dataSetCode, BACKUP_PENDING, AVAILABLE, false); + + if (statusUpdated == false) { + // invalid data set status, do not continue return; } - + IArchiverPlugin archiver = ServiceProvider.getDataStoreService().getArchiverPlugin(); - DatasetDescription dataSet = tryGetDatasetDescription(dataSetCode, openBISService); + DatasetDescription dataSet = tryGetDatasetWithLocation(dataSetCode, openBISService); if (archiver != null && dataSet != null) { DatasetLocation dataset = new DatasetLocation();