diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/IImageGenerationAlgorithm.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/IImageGenerationAlgorithm.java index 907e1dda8a62a0cf71cbec9d46afac15441f0b24..cb88f88cf9b95491f3bb38cb8b395cff2d802200 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/IImageGenerationAlgorithm.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/IImageGenerationAlgorithm.java @@ -6,9 +6,27 @@ import java.util.List; import ch.systemsx.cisd.openbis.dss.etl.dto.api.impl.ImageDataSetInformation; import ch.systemsx.cisd.openbis.dss.etl.dto.api.impl.ImageDataSetStructure; +/** + * Algorithm for creating a representative thumbnails. + * + * @author Antti Luomi + */ public interface IImageGenerationAlgorithm { + /** + * Creates thumbnails for the specified data set info and structure. + */ public List<BufferedImage> generateImages(ImageDataSetInformation information, ImageDataSetStructure structure); + + /** + * Returns the code of the data set to be registered containing these representative thumbnails. + */ public String getDataSetTypeCode(); + + /** + * Returns the thumbnail file name for the specified index. The index specifies the corresponding + * image returned by {@link #generateImages(ImageDataSetInformation, ImageDataSetStructure)}. + * Note, all file names generated by this method have to different. + */ public String getImageFileName(int index); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/impl/ImageDataSetInformation.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/impl/ImageDataSetInformation.java index 88fa3da83bfe12e7fbc42aa8e84f72da4b06af10..5ece7e3dec008d9f00bf9dd17a5703abe76114d9 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/impl/ImageDataSetInformation.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/impl/ImageDataSetInformation.java @@ -226,12 +226,12 @@ public class ImageDataSetInformation extends BasicDataSetInformation return buffer.toString(); } - public void setAlgorithm(IImageGenerationAlgorithm imageGenerationAlgorithm) + public void setImageGenerationAlgorithm(IImageGenerationAlgorithm imageGenerationAlgorithm) { this.imageGenerationAlgorithm = imageGenerationAlgorithm; } - public IImageGenerationAlgorithm getAlgorithm() { + public IImageGenerationAlgorithm getImageGenerationAlgorithm() { return imageGenerationAlgorithm; } } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/ImagingDataSetRegistrationTransaction.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/ImagingDataSetRegistrationTransaction.java index 0bf97f8f0c8b66f36f54fa03833a0582f1952e41..5a3f323c815056edd0c2660caaee16ed6910328f 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/ImagingDataSetRegistrationTransaction.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/ImagingDataSetRegistrationTransaction.java @@ -33,6 +33,7 @@ import java.util.Properties; import javax.imageio.ImageIO; import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; +import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationDetails; import ch.systemsx.cisd.etlserver.registrator.api.v2.IDataSet; @@ -346,14 +347,38 @@ public class ImagingDataSetRegistrationTransaction extends DataSetRegistrationTr containedDataSetCodes.add(mainDataset.getDataSetCode()); + createRepresentativeThumbnailByImageGenerationAlgorithm(imageDataSetInformation, imageDataSetStructure, + containedDataSetCodes, thumbnailDatasets); + + for (IDataSet thumbnailDataset : thumbnailDatasets) + { + setSameDatasetOwner(mainDataset, thumbnailDataset); + } + ImageContainerDataSet containerDataset = + createImageContainerDataset(mainDataset, imageDataSetInformation, + containedDataSetCodes); + containerDataset.setOriginalDataset(mainDataset); + containerDataset.setThumbnailDatasets(thumbnailDatasets); + String containerDataSetCode = containerDataset.getDataSetCode(); + imageDataSetInformation.setContainerDatasetPermId(containerDataSetCode); - IImageGenerationAlgorithm algorithm = imageDataSetInformation.getAlgorithm(); - List<BufferedImage> images = algorithm != null ? algorithm.generateImages(imageDataSetInformation, imageDataSetStructure) : new ArrayList<BufferedImage>(); + return containerDataset; + } + + private void createRepresentativeThumbnailByImageGenerationAlgorithm(ImageDataSetInformation imageDataSetInformation, + ImageDataSetStructure imageDataSetStructure, List<String> containedDataSetCodes, List<IDataSet> thumbnailDatasets) + { + IImageGenerationAlgorithm algorithm = imageDataSetInformation.getImageGenerationAlgorithm(); + if (algorithm == null) + { + return; + } + List<BufferedImage> images = algorithm.generateImages(imageDataSetInformation, imageDataSetStructure); if (images.size() > 0) { IDataSet representative = createNewDataSet(algorithm.getDataSetTypeCode()); - - int i=0; - for (BufferedImage imageData: images) { + for (int i = 0; i < images.size(); i++) + { + BufferedImage imageData = images.get(i); String imageFile = createNewFile(representative, algorithm.getImageFileName(i)); File f = new File(imageFile); try @@ -361,27 +386,13 @@ public class ImagingDataSetRegistrationTransaction extends DataSetRegistrationTr ImageIO.write(imageData, "png", f); } catch (IOException e) { - e.printStackTrace(); + throw new EnvironmentFailureException("Can not save representative thumbnail to file '" + + f + "': " + e, e); } - i++; } containedDataSetCodes.add(representative.getDataSetCode()); thumbnailDatasets.add(representative); } - - for (IDataSet thumbnailDataset : thumbnailDatasets) - { - setSameDatasetOwner(mainDataset, thumbnailDataset); - } - ImageContainerDataSet containerDataset = - createImageContainerDataset(mainDataset, imageDataSetInformation, - containedDataSetCodes); - containerDataset.setOriginalDataset(mainDataset); - containerDataset.setThumbnailDatasets(thumbnailDatasets); - String containerDataSetCode = containerDataset.getDataSetCode(); - imageDataSetInformation.setContainerDatasetPermId(containerDataSetCode); - - return containerDataset; } @SuppressWarnings("unchecked") diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/SimpleImageDataSetRegistrator.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/SimpleImageDataSetRegistrator.java index d2e8369cdd372405b92a5b4eb5ba2bee9780d7a9..720fc3866860977d177af3184f7e6af481789b96 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/SimpleImageDataSetRegistrator.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/SimpleImageDataSetRegistrator.java @@ -204,7 +204,7 @@ public class SimpleImageDataSetRegistrator imageDataset.setColorDepth(simpleImageConfig.getColorDepth()); setRegistrationDetails(registrationDetails, imageDataset); - registrationDetails.getDataSetInformation().setAlgorithm(simpleImageConfig.getImageGenerationAlgorithm()); + registrationDetails.getDataSetInformation().setImageGenerationAlgorithm(simpleImageConfig.getImageGenerationAlgorithm()); return registrationDetails; }