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