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