From 9de5f7189de8f024b1f40021a0e97a96a19425b6 Mon Sep 17 00:00:00 2001
From: pkupczyk <pkupczyk>
Date: Wed, 16 Apr 2014 14:34:41 +0000
Subject: [PATCH] SSDM-75 / Javascript-based Microscopy Data Viewer - new API
 methods for fetching image series related data

SVN: 31384
---
 .../public/resources/js/openbis-screening.js  |  26 ++++
 .../screening/server/ScreeningServer.java     |  73 ++++++++-
 .../screening/server/ScreeningServerJson.java |  32 +++-
 .../server/ScreeningServerLogger.java         |  16 ++
 .../dto/DatasetImagesReferenceTranslator.java |  38 +++++
 ...tasetOverlayImagesReferenceTranslator.java |  42 +++++
 .../dto/ImageChannelStackTranslator.java      |  44 ++++++
 ...ageDatasetEnrichedReferenceTranslator.java |  57 +++++++
 .../dto/ImageDatasetParametersTranslator.java |  61 ++++++++
 .../logic/dto/ImageResolutionTranslator.java  |  40 +++++
 .../dto/InternalImageChannelTranslator.java   |  60 ++++++++
 ...rnalImageTransformationInfoTranslator.java |  45 ++++++
 .../logic/dto/LogicalImageInfoTranslator.java |  56 +++++++
 .../logic/dto/WellLocationTranslator.java     |  36 +++++
 .../shared/api/v1/IScreeningApiServer.java    | 143 ++++++++----------
 .../api/v1/dto/DatasetImagesReference.java    |  44 ++++++
 .../v1/dto/DatasetOverlayImagesReference.java |  42 +++++
 .../shared/api/v1/dto/ImageChannelStack.java  | 100 ++++++++++++
 .../v1/dto/ImageDatasetEnrichedReference.java |  57 +++++++
 .../api/v1/dto/ImageDatasetParameters.java    | 129 ++++++++++++++++
 .../shared/api/v1/dto/ImageResolution.java    |  56 +++++++
 .../api/v1/dto/InternalImageChannel.java      |  93 ++++++++++++
 .../dto/InternalImageTransformationInfo.java  |  92 +++++++++++
 .../shared/api/v1/dto/LogicalImageInfo.java   |  57 +++++++
 .../shared/api/v1/dto/WellLocation.java       |  56 +++++++
 .../basic/dto/ImageDatasetParameters.java     |   5 +
 26 files changed, 1416 insertions(+), 84 deletions(-)
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/DatasetImagesReferenceTranslator.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/DatasetOverlayImagesReferenceTranslator.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/ImageChannelStackTranslator.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/ImageDatasetEnrichedReferenceTranslator.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/ImageDatasetParametersTranslator.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/ImageResolutionTranslator.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/InternalImageChannelTranslator.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/InternalImageTransformationInfoTranslator.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/LogicalImageInfoTranslator.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/WellLocationTranslator.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/DatasetImagesReference.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/DatasetOverlayImagesReference.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageChannelStack.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageDatasetEnrichedReference.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageDatasetParameters.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageResolution.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/InternalImageChannel.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/InternalImageTransformationInfo.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/LogicalImageInfo.java
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/WellLocation.java

diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/js/openbis-screening.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/js/openbis-screening.js
index a39730902bb..f8e4a232297 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/js/openbis-screening.js
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/js/openbis-screening.js
@@ -143,6 +143,32 @@ openbis.prototype.listImageDatasets = function(plateIdentifiers, action) {
     });
 }
 
+/**
+ * @see IScreeningApiServer.getImageInfo(String, String, WellLocation)
+ * @method
+ */
+openbis.prototype.getImageInfo = function(dataSetCode, wellLocation, action) {
+    this._internal.ajaxRequest({
+            url: this._internal.screeningUrl,
+            data: { "method" : "getImageInfo",
+                    "params" : [ this.getSession(), dataSetCode, wellLocation ] },
+            success: action
+    });
+}
+
+/**
+ * @see IScreeningApiServer.getImageResolutions(String, String)
+ * @method
+ */
+openbis.prototype.getImageResolutions = function(dataSetCode, action) {
+    this._internal.ajaxRequest({
+            url: this._internal.screeningUrl,
+            data: { "method" : "getImageResolutions",
+                    "params" : [ this.getSession(), dataSetCode ] },
+            success: action
+    });
+}
+
 /**
  * @see IScreeningApiServer.listRawImageDatasets(String, List<? extends PlateIdentifier>)
  * @method
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServer.java
index 3ca1daa746b..8ca11efceda 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServer.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServer.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.plugin.screening.server;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.LinkedList;
 import java.util.List;
 
 import javax.annotation.Resource;
@@ -25,6 +26,7 @@ import javax.annotation.Resource;
 import net.lemnik.eodsql.DataIterator;
 import net.lemnik.eodsql.QueryTool;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.stereotype.Component;
@@ -72,6 +74,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleParentWithDerived;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
@@ -108,6 +111,9 @@ import ch.systemsx.cisd.openbis.plugin.screening.server.logic.PlateContentLoader
 import ch.systemsx.cisd.openbis.plugin.screening.server.logic.ScreeningApiImpl;
 import ch.systemsx.cisd.openbis.plugin.screening.server.logic.ScreeningUtils;
 import ch.systemsx.cisd.openbis.plugin.screening.server.logic.WellContentLoader;
+import ch.systemsx.cisd.openbis.plugin.screening.server.logic.dto.ImageResolutionTranslator;
+import ch.systemsx.cisd.openbis.plugin.screening.server.logic.dto.LogicalImageInfoTranslator;
+import ch.systemsx.cisd.openbis.plugin.screening.server.logic.dto.WellLocationTranslator;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.IScreeningServer;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.ResourceNames;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.IScreeningApiServer;
@@ -176,7 +182,7 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl
     /**
      * The minor version of this service.
      */
-    public static final int MINOR_VERSION = 10;
+    public static final int MINOR_VERSION = 11;
 
     @Resource(name = ResourceNames.SCREENING_BUSINESS_OBJECT_FACTORY)
     private IScreeningBusinessObjectFactory businessObjectFactory;
@@ -543,6 +549,71 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl
         return createScreeningApiImpl(sessionToken).listImageDatasets(plates);
     }
 
+    @Override
+    @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER)
+    public ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.LogicalImageInfo getImageInfo(String sessionToken,
+            @AuthorizationGuard(guardClass = DataSetCodePredicate.class)
+            String datasetCode, ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.WellLocation wellLocationOrNull)
+    {
+        checkSession(sessionToken);
+
+        if (StringUtils.isBlank(datasetCode))
+        {
+            throw new IllegalArgumentException("Data set code was null or empty");
+        }
+
+        DataPE dataSet = daoFactory.getDataDAO().tryToFindDataSetByCode(datasetCode);
+
+        if (dataSet == null)
+        {
+            return null;
+        }
+
+        WellLocation internalWellLocation = new WellLocationTranslator().translate(wellLocationOrNull);
+
+        LogicalImageInfo internalInfo = getImageDatasetInfo(sessionToken, datasetCode, dataSet.getDataStore().getCode(), internalWellLocation);
+
+        return new LogicalImageInfoTranslator().translate(internalInfo);
+    }
+
+    @Override
+    @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER)
+    public List<ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageResolution> getImageResolutions(String sessionToken,
+            @AuthorizationGuard(guardClass = DataSetCodePredicate.class)
+            String datasetCode)
+    {
+        checkSession(sessionToken);
+
+        if (StringUtils.isBlank(datasetCode))
+        {
+            throw new IllegalArgumentException("Data set code was null or empty");
+        }
+
+        DataPE dataSet = daoFactory.getDataDAO().tryToFindDataSetByCode(datasetCode);
+
+        if (dataSet == null)
+        {
+            return null;
+        }
+
+        List<ImageResolution> internalResolutions = getImageDatasetResolutions(sessionToken, datasetCode, dataSet.getDataStore().getCode());
+
+        if (internalResolutions == null)
+        {
+            return null;
+        }
+
+        List<ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageResolution> apiResolutions =
+                new LinkedList<ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageResolution>();
+
+        for (ImageResolution internalResolution : internalResolutions)
+        {
+            apiResolutions.add(new ImageResolutionTranslator().translate(internalResolution));
+        }
+
+        return apiResolutions;
+    }
+
     @Override
     @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER)
     public List<ImageDatasetReference> listRawImageDatasets(String sessionToken,
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServerJson.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServerJson.java
index 23760d16e9e..14c5f09335b 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServerJson.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServerJson.java
@@ -38,8 +38,10 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.IImageReprese
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageDatasetMetadata;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageDatasetReference;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageRepresentationFormat;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageResolution;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageSize;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.LoadImageConfiguration;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.LogicalImageInfo;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.MaterialIdentifier;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.MaterialTypeIdentifier;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.Plate;
@@ -49,6 +51,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.PlateMetadata
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.PlateWellMaterialMapping;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.PlateWellReferenceWithDatasets;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.WellIdentifier;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.WellLocation;
 
 /**
  * @author pkupczyk
@@ -316,10 +319,21 @@ public class ScreeningServerJson implements IScreeningApiServer
         return server.loadPhysicalThumbnailsBase64(sessionToken, imageReferences, format);
     }
 
+    @Override
+    public LogicalImageInfo getImageInfo(String sessionToken, String datasetCode, WellLocation wellLocationOrNull)
+    {
+        return server.getImageInfo(sessionToken, datasetCode, wellLocationOrNull);
+    }
+
+    @Override
+    public List<ImageResolution> getImageResolutions(String sessionToken, String datasetCode)
+    {
+        return new ImageResolutionList(getImageResolutions(sessionToken, datasetCode));
+    }
+
     /*
-     * The collections listed below have been created to help Jackson library embed/detect types of
-     * the collection's items during JSON serialization/deserialization. (see
-     * http://wiki.fasterxml.com/JacksonPolymorphicDeserialization#A5._Known_Issues)
+     * The collections listed below have been created to help Jackson library embed/detect types of the collection's items during JSON
+     * serialization/deserialization. (see http://wiki.fasterxml.com/JacksonPolymorphicDeserialization#A5._Known_Issues)
      */
 
     private static class FeatureVectorDatasetReferenceList extends
@@ -477,4 +491,16 @@ public class ScreeningServerJson implements IScreeningApiServer
         }
     }
 
+    private static class ImageResolutionList extends
+            ArrayList<ImageResolution> implements IModifiable
+    {
+        private static final long serialVersionUID = 1L;
+
+        public ImageResolutionList(
+                Collection<? extends ImageResolution> c)
+        {
+            super(c);
+        }
+    }
+
 }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServerLogger.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServerLogger.java
index 5d6a0918a96..52de1ee8332 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServerLogger.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningServerLogger.java
@@ -179,6 +179,22 @@ final class ScreeningServerLogger extends AbstractServerLogger implements IScree
         return null;
     }
 
