Skip to content
Snippets Groups Projects
Commit 767767ec authored by felmer's avatar felmer
Browse files

LMS-1888 using IContentProvider and ContentProviderBasedContent for delivering images

SVN: 18894
parent 075720e1
No related branches found
No related tags found
No related merge requests found
...@@ -40,7 +40,9 @@ import ch.systemsx.cisd.common.api.server.RpcServiceNameServer; ...@@ -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.EnvironmentFailureException;
import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.exceptions.UserFailureException;
import ch.systemsx.cisd.common.io.ConcatenatedContentInputStream; 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.IContent;
import ch.systemsx.cisd.common.io.IContentProvider;
import ch.systemsx.cisd.common.spring.IInvocationLoggerContext; import ch.systemsx.cisd.common.spring.IInvocationLoggerContext;
import ch.systemsx.cisd.openbis.dss.etl.AbsoluteImageReference; import ch.systemsx.cisd.openbis.dss.etl.AbsoluteImageReference;
import ch.systemsx.cisd.openbis.dss.etl.HCSImageDatasetLoaderFactory; import ch.systemsx.cisd.openbis.dss.etl.HCSImageDatasetLoaderFactory;
...@@ -352,20 +354,24 @@ public class DssServiceRpcScreening extends AbstractDssServiceRpc<IDssServiceRpc ...@@ -352,20 +354,24 @@ public class DssServiceRpcScreening extends AbstractDssServiceRpc<IDssServiceRpc
} }
public InputStream loadImages(String sessionToken, List<PlateImageReference> imageReferences, public InputStream loadImages(String sessionToken, List<PlateImageReference> imageReferences,
Size sizeOrNull, boolean convertToPng) final Size sizeOrNull, final boolean convertToPng)
{ {
checkDatasetsAuthorizationForIDatasetIdentifier(sessionToken, imageReferences); checkDatasetsAuthorizationForIDatasetIdentifier(sessionToken, imageReferences);
final Map<String, IHCSImageDatasetLoader> imageLoadersMap = final Map<String, IHCSImageDatasetLoader> imageLoadersMap =
getImageDatasetsMap(sessionToken, imageReferences); getImageDatasetsMap(sessionToken, imageReferences);
final List<IContent> imageContents = new ArrayList<IContent>(); final List<IContent> imageContents = new ArrayList<IContent>();
for (PlateImageReference imageReference : imageReferences) for (final PlateImageReference imageReference : imageReferences)
{ {
final IHCSImageDatasetLoader imageAccessor = final IHCSImageDatasetLoader imageAccessor =
imageLoadersMap.get(imageReference.getDatasetCode()); imageLoadersMap.get(imageReference.getDatasetCode());
assert imageAccessor != null : "imageAccessor not found for: " + imageReference; assert imageAccessor != null : "imageAccessor not found for: " + imageReference;
IContent content = imageContents.add(new ContentProviderBasedContent(new IContentProvider()
tryGetImageContent(imageAccessor, imageReference, sizeOrNull, convertToPng); {
imageContents.add(content); public IContent getContent()
{
return tryGetImageContent(imageAccessor, imageReference, sizeOrNull, convertToPng);
}
}));
} }
return new ConcatenatedContentInputStream(true, imageContents); return new ConcatenatedContentInputStream(true, imageContents);
} }
...@@ -381,19 +387,25 @@ public class DssServiceRpcScreening extends AbstractDssServiceRpc<IDssServiceRpc ...@@ -381,19 +387,25 @@ public class DssServiceRpcScreening extends AbstractDssServiceRpc<IDssServiceRpc
{ {
String datasetCode = dataSetIdentifier.getDatasetCode(); String datasetCode = dataSetIdentifier.getDatasetCode();
File rootDir = getRootDirectoryForDataSet(datasetCode); File rootDir = getRootDirectoryForDataSet(datasetCode);
IHCSImageDatasetLoader imageAccessor = createImageLoader(datasetCode, rootDir); final IHCSImageDatasetLoader imageAccessor = createImageLoader(datasetCode, rootDir);
List<PlateImageReference> imageReferences = List<PlateImageReference> imageReferences =
createPlateImageReferences(imageAccessor, dataSetIdentifier, wellPositions, channel); createPlateImageReferences(imageAccessor, dataSetIdentifier, wellPositions, channel);
Size size = convertToSize(thumbnailSizeOrNull); final Size size = convertToSize(thumbnailSizeOrNull);
List<IContent> imageContents = new ArrayList<IContent>(); List<IContent> imageContents = new ArrayList<IContent>();
for (PlateImageReference imageReference : imageReferences)
for (final PlateImageReference imageReference : imageReferences)
{ {
IContent content = tryGetImageContent(imageAccessor, imageReference, size, true); imageContents.add(new ContentProviderBasedContent(new IContentProvider()
imageContents.add(content); {
public IContent getContent()
{
return tryGetImageContent(imageAccessor, imageReference, size, true);
}
}));
} }
return new ConcatenatedContentInputStream(true, imageContents); return new ConcatenatedContentInputStream(true, imageContents);
} }
public List<PlateImageReference> listPlateImageReferences(String sessionToken, public List<PlateImageReference> listPlateImageReferences(String sessionToken,
IDatasetIdentifier dataSetIdentifier, List<WellPosition> wellPositions, String channel) IDatasetIdentifier dataSetIdentifier, List<WellPosition> wellPositions, String channel)
{ {
......
...@@ -283,7 +283,7 @@ public interface IScreeningOpenbisServiceFacade ...@@ -283,7 +283,7 @@ public interface IScreeningOpenbisServiceFacade
* which the specified data sets belong. * which the specified data sets belong.
*/ */
public void saveImageTransformerFactory(List<IDatasetIdentifier> dataSetIdentifiers, String channel, 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 * Returns the transformer factory for the specified channel and the experiment to which
......
...@@ -596,7 +596,7 @@ public class ScreeningOpenbisServiceFacade implements IScreeningOpenbisServiceFa ...@@ -596,7 +596,7 @@ public class ScreeningOpenbisServiceFacade implements IScreeningOpenbisServiceFa
} }
public void saveImageTransformerFactory(List<IDatasetIdentifier> dataSetIdentifiers, String channel, public void saveImageTransformerFactory(List<IDatasetIdentifier> dataSetIdentifiers, String channel,
IImageTransformerFactory transformerFactory) IImageTransformerFactory transformerFactoryOrNull)
{ {
Map<String, List<IDatasetIdentifier>> map = getReferencesPerDss(dataSetIdentifiers); Map<String, List<IDatasetIdentifier>> map = getReferencesPerDss(dataSetIdentifiers);
Set<Entry<String, List<IDatasetIdentifier>>> entrySet = map.entrySet(); Set<Entry<String, List<IDatasetIdentifier>>> entrySet = map.entrySet();
...@@ -604,7 +604,7 @@ public class ScreeningOpenbisServiceFacade implements IScreeningOpenbisServiceFa ...@@ -604,7 +604,7 @@ public class ScreeningOpenbisServiceFacade implements IScreeningOpenbisServiceFa
{ {
String serverUrl = entry.getKey(); String serverUrl = entry.getKey();
IDssServiceRpcScreening service = dssServiceCache.createDssService(serverUrl).getService(); IDssServiceRpcScreening service = dssServiceCache.createDssService(serverUrl).getService();
service.saveImageTransformerFactory(sessionToken, entry.getValue(), channel, transformerFactory); service.saveImageTransformerFactory(sessionToken, entry.getValue(), channel, transformerFactoryOrNull);
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment