From 5d006397a51216e435d9ef3a3a9bec28caae65a6 Mon Sep 17 00:00:00 2001
From: tpylak <tpylak>
Date: Tue, 15 Jun 2010 19:28:53 +0000
Subject: [PATCH] LMS-1541 Reviewing panel improvements

SVN: 16535
---
 .../client/web/client/application/Dict.java   |  2 +
 .../detailviewers/PlateMaterialReviewer.java  | 39 ++++----
 .../detailviewers/WellContentDialog.java      | 63 +++++++++----
 .../PlateMaterialReviewerColDefKind.java      |  9 +-
 .../client/web/public/screening-dictionary.js |  2 +-
 .../logic/GenePlateLocationsLoader.java       | 92 +++++++++++++------
 .../server/logic/ScreeningUtils.java          |  6 +-
 .../basic/dto/DatasetImagesReference.java     |  4 +-
 .../shared/basic/dto/DatasetReference.java    | 11 ++-
 9 files changed, 151 insertions(+), 77 deletions(-)

diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/Dict.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/Dict.java
index a8404e35755..6bbcfbebb17 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/Dict.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/Dict.java
@@ -38,6 +38,8 @@ public final class Dict extends ch.systemsx.cisd.openbis.generic.client.web.clie
 
     public static final String WELL = "WELL";
 
+    public static final String WELL_IMAGES = "WELL_IMAGES";
+
     public static final String IMPORT_SCHEDULED_MESSAGE = "import_scheduled";
 
     public static final String REGISTER = "register";
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMaterialReviewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMaterialReviewer.java
index b15e9ad67be..34ad14c59ae 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMaterialReviewer.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMaterialReviewer.java
@@ -30,7 +30,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.Co
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICellListener;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityDetailsTabAction;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityEditorTabClickListener;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
@@ -53,9 +52,9 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellContent;
  */
 public class PlateMaterialReviewer extends AbstractSimpleBrowserGrid<WellContent>
 {
-    private static final int IMAGE_WIDTH_PX = 100;
+    private static final int IMAGE_WIDTH_PX = 200;
 
-    private static final int IMAGE_HEIGHT_PX = 60;
+    private static final int IMAGE_HEIGHT_PX = 120;
 
     public static final String BROWSER_ID =
             GenericConstants.ID_PREFIX + "PlateMaterialReviewerGrid";
@@ -103,6 +102,11 @@ public class PlateMaterialReviewer extends AbstractSimpleBrowserGrid<WellContent
                     {
                         public void handle(WellContent wellContent, boolean specialKeyPressed)
                         {
+                            // EntityReference nestedMaterial =
+                            // wellContent.tryGetNestedMaterialContent();
+                            // ClientPluginFactory.openGeneMaterialViewer(nestedMaterial,
+                            // experiment,
+                            // viewContext);
                             showEntityViewer(wellContent.tryGetNestedMaterialContent(),
                                     specialKeyPressed);
                         }
@@ -149,18 +153,10 @@ public class PlateMaterialReviewer extends AbstractSimpleBrowserGrid<WellContent
                     {
                         public void handle(WellContent wellContent, boolean specialKeyPressed)
                         {
-                            WellContentDialog.createImageViewer(wellContent, channelState,
+                            WellContentDialog.showContentDialog(wellContent, channelState,
                                     viewContext, IMAGE_WIDTH_PX, IMAGE_HEIGHT_PX);
                         }
                     });
-        registerLinkClickListenerFor(PlateMaterialReviewerColDefKind.EDIT.id(),
-                new ICellListener<WellContent>()
-                    {
-                        public void handle(WellContent wellContent, boolean specialKeyPressed)
-                        {
-                            showEntityEditor(wellContent.getWell(), specialKeyPressed);
-                        }
-                    });
     }
 
     private void showEntityViewer(IEntityInformationHolder entityOrNull, boolean specialKeyPressed)
@@ -171,21 +167,18 @@ public class PlateMaterialReviewer extends AbstractSimpleBrowserGrid<WellContent
         }
     }
 
-    private void showEntityEditor(IEntityInformationHolder entity, boolean specialKeyPressed)
-    {
-        OpenEntityEditorTabClickListener.showEntityEditor(viewContext, entity, specialKeyPressed);
-    }
-
     @Override
     protected ColumnDefsAndConfigs<WellContent> createColumnsDefinition()
     {
         ColumnDefsAndConfigs<WellContent> schema = super.createColumnsDefinition();
-        setLinksRenderer(schema, new PlateMaterialReviewerColDefKind[]
-            { PlateMaterialReviewerColDefKind.WELL_NESTED_MATERIAL,
-                    PlateMaterialReviewerColDefKind.WELL_CONTENT_MATERIAL,
-                    PlateMaterialReviewerColDefKind.PLATE, PlateMaterialReviewerColDefKind.WELL,
-                    PlateMaterialReviewerColDefKind.DATASET, PlateMaterialReviewerColDefKind.IMAGE,
-                    PlateMaterialReviewerColDefKind.EDIT });
+        setLinksRenderer(schema,
+                new PlateMaterialReviewerColDefKind[]
+                    { PlateMaterialReviewerColDefKind.WELL_NESTED_MATERIAL,
+                            PlateMaterialReviewerColDefKind.WELL_CONTENT_MATERIAL,
+                            PlateMaterialReviewerColDefKind.PLATE,
+                            PlateMaterialReviewerColDefKind.WELL,
+                            PlateMaterialReviewerColDefKind.DATASET,
+                            PlateMaterialReviewerColDefKind.IMAGE });
         return schema;
     }
 
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java
index e51166f61a7..6db431533e2 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java
@@ -40,12 +40,14 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listene
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.URLMethodWithParameters;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityReference;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ScreeningViewContext;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.ChannelChooser.DefaultChannelState;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.ChannelChooser.IChanneledViewerFactory;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.DatasetImagesReference;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateImageParameters;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellContent;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellLocation;
@@ -83,15 +85,15 @@ public class WellContentDialog extends Dialog
                     createImageViewer(images, channelState, viewContext, imgW, imgH);
             container.add(imageViewer);
 
-            dialogWidth = imgW * Math.max(2, images.getTileColsNum());
-            dialogHeight = imgH * images.getTileRowsNum() + 200;
+            dialogWidth = imgW * Math.max(2, images.getTileColsNum()) + 100;
+            dialogHeight = imgH * images.getTileRowsNum() + 300;
         } else
         {
             dialogWidth = 300;
             dialogHeight = 160;
         }
         String title = "Well Content: " + wellData.getWellContentDescription();
-        contentDialog.setupContentAndShow(container, dialogWidth, dialogHeight, title);
+        setupContentAndShow(contentDialog, container, dialogWidth, dialogHeight, title);
     }
 
     // ----------------
@@ -110,16 +112,17 @@ public class WellContentDialog extends Dialog
         this.viewContext = viewContext;
     }
 
-    private void setupContentAndShow(LayoutContainer container, int width, int height, String title)
+    private static void setupContentAndShow(Dialog dialog, Widget content, int width, int height,
+            String title)
     {
-        setHeading(title);
-        setLayout(new FitLayout());
-        setScrollMode(Scroll.AUTO);
-        setHideOnButtonClick(true);
-        add(container);
-        setWidth(width);
-        setHeight(height);
-        show();
+        dialog.setHeading(title);
+        dialog.setLayout(new FitLayout());
+        dialog.setScrollMode(Scroll.AUTO);
+        dialog.setHideOnButtonClick(true);
+        dialog.add(content);
+        dialog.setWidth(width);
+        dialog.setHeight(height);
+        dialog.show();
     }
 
     private LayoutContainer createContentDescription()
@@ -202,7 +205,7 @@ public class WellContentDialog extends Dialog
     }
 
     /** view with channel chooser, no metadata are displayed */
-    public static LayoutContainer createImageViewer(final WellContent wellContent,
+    public static void showContentDialog(final WellContent wellContent,
             DefaultChannelState channelState, final IViewContext<?> viewContext,
             final int imageWidthPx, final int imageHeightPx)
     {
@@ -215,13 +218,41 @@ public class WellContentDialog extends Dialog
                 }
             };
         DatasetImagesReference imageDataset = wellContent.tryGetImages();
+
+        int dialogWidth;
+        int dialogHeight;
         List<String> channelsNames = new ArrayList<String>();
         if (imageDataset != null)
         {
-            channelsNames = imageDataset.getImageParameters().getChannelsNames();
+            PlateImageParameters imageParameters = imageDataset.getImageParameters();
+            channelsNames = imageParameters.getChannelsNames();
+            dialogWidth = imageWidthPx * Math.max(2, imageParameters.getTileColsNum()) + 100;
+            dialogHeight = imageHeightPx * imageParameters.getTileRowsNum() + 300;
+        } else
+        {
+            dialogWidth = 300;
+            dialogHeight = 160;
+        }
+        Widget content =
+                ChannelChooser.createViewerWithChannelChooser(viewerFactory, channelState,
+                        channelsNames);
+        setupContentAndShow(new Dialog(), content, dialogWidth, dialogHeight,
+                createDialogTitle(wellContent));
+    }
+
+    private static String createDialogTitle(WellContent wellContent)
+    {
+        String content;
+        EntityReference nestedMaterial = wellContent.tryGetNestedMaterialContent();
+        if (nestedMaterial != null)
+        {
+            content = nestedMaterial.getCode();
+        } else
+        {
+            content = wellContent.getMaterialContent().getCode();
         }
-        return ChannelChooser.createViewerWithChannelChooser(viewerFactory, channelState,
-                channelsNames);
+        return "Plate: " + wellContent.getPlate().getCode() + ", well: "
+                + wellContent.getWell().getCode() + ", content: " + content;
     }
 
     /**
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ui/columns/specific/PlateMaterialReviewerColDefKind.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ui/columns/specific/PlateMaterialReviewerColDefKind.java
index 09dd15a214e..e3ad59488ef 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ui/columns/specific/PlateMaterialReviewerColDefKind.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ui/columns/specific/PlateMaterialReviewerColDefKind.java
@@ -137,22 +137,23 @@ public enum PlateMaterialReviewerColDefKind implements IColumnDefinitionKind<Wel
             }
         }),
 
-    IMAGE(new AbstractColumnDefinitionKind<WellContent>(Dict.BUTTON_SHOW)
+    DATASET_FILE_TYPE(new AbstractColumnDefinitionKind<WellContent>(Dict.FILE_FORMAT_TYPE)
         {
             @Override
             public String tryGetValue(WellContent entity)
             {
                 DatasetImagesReference imageDataset = entity.tryGetImages();
-                return imageDataset != null ? imageDataset.getDatasetReference().getCode() : null;
+                return imageDataset != null ? imageDataset.getDatasetReference().getFileTypeCode()
+                        : null;
             }
         }),
 
-    EDIT(new AbstractColumnDefinitionKind<WellContent>(Dict.BUTTON_EDIT)
+    IMAGE(new AbstractColumnDefinitionKind<WellContent>(Dict.WELL_IMAGES)
         {
             @Override
             public String tryGetValue(WellContent entity)
             {
-                return "Annotate";
+                return "Show";
             }
         }),
 
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/screening-dictionary.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/screening-dictionary.js
index 5dccc50812a..d7417de90d2 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/screening-dictionary.js
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/screening-dictionary.js
@@ -12,7 +12,7 @@ var screening = {
   WELL_ROW: "Well Row",
   WELL_COLUMN: "Well Column",
   WELL: "Well",
-  
+  WELL_IMAGES: "Well Images",
   
   //
   // Sample Viewer
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/GenePlateLocationsLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/GenePlateLocationsLoader.java
index ff3398659d2..6fc94e9f1d8 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/GenePlateLocationsLoader.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/GenePlateLocationsLoader.java
@@ -18,6 +18,8 @@ package ch.systemsx.cisd.openbis.plugin.screening.server.logic;
 
 import java.sql.Connection;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -37,6 +39,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityReference;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils;
@@ -109,15 +112,17 @@ public class GenePlateLocationsLoader
     private List<WellContent> enrichPlateLocationsWithImages(List<WellContent> locations,
             List<ExternalDataPE> imageDatasets)
     {
-        Map<String, PlateImageParameters> imageParams = loadImagesReport(imageDatasets);
-        return enrichWithImages(locations, imageDatasets, imageParams);
+        Map<Long/* plate id */, List<ExternalDataPE>> plateToDatasetMap =
+                createPlateToDatasetMap(imageDatasets);
+        List<ExternalDataPE> usedDatasets = extractUsedDatasets(locations, plateToDatasetMap);
+        Map<String, PlateImageParameters> imageParams = loadImagesReport(usedDatasets);
+        return enrichWithImages(locations, plateToDatasetMap, imageParams);
     }
 
     private static List<WellContent> enrichWithImages(List<WellContent> wellContents,
-            List<ExternalDataPE> imageDatasets, Map<String, PlateImageParameters> imageParams)
+            Map<Long/* plate id */, List<ExternalDataPE>> plateToDatasetMap,
+            Map<String, PlateImageParameters> imageParams)
     {
-        Map<Long/* plate id */, List<ExternalDataPE>> plateToDatasetMap =
-                createPlateToDatasetMap(imageDatasets);
         List<WellContent> wellsWithImages = new ArrayList<WellContent>();
         for (WellContent wellContent : wellContents)
         {
@@ -151,41 +156,67 @@ public class GenePlateLocationsLoader
         return wellsWithImages;
     }
 
+    private static List<ExternalDataPE> extractUsedDatasets(List<WellContent> wellContents,
+            Map<Long/* plate id */, List<ExternalDataPE>> plateToDatasetMap)
+    {
+        List<ExternalDataPE> datasets = new ArrayList<ExternalDataPE>();
+        for (WellContent wellContent : wellContents)
+        {
+            datasets.addAll(plateToDatasetMap.get(wellContent.getPlate().getId()));
+        }
+        return datasets;
+    }
+
     private static Map<Long/* sample id */, List<ExternalDataPE>> createPlateToDatasetMap(
             List<ExternalDataPE> datasets)
     {
         Map<Long, List<ExternalDataPE>> map = new HashMap<Long, List<ExternalDataPE>>();
         for (ExternalDataPE dataset : datasets)
         {
-            Long sampleId = HibernateUtils.getId(dataset.tryGetSample());
-
-            List<ExternalDataPE> plateDatasets = map.get(sampleId);
-            if (plateDatasets == null)
+            SamplePE sample = dataset.tryGetSample();
+            if (sample != null)
             {
-                plateDatasets = new ArrayList<ExternalDataPE>();
-                map.put(sampleId, plateDatasets);
+                Long sampleId = HibernateUtils.getId(sample);
+
+                List<ExternalDataPE> plateDatasets = map.get(sampleId);
+                if (plateDatasets == null)
+                {
+                    plateDatasets = new ArrayList<ExternalDataPE>();
+                    map.put(sampleId, plateDatasets);
+                }
+                plateDatasets.add(dataset);
             }
-            plateDatasets.add(dataset);
         }
         return map;
     }
 
     private Map<String/* dataset code */, PlateImageParameters> loadImagesReport(
-            List<ExternalDataPE> imageDatasets)
+            List<ExternalDataPE> usedDatasets)
     {
-        if (imageDatasets.size() == 0)
+        List<String> datasetCodes = extractDatasetCodes(usedDatasets);
+        if (datasetCodes.size() == 0)
         {
             return new HashMap<String, PlateImageParameters>();
         }
-        List<String> datasetCodes = asCodes(imageDatasets);
+
         // NOTE: assumes that all datasets are from the same datastore
-        String datastoreCode = imageDatasets.get(0).getDataStore().getCode();
+        String datastoreCode = usedDatasets.get(0).getDataStore().getCode();
         List<PlateImageParameters> imageParameters =
                 DatasetReportsLoader.loadPlateImageParameters(datasetCodes, datastoreCode,
                         externalDataTable);
         return asDatasetToParamsMap(imageParameters);
     }
 
+    private static List<String> extractDatasetCodes(List<ExternalDataPE> usedDatasets)
+    {
+        Set<String> codes = new HashSet<String>();
+        for (ExternalDataPE dataset : usedDatasets)
+        {
+            codes.add(dataset.getCode());
+        }
+        return new ArrayList<String>(codes);
+    }
+
     private static Map<String/* dataset code */, PlateImageParameters> asDatasetToParamsMap(
             List<PlateImageParameters> imageParameters)
     {
@@ -197,16 +228,6 @@ public class GenePlateLocationsLoader
         return map;
     }
 
-    private static List<String> asCodes(List<ExternalDataPE> datasets)
-    {
-        List<String> codes = new ArrayList<String>();
-        for (ExternalDataPE dataset : datasets)
-        {
-            codes.add(dataset.getCode());
-        }
-        return codes;
-    }
-
     private static List<ExternalDataPE> loadImageDatasets(List<WellContent> locations,
             IExternalDataTable externalDataTable)
     {
@@ -286,9 +307,28 @@ public class GenePlateLocationsLoader
         {
             wellLocations.add(convert(location));
         }
+        sortByMaterialName(wellLocations);
         return wellLocations;
     }
 
+    private static void sortByMaterialName(List<WellContent> wellLocations)
+    {
+        Collections.sort(wellLocations, new Comparator<WellContent>()
+            {
+                public int compare(WellContent o1, WellContent o2)
+                {
+                    EntityReference m1 = o1.tryGetNestedMaterialContent();
+                    EntityReference m2 = o2.tryGetNestedMaterialContent();
+                    if (m1 == null || m2 == null)
+                    {
+                        m1 = o1.getMaterialContent();
+                        m2 = o2.getMaterialContent();
+                    }
+                    return m1.getCode().compareTo(m2.getCode());
+                }
+            });
+    }
+
     private static WellContent convert(
             ch.systemsx.cisd.openbis.plugin.screening.server.dataaccess.WellContent loc)
     {
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java
index 62ac9b54693..ae77f0f036b 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningUtils.java
@@ -49,8 +49,10 @@ public class ScreeningUtils
     public static DatasetReference createDatasetReference(ExternalDataPE dataset)
     {
         DataStorePE dataStore = dataset.getDataStore();
-        return new DatasetReference(dataset.getId(), dataset.getCode(), dataset.getDataSetType()
-                .getCode(), dataStore.getCode(), dataStore.getDownloadUrl());
+        String dataTypeCode = dataset.getDataSetType().getCode();
+        String fileTypeCode = dataset.getFileFormatType().getCode();
+        return new DatasetReference(dataset.getId(), dataset.getCode(), dataTypeCode, fileTypeCode,
+                dataStore.getCode(), dataStore.getDownloadUrl());
     }
 
     public static List<ExternalDataPE> filterImageAnalysisDatasets(List<ExternalDataPE> datasets)
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/DatasetImagesReference.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/DatasetImagesReference.java
index 5ba9a52b9e2..a4596b7bc81 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/DatasetImagesReference.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/DatasetImagesReference.java
@@ -18,8 +18,6 @@ package ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto;
 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
-import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithPermId;
-
 /**
  * Describes images in one dataset and the way to access them.
  * 
@@ -54,7 +52,7 @@ public class DatasetImagesReference implements IsSerializable
         return dataset.getDownloadUrl();
     }
 
-    public IEntityInformationHolderWithPermId getDatasetReference()
+    public DatasetReference getDatasetReference()
     {
         return dataset;
     }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/DatasetReference.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/DatasetReference.java
index 6b5683f97c9..ff1b0d71ccd 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/DatasetReference.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/DatasetReference.java
@@ -41,6 +41,8 @@ public class DatasetReference implements Serializable, IsSerializable,
 
     private String typeCode;
 
+    private String fileTypeCode;
+
     private String datastoreCode;
 
     private String downloadUrl;
@@ -51,12 +53,13 @@ public class DatasetReference implements Serializable, IsSerializable,
     {
     }
 
-    public DatasetReference(long id, String code, String typeCode, String datastoreCode,
-            String downloadUrl)
+    public DatasetReference(long id, String code, String typeCode, String fileTypeCode,
+            String datastoreCode, String downloadUrl)
     {
         this.id = id;
         this.datasetCode = code;
         this.typeCode = typeCode;
+        this.fileTypeCode = fileTypeCode;
         this.datastoreCode = datastoreCode;
         this.downloadUrl = downloadUrl;
     }
@@ -98,4 +101,8 @@ public class DatasetReference implements Serializable, IsSerializable,
         return datasetCode;
     }
 
+    public String getFileTypeCode()
+    {
+        return fileTypeCode;
+    }
 }
-- 
GitLab