+    @Override
+    public ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.LogicalImageInfo getImageInfo(String sessionToken, String datasetCode,
+            ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.WellLocation wellLocationOrNull)
+    {
+        logAccess(sessionToken, "getImageInfo", "dataset(%s) well(%s)", datasetCode, wellLocationOrNull);
+        return null;
+    }
+
+    @Override
+    public List<ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageResolution> getImageResolutions(String sessionToken,
+            String datasetCode)
+    {
+        logAccess(sessionToken, "getImageResolutions", "dataset(%s)", datasetCode);
+        return null;
+    }
+
     @Override
     public ImageDatasetEnrichedReference getImageDatasetReference(String sessionToken,
             String datasetCode, String datastoreCode)
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/DatasetImagesReferenceTranslator.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/DatasetImagesReferenceTranslator.java
new file mode 100644
index 00000000000..2c036920e7f
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/DatasetImagesReferenceTranslator.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.server.logic.dto;
+
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.DatasetImagesReference;
+
+/**
+ * @author pkupczyk
+ */
+public class DatasetImagesReferenceTranslator
+{
+
+    public DatasetImagesReference translate(ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.DatasetImagesReference internalReference)
+    {
+        if (internalReference == null)
+        {
+            return null;
+        }
+
+        DatasetImagesReference apiReference = new DatasetImagesReference();
+        apiReference.setImageParameters(new ImageDatasetParametersTranslator().translate(internalReference.getImageParameters()));
+        return apiReference;
+    }
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/DatasetOverlayImagesReferenceTranslator.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/DatasetOverlayImagesReferenceTranslator.java
new file mode 100644
index 00000000000..51ae47501f3
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/DatasetOverlayImagesReferenceTranslator.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.server.logic.dto;
+
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.DatasetOverlayImagesReference;
+
+/**
+ * @author pkupczyk
+ */
+public class DatasetOverlayImagesReferenceTranslator
+{
+
+    public DatasetOverlayImagesReference translate(
+            ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.DatasetOverlayImagesReference internalOverlay)
+    {
+        if (internalOverlay == null)
+        {
+            return null;
+        }
+
+        DatasetOverlayImagesReference apiOverlay = new DatasetOverlayImagesReference();
+        apiOverlay.setAnalysisProcedureOrNull(internalOverlay.tryGetAnalysisProcedure());
+        apiOverlay.setImageParameters(new ImageDatasetParametersTranslator().translate(internalOverlay.getImageParameters()));
+
+        return apiOverlay;
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/ImageChannelStackTranslator.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/ImageChannelStackTranslator.java
new file mode 100644
index 00000000000..d37bd6a3928
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/ImageChannelStackTranslator.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.server.logic.dto;
+
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageChannelStack;
+
+/**
+ * @author pkupczyk
+ */
+public class ImageChannelStackTranslator
+{
+
+    public ImageChannelStack translate(ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageChannelStack internalStack)
+    {
+        if (internalStack == null)
+        {
+            return null;
+        }
+
+        ImageChannelStack apiStack = new ImageChannelStack();
+        apiStack.setId(internalStack.getChannelStackTechId());
+        apiStack.setTileCol(internalStack.getTileCol());
+        apiStack.setTileRow(internalStack.getTileRow());
+        apiStack.setSeriesNumberOrNull(internalStack.tryGetSeriesNumber());
+        apiStack.setDepthOrNull(internalStack.tryGetDepth());
+        apiStack.setTimePointOrNull(internalStack.tryGetTimepoint());
+        return apiStack;
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/ImageDatasetEnrichedReferenceTranslator.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/ImageDatasetEnrichedReferenceTranslator.java
new file mode 100644
index 00000000000..89372c072ee
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/ImageDatasetEnrichedReferenceTranslator.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.server.logic.dto;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.DatasetOverlayImagesReference;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageDatasetEnrichedReference;
+
+/**
+ * @author pkupczyk
+ */
+public class ImageDatasetEnrichedReferenceTranslator
+{
+
+    public ImageDatasetEnrichedReference translate(
+            ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageDatasetEnrichedReference internalReference)
+    {
+        if (internalReference == null)
+        {
+            return null;
+        }
+
+        ImageDatasetEnrichedReference apiReference = new ImageDatasetEnrichedReference();
+        apiReference.setImageDataset(new DatasetImagesReferenceTranslator().translate(internalReference.getImageDataset()));
+
+        if (internalReference.getOverlayDatasets() != null)
+        {
+            List<DatasetOverlayImagesReference> apiOverlays = new LinkedList<DatasetOverlayImagesReference>();
+
+            for (ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.DatasetOverlayImagesReference internalOverlay : internalReference
+                    .getOverlayDatasets())
+            {
+                apiOverlays.add(new DatasetOverlayImagesReferenceTranslator().translate(internalOverlay));
+            }
+
+            apiReference.setOverlayDatasets(apiOverlays);
+        }
+
+        return apiReference;
+    }
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/ImageDatasetParametersTranslator.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/ImageDatasetParametersTranslator.java
new file mode 100644
index 00000000000..ae64e1feeb6
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/ImageDatasetParametersTranslator.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.server.logic.dto;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageDatasetParameters;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.InternalImageChannel;
+
+/**
+ * @author pkupczyk
+ */
+public class ImageDatasetParametersTranslator
+{
+
+    public ImageDatasetParameters translate(ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageDatasetParameters internalParameters)
+    {
+        if (internalParameters == null)
+        {
+            return null;
+        }
+
+        ImageDatasetParameters apiParameters = new ImageDatasetParameters();
+        apiParameters.setDatasetCode(internalParameters.getDatasetCode());
+        apiParameters.setRowsNumOrNull(internalParameters.tryGetRowsNum());
+        apiParameters.setColsNumOrNull(internalParameters.tryGetColsNum());
+        apiParameters.setTileRowsNum(internalParameters.getTileRowsNum());
+        apiParameters.setTileColsNum(internalParameters.getTileColsNum());
+        apiParameters.setMultidimensional(internalParameters.isMultidimensional());
+        apiParameters.setMergedChannelTransformerFactorySignatureOrNull(internalParameters.tryGetMergedChannelTransformerFactorySignature());
+
+        if (internalParameters.getChannels() != null)
+        {
+            List<InternalImageChannel> apiChannels = new LinkedList<InternalImageChannel>();
+
+            for (ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.InternalImageChannel internalChannel : internalParameters.getChannels())
+            {
+                apiChannels.add(new InternalImageChannelTranslator().translate(internalChannel));
+            }
+
+            apiParameters.setChannels(apiChannels);
+        }
+
+        return apiParameters;
+    }
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/ImageResolutionTranslator.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/ImageResolutionTranslator.java
new file mode 100644
index 00000000000..9b5d82898fd
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/ImageResolutionTranslator.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.server.logic.dto;
+
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageResolution;
+
+/**
+ * @author pkupczyk
+ */
+public class ImageResolutionTranslator
+{
+
+    public ImageResolution translate(ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageResolution internalResolution)
+    {
+        if (internalResolution == null)
+        {
+            return null;
+        }
+
+        ImageResolution apiResolution = new ImageResolution();
+        apiResolution.setHeight(internalResolution.getHeight());
+        apiResolution.setWidth(internalResolution.getWidth());
+        return apiResolution;
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/InternalImageChannelTranslator.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/InternalImageChannelTranslator.java
new file mode 100644
index 00000000000..ac6995f5c1a
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/InternalImageChannelTranslator.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.server.logic.dto;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.InternalImageChannel;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.InternalImageTransformationInfo;
+
+/**
+ * @author pkupczyk
+ */
+public class InternalImageChannelTranslator
+{
+
+    public InternalImageChannel translate(ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.InternalImageChannel internalChannel)
+    {
+        if (internalChannel == null)
+        {
+            return null;
+        }
+
+        InternalImageChannel apiChannel = new InternalImageChannel();
+        apiChannel.setCode(internalChannel.getCode());
+        apiChannel.setLabel(internalChannel.getLabel());
+        apiChannel.setDescription(internalChannel.tryGetDescription());
+        apiChannel.setWavelength(internalChannel.tryGetWavelength());
+
+        if (internalChannel.getAvailableImageTransformations() != null)
+        {
+            List<InternalImageTransformationInfo> apiTransformations = new LinkedList<InternalImageTransformationInfo>();
+
+            for (ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.InternalImageTransformationInfo internalTransformation : internalChannel
+                    .getAvailableImageTransformations())
+            {
+                apiTransformations.add(new InternalImageTransformationInfoTranslator().translate(internalTransformation));
+            }
+
+            apiChannel.setAvailableImageTransformations(apiTransformations);
+        }
+
+        return apiChannel;
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/InternalImageTransformationInfoTranslator.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/InternalImageTransformationInfoTranslator.java
new file mode 100644
index 00000000000..a1b7941bdd7
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/InternalImageTransformationInfoTranslator.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.server.logic.dto;
+
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.InternalImageTransformationInfo;
+
+/**
+ * @author pkupczyk
+ */
+public class InternalImageTransformationInfoTranslator
+{
+
+    public InternalImageTransformationInfo translate(
+            ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.InternalImageTransformationInfo internalTransformation)
+    {
+        if (internalTransformation == null)
+        {
+            return null;
+        }
+
+        InternalImageTransformationInfo apiTransformation = new InternalImageTransformationInfo();
+        apiTransformation.setCode(internalTransformation.getCode());
+        apiTransformation.setLabel(internalTransformation.getLabel());
+        apiTransformation.setDescription(internalTransformation.getDescription());
+        apiTransformation.setTransformationSignature(internalTransformation.getTransformationSignature());
+        apiTransformation.setDefault(internalTransformation.isDefault());
+
+        return apiTransformation;
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/LogicalImageInfoTranslator.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/LogicalImageInfoTranslator.java
new file mode 100644
index 00000000000..ddb882927bc
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/LogicalImageInfoTranslator.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.server.logic.dto;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageChannelStack;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.LogicalImageInfo;
+
+/**
+ * @author pkupczyk
+ */
+public class LogicalImageInfoTranslator
+{
+
+    public LogicalImageInfo translate(ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.LogicalImageInfo internalInfo)
+    {
+        if (internalInfo == null)
+        {
+            return null;
+        }
+
+        LogicalImageInfo apiInfo = new LogicalImageInfo();
+        apiInfo.setImageDataset(new ImageDatasetEnrichedReferenceTranslator().translate(internalInfo.getImageDataset()));
+
+        if (internalInfo.getChannelStacks() != null)
+        {
+            List<ImageChannelStack> apiStacks = new LinkedList<ImageChannelStack>();
+
+            for (ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageChannelStack internalStack : internalInfo.getChannelStacks())
+            {
+                apiStacks.add(new ImageChannelStackTranslator().translate(internalStack));
+            }
+
+            apiInfo.setChannelStacks(apiStacks);
+        }
+
+        return apiInfo;
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/WellLocationTranslator.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/WellLocationTranslator.java
new file mode 100644
index 00000000000..0a7d55549a6
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/dto/WellLocationTranslator.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.server.logic.dto;
+
+import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellLocation;
+
+/**
+ * @author pkupczyk
+ */
+public class WellLocationTranslator
+{
+
+    public WellLocation translate(ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.WellLocation wellLocation)
+    {
+        if (wellLocation == null)
+        {
+            return null;
+        }
+        return new WellLocation(wellLocation.getRow(), wellLocation.getColumn());
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/IScreeningApiServer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/IScreeningApiServer.java
index 8d55b242bae..bcd691be547 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/IScreeningApiServer.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/IScreeningApiServer.java
@@ -41,8 +41,10 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.IImageReprese
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageDatasetMetadata;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageDatasetReference;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageRepresentationFormat;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageResolution;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ImageSize;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.LoadImageConfiguration;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.LogicalImageInfo;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.MaterialIdentifier;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.MaterialTypeIdentifier;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.Plate;
@@ -52,10 +54,11 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.PlateMetadata
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.PlateWellMaterialMapping;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.PlateWellReferenceWithDatasets;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.WellIdentifier;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.WellLocation;
 
 /**
- * This interface is a part of the official public screening API. It is forbidden to change it in a
- * non-backward-compatible manner without discussing it with all screening customers.
+ * This interface is a part of the official public screening API. It is forbidden to change it in a non-backward-compatible manner without discussing
+ * it with all screening customers.
  * 
  * @author Tomasz Pylak
  */
@@ -94,8 +97,7 @@ public interface IScreeningApiServer extends IRpcService
     void logoutScreening(final String sessionToken) throws IllegalArgumentException;
 
     /**
-     * Return the list of all visible plates assigned to any experiment, along with their
-     * hierarchical context (space, project, experiment).
+     * Return the list of all visible plates assigned to any experiment, along with their hierarchical context (space, project, experiment).
      */
     @Transactional(readOnly = true)
     List<Plate> listPlates(String sessionToken) throws IllegalArgumentException;
@@ -111,8 +113,7 @@ public interface IScreeningApiServer extends IRpcService
             throws IllegalArgumentException;
 
     /**
-     * Fetches the contents of a given list of plates. The result will contain well and material
-     * properties.
+     * Fetches the contents of a given list of plates. The result will contain well and material properties.
      * 
      * @since 1.8
      */
@@ -122,8 +123,7 @@ public interface IScreeningApiServer extends IRpcService
             List<? extends PlateIdentifier> plates) throws IllegalArgumentException;
 
     /**
-     * Return the list of all visible experiments, along with their hierarchical context (space,
-     * project).
+     * Return the list of all visible experiments, along with their hierarchical context (space, project).
      * 
      * @since 1.1
      */
@@ -132,8 +132,7 @@ public interface IScreeningApiServer extends IRpcService
     List<ExperimentIdentifier> listExperiments(String sessionToken);
 
     /**
-     * Return the list of all experiments visible to user <var>userId</var>, along with their
-     * hierarchical context (space, project).
+     * Return the list of all experiments visible to user <var>userId</var>, along with their hierarchical context (space, project).
      * 
      * @since 1.6
      */
@@ -142,24 +141,36 @@ public interface IScreeningApiServer extends IRpcService
     List<ExperimentIdentifier> listExperiments(String sessionToken, String userId);
 
     /**
-     * For a given set of plates (given by space / plate bar code), provide the list of all data
-     * sets containing feature vectors for each of these plates.
+     * For a given set of plates (given by space / plate bar code), provide the list of all data sets containing feature vectors for each of these
+     * plates.
      */
     @Transactional(readOnly = true)
     List<FeatureVectorDatasetReference> listFeatureVectorDatasets(String sessionToken,
             List<? extends PlateIdentifier> plates) throws IllegalArgumentException;
 
     /**
-     * For a given set of plates provide the list of all data sets containing images for each of
-     * these plates.
+     * For a given set of plates provide the list of all data sets containing images for each of these plates.
      */
     @Transactional(readOnly = true)
     List<ImageDatasetReference> listImageDatasets(String sessionToken,
             List<? extends PlateIdentifier> plates) throws IllegalArgumentException;
 
     /**
-     * For a given set of plates provide the list of all data sets containing raw images for each of
-     * these plates.
+     * Returns information about logical image in the given dataset. In HCS case the well location should be specified.
+     */
+    @Transactional(readOnly = true)
+    @MinimalMinorVersion(11)
+    public LogicalImageInfo getImageInfo(String sessionToken, String datasetCode, WellLocation wellLocationOrNull);
+
+    /**
+     * Returns information about available image resolutions for a given image dataset.
+     */
+    @Transactional(readOnly = true)
+    @MinimalMinorVersion(11)
+    public List<ImageResolution> getImageResolutions(String sessionToken, String datasetCode);
+
+    /**
+     * For a given set of plates provide the list of all data sets containing raw images for each of these plates.
      * 
      * @since 1.6
      */
@@ -169,8 +180,7 @@ public interface IScreeningApiServer extends IRpcService
             List<? extends PlateIdentifier> plates) throws IllegalArgumentException;
 
     /**
-     * For a given set of plates provide the list of all data sets containing segmentation images
-     * for each of these plates.
+     * For a given set of plates provide the list of all data sets containing segmentation images for each of these plates.
      * 
      * @since 1.6
      */
@@ -186,9 +196,8 @@ public interface IScreeningApiServer extends IRpcService
     List<IDatasetIdentifier> getDatasetIdentifiers(String sessionToken, List<String> datasetCodes);
 
     /**
-     * For the given <var>experimentIdentifier</var>, find all plate locations that are connected to
-     * the specified <var>materialIdentifier</var>. If <code>findDatasets == true</code>, find also
-     * the connected image and image analysis data sets for the relevant plates.
+     * For the given <var>experimentIdentifier</var>, find all plate locations that are connected to the specified <var>materialIdentifier</var>. If
+     * <code>findDatasets == true</code>, find also the connected image and image analysis data sets for the relevant plates.
      * 
      * @since 1.1
      */
@@ -199,9 +208,8 @@ public interface IScreeningApiServer extends IRpcService
             boolean findDatasets);
 
     /**
-     * For the given <var>materialIdentifier</var>, find all plate locations that are connected to
-     * it. If <code>findDatasets == true</code>, find also the connected image and image analysis
-     * data sets for the relevant plates.
+     * For the given <var>materialIdentifier</var>, find all plate locations that are connected to it. If <code>findDatasets == true</code>, find also
+     * the connected image and image analysis data sets for the relevant plates.
      * 
      * @since 1.2
      */
@@ -220,8 +228,7 @@ public interface IScreeningApiServer extends IRpcService
     public List<WellIdentifier> listPlateWells(String sessionToken, PlateIdentifier plateIdentifier);
 
     /**
-     * For a given <var>wellIdentifier</var>, return the corresponding {@link Sample} including
-     * properties.
+     * For a given <var>wellIdentifier</var>, return the corresponding {@link Sample} including properties.
      * 
      * @since 1.3
      */
@@ -239,12 +246,10 @@ public interface IScreeningApiServer extends IRpcService
     public Sample getPlateSample(String sessionToken, PlateIdentifier plateIdentifier);
 
     /**
-     * For a given list of <var>plates</var>, return the mapping of plate wells to materials
-     * contained in each well.
+     * For a given list of <var>plates</var>, return the mapping of plate wells to materials contained in each well.
      * 
      * @param plates The list of plates to get the mapping for
-     * @param materialTypeIdentifierOrNull If not <code>null</code>, consider only materials of the
-     *            given type for the mapping.
+     * @param materialTypeIdentifierOrNull If not <code>null</code>, consider only materials of the given type for the mapping.
      * @return A list of well to material mappings, one element for each plate.
      * @since 1.2
      */
@@ -265,10 +270,8 @@ public interface IScreeningApiServer extends IRpcService
             ExperimentIdentifier experimentIdentifer);
 
     /**
-     * Groups the specified objects by a data store code and calls
-     * {@link IDssServiceRpcScreening#listAvailableFeatureCodes(String, List)} method for each group
-     * of objects on appropriate data store server. Results from the data stores are combined and
-     * returned as a result of this method.
+     * Groups the specified objects by a data store code and calls {@link IDssServiceRpcScreening#listAvailableFeatureCodes(String, List)} method for
+     * each group of objects on appropriate data store server. Results from the data stores are combined and returned as a result of this method.
      * 
      * @since 1.10
      */
@@ -278,10 +281,8 @@ public interface IScreeningApiServer extends IRpcService
             List<? extends IFeatureVectorDatasetIdentifier> featureDatasets);
 
     /**
-     * Groups the specified objects by a data store code and calls
-     * {@link IDssServiceRpcScreening#listAvailableFeatures(String, List)} method for each group of
-     * objects on appropriate data store server. Results from the data stores are combined and
-     * returned as a result of this method.
+     * Groups the specified objects by a data store code and calls {@link IDssServiceRpcScreening#listAvailableFeatures(String, List)} method for each
+     * group of objects on appropriate data store server. Results from the data stores are combined and returned as a result of this method.
      * 
      * @since 1.10
      */
@@ -291,10 +292,8 @@ public interface IScreeningApiServer extends IRpcService
             List<? extends IFeatureVectorDatasetIdentifier> featureDatasets);
 
     /**
-     * Groups the specified objects by a data store code and calls
-     * {@link IDssServiceRpcScreening#loadFeatures(String, List, List)} method for each group of
-     * objects on appropriate data store server. Results from the data stores are combined and
-     * returned as a result of this method.
+     * Groups the specified objects by a data store code and calls {@link IDssServiceRpcScreening#loadFeatures(String, List, List)} method for each
+     * group of objects on appropriate data store server. Results from the data stores are combined and returned as a result of this method.
      * 
      * @since 1.10
      */
@@ -305,9 +304,8 @@ public interface IScreeningApiServer extends IRpcService
 
     /**
      * Groups the specified objects by a data store code and calls
-     * {@link IDssServiceRpcScreening#loadFeaturesForDatasetWellReferences(String, List, List)}
-     * method for each group of objects on appropriate data store server. Results from the data
-     * stores are combined and returned as a result of this method.
+     * {@link IDssServiceRpcScreening#loadFeaturesForDatasetWellReferences(String, List, List)} method for each group of objects on appropriate data
+     * store server. Results from the data stores are combined and returned as a result of this method.
      * 
      * @since 1.10
      */
@@ -318,10 +316,8 @@ public interface IScreeningApiServer extends IRpcService
             List<String> featureCodes);
 
     /**
-     * Groups the specified objects by a data store code and calls
-     * {@link IDssServiceRpcScreening#loadImagesBase64(String, List, boolean)} method for each group
-     * of objects on appropriate data store server. Results from the data stores are combined and
-     * returned as a result of this method.
+     * Groups the specified objects by a data store code and calls {@link IDssServiceRpcScreening#loadImagesBase64(String, List, boolean)} method for
+     * each group of objects on appropriate data store server. Results from the data stores are combined and returned as a result of this method.
      * 
      * @since 1.10
      */
@@ -333,10 +329,8 @@ public interface IScreeningApiServer extends IRpcService
     boolean convertToPng);
 
     /**
-     * Groups the specified objects by a data store code and calls
-     * {@link IDssServiceRpcScreening#loadThumbnailImagesBase64(String, List)} method for each group
-     * of objects on appropriate data store server. Results from the data stores are combined and
-     * returned as a result of this method.
+     * Groups the specified objects by a data store code and calls {@link IDssServiceRpcScreening#loadThumbnailImagesBase64(String, List)} method for
+     * each group of objects on appropriate data store server. Results from the data stores are combined and returned as a result of this method.
      * 
      * @since 1.10
      */
@@ -347,10 +341,8 @@ public interface IScreeningApiServer extends IRpcService
     List<PlateImageReference> imageReferences);
 
     /**
-     * Groups the specified objects by a data store code and calls
-     * {@link IDssServiceRpcScreening#loadImagesBase64(String, List, ImageSize)} method for each
-     * group of objects on appropriate data store server. Results from the data stores are combined
-     * and returned as a result of this method.
+     * Groups the specified objects by a data store code and calls {@link IDssServiceRpcScreening#loadImagesBase64(String, List, ImageSize)} method
+     * for each group of objects on appropriate data store server. Results from the data stores are combined and returned as a result of this method.
      * 
      * @since 1.10
      */
@@ -362,10 +354,8 @@ public interface IScreeningApiServer extends IRpcService
     ImageSize size);
 
     /**
-     * Groups the specified objects by a data store code and calls
-     * {@link IDssServiceRpcScreening#loadImagesBase64(String, List)} method for each group of
-     * objects on appropriate data store server. Results from the data stores are combined and
-     * returned as a result of this method.
+     * Groups the specified objects by a data store code and calls {@link IDssServiceRpcScreening#loadImagesBase64(String, List)} method for each
+     * group of objects on appropriate data store server. Results from the data stores are combined and returned as a result of this method.
      * 
      * @since 1.10
      */
@@ -377,9 +367,8 @@ public interface IScreeningApiServer extends IRpcService
 
     /**
      * Groups the specified objects by a data store code and calls
-     * {@link IDssServiceRpcScreening#loadImagesBase64(String, List, LoadImageConfiguration)} method
-     * for each group of objects on appropriate data store server. Results from the data stores are
-     * combined and returned as a result of this method.
+     * {@link IDssServiceRpcScreening#loadImagesBase64(String, List, LoadImageConfiguration)} method for each group of objects on appropriate data
+     * store server. Results from the data stores are combined and returned as a result of this method.
      * 
      * @since 1.10
      */
@@ -392,9 +381,8 @@ public interface IScreeningApiServer extends IRpcService
 
     /**
      * Groups the specified objects by a data store code and calls
-     * {@link IDssServiceRpcScreening#loadImagesBase64(String, List, ImageRepresentationFormat)}
-     * method for each group of objects on appropriate data store server. Results from the data
-     * stores are combined and returned as a result of this method.
+     * {@link IDssServiceRpcScreening#loadImagesBase64(String, List, ImageRepresentationFormat)} method for each group of objects on appropriate data
+     * store server. Results from the data stores are combined and returned as a result of this method.
      * 
      * @since 1.10
      */
@@ -407,9 +395,8 @@ public interface IScreeningApiServer extends IRpcService
 
     /**
      * Groups the specified objects by a data store code and calls
-     * {@link IDssServiceRpcScreening#loadImagesBase64(String, List, IImageRepresentationFormatSelectionCriterion...)}
-     * method for each group of objects on appropriate data store server. Results from the data
-     * stores are combined and returned as a result of this method.
+     * {@link IDssServiceRpcScreening#loadImagesBase64(String, List, IImageRepresentationFormatSelectionCriterion...)} method for each group of
+     * objects on appropriate data store server. Results from the data stores are combined and returned as a result of this method.
      * 
      * @since 1.10
      */
@@ -421,10 +408,8 @@ public interface IScreeningApiServer extends IRpcService
     IImageRepresentationFormatSelectionCriterion... criteria);
 
     /**
-     * Groups the specified objects by a data store code and calls
-     * {@link IDssServiceRpcScreening#listImageMetadata(String, List)} method for each group of
-     * objects on appropriate data store server. Results from the data stores are combined and
-     * returned as a result of this method.
+     * Groups the specified objects by a data store code and calls {@link IDssServiceRpcScreening#listImageMetadata(String, List)} method for each
+     * group of objects on appropriate data store server. Results from the data stores are combined and returned as a result of this method.
      * 
      * @since 1.10
      */
@@ -435,9 +420,8 @@ public interface IScreeningApiServer extends IRpcService
 
     /**
      * Groups the specified objects by a data store code and calls
-     * {@link IDssServiceRpcScreening#listAvailableImageRepresentationFormats(String, List)} method
-     * for each group of objects on appropriate data store server. Results from the data stores are
-     * combined and returned as a result of this method.
+     * {@link IDssServiceRpcScreening#listAvailableImageRepresentationFormats(String, List)} method for each group of objects on appropriate data
+     * store server. Results from the data stores are combined and returned as a result of this method.
      * 
      * @since 1.10
      */
@@ -448,9 +432,8 @@ public interface IScreeningApiServer extends IRpcService
 
     /**
      * Groups the specified objects by a data store code and calls
-     * {@link IDssServiceRpcScreening#loadPhysicalThumbnailsBase64(String, List, ImageRepresentationFormat)}
-     * method for each group of objects on appropriate data store server. Results from the data
-     * stores are combined and returned as a result of this method.
+     * {@link IDssServiceRpcScreening#loadPhysicalThumbnailsBase64(String, List, ImageRepresentationFormat)} method for each group of objects on
+     * appropriate data store server. Results from the data stores are combined and returned as a result of this method.
      * 
      * @since 1.10
      */
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/DatasetImagesReference.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/DatasetImagesReference.java
new file mode 100644
index 00000000000..29faedd4393
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/DatasetImagesReference.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto;
+
+import java.io.Serializable;
+
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
+/**
+ * @author pkupczyk
+ */
+@JsonObject("DatasetImagesReference")
+public class DatasetImagesReference implements Serializable
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private ImageDatasetParameters imageParameters;
+
+    public ImageDatasetParameters getImageParameters()
+    {
+        return imageParameters;
+    }
+
+    public void setImageParameters(ImageDatasetParameters imageParameters)
+    {
+        this.imageParameters = imageParameters;
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/DatasetOverlayImagesReference.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/DatasetOverlayImagesReference.java
new file mode 100644
index 00000000000..4a14d9fcb0f
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/DatasetOverlayImagesReference.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto;
+
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
+/**
+ * @author pkupczyk
+ */
+@JsonObject("DatasetOverlayImagesReference")
+public class DatasetOverlayImagesReference extends DatasetImagesReference
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private String analysisProcedureOrNull;
+
+    public String getAnalysisProcedureOrNull()
+    {
+        return analysisProcedureOrNull;
+    }
+
+    public void setAnalysisProcedureOrNull(String analysisProcedureOrNull)
+    {
+        this.analysisProcedureOrNull = analysisProcedureOrNull;
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageChannelStack.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageChannelStack.java
new file mode 100644
index 00000000000..589f611a0a2
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageChannelStack.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto;
+
+import java.io.Serializable;
+
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
+/**
+ * @author pkupczyk
+ */
+@JsonObject("ImageChannelStack")
+public class ImageChannelStack implements Serializable
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private long id;
+
+    private int tileRow, tileCol;
+
+    private Float timePointOrNull, depthOrNull;
+
+    private Integer seriesNumberOrNull;
+
+    public long getId()
+    {
+        return id;
+    }
+
+    public void setId(long id)
+    {
+        this.id = id;
+    }
+
+    public int getTileRow()
+    {
+        return tileRow;
+    }
+
+    public void setTileRow(int tileRow)
+    {
+        this.tileRow = tileRow;
+    }
+
+    public int getTileCol()
+    {
+        return tileCol;
+    }
+
+    public void setTileCol(int tileCol)
+    {
+        this.tileCol = tileCol;
+    }
+
+    public Float getTimePointOrNull()
+    {
+        return timePointOrNull;
+    }
+
+    public void setTimePointOrNull(Float timePointOrNull)
+    {
+        this.timePointOrNull = timePointOrNull;
+    }
+
+    public Float getDepthOrNull()
+    {
+        return depthOrNull;
+    }
+
+    public void setDepthOrNull(Float depthOrNull)
+    {
+        this.depthOrNull = depthOrNull;
+    }
+
+    public Integer getSeriesNumberOrNull()
+    {
+        return seriesNumberOrNull;
+    }
+
+    public void setSeriesNumberOrNull(Integer seriesNumberOrNull)
+    {
+        this.seriesNumberOrNull = seriesNumberOrNull;
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageDatasetEnrichedReference.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageDatasetEnrichedReference.java
new file mode 100644
index 00000000000..ae45869df1b
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageDatasetEnrichedReference.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto;
+
+import java.io.Serializable;
+import java.util.List;
+
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
+/**
+ * @author pkupczyk
+ */
+@JsonObject("ImageDatasetEnrichedReference")
+public class ImageDatasetEnrichedReference implements Serializable
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private DatasetImagesReference imageDataset;
+
+    private List<DatasetOverlayImagesReference> overlayDatasets;
+
+    public DatasetImagesReference getImageDataset()
+    {
+        return imageDataset;
+    }
+
+    public void setImageDataset(DatasetImagesReference imageDataset)
+    {
+        this.imageDataset = imageDataset;
+    }
+
+    public List<DatasetOverlayImagesReference> getOverlayDatasets()
+    {
+        return overlayDatasets;
+    }
+
+    public void setOverlayDatasets(List<DatasetOverlayImagesReference> overlayDatasets)
+    {
+        this.overlayDatasets = overlayDatasets;
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageDatasetParameters.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageDatasetParameters.java
new file mode 100644
index 00000000000..186366129d1
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageDatasetParameters.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto;
+
+import java.io.Serializable;
+import java.util.List;
+
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
+/**
+ * @author pkupczyk
+ */
+@JsonObject("ImageDatasetParameters")
+public class ImageDatasetParameters implements Serializable
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private String datasetCode;
+
+    private Integer rowsNumOrNull;
+
+    private Integer colsNumOrNull;
+
+    private int tileRowsNum;
+
+    private int tileColsNum;
+
+    private List<InternalImageChannel> channels;
+
+    private boolean isMultidimensional;
+
+    private String mergedChannelTransformerFactorySignatureOrNull;
+
+    public String getDatasetCode()
+    {
+        return datasetCode;
+    }
+
+    public void setDatasetCode(String datasetCode)
+    {
+        this.datasetCode = datasetCode;
+    }
+
+    public Integer getRowsNumOrNull()
+    {
+        return rowsNumOrNull;
+    }
+
+    public void setRowsNumOrNull(Integer rowsNumOrNull)
+    {
+        this.rowsNumOrNull = rowsNumOrNull;
+    }
+
+    public Integer getColsNumOrNull()
+    {
+        return colsNumOrNull;
+    }
+
+    public void setColsNumOrNull(Integer colsNumOrNull)
+    {
+        this.colsNumOrNull = colsNumOrNull;
+    }
+
+    public int getTileRowsNum()
+    {
+        return tileRowsNum;
+    }
+
+    public void setTileRowsNum(int tileRowsNum)
+    {
+        this.tileRowsNum = tileRowsNum;
+    }
+
+    public int getTileColsNum()
+    {
+        return tileColsNum;
+    }
+
+    public void setTileColsNum(int tileColsNum)
+    {
+        this.tileColsNum = tileColsNum;
+    }
+
+    public List<InternalImageChannel> getChannels()
+    {
+        return channels;
+    }
+
+    public void setChannels(List<InternalImageChannel> channels)
+    {
+        this.channels = channels;
+    }
+
+    public boolean isMultidimensional()
+    {
+        return isMultidimensional;
+    }
+
+    public void setMultidimensional(boolean isMultidimensional)
+    {
+        this.isMultidimensional = isMultidimensional;
+    }
+
+    public String getMergedChannelTransformerFactorySignatureOrNull()
+    {
+        return mergedChannelTransformerFactorySignatureOrNull;
+    }
+
+    public void setMergedChannelTransformerFactorySignatureOrNull(String mergedChannelTransformerFactorySignatureOrNull)
+    {
+        this.mergedChannelTransformerFactorySignatureOrNull = mergedChannelTransformerFactorySignatureOrNull;
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageResolution.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageResolution.java
new file mode 100644
index 00000000000..b3f0a41b3c4
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/ImageResolution.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto;
+
+import java.io.Serializable;
+
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
+/**
+ * @author pkupczyk
+ */
+@JsonObject("ImageResolution")
+public class ImageResolution implements Serializable
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private int width;
+
+    private int height;
+
+    public int getWidth()
+    {
+        return width;
+    }
+
+    public void setWidth(int width)
+    {
+        this.width = width;
+    }
+
+    public int getHeight()
+    {
+        return height;
+    }
+
+    public void setHeight(int height)
+    {
+        this.height = height;
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/InternalImageChannel.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/InternalImageChannel.java
new file mode 100644
index 00000000000..4faa4307d9c
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/InternalImageChannel.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto;
+
+import java.io.Serializable;
+import java.util.List;
+
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
+/**
+ * @author pkupczyk
+ */
+@JsonObject("InternalImageChannel")
+public class InternalImageChannel implements Serializable
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private String code;
+
+    private String label;
+
+    private String description;
+
+    private Integer wavelength;
+
+    private List<InternalImageTransformationInfo> availableImageTransformations;
+
+    public String getCode()
+    {
+        return code;
+    }
+
+    public void setCode(String code)
+    {
+        this.code = code;
+    }
+
+    public String getLabel()
+    {
+        return label;
+    }
+
+    public void setLabel(String label)
+    {
+        this.label = label;
+    }
+
+    public String getDescription()
+    {
+        return description;
+    }
+
+    public void setDescription(String description)
+    {
+        this.description = description;
+    }
+
+    public Integer getWavelength()
+    {
+        return wavelength;
+    }
+
+    public void setWavelength(Integer wavelength)
+    {
+        this.wavelength = wavelength;
+    }
+
+    public List<InternalImageTransformationInfo> getAvailableImageTransformations()
+    {
+        return availableImageTransformations;
+    }
+
+    public void setAvailableImageTransformations(List<InternalImageTransformationInfo> availableImageTransformations)
+    {
+        this.availableImageTransformations = availableImageTransformations;
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/InternalImageTransformationInfo.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/InternalImageTransformationInfo.java
new file mode 100644
index 00000000000..28271ec926b
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/InternalImageTransformationInfo.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto;
+
+import java.io.Serializable;
+
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
+/**
+ * @author pkupczyk
+ */
+@JsonObject("InternalImageTransformationInfo")
+public class InternalImageTransformationInfo implements Serializable
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private String code;
+
+    private String label;
+
+    private String description;
+
+    private String transformationSignature;
+
+    private boolean isDefault;
+
+    public String getCode()
+    {
+        return code;
+    }
+
+    public void setCode(String code)
+    {
+        this.code = code;
+    }
+
+    public String getLabel()
+    {
+        return label;
+    }
+
+    public void setLabel(String label)
+    {
+        this.label = label;
+    }
+
+    public String getDescription()
+    {
+        return description;
+    }
+
+    public void setDescription(String description)
+    {
+        this.description = description;
+    }
+
+    public String getTransformationSignature()
+    {
+        return transformationSignature;
+    }
+
+    public void setTransformationSignature(String transformationSignature)
+    {
+        this.transformationSignature = transformationSignature;
+    }
+
+    public boolean isDefault()
+    {
+        return isDefault;
+    }
+
+    public void setDefault(boolean isDefault)
+    {
+        this.isDefault = isDefault;
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/LogicalImageInfo.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/LogicalImageInfo.java
new file mode 100644
index 00000000000..12a2263a17c
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/LogicalImageInfo.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto;
+
+import java.io.Serializable;
+import java.util.List;
+
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
+/**
+ * @author pkupczyk
+ */
+@JsonObject("LogicalImageInfo")
+public class LogicalImageInfo implements Serializable
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private ImageDatasetEnrichedReference imageDataset;
+
+    private List<ImageChannelStack> channelStacks;
+
+    public ImageDatasetEnrichedReference getImageDataset()
+    {
+        return imageDataset;
+    }
+
+    public void setImageDataset(ImageDatasetEnrichedReference imageDataset)
+    {
+        this.imageDataset = imageDataset;
+    }
+
+    public List<ImageChannelStack> getChannelStacks()
+    {
+        return channelStacks;
+    }
+
+    public void setChannelStacks(List<ImageChannelStack> channelStacks)
+    {
+        this.channelStacks = channelStacks;
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/WellLocation.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/WellLocation.java
new file mode 100644
index 00000000000..9b6a0fdc692
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/WellLocation.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2014 ETH Zuerich, Scientific IT Services
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto;
+
+import java.io.Serializable;
+
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
+/**
+ * @author pkupczyk
+ */
+@JsonObject("WellLocation")
+public class WellLocation implements Serializable
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private int row;
+
+    private int column;
+
+    public int getRow()
+    {
+        return row;
+    }
+
+    public void setRow(int row)
+    {
+        this.row = row;
+    }
+
+    public int getColumn()
+    {
+        return column;
+    }
+
+    public void setColumn(int column)
+    {
+        this.column = column;
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ImageDatasetParameters.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ImageDatasetParameters.java
index 8c9ede0b88f..340e990c349 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ImageDatasetParameters.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ImageDatasetParameters.java
@@ -124,6 +124,11 @@ public class ImageDatasetParameters implements Serializable
     {
         return channels.size();
     }
+    
+    public List<InternalImageChannel> getChannels()
+    {
+        return channels;
+    }
 
     /** never null, can be empty if channel does not exist or no transformations are available */
     public List<InternalImageTransformationInfo> getAvailableImageTransformationsFor(
-- 
GitLab