From 913ca45cfa7dee8b23b356a03239c7176479756a Mon Sep 17 00:00:00 2001
From: gpawel <gpawel>
Date: Mon, 5 Nov 2012 13:58:48 +0000
Subject: [PATCH] SP-354 BIS-238 : SOB-6 : Setting image scaling parameters
 does not work.

SVN: 27493
---
 .../etl/dataaccess/ImagingDatasetLoader.java  | 30 ++++++++++++++++++-
 .../etl/dto/ImageTransfomationFactories.java  | 19 +++++++++++-
 .../server/images/ImageChannelsUtils.java     | 27 +++++++++++------
 3 files changed, 65 insertions(+), 11 deletions(-)

diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImagingDatasetLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImagingDatasetLoader.java
index e356f48035a..6f1103cf731 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImagingDatasetLoader.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImagingDatasetLoader.java
@@ -27,9 +27,9 @@ import org.apache.commons.lang.StringUtils;
 
 import ch.systemsx.cisd.base.image.IImageTransformerFactory;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.hcs.Location;
 import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchicalContent;
 import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchicalContentNode;
-import ch.systemsx.cisd.hcs.Location;
 import ch.systemsx.cisd.openbis.dss.etl.AbsoluteImageReference;
 import ch.systemsx.cisd.openbis.dss.etl.IImagingDatasetLoader;
 import ch.systemsx.cisd.openbis.dss.etl.PrefixedImage;
@@ -197,6 +197,15 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa
                 getAvailableImageTransformationsForChannel(channel);
         imageTransfomationFactories.setForChannel(singleChannelMap);
 
+        ImgImageTransformationDTO defaultTransformationOrNull =
+                tryGetDefaultTransformation(channel);
+        if (defaultTransformationOrNull != null)
+        {
+            imageTransfomationFactories.setDefaultTransformation(
+                    defaultTransformationOrNull.getCode(),
+                    defaultTransformationOrNull.getImageTransformerFactory());
+        }
+
         imageTransfomationFactories.setForImage(imageDTO.tryGetImageTransformerFactory());
         return imageTransfomationFactories;
     }
@@ -219,6 +228,25 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa
         return singleChannelMap;
     }
 
+    private ImgImageTransformationDTO tryGetDefaultTransformation(ImgChannelDTO channel)
+    {
+        List<ImgImageTransformationDTO> availableImageTransformations =
+                availableImageTransformationsMap.get(channel.getId());
+
+        if (availableImageTransformations != null)
+        {
+            for (ImgImageTransformationDTO transformation : availableImageTransformations)
+            {
+                if (transformation.getIsDefault())
+                {
+                    return transformation;
+                }
+            }
+        }
+
+        return null;
+    }
+
     private IImageTransformerFactory tryGetImageTransformerFactoryForMergedChannels()
     {
         IImageTransformerFactory imageTransformerFactory = dataset.tryGetImageTransformerFactory();
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/ImageTransfomationFactories.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/ImageTransfomationFactories.java
index 43caf51acac..b47fa281993 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/ImageTransfomationFactories.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/ImageTransfomationFactories.java
@@ -36,11 +36,17 @@ public class ImageTransfomationFactories
     // individual transformation for the image
     private IImageTransformerFactory image;
 
+    // default channel transformation
+    private IImageTransformerFactory defaultTransformationOrNull;
+
+    // default channel transformation code
+    private String defaultTransformationCodeOrNull;
+
     public IImageTransformerFactory tryGetForChannel(String transformationCodeOrNull)
     {
         if (transformationCodeOrNull == null)
         {
-            return null;
+            return defaultTransformationOrNull;
         }
         return singleChannelMap.get(transformationCodeOrNull);
     }
@@ -56,6 +62,13 @@ public class ImageTransfomationFactories
         this.singleChannelMap = singleChannelMap;
     }
 
+    public void setDefaultTransformation(String defaultTransformationCodeOrNull,
+            IImageTransformerFactory defaultTransformationOrNull)
+    {
+        this.defaultTransformationCodeOrNull = defaultTransformationCodeOrNull;
+        this.defaultTransformationOrNull = defaultTransformationOrNull;
+    }
+
     public void setForMergedChannels(IImageTransformerFactory transformerFactoryForMergedChannels)
     {
         this.mergedChannels = transformerFactoryForMergedChannels;
@@ -71,4 +84,8 @@ public class ImageTransfomationFactories
         this.image = transformerFactoryForImage;
     }
 
+    public String tryGetDefaultTransformationCode()
+    {
+        return defaultTransformationCodeOrNull;
+    }
 }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageChannelsUtils.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageChannelsUtils.java
index efa301db78e..f8dcf80438f 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageChannelsUtils.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageChannelsUtils.java
@@ -32,12 +32,12 @@ import ch.systemsx.cisd.base.image.IImageTransformerFactory;
 import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.image.MixColors;
-import ch.systemsx.cisd.openbis.common.io.ByteArrayBasedContentNode;
-import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchicalContent;
-import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchicalContentNode;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
 import ch.systemsx.cisd.hcs.Location;
+import ch.systemsx.cisd.openbis.common.io.ByteArrayBasedContentNode;
+import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchicalContent;
+import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchicalContentNode;
 import ch.systemsx.cisd.openbis.dss.etl.AbsoluteImageReference;
 import ch.systemsx.cisd.openbis.dss.etl.HCSImageDatasetLoaderFactory;
 import ch.systemsx.cisd.openbis.dss.etl.IImagingDatasetLoader;
@@ -570,14 +570,23 @@ public class ImageChannelsUtils
         if (transformationInfo.isUseMergedChannelsTransformation())
         {
             channelLevelTransformationOrNull = transfomations.tryGetForMerged();
-        } else if (transformationInfo.tryGetSingleChannelTransformationCode() != null
-                && (false == transformationInfo.tryGetSingleChannelTransformationCode().equals(
-                        imageReference.tryGetSingleChannelTransformationCode())))
+        } else
         {
-            channelLevelTransformationOrNull =
-                    transfomations.tryGetForChannel(transformationInfo
-                            .tryGetSingleChannelTransformationCode());
+            String channelTransformationCode =
+                    transformationInfo.tryGetSingleChannelTransformationCode() == null ? transfomations
+                            .tryGetDefaultTransformationCode() : transformationInfo
+                            .tryGetSingleChannelTransformationCode();
+
+            if (channelTransformationCode != null
+                    && (false == channelTransformationCode.equals(imageReference
+                            .tryGetSingleChannelTransformationCode())))
+            {
+                channelLevelTransformationOrNull =
+                        transfomations.tryGetForChannel(transformationInfo
+                                .tryGetSingleChannelTransformationCode());
+            }
         }
+
         return applyImageTransformation(resultImage, channelLevelTransformationOrNull);
     }
 
-- 
GitLab