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 db67b2573b149333196d2a79c88dbc8ada92cad2..10c0603e458647a243e96a2ecd6864102423dfb8 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 @@ -40,7 +40,9 @@ import ch.systemsx.cisd.common.api.server.RpcServiceNameServer; import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.io.ConcatenatedContentInputStream; +import ch.systemsx.cisd.common.io.ContentProviderBasedContent; import ch.systemsx.cisd.common.io.IContent; +import ch.systemsx.cisd.common.io.IContentProvider; import ch.systemsx.cisd.common.spring.IInvocationLoggerContext; import ch.systemsx.cisd.openbis.dss.etl.AbsoluteImageReference; import ch.systemsx.cisd.openbis.dss.etl.HCSImageDatasetLoaderFactory; @@ -352,20 +354,24 @@ public class DssServiceRpcScreening extends AbstractDssServiceRpc<IDssServiceRpc } public InputStream loadImages(String sessionToken, List<PlateImageReference> imageReferences, - Size sizeOrNull, boolean convertToPng) + final Size sizeOrNull, final boolean convertToPng) { checkDatasetsAuthorizationForIDatasetIdentifier(sessionToken, imageReferences); final Map<String, IHCSImageDatasetLoader> imageLoadersMap = getImageDatasetsMap(sessionToken, imageReferences); final List<IContent> imageContents = new ArrayList<IContent>(); - for (PlateImageReference imageReference : imageReferences) + for (final PlateImageReference imageReference : imageReferences) { final IHCSImageDatasetLoader imageAccessor = imageLoadersMap.get(imageReference.getDatasetCode()); assert imageAccessor != null : "imageAccessor not found for: " + imageReference; - IContent content = - tryGetImageContent(imageAccessor, imageReference, sizeOrNull, convertToPng); - imageContents.add(content); + imageContents.add(new ContentProviderBasedContent(new IContentProvider() + { + public IContent getContent() + { + return tryGetImageContent(imageAccessor, imageReference, sizeOrNull, convertToPng); + } + })); } return new ConcatenatedContentInputStream(true, imageContents); } @@ -381,19 +387,25 @@ public class DssServiceRpcScreening extends AbstractDssServiceRpc<IDssServiceRpc { String datasetCode = dataSetIdentifier.getDatasetCode(); File rootDir = getRootDirectoryForDataSet(datasetCode); - IHCSImageDatasetLoader imageAccessor = createImageLoader(datasetCode, rootDir); + final IHCSImageDatasetLoader imageAccessor = createImageLoader(datasetCode, rootDir); List<PlateImageReference> imageReferences = createPlateImageReferences(imageAccessor, dataSetIdentifier, wellPositions, channel); - Size size = convertToSize(thumbnailSizeOrNull); + final Size size = convertToSize(thumbnailSizeOrNull); List<IContent> imageContents = new ArrayList<IContent>(); - for (PlateImageReference imageReference : imageReferences) + + for (final PlateImageReference imageReference : imageReferences) { - IContent content = tryGetImageContent(imageAccessor, imageReference, size, true); - imageContents.add(content); + imageContents.add(new ContentProviderBasedContent(new IContentProvider() + { + public IContent getContent() + { + return tryGetImageContent(imageAccessor, imageReference, size, true); + } + })); } return new ConcatenatedContentInputStream(true, imageContents); } - + public List<PlateImageReference> listPlateImageReferences(String sessionToken, IDatasetIdentifier dataSetIdentifier, List<WellPosition> wellPositions, String channel) { diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/api/v1/IScreeningOpenbisServiceFacade.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/api/v1/IScreeningOpenbisServiceFacade.java index 0bbd38133778805b272c8a09cd2b74f30dc45972..1195eca66e64d612bf06569e916d7bc6cfc21f15 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/api/v1/IScreeningOpenbisServiceFacade.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/api/v1/IScreeningOpenbisServiceFacade.java @@ -283,7 +283,7 @@ public interface IScreeningOpenbisServiceFacade * which the specified data sets belong. */ public void saveImageTransformerFactory(List<IDatasetIdentifier> dataSetIdentifiers, String channel, - IImageTransformerFactory transformerFactory); + IImageTransformerFactory transformerFactoryOrNull); /** * Returns the transformer factory for the specified channel and the experiment to which diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/api/v1/ScreeningOpenbisServiceFacade.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/api/v1/ScreeningOpenbisServiceFacade.java index b9923dc93558dc7338e6374f8fa861c521f1d560..943dc7e6ec052f38e1c8af33ac963f8648768afa 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/api/v1/ScreeningOpenbisServiceFacade.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/api/v1/ScreeningOpenbisServiceFacade.java @@ -596,7 +596,7 @@ public class ScreeningOpenbisServiceFacade implements IScreeningOpenbisServiceFa } public void saveImageTransformerFactory(List<IDatasetIdentifier> dataSetIdentifiers, String channel, - IImageTransformerFactory transformerFactory) + IImageTransformerFactory transformerFactoryOrNull) { Map<String, List<IDatasetIdentifier>> map = getReferencesPerDss(dataSetIdentifiers); Set<Entry<String, List<IDatasetIdentifier>>> entrySet = map.entrySet(); @@ -604,7 +604,7 @@ public class ScreeningOpenbisServiceFacade implements IScreeningOpenbisServiceFa { String serverUrl = entry.getKey(); IDssServiceRpcScreening service = dssServiceCache.createDssService(serverUrl).getService(); - service.saveImageTransformerFactory(sessionToken, entry.getValue(), channel, transformerFactory); + service.saveImageTransformerFactory(sessionToken, entry.getValue(), channel, transformerFactoryOrNull); } }