diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbsoluteImageReference.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbsoluteImageReference.java index 0a2e1eb7e820999bb9af6544b37346af91c9df2b..0e504f5cd824656f7a71ea8baf80bf861ae2de2b 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbsoluteImageReference.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbsoluteImageReference.java @@ -48,6 +48,8 @@ public class AbsoluteImageReference extends AbstractImageReference private ChannelColorRGB channelColor; + private String singleChannelTransformationCodeOrNull; + /** * @param contentNode is the original content before choosing the color component and the image * ID @@ -56,7 +58,7 @@ public class AbsoluteImageReference extends AbstractImageReference String imageIdOrNull, ColorComponent colorComponentOrNull, RequestedImageSize imageSize, ChannelColorRGB channelColor, ImageTransfomationFactories imageTransfomationFactories, - ImageLibraryInfo imageLibraryOrNull) + ImageLibraryInfo imageLibraryOrNull, String singleChannelTransformationCodeOrNull) { super(imageIdOrNull, colorComponentOrNull); assert imageSize != null : "image size is null"; @@ -68,6 +70,7 @@ public class AbsoluteImageReference extends AbstractImageReference this.channelColor = channelColor; this.imageTransfomationFactories = imageTransfomationFactories; this.imageLibraryOrNull = imageLibraryOrNull; + this.singleChannelTransformationCodeOrNull = singleChannelTransformationCodeOrNull; } /** @@ -104,10 +107,10 @@ public class AbsoluteImageReference extends AbstractImageReference } return image; } - + /** - * Returns the image size. Preferred method if only image size is needed because only the - * header of an image file might be read to get the size. + * Returns the image size. Preferred method if only image size is needed because only the header + * of an image file might be read to get the size. */ public Size getUnchangedImageSize() { @@ -133,11 +136,16 @@ public class AbsoluteImageReference extends AbstractImageReference return channelColor; } + public String tryGetSingleChannelTransformationCode() + { + return singleChannelTransformationCodeOrNull; + } + public AbsoluteImageReference createWithoutColorComponent() { ColorComponent colorComponent = null; return new AbsoluteImageReference(contentNode, uniqueId, tryGetImageID(), colorComponent, - imageSize, channelColor, imageTransfomationFactories, imageLibraryOrNull); - + imageSize, channelColor, imageTransfomationFactories, imageLibraryOrNull, + singleChannelTransformationCodeOrNull); } } \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/IImagingDatasetLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/IImagingDatasetLoader.java index 637641bf03caec39cf50925a98f19003d133af11..b5eff24ee1cb81dec96afbbc96bb01c6f187bcd0 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/IImagingDatasetLoader.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/IImagingDatasetLoader.java @@ -30,15 +30,17 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.IImageDatasetLoa public interface IImagingDatasetLoader extends IImageDatasetLoader { /** - * @param channelCode The code fo the channel to get the image for + * @param channelCode The code for the channel to get the image for * @param imageSize required image size, specified so that an image with the closest size to the * required is returned (e.g. a thumbnail version if available). Note that this * method does no image resizing and the result will most probably not have the * required size. + * @param transformationCodeOrNull if transformed images are precomputed, they will be returned * @return image (with original file content, page and color) */ AbsoluteImageReference tryGetImage(String channelCode, - ImageChannelStackReference channelStackReference, RequestedImageSize imageSize); + ImageChannelStackReference channelStackReference, RequestedImageSize imageSize, + String transformationCodeOrNull); /** * Finds representative image of this data set. Returns <code>null</code> if no image was found. @@ -55,9 +57,11 @@ public interface IImagingDatasetLoader extends IImageDatasetLoader * required is returned (e.g. a thumbnail version if available). Note that this * method does no image resizing and the result will most probably not have the * required size. + * @param transformationCodeOrNull if transformed images are precomputed, they will be returned */ AbsoluteImageReference tryGetRepresentativeImage(String channelCode, - Location wellLocationOrNull, RequestedImageSize imageSize); + Location wellLocationOrNull, RequestedImageSize imageSize, + String transformationCodeOrNull); /** * Tries to find a representative thumbnail of this data set. Returns <code>null</code> if no @@ -73,9 +77,11 @@ public interface IImagingDatasetLoader extends IImageDatasetLoader * @param wellLocationOrNull if not null the returned images are restricted to one well. * Otherwise the dataset is assumed to have no container and spots. * @param imageSize + * @param transformationCodeOrNull */ AbsoluteImageReference tryGetRepresentativeThumbnail(String channelCode, - Location wellLocationOrNull, RequestedImageSize imageSize); + Location wellLocationOrNull, RequestedImageSize imageSize, + String transformationCodeOrNull); /** * Returns the stored thumbnail for the given parameters, or <code>null</code>, if no thumbnail @@ -87,8 +93,10 @@ public interface IImagingDatasetLoader extends IImageDatasetLoader * @param channelCode The code of the channel to get the thumbnail for. * @param channelStackReference Specifies well and tile of the thumbnail. * @param imageSize + * @param transformationCodeOrNull if transformed images are precomputed, they will be returned */ AbsoluteImageReference tryGetThumbnail(String channelCode, - ImageChannelStackReference channelStackReference, RequestedImageSize imageSize); + ImageChannelStackReference channelStackReference, RequestedImageSize imageSize, + String transformationCodeOrNull); } \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/IImagingLoaderStrategy.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/IImagingLoaderStrategy.java index 40f037498eb797495bfe40c5d21cb5464f541485..7fd9a08ba06211318f4f6d4c954f6059e719f7f8 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/IImagingLoaderStrategy.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/IImagingLoaderStrategy.java @@ -35,7 +35,8 @@ public interface IImagingLoaderStrategy extends IImageDatasetLoader * @return image (with original file content, page and color) */ AbsoluteImageReference tryGetImage(String channelCode, - ImageChannelStackReference channelStackReference, RequestedImageSize imageSize); + ImageChannelStackReference channelStackReference, RequestedImageSize imageSize, + String transformationCodeOrNull); /** * Finds representative image of this dataset in a given channel. @@ -49,5 +50,6 @@ public interface IImagingLoaderStrategy extends IImageDatasetLoader * required size. */ AbsoluteImageReference tryGetRepresentativeImage(String channelCode, - Location wellLocationOrNull, RequestedImageSize imageSize); + Location wellLocationOrNull, RequestedImageSize imageSize, + String transformationCodeOrNull); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ImagingLoaderStrategyFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ImagingLoaderStrategyFactory.java index bacc108b641d08fbc653d4bd8c6c1817952efd03..5833749b01cabc84d23827e38af4d5c058e3293c 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ImagingLoaderStrategyFactory.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ImagingLoaderStrategyFactory.java @@ -60,18 +60,19 @@ public class ImagingLoaderStrategyFactory @Override public AbsoluteImageReference tryGetImage(String channelCode, ImageChannelStackReference channelStackReference, - RequestedImageSize imageSize) + RequestedImageSize imageSize, String transformationCodeOrNull) { return this.imageAccessor.tryGetThumbnail(channelCode, channelStackReference, - imageSize); + imageSize, transformationCodeOrNull); } @Override public AbsoluteImageReference tryGetRepresentativeImage(String channelCode, - Location wellLocationOrNull, RequestedImageSize imageSize) + Location wellLocationOrNull, RequestedImageSize imageSize, + String transformationCodeOrNull) { return imageAccessor.tryGetRepresentativeThumbnail(channelCode, - wellLocationOrNull, imageSize); + wellLocationOrNull, imageSize, transformationCodeOrNull); } }; @@ -85,18 +86,19 @@ public class ImagingLoaderStrategyFactory @Override public AbsoluteImageReference tryGetImage(String channelCode, ImageChannelStackReference channelStackReference, - RequestedImageSize imageSize) + RequestedImageSize imageSize, String transformationCodeOrNull) { return this.imageAccessor.tryGetImage(channelCode, channelStackReference, - imageSize); + imageSize, transformationCodeOrNull); } @Override public AbsoluteImageReference tryGetRepresentativeImage(String channelCode, - Location wellLocationOrNull, RequestedImageSize imageSize) + Location wellLocationOrNull, RequestedImageSize imageSize, + String transformationCodeOrNull) { return imageAccessor.tryGetRepresentativeImage(channelCode, wellLocationOrNull, - imageSize); + imageSize, transformationCodeOrNull); } }; } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/PrefixedImage.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/PrefixedImage.java index 39a46c8becb2d62a37a613b80b755c409bf47c79..d88318df57a9cccc828ad09caa5eaf09263d36e2 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/PrefixedImage.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/PrefixedImage.java @@ -30,12 +30,16 @@ public class PrefixedImage private final String pathSuffix; + private final String singleChannelTransformationCodeOrNull; + private final ImgImageDTO image; - public PrefixedImage(String pathPrefix, String pathSuffix, ImgImageDTO image) + public PrefixedImage(String pathPrefix, String pathSuffix, + String singleChannelTransformationCodeOrNull, ImgImageDTO image) { this.pathPrefix = pathPrefix; this.pathSuffix = pathSuffix; + this.singleChannelTransformationCodeOrNull = singleChannelTransformationCodeOrNull; this.image = image; } @@ -64,4 +68,8 @@ public class PrefixedImage return image.tryGetImageTransformerFactory(); } + public String tryGetSingleChannelTransformationCode() + { + return singleChannelTransformationCodeOrNull; + } } 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 60662bfa361bce92756287bd3611752e1623950f..693d53934181bd7a2b13cfc0705a39239884aa2c 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 @@ -18,8 +18,10 @@ package ch.systemsx.cisd.openbis.dss.etl.dataaccess; import java.awt.image.BufferedImage; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.commons.lang.StringUtils; @@ -48,6 +50,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ImgIm import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ImgImageDatasetDTO; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ImgImageTransformationDTO; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ImgImageZoomLevelDTO; +import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ImgImageZoomLevelTransformationEnrichedDTO; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ImgSpotDTO; /** @@ -55,6 +58,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ImgSp * * @author Tomasz Pylak * @author Piotr Buczek + * @author Pawel Glyzewski */ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDatasetLoader { @@ -91,7 +95,8 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa */ @Override public AbsoluteImageReference tryGetImage(String chosenChannelCode, - ImageChannelStackReference channelStackReference, RequestedImageSize imageSize) + ImageChannelStackReference channelStackReference, RequestedImageSize imageSize, + String singleChannelTransformationCodeOrNull) { if (StringUtils.isBlank(chosenChannelCode)) { @@ -111,7 +116,8 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa if (imageSize.isThumbnailRequired()) { imageDTO = - tryGetThumbnail(chosenChannelId, channelStackReference, datasetId, imageSize); + tryGetThumbnail(chosenChannelId, channelStackReference, datasetId, imageSize, + singleChannelTransformationCodeOrNull); } boolean thumbnailFetched = (imageDTO != null); if (imageDTO == null) @@ -124,7 +130,7 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa { imageDTO = tryGetThumbnail(chosenChannelId, channelStackReference, datasetId, - imageSize); + imageSize, singleChannelTransformationCodeOrNull); thumbnailFetched = (imageDTO != null); } } @@ -170,7 +176,8 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa createImageTransfomationFactories(image, channel); ImageLibraryInfo imageLibrary = tryGetImageLibrary(dataset, useNativeImageLibrary); return new AbsoluteImageReference(contentNode, path, image.getImageID(), colorComponent, - imageSize, getColor(channel), imageTransfomationFactories, imageLibrary); + imageSize, getColor(channel), imageTransfomationFactories, imageLibrary, + image.tryGetSingleChannelTransformationCode()); } private static ChannelColorRGB getColor(ImgChannelDTO channel) @@ -307,7 +314,7 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa + channelStackReference; image = query.tryGetImage(channelId, channelStackId, datasetId); } - return checkAccessability("", "", image); + return checkAccessability("", "", null, image); } private static ImgImageZoomLevelDTO selectBestZoomLevel(ImgImageZoomLevelDTO current, @@ -363,13 +370,15 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa private PrefixedImage tryGetThumbnail(long channelId, ImageChannelStackReference channelStackReference, long datasetId, - RequestedImageSize imageSize) + RequestedImageSize imageSize, String singleChannelTransformationCodeOrNullOrNull) { HCSChannelStackByLocationReference hcsRef = channelStackReference.tryGetHCSChannelStack(); MicroscopyChannelStackByLocationReference micRef = channelStackReference.tryGetMicroscopyChannelStack(); ImgImageDTO image; - String[] pathPrefixAndSuffix = findPathPrefixAndSuffix(datasetId, imageSize); + String[] pathPrefixAndSuffix = + findPathPrefixAndSuffix(datasetId, channelId, imageSize, + singleChannelTransformationCodeOrNullOrNull); if (hcsRef != null) { @@ -386,22 +395,61 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa + channelStackReference; image = query.tryGetThumbnail(channelId, channelStackId, datasetId); } - return checkAccessability(pathPrefixAndSuffix[0], pathPrefixAndSuffix[1], image); + return checkAccessability(pathPrefixAndSuffix[0], pathPrefixAndSuffix[1], + pathPrefixAndSuffix[2], image); } - private String[] findPathPrefixAndSuffix(long datasetId, RequestedImageSize imageSize) + private String[] findPathPrefixAndSuffix(long datasetId, long channelId, + RequestedImageSize imageSize, String singleChannelTransformationCodeOrNull) { String[] ret = new String[] - { "", "" }; + { "", "", null }; ImgImageZoomLevelDTO bestZoomLevel = null; List<ImgImageZoomLevelDTO> zoomLevels = query.listImageZoomLevels(datasetId); if (zoomLevels != null && zoomLevels.size() > 0) { - for (ImgImageZoomLevelDTO zoomLevel : zoomLevels) + if (singleChannelTransformationCodeOrNull != null) { - if (false == zoomLevel.getIsOriginal()) + List<ImgImageZoomLevelTransformationEnrichedDTO> zoomLevelTransformations = + query.findImageZoomLevelTransformations(datasetId, channelId, + singleChannelTransformationCodeOrNull); + + if (false == zoomLevelTransformations.isEmpty()) + { + + Set<Long> zoomLevelsWithTransformedImages = new HashSet<Long>(); + for (ImgImageZoomLevelTransformationEnrichedDTO zoomLevelTransformation : zoomLevelTransformations) + { + zoomLevelsWithTransformedImages.add(zoomLevelTransformation + .getImageZoomLevelId()); + } + + for (ImgImageZoomLevelDTO zoomLevel : zoomLevels) + { + if (false == zoomLevel.getIsOriginal() + && zoomLevelsWithTransformedImages.contains(zoomLevel.getId())) + { + bestZoomLevel = + selectBestZoomLevel(bestZoomLevel, zoomLevel, imageSize); + } + } + } + + if (bestZoomLevel != null) { - bestZoomLevel = selectBestZoomLevel(bestZoomLevel, zoomLevel, imageSize); + ret[2] = singleChannelTransformationCodeOrNull; + } + } + + if (bestZoomLevel == null) + { + zoomLevels = query.listImageZoomLevelsWithNoTransformations(datasetId); + for (ImgImageZoomLevelDTO zoomLevel : zoomLevels) + { + if (false == zoomLevel.getIsOriginal()) + { + bestZoomLevel = selectBestZoomLevel(bestZoomLevel, zoomLevel, imageSize); + } } } @@ -426,14 +474,14 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa } private PrefixedImage checkAccessability(String pathPrefix, String pathSuffix, - ImgImageDTO imageOrNull) + String singleChannelTransformationCodeOrNull, ImgImageDTO imageOrNull) { if (imageOrNull == null) { return null; } return isFileAccessible(pathPrefix, pathSuffix, imageOrNull) ? new PrefixedImage( - pathPrefix, pathSuffix, imageOrNull) : null; + pathPrefix, pathSuffix, singleChannelTransformationCodeOrNull, imageOrNull) : null; } private boolean isFileAccessible(String pathPrefix, String pathSuffix, ImgImageDTO image) @@ -492,7 +540,7 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa query.tryGetHCSRepresentativeImage(datasetId, wellLocationOrNull, channelId); } } - return checkAccessability("", "", image); + return checkAccessability("", "", null, image); } @Override @@ -508,7 +556,8 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa { AbsoluteImageReference image = tryGetRepresentativeImage(channelCode, - new Location(well.getColumn(), well.getRow()), originalOrThumbnail); + new Location(well.getColumn(), well.getRow()), originalOrThumbnail, + null); if (image != null) { return image; @@ -520,7 +569,8 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa @Override public AbsoluteImageReference tryGetRepresentativeImage(String channelCode, - Location wellLocationOrNull, RequestedImageSize imageSize) + Location wellLocationOrNull, RequestedImageSize imageSize, + String singleChannelTransformationCodeOrNull) { ImgChannelDTO channel = tryLoadChannel(channelCode); if (channel == null) @@ -539,10 +589,13 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa } private PrefixedImage tryGetRepresentativeThumbnailImageDTO(long channelId, - Location wellLocationOrNull, RequestedImageSize imageSize) + Location wellLocationOrNull, RequestedImageSize imageSize, + String singleChannelTransformationCodeOrNull) { long datasetId = getDataset().getId(); - String[] pathPrefixAndSuffix = findPathPrefixAndSuffix(datasetId, imageSize); + String[] pathPrefixAndSuffix = + findPathPrefixAndSuffix(datasetId, channelId, imageSize, + singleChannelTransformationCodeOrNull); ImgImageDTO image; if (wellLocationOrNull == null) @@ -554,7 +607,8 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa query.tryGetHCSRepresentativeThumbnail(dataset.getId(), wellLocationOrNull, channelId); } - return checkAccessability(pathPrefixAndSuffix[0], pathPrefixAndSuffix[1], image); + return checkAccessability(pathPrefixAndSuffix[0], pathPrefixAndSuffix[1], + pathPrefixAndSuffix[2], image); } @Override @@ -568,7 +622,7 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa { AbsoluteImageReference image = tryGetRepresentativeThumbnail(channelCode, new Location(well.getColumn(), - well.getRow()), null); + well.getRow()), null, null); if (image != null) { return image; @@ -580,7 +634,8 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa @Override public AbsoluteImageReference tryGetRepresentativeThumbnail(String channelCode, - Location wellLocationOrNull, RequestedImageSize imageSize) + Location wellLocationOrNull, RequestedImageSize imageSize, + String singleChannelTransformationCodeOrNull) { ImgChannelDTO channel = tryLoadChannel(channelCode); if (channel == null) @@ -589,7 +644,7 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa } PrefixedImage imageDTO = tryGetRepresentativeThumbnailImageDTO(channel.getId(), wellLocationOrNull, - imageSize); + imageSize, singleChannelTransformationCodeOrNull); if (imageDTO == null) { return null; @@ -600,7 +655,8 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa @Override public AbsoluteImageReference tryGetThumbnail(String channelCode, - ImageChannelStackReference channelStackReference, RequestedImageSize imageSize) + ImageChannelStackReference channelStackReference, RequestedImageSize imageSize, + String singleChannelTransformationCodeOrNull) { if (StringUtils.isBlank(channelCode)) { @@ -616,7 +672,8 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa long datasetId = getDataset().getId(); final PrefixedImage thumbnailDTO = - tryGetThumbnail(channel.getId(), channelStackReference, datasetId, imageSize); + tryGetThumbnail(channel.getId(), channelStackReference, datasetId, imageSize, + singleChannelTransformationCodeOrNull); if (thumbnailDTO == null) { return null; diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/MergingImagesDownloadServlet.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/MergingImagesDownloadServlet.java index a7e1177fb0e5b615d7b0056cda8a0ab4b88c266d..506391bd1bdbfdead2c6ede63e2346a477bbae9c 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/MergingImagesDownloadServlet.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/MergingImagesDownloadServlet.java @@ -69,7 +69,7 @@ public class MergingImagesDownloadServlet extends AbstractImagesDownloadServlet { Size thumbnailSize = tryGetThumbnailSize(resolution); return ImageChannelsUtils.getRepresentativeImageStream(datasetRoot, datasetCode, null, - thumbnailSize); + thumbnailSize, null); } private static Size tryGetThumbnailSize(ImageResolutionKind resolution) 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 d52e984085ea23c8d066bd1b432d8e73484ba08f..f3b06d50201765ffd0e91e389f85fb65e7d2d599 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 @@ -81,17 +81,23 @@ public class ImageChannelsUtils private final RequestedImageSize imageSizeLimit; + private final String singleChannelTransformationCodeOrNull; + @Private - ImageChannelsUtils(IImagingLoaderStrategy imageLoaderStrategy, RequestedImageSize imageSizeLimit) + ImageChannelsUtils(IImagingLoaderStrategy imageLoaderStrategy, + RequestedImageSize imageSizeLimit, String singleChannelTransformationCodeOrNull) { this.imageLoaderStrategy = imageLoaderStrategy; this.imageSizeLimit = imageSizeLimit; + this.singleChannelTransformationCodeOrNull = singleChannelTransformationCodeOrNull; } @Private - ImageChannelsUtils(IImagingLoaderStrategy imageLoaderStrategy, Size imageSizeLimitOrNull) + ImageChannelsUtils(IImagingLoaderStrategy imageLoaderStrategy, Size imageSizeLimitOrNull, + String singleChannelTransformationCodeOrNull) { - this(imageLoaderStrategy, new RequestedImageSize(imageSizeLimitOrNull, false)); + this(imageLoaderStrategy, new RequestedImageSize(imageSizeLimitOrNull, false), + singleChannelTransformationCodeOrNull); } /** @@ -123,7 +129,8 @@ public class ImageChannelsUtils // NOTE: never merges the overlays, draws each channel separately (merging looses // transparency and is slower) List<ImageWithReference> overlayImages = - getSingleImagesSkipNonExisting(overlayChannels, overlaySize, contentProvider); + getSingleImagesSkipNonExisting(overlayChannels, overlaySize, + params.tryGetSingleChannelTransformationCode(), contentProvider); for (ImageWithReference overlayImage : overlayImages) { if (image != null) @@ -144,10 +151,12 @@ public class ImageChannelsUtils private static List<ImageWithReference> getSingleImagesSkipNonExisting( DatasetAcquiredImagesReference imagesReference, RequestedImageSize imageSize, + String singleChannelTransformationCodeOrNull, IHierarchicalContentProvider contentProvider) { ImageChannelsUtils utils = - createImageChannelsUtils(imagesReference, contentProvider, imageSize); + createImageChannelsUtils(imagesReference, contentProvider, imageSize, + singleChannelTransformationCodeOrNull); boolean mergeAllChannels = utils.isMergeAllChannels(imagesReference); List<AbsoluteImageReference> imageContents = utils.fetchImageContents(imagesReference, mergeAllChannels, true); @@ -197,7 +206,8 @@ public class ImageChannelsUtils IHierarchicalContentProvider contentProvider, RequestedImageSize imageSizeLimit) { ImageChannelsUtils imageChannelsUtils = - createImageChannelsUtils(imageChannels, contentProvider, imageSizeLimit); + createImageChannelsUtils(imageChannels, contentProvider, imageSizeLimit, + singleChannelTransformationCodeOrNull); boolean useMergedChannelsTransformation = imageChannelsUtils.isMergeAllChannels(imageChannels); ImageTransformationParams transformationInfo = @@ -209,12 +219,13 @@ public class ImageChannelsUtils private static ImageChannelsUtils createImageChannelsUtils( DatasetAcquiredImagesReference imageChannels, - IHierarchicalContentProvider contentProvider, RequestedImageSize imageSizeLimit) + IHierarchicalContentProvider contentProvider, RequestedImageSize imageSizeLimit, + String singleChannelTransformationCodeOrNull) { IImagingDatasetLoader imageAccessor = createImageAccessor(imageChannels, contentProvider); return new ImageChannelsUtils( ImagingLoaderStrategyFactory.createImageLoaderStrategy(imageAccessor), - imageSizeLimit); + imageSizeLimit, singleChannelTransformationCodeOrNull); } @Private @@ -249,7 +260,7 @@ public class ImageChannelsUtils imagesReference.getChannelStackReference(); AbsoluteImageReference image = imageLoaderStrategy.tryGetImage(channelCode, channelStackReference, - imageSizeLimit); + imageSizeLimit, singleChannelTransformationCodeOrNull); if (image == null && skipNonExisting == false) { throw createImageNotFoundException(channelStackReference, channelCode); @@ -288,13 +299,14 @@ public class ImageChannelsUtils */ public static ResponseContentStream getRepresentativeImageStream( IHierarchicalContent dataSetRoot, String datasetCode, Location wellLocationOrNull, - Size imageSizeLimitOrNull) + Size imageSizeLimitOrNull, String singleChannelTransformationCodeOrNull) { IImagingDatasetLoader imageAccessor = createDatasetLoader(dataSetRoot, datasetCode); List<AbsoluteImageReference> imageReferences = new ImageChannelsUtils( ImagingLoaderStrategyFactory.createImageLoaderStrategy(imageAccessor), - imageSizeLimitOrNull).getRepresentativeImageReferences(wellLocationOrNull); + imageSizeLimitOrNull, singleChannelTransformationCodeOrNull) + .getRepresentativeImageReferences(wellLocationOrNull); BufferedImage image = calculateBufferedImage(imageReferences, new ImageTransformationParams(true, true, null)); @@ -354,7 +366,8 @@ public class ImageChannelsUtils : chosenChannelCode); ImageChannelsUtils imageChannelsUtils = - new ImageChannelsUtils(imageLoaderStrategy, imageSizeLimitOrNull); + new ImageChannelsUtils(imageLoaderStrategy, imageSizeLimitOrNull, + singleChannelImageTransformationCodeOrNull); boolean mergeAllChannels = imageChannelsUtils.isMergeAllChannels(imagesReference); List<AbsoluteImageReference> imageContents = imageChannelsUtils.fetchImageContents(imagesReference, mergeAllChannels, false); @@ -429,7 +442,7 @@ public class ImageChannelsUtils { AbsoluteImageReference image = imageLoaderStrategy.tryGetRepresentativeImage(channelCode, wellLocationOrNull, - imageSizeLimit); + imageSizeLimit, singleChannelTransformationCodeOrNull); if (image != null) { return image; @@ -553,11 +566,13 @@ public class ImageChannelsUtils { return resultImage; } - IImageTransformerFactory channelLevelTransformationOrNull; + IImageTransformerFactory channelLevelTransformationOrNull = null; if (transformationInfo.isUseMergedChannelsTransformation()) { channelLevelTransformationOrNull = transfomations.tryGetForMerged(); - } else + } else if (transformationInfo.tryGetSingleChannelTransformationCode() != null + && (false == transformationInfo.tryGetSingleChannelTransformationCode().equals( + imageReference.tryGetSingleChannelTransformationCode()))) { channelLevelTransformationOrNull = transfomations.tryGetForChannel(transformationInfo diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreening.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreening.java index 27e32e49eea12512a2b3bfdad451ed297fe492ce..47c456e23cb3017de9e772207c5b85545063f6af 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreening.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreening.java @@ -414,11 +414,13 @@ public class DssServiceRpcScreening extends AbstractDssServiceRpc<IDssServiceRpc IImageDatasetIdentifier dataset) { ImageDatasetParameters params = imageAccessor.getImageParameters(); + RequestedImageSize originalOrThumbnail = RequestedImageSize.createOriginal(); for (String channelCode : params.getChannelsCodes()) { AbsoluteImageReference image = - imageAccessor.tryGetRepresentativeImage(channelCode, null, originalOrThumbnail); + imageAccessor.tryGetRepresentativeImage(channelCode, null, originalOrThumbnail, + null); if (image != null) { return image.getUnchangedImage(); @@ -434,7 +436,7 @@ public class DssServiceRpcScreening extends AbstractDssServiceRpc<IDssServiceRpc for (String channelCode : params.getChannelsCodes()) { AbsoluteImageReference image = - imageAccessor.tryGetRepresentativeThumbnail(channelCode, null, null); + imageAccessor.tryGetRepresentativeThumbnail(channelCode, null, null, null); if (image != null) { return image.getUnchangedImage(); @@ -584,9 +586,11 @@ public class DssServiceRpcScreening extends AbstractDssServiceRpc<IDssServiceRpc { return loadImages(sessionToken, imageReferences, null, null, convertToPng); } - + @Override - public List<String> loadImagesBase64(String sessionToken, List<PlateImageReference> imageReferences, boolean convertToPng) { + public List<String> loadImagesBase64(String sessionToken, + List<PlateImageReference> imageReferences, boolean convertToPng) + { InputStream stream = loadImages(sessionToken, imageReferences, convertToPng); @@ -596,8 +600,10 @@ public class DssServiceRpcScreening extends AbstractDssServiceRpc<IDssServiceRpc List<String> result = new ArrayList<String>(); try { - for (byte[] bytes = extractNextImage(imagesWriter); bytes.length > 0; bytes = extractNextImage(imagesWriter)) { - result.add(Base64.encodeBytes(bytes)); + for (byte[] bytes = extractNextImage(imagesWriter); bytes.length > 0; bytes = + extractNextImage(imagesWriter)) + { + result.add(Base64.encodeBytes(bytes)); } } catch (IOException ex) { @@ -606,14 +612,13 @@ public class DssServiceRpcScreening extends AbstractDssServiceRpc<IDssServiceRpc return result; } - - private byte[] extractNextImage(ConcatenatedFileOutputStreamWriter imagesWriter) throws IOException + private byte[] extractNextImage(ConcatenatedFileOutputStreamWriter imagesWriter) + throws IOException { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); imagesWriter.writeNextBlock(outputStream); return outputStream.toByteArray(); } - @Override public InputStream loadImages(String sessionToken, List<PlateImageReference> imageReferences, diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/HCSImageResolutionLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/HCSImageResolutionLoader.java index f3bde24dbd8e085f53785773b422bb6c5a3ce333..ecbece555df538306342d7cf78adcb20c27f1bed 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/HCSImageResolutionLoader.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/HCSImageResolutionLoader.java @@ -66,7 +66,8 @@ public class HCSImageResolutionLoader implements IImageResolutionLoader @Override public List<ImageResolution> getImageResolutions() { - List<ImgImageZoomLevelDTO> zoomLevels = query.listImageZoomLevels(dataset.getId()); + List<ImgImageZoomLevelDTO> zoomLevels = + query.listImageZoomLevelsWithNoTransformations(dataset.getId()); if (zoomLevels == null || zoomLevels.isEmpty()) { @@ -85,5 +86,4 @@ public class HCSImageResolutionLoader implements IImageResolutionLoader return resolutions; } } - } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/IImagingReadonlyQueryDAO.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/IImagingReadonlyQueryDAO.java index 6d7a44b70920d5440245f2fa72410a1e55d48cb4..f6eec6d11ca3783ecb1aa3fe045e66c4d62f89a6 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/IImagingReadonlyQueryDAO.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/IImagingReadonlyQueryDAO.java @@ -248,10 +248,19 @@ public interface IImagingReadonlyQueryDAO extends BaseQuery @Select(sql = "select * from IMAGE_ZOOM_LEVELS zoom where zoom.CONTAINER_DATASET_ID = ?{1}", fetchSize = FETCH_SIZE) public List<ImgImageZoomLevelDTO> listImageZoomLevels(long datasetId); + @Select(sql = "select * from IMAGE_ZOOM_LEVELS zoom where zoom.CONTAINER_DATASET_ID = ?{1} " + + "and ID not in (select ZOOM_LEVEL_ID from IMAGE_ZOOM_LEVEL_TRANSFORMATIONS)", fetchSize = FETCH_SIZE) + public List<ImgImageZoomLevelDTO> listImageZoomLevelsWithNoTransformations(long datasetId); + @Select(sql = SQL_ZOOM_LEVEL_TRANSFORMATIONS_ENRICHED + " and zl.container_dataset_id = ?{1}", fetchSize = FETCH_SIZE) public List<ImgImageZoomLevelTransformationEnrichedDTO> listImageZoomLevelTransformations( long datasetId); + @Select(sql = SQL_ZOOM_LEVEL_TRANSFORMATIONS_ENRICHED + + " and zl.container_dataset_id = ?{1} and izlt.channel_id = ?{2} and it.code = ?{3}", fetchSize = FETCH_SIZE) + public List<ImgImageZoomLevelTransformationEnrichedDTO> findImageZoomLevelTransformations( + long datasetId, long channelId, String transformationCode); + @Select(sql = "select * from IMAGE_ZOOM_LEVELS zoom where zoom.physical_dataset_perm_id = ?{1} and zoom.is_original") public List<ImgImageZoomLevelDTO> listOriginalImageZoomLevelsByPermId(String datasetPermId); diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/etl/ImageSizeFeedingMaintenanceTaskTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/etl/ImageSizeFeedingMaintenanceTaskTest.java index ee580e11d5050e3fb829820110689e141d6b1a70..17f415dcc4247b49dc5ef257616c3ea3f92b2123 100644 --- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/etl/ImageSizeFeedingMaintenanceTaskTest.java +++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/etl/ImageSizeFeedingMaintenanceTaskTest.java @@ -42,23 +42,22 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ImgIm import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ImgImageZoomLevelDTO; /** - * - * * @author Franz-Josef Elmer */ public class ImageSizeFeedingMaintenanceTaskTest extends AssertJUnit { private static final long CONTAINER_ID = 42L; - + private static final class MockAbsoluteImageReference extends AbsoluteImageReference { private final int width; + private final int height; public MockAbsoluteImageReference(int width, int height) { super(null, null, null, null, new RequestedImageSize(null, false), null, - new ImageTransfomationFactories(), null); + new ImageTransfomationFactories(), null, null); this.width = width; this.height = height; } @@ -73,18 +72,29 @@ public class ImageSizeFeedingMaintenanceTaskTest extends AssertJUnit return new Size(width, height); } } - + private BufferedAppender logRecorder; + private Mockery context; + private IImagingQueryDAO dao; + private IEncapsulatedOpenBISService service; + private IHierarchicalContentProvider contentProvider; + private ImageSizeFeedingMaintenanceTask maintenanceTask; + private IHierarchicalContent ds1Content; + private IHierarchicalContent ds2Content; + private IHierarchicalContent ds3Content; + private IImagingDatasetLoader imageLoader1; + private IImagingDatasetLoader imageLoader2; + private IImagingDatasetLoader imageLoader3; @BeforeMethod @@ -101,7 +111,8 @@ public class ImageSizeFeedingMaintenanceTaskTest extends AssertJUnit imageLoader1 = context.mock(IImagingDatasetLoader.class, "ds1-loader"); imageLoader2 = context.mock(IImagingDatasetLoader.class, "ds2-loader"); imageLoader3 = context.mock(IImagingDatasetLoader.class, "ds3-loader"); - final Map<String, IImagingDatasetLoader> loaderMap = new HashMap<String, IImagingDatasetLoader>(); + final Map<String, IImagingDatasetLoader> loaderMap = + new HashMap<String, IImagingDatasetLoader>(); loaderMap.put("ds1", imageLoader1); loaderMap.put("ds2", imageLoader2); loaderMap.put("ds3", imageLoader3); @@ -121,14 +132,14 @@ public class ImageSizeFeedingMaintenanceTaskTest extends AssertJUnit }; assertEquals(true, maintenanceTask.requiresDataStoreLock()); } - + @AfterMethod public void tearDown() { logRecorder.reset(); context.assertIsSatisfied(); } - + @Test public void testNonMatchingOrUnknownDataSets() { @@ -139,25 +150,25 @@ public class ImageSizeFeedingMaintenanceTaskTest extends AssertJUnit { one(service).listDataSets(); will(returnValue(Arrays.asList(ds0, ds1))); - + one(contentProvider).asContent(ds1.getDataSetCode()); will(returnValue(ds1Content)); - + one(dao).tryGetImageDatasetByPermId(ds1.getDataSetCode()); will(returnValue(null)); - + one(ds1Content).close(); } }); - + maintenanceTask.execute(); - + assertEquals("Scan 2 data sets.\n" + "0 original image sizes and 0 thumbnail image sizes are added to the database.", logRecorder.getLogContent()); context.assertIsSatisfied(); } - + @Test public void testImageDataSets() { @@ -173,7 +184,8 @@ public class ImageSizeFeedingMaintenanceTaskTest extends AssertJUnit will(returnValue(Arrays.asList(ds1, ds2, ds3))); } }); - prepareListZoomLevels(ds1, ds1Content, new ImgImageZoomLevelDTO("", true, "", 1, 2, null, null, 12)); + prepareListZoomLevels(ds1, ds1Content, new ImgImageZoomLevelDTO("", true, "", 1, 2, null, + null, 12)); prepareListZoomLevels(ds2, ds2Content); prepareForTryFindAnyOriginal(ds2, imageLoader2, new MockAbsoluteImageReference(144, 89)); prepareForAddZoomLevel(zoomLevelRecorder); @@ -186,20 +198,21 @@ public class ImageSizeFeedingMaintenanceTaskTest extends AssertJUnit prepareForCommit(); maintenanceTask.execute(); - + List<ImgImageZoomLevelDTO> zoomLevels = zoomLevelRecorder.getRecordedObjects(); assertEquals("Scan 3 data sets.\n" + "Original size 144x89 added for data set ds2\n" + "Thumbnail size 21x34 added for data set ds3\n" + "1 original image sizes and 1 thumbnail image sizes are added to the database.", logRecorder.getLogContent()); - assertEquals("[ImgImageZoomLevelDTO{physicalDatasetPermId=ds2,isOriginal=true," - + "containerDatasetId=99715,rootPath=,width=144,height=89,colorDepth=<null>,fileType=<null>,id=0}, " - + "ImgImageZoomLevelDTO{physicalDatasetPermId=ds3,isOriginal=false," - + "containerDatasetId=99716,rootPath=,width=21,height=34,colorDepth=<null>,fileType=<null>,id=0}]", + assertEquals( + "[ImgImageZoomLevelDTO{physicalDatasetPermId=ds2,isOriginal=true," + + "containerDatasetId=99715,rootPath=,width=144,height=89,colorDepth=<null>,fileType=<null>,id=0}, " + + "ImgImageZoomLevelDTO{physicalDatasetPermId=ds3,isOriginal=false," + + "containerDatasetId=99716,rootPath=,width=21,height=34,colorDepth=<null>,fileType=<null>,id=0}]", zoomLevels.toString()); context.assertIsSatisfied(); } - + @Test public void testExceptionHandling() { @@ -222,22 +235,22 @@ public class ImageSizeFeedingMaintenanceTaskTest extends AssertJUnit prepareForAddZoomLevel(zoomLevelRecorder); prepareForTryFindAnyThumbnail(ds2, imageLoader2, new MockAbsoluteImageReference(-13, 0)); prepareForRollback(); - + maintenanceTask.execute(); - + List<ImgImageZoomLevelDTO> zoomLevels = zoomLevelRecorder.getRecordedObjects(); - assertEquals("Scan 2 data sets.\n" + - "2 exceptions occured:\n" + - "Data set ds1: java.lang.RuntimeException: Negative width: -1\n" + - "Data set ds2: java.lang.RuntimeException: Negative width: -13\n" + - "0 original image sizes and 0 thumbnail image sizes are added to the database.", + assertEquals("Scan 2 data sets.\n" + "2 exceptions occured:\n" + + "Data set ds1: java.lang.RuntimeException: Negative width: -1\n" + + "Data set ds2: java.lang.RuntimeException: Negative width: -13\n" + + "0 original image sizes and 0 thumbnail image sizes are added to the database.", logRecorder.getLogContent()); - assertEquals("[ImgImageZoomLevelDTO{physicalDatasetPermId=ds2,isOriginal=true," - + "containerDatasetId=99715,rootPath=,width=1,height=2,colorDepth=<null>,fileType=<null>,id=0}]", + assertEquals( + "[ImgImageZoomLevelDTO{physicalDatasetPermId=ds2,isOriginal=true," + + "containerDatasetId=99715,rootPath=,width=1,height=2,colorDepth=<null>,fileType=<null>,id=0}]", zoomLevels.toString()); context.assertIsSatisfied(); } - + private void prepareListZoomLevels(final SimpleDataSetInformationDTO dataSet, final IHierarchicalContent content, final ImgImageZoomLevelDTO... zoomLevels) { @@ -256,8 +269,7 @@ public class ImageSizeFeedingMaintenanceTaskTest extends AssertJUnit will(returnValue(imageDataSet)); one(dao).listImageZoomLevels(imageDataSet.getId()); - will(returnValue(Arrays - .asList(zoomLevels))); + will(returnValue(Arrays.asList(zoomLevels))); one(content).close(); } @@ -276,7 +288,6 @@ public class ImageSizeFeedingMaintenanceTaskTest extends AssertJUnit }); } - private void prepareForTryFindAnyThumbnail(final SimpleDataSetInformationDTO dataSet, final IImagingDatasetLoader loader, final AbsoluteImageReference thumbnailOrNull) { @@ -288,7 +299,7 @@ public class ImageSizeFeedingMaintenanceTaskTest extends AssertJUnit } }); } - + private void prepareForAddZoomLevel( final RecordingMatcher<ImgImageZoomLevelDTO> zoomLevelRecorder) { @@ -309,17 +320,17 @@ public class ImageSizeFeedingMaintenanceTaskTest extends AssertJUnit } }); } - + private void prepareForRollback() { context.checking(new Expectations() - { { - one(dao).rollback(); - } - }); + { + one(dao).rollback(); + } + }); } - + private SimpleDataSetInformationDTO dataSet(String code, String type) { SimpleDataSetInformationDTO dataSet = new SimpleDataSetInformationDTO(); diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageChannelsUtilsTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageChannelsUtilsTest.java index 7549757e7620a59ace41bf36ed5b4ae602d17d70..5c5eac15af02071fb4094e41af7380cbfe66efb3 100644 --- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageChannelsUtilsTest.java +++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageChannelsUtilsTest.java @@ -53,8 +53,8 @@ import ch.systemsx.cisd.openbis.dss.generic.server.images.dto.ImageTransformatio import ch.systemsx.cisd.openbis.dss.generic.server.images.dto.RequestedImageSize; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.Size; import ch.systemsx.cisd.openbis.dss.generic.shared.utils.ImageUtilTest; -import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.InternalImageChannel; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageDatasetParameters; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.InternalImageChannel; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.InternalImageTransformationInfo; /** @@ -180,8 +180,8 @@ public class ImageChannelsUtilsTest extends AssertJUnit { allowing(loader).getImageParameters(); ImageDatasetParameters imgParams = new ImageDatasetParameters(); - imgParams.setInternalChannels(Arrays.asList(new InternalImageChannel(CHANNEL, CHANNEL, null, - null, new ArrayList<InternalImageTransformationInfo>()))); + imgParams.setInternalChannels(Arrays.asList(new InternalImageChannel(CHANNEL, + CHANNEL, null, null, new ArrayList<InternalImageTransformationInfo>()))); will(returnValue(imgParams)); RequestedImageSize requestedSize = @@ -189,7 +189,7 @@ public class ImageChannelsUtilsTest extends AssertJUnit .createOriginal() : absoluteImageReferenceOrNull .getRequestedSize(); one(loader).tryGetImage(imageRef.getChannelCodes(null).get(0), - imageRef.getChannelStackReference(), requestedSize); + imageRef.getChannelStackReference(), requestedSize, null); will(returnValue(absoluteImageReferenceOrNull)); } }); @@ -247,14 +247,14 @@ public class ImageChannelsUtilsTest extends AssertJUnit RequestedImageSize imageSize) { return new AbsoluteImageReference(image(fileName), "id42", null, null, imageSize, - new ChannelColorRGB(0, 0, 255), new ImageTransfomationFactories(), null); + new ChannelColorRGB(0, 0, 255), new ImageTransfomationFactories(), null, null); } private ImageChannelsUtils createImageChannelsUtils(Size thumbnailSizeOrNull) { return new ImageChannelsUtils( ImagingLoaderStrategyFactory.createImageLoaderStrategy(loader), - new RequestedImageSize(thumbnailSizeOrNull, false)); + new RequestedImageSize(thumbnailSizeOrNull, false), null); } public void assertPNG(IHierarchicalContentNode image) diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreeningTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreeningTest.java index 071f8b119872e9dc52e356bc62d96bb33310bff4..23ef9d1d9a69ae595751a12a79e3e4bc1dd1d28d 100644 --- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreeningTest.java +++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreeningTest.java @@ -279,8 +279,8 @@ public class DssServiceRpcScreeningTest extends AssertJUnit { 1, 2 }; String[][] featureCodesPerDataset = new String[][] { - { "f1", "f2" }, - { "f2", "f3" } }; + { "f1", "f2" }, + { "f2", "f3" } }; prepareListAnalysisDatasets(dataSetIDs); prepareGetFeatureDefinitions(dataSetIDs, featureCodesPerDataset); @@ -304,16 +304,16 @@ public class DssServiceRpcScreeningTest extends AssertJUnit FeatureInformation[][] featureCodesPerDataset = new FeatureInformation[][] { - { - new FeatureInformation("f1", "Feature 1", - "The first feature."), - new FeatureInformation("f2", "Feature 2", - "The second feature.") }, - { - new FeatureInformation("f2", "Feature 2", - "The second feature."), - new FeatureInformation("f3", "Feature 3", - "The third feature.") } }; + { + new FeatureInformation("f1", "Feature 1", + "The first feature."), + new FeatureInformation("f2", "Feature 2", + "The second feature.") }, + { + new FeatureInformation("f2", "Feature 2", + "The second feature."), + new FeatureInformation("f3", "Feature 3", + "The third feature.") } }; prepareListAnalysisDatasets(dataSetIDs); prepareGetFeatureDefinitions(dataSetIDs, featureCodesPerDataset); @@ -339,12 +339,12 @@ public class DssServiceRpcScreeningTest extends AssertJUnit FeatureVectorDatasetReference r2 = createFeatureVectorDatasetReference(DATASET_CODE2); String[][] featureCodesPerDataset = new String[][] { - { "F1", "F2" } }; + { "F1", "F2" } }; prepareLoadFeatures(new long[] { 1 }, featureCodesPerDataset); featureCodesPerDataset = new String[][] { - { "F2" } }; + { "F2" } }; prepareLoadFeatures(new long[] { 2 }, featureCodesPerDataset); @@ -393,17 +393,17 @@ public class DssServiceRpcScreeningTest extends AssertJUnit one(imageLoader).tryGetImage( channel, ImageChannelStackReference.createHCSFromLocations(new Location(3, 1), - new Location(1, 1)), thumbnailSize); + new Location(1, 1)), thumbnailSize, null); will(returnValue(new AbsoluteImageReference(image("img1.jpg"), "img1", null, null, thumbnailSize, createBlueColor(), - new ImageTransfomationFactories(), null))); + new ImageTransfomationFactories(), null, null))); one(imageLoader).tryGetImage( channel, ImageChannelStackReference.createHCSFromLocations(new Location(3, 1), - new Location(2, 1)), thumbnailSize); + new Location(2, 1)), thumbnailSize, null); will(returnValue(new AbsoluteImageReference(image("img1.gif"), "img1", null, null, thumbnailSize, createBlueColor(), - new ImageTransfomationFactories(), null))); + new ImageTransfomationFactories(), null, null))); } }); @@ -538,18 +538,18 @@ public class DssServiceRpcScreeningTest extends AssertJUnit one(imageLoader).tryGetImage( CHANNEL_CODE, ImageChannelStackReference.createHCSFromLocations(new Location(1, 1), - new Location(1, 1)), thumbnailSize); + new Location(1, 1)), thumbnailSize, null); will(returnValue(new AbsoluteImageReference(image("img1.jpg"), "img1", null, null, thumbnailSize, createBlueColor(), - new ImageTransfomationFactories(), null))); + new ImageTransfomationFactories(), null, null))); one(imageLoader).tryGetImage( CHANNEL_CODE, ImageChannelStackReference.createHCSFromLocations(new Location(2, 1), - new Location(2, 1)), thumbnailSize); + new Location(2, 1)), thumbnailSize, null); will(returnValue(new AbsoluteImageReference(image("img1.png"), "img1", null, null, thumbnailSize, createBlueColor(), - new ImageTransfomationFactories(), null))); + new ImageTransfomationFactories(), null, null))); } }); @@ -826,8 +826,8 @@ public class DssServiceRpcScreeningTest extends AssertJUnit new PlateFeatureValues(NativeTaggedArray .toByteArray(new MDFloatArray(new float[][] { - { 3.5f * dataSetId + offset }, - { 1.25f * dataSetId + offset } }))); + { 3.5f * dataSetId + offset }, + { 1.25f * dataSetId + offset } }))); ImgFeatureValuesDTO value = new ImgFeatureValuesDTO(0.0, 0.0, matrixValues, 0L); value.setFeatureDefId(featureDefIds[featureDefIx]);