diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbstractImageStorageProcessor.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbstractImageStorageProcessor.java index 6a4e1f677cae917f1a7e0b9b7880153a7daeef78..61124ba7b4cb8d278f934aeccea9ed5bea9a01a6 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbstractImageStorageProcessor.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbstractImageStorageProcessor.java @@ -252,6 +252,7 @@ abstract class AbstractImageStorageProcessor extends AbstractStorageProcessor im AbstractStorageProcessorTransaction { private IImagingQueryDAO dbTransaction; + // used when HDF5 is used to store original data private boolean shouldDeleteOriginalDataOnCommit; @@ -618,7 +619,8 @@ abstract class AbstractImageStorageProcessor extends AbstractStorageProcessor im if (imageDataSetInfo.isValid() == false) { throw ConfigurationFailureException - .fromTemplate("Invalid image dataset info object, check if your jython script fills all the fields: " + .fromTemplate("Invalid image dataset info object, check if your jython script fills all the required fields. " + + "Or maybe the recognized files extensions is set incorrectly? Dataset: " + imageDataSetInfo); } Geometry tileGeometry = diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/SimpleImageDataConfig.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/SimpleImageDataConfig.java index dd4e9816b757c62911bdecd1b5b13ff4625c180a..221dd019dedaa820316fb591a462b582f388983a 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/SimpleImageDataConfig.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/SimpleImageDataConfig.java @@ -101,6 +101,8 @@ abstract public class SimpleImageDataConfig private boolean generateThumbnailsWithImageMagic = false; + private boolean generateThumbnailsInHighQuality = false; + private double allowedMachineLoadDuringThumbnailsGeneration = 1.0; private boolean storeChannelsOnExperimentLevel = false; @@ -125,6 +127,7 @@ abstract public class SimpleImageDataConfig thumbnailsStorageFormat.setMaxWidth(getMaxThumbnailWidthAndHeight()); thumbnailsStorageFormat.setMaxHeight(getMaxThumbnailWidthAndHeight()); thumbnailsStorageFormat.setGenerateWithImageMagic(generateThumbnailsWithImageMagic); + thumbnailsStorageFormat.setHighQuality(generateThumbnailsInHighQuality); imageStorageConfiguraton.setThumbnailsStorageFormat(thumbnailsStorageFormat); } return imageStorageConfiguraton; @@ -225,6 +228,15 @@ abstract public class SimpleImageDataConfig this.generateThumbnailsWithImageMagic = generateWithImageMagic; } + /** + * if true and thumbnails generation is switched on, thumbnails will be generated with high + * quality. + */ + public void setGenerateHighQualityThumbnails(boolean highQualityThumbnails) + { + this.generateThumbnailsInHighQuality = highQualityThumbnails; + } + /** Should all dataset in one experiment use the same channels? By default set to false. */ public void setStoreChannelsOnExperimentLevel(boolean storeChannelsOnExperimentLevel) { diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/JythonPlateDataSetHandler.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/JythonPlateDataSetHandler.java index 3f70572ad390632210079bf76d5ef4dd29e378fd..9caf65bc9e38690f34158c3df0c3e4ab465d77b5 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/JythonPlateDataSetHandler.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/JythonPlateDataSetHandler.java @@ -86,7 +86,7 @@ public class JythonPlateDataSetHandler extends JythonTopLevelDataSetHandler<Data } /** a simple method to register the described image dataset in a separate transaction */ - public void registerImageDataset(SimpleImageDataConfig imageDataSet, + public boolean registerImageDataset(SimpleImageDataConfig imageDataSet, File incomingDatasetFolder, DataSetRegistrationService<ImageDataSetInformation> service) { @@ -96,7 +96,7 @@ public class JythonPlateDataSetHandler extends JythonTopLevelDataSetHandler<Data service.transaction(incomingDatasetFolder, imageDatasetFactory); IDataSet newDataset = transaction.createNewDataSet(imageDatasetDetails); transaction.moveFile(incomingDatasetFolder.getPath(), newDataset); - transaction.commit(); + return transaction.commit(); } // ---- diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/SimpleImageDataSetRegistrator.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/SimpleImageDataSetRegistrator.java index 1fb9d628ff5f0ecc089b431b2e835c8bd8242161..ca07053cf9304b6f8f1e252a1082e08fd1f00c97 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/SimpleImageDataSetRegistrator.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/SimpleImageDataSetRegistrator.java @@ -22,6 +22,8 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import ch.systemsx.cisd.common.collections.CollectionUtils; +import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.filesystem.FileOperations; import ch.systemsx.cisd.common.filesystem.FileUtilities; import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationDetails; @@ -117,6 +119,13 @@ public class SimpleImageDataSetRegistrator imageTokens.ensureValid(); imageTokensList.add(new ImageTokensWithPath(imageTokens, imageRelativePath)); } + if (imageTokensList.size() == 0) + { + throw UserFailureException.fromTemplate( + "Incoming directory '%s' contains no images with extensions %s!", + incomingDirectory.getPath(), + CollectionUtils.abbreviate(imageDataSet.getRecognizedImageExtensions(), -1)); + } return imageTokensList; }