From 6628a906c31f8cc9b48bad60854e0b70e2f70b12 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Mon, 6 Oct 2014 11:02:46 +0000 Subject: [PATCH] SSDM-774: Javadoc added to IImageGenerationAlgorithm. Some small refactorings. Instead of printing stack trace when saving of image fails an exception is thrown. SVN: 32548 --- .../dto/api/IImageGenerationAlgorithm.java | 18 +++++++ .../dto/api/impl/ImageDataSetInformation.java | 4 +- ...ImagingDataSetRegistrationTransaction.java | 53 +++++++++++-------- .../v2/SimpleImageDataSetRegistrator.java | 2 +- 4 files changed, 53 insertions(+), 24 deletions(-) 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 907e1dda8a6..cb88f88cf9b 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 88fa3da83bf..5ece7e3dec0 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 0bf97f8f0c8..5a3f323c815 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 d2e8369cdd3..720fc386686 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; } -- GitLab