From d79177f82d6158f1591c93840775a79dffc180de Mon Sep 17 00:00:00 2001
From: kaloyane <kaloyane>
Date: Tue, 19 Jul 2011 10:40:45 +0000
Subject: [PATCH] [LMS-2138] next ui changes

SVN: 22203
---
 .../application/ClientPluginFactory.java      | 10 +++--
 .../ExperimentAnalysisSummaryGrid.java        |  4 +-
 .../ExperimentWellMaterialBrowserGrid.java    |  5 ++-
 .../detailviewers/ImagingMaterialViewer.java  | 14 ++++--
 .../MaterialDisambiguationGrid.java           |  3 +-
 ...alFeaturesFromAllExperimentsComponent.java | 14 ++++++
 ...aterialFeaturesFromAllExperimentsGrid.java |  5 ++-
 ...erialFeaturesFromAllExperimentsViewer.java | 19 +++++---
 .../MaterialReplicaSummaryComponent.java      | 43 ++++++++++++++++---
 .../MaterialReplicaSummaryViewer.java         | 15 ++++---
 .../detailviewers/WellContentDialog.java      |  2 +
 .../detailviewers/WellSearchGrid.java         |  2 +-
 .../ImagingMaterialLocatorResolver.java       | 32 +++++++++++---
 13 files changed, 134 insertions(+), 34 deletions(-)

diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java
index 4ac26fd3d01..13804de7774 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java
@@ -67,6 +67,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.d
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.sample.LibrarySampleBatchRegistrationForm;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchByProjectCriteria;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.SingleExperimentSearchCriteria;
@@ -228,6 +229,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
     public static final void openImagingMaterialViewer(
             final IEntityInformationHolderWithPermId material,
             final ExperimentSearchCriteria experimentCriteriaOrNull,
+            final AnalysisProcedureCriteria analysisProcedureCriteria,
             final IViewContext<IScreeningClientServiceAsync> viewContext)
     {
         if (viewContext.getModel().isEmbeddedMode())
@@ -238,7 +240,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
             if (multipleExperimentsScope != null)
             {
                 MaterialFeaturesFromAllExperimentsViewer.openTab(viewContext, materialIdentifier,
-                        multipleExperimentsScope);
+                        multipleExperimentsScope, analysisProcedureCriteria);
             } else
             {
                 assert experimentCriteriaOrNull != null;
@@ -248,7 +250,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
 
                 MaterialReplicaSummaryViewer.openTab(viewContext, experiment.getExperimentPermId(),
                         experimentCriteriaOrNull.getRestrictGlobalSearchLinkToProject(),
-                        materialIdentifier);
+                        materialIdentifier, analysisProcedureCriteria);
 
             }
         } else
@@ -304,9 +306,11 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
                 public ITabItem create()
                 {
                     TechId materialTechId = TechId.create(material);
+                    // TODO KE, TPK: Finish me
                     final DatabaseModificationAwareComponent viewer =
                             ImagingMaterialViewer.create(viewContext, materialTechId,
-                                    experimentCriteriaOrNull);
+                                    experimentCriteriaOrNull,
+                                    AnalysisProcedureCriteria.createAllProcedures());
                     return createViewerTab(viewer, getTabTitle(), viewContext);
                 }
 
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentAnalysisSummaryGrid.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentAnalysisSummaryGrid.java
index ffd55ad5258..f04f3e8f2fc 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentAnalysisSummaryGrid.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentAnalysisSummaryGrid.java
@@ -103,8 +103,10 @@ public class ExperimentAnalysisSummaryGrid extends TypedTableGrid<MaterialFeatur
 
     private void openMaterialDetailViewer(IEntityInformationHolderWithPermId material)
     {
+        assert analysisProcedureCriteria != null : "analysisProcedureCriteria is not set yet, "
+                + "it should not happen because this field is set before the grid refreshes";
         ClientPluginFactory.openImagingMaterialViewer(material, getExperimentAsSearchCriteria(),
-                screeningViewContext);
+                analysisProcedureCriteria, screeningViewContext);
     }
 
     private ExperimentSearchCriteria getExperimentAsSearchCriteria()
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentWellMaterialBrowserGrid.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentWellMaterialBrowserGrid.java
index ba4eea1bd29..2968220be00 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentWellMaterialBrowserGrid.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentWellMaterialBrowserGrid.java
@@ -35,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ClientPluginFactory;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria;
 
 /**
@@ -108,9 +109,9 @@ public class ExperimentWellMaterialBrowserGrid extends MaterialBrowserGrid
     {
         if (editMode == false)
         {
-            // TODO KE: pass AnalysisProcedure.ANY
             ClientPluginFactory.openImagingMaterialViewer(material,
-                    createExperimentSearchCriteria(), screeningViewContext);
+                    createExperimentSearchCriteria(),
+                    AnalysisProcedureCriteria.createAllProcedures(), screeningViewContext);
         } else
         {
             super.showEntityViewer(material, editMode, active);
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImagingMaterialViewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImagingMaterialViewer.java
index c780aa03443..fe5dca31ff7 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImagingMaterialViewer.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ImagingMaterialViewer.java
@@ -45,10 +45,12 @@ public class ImagingMaterialViewer extends GenericMaterialViewer
      */
     public static DatabaseModificationAwareComponent create(
             IViewContext<IScreeningClientServiceAsync> viewContext, TechId materialId,
-            ExperimentSearchCriteria experimentCriteriaOrNull)
+            ExperimentSearchCriteria experimentCriteriaOrNull,
+            AnalysisProcedureCriteria analysisProcedureCriteria)
     {
         ImagingMaterialViewer viewer =
-                new ImagingMaterialViewer(viewContext, materialId, experimentCriteriaOrNull);
+                new ImagingMaterialViewer(viewContext, materialId, experimentCriteriaOrNull,
+                        analysisProcedureCriteria);
         viewer.reloadAllData();
         return new DatabaseModificationAwareComponent(viewer, viewer);
     }
@@ -57,8 +59,10 @@ public class ImagingMaterialViewer extends GenericMaterialViewer
 
     private final ExperimentSearchCriteria initialExperimentCriteriaOrNull;
 
+    // TODO KE, TPK: finish me
     private ImagingMaterialViewer(IViewContext<IScreeningClientServiceAsync> viewContext,
-            TechId materialTechId, ExperimentSearchCriteria experimentCriteriaOrNull)
+            TechId materialTechId, ExperimentSearchCriteria experimentCriteriaOrNull,
+            AnalysisProcedureCriteria analysisProcedureCriteria)
     {
         super(viewContext, materialTechId);
         this.screeningViewContext = viewContext;
@@ -89,9 +93,11 @@ public class ImagingMaterialViewer extends GenericMaterialViewer
                         restrictGlobalScopeLinkToProject);
         sections.add(wellSearchSection);
 
+        // TODO KE, TPK: finish me
         MaterialMergedSummarySection summarySection =
                 new MaterialMergedSummarySection(screeningViewContext, material,
-                        initialExperimentCriteriaOrNull, restrictGlobalScopeLinkToProject);
+                        initialExperimentCriteriaOrNull,
+                        restrictGlobalScopeLinkToProject);
         sections.add(summarySection);
         return sections;
     }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialDisambiguationGrid.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialDisambiguationGrid.java
index 56eb70b957f..2b977dbe71d 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialDisambiguationGrid.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialDisambiguationGrid.java
@@ -251,7 +251,8 @@ public class MaterialDisambiguationGrid extends TypedTableGrid<Material>
     private void openMaterialDetailViewer(Material material)
     {
         ClientPluginFactory.openImagingMaterialViewer(material,
-                searchCriteria.getExperimentCriteria(), screeningViewContext);
+                searchCriteria.getExperimentCriteria(),
+                searchCriteria.getAnalysisProcedureCriteria(), screeningViewContext);
     }
 
     @Override
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsComponent.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsComponent.java
index 511c400c5a7..b0f99ab3f62 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsComponent.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsComponent.java
@@ -22,6 +22,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.utils.MaterialComponentUtils;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchByProjectCriteria;
 
 /**
@@ -43,6 +44,19 @@ public class MaterialFeaturesFromAllExperimentsComponent
                         analysisProcedureListenerHolder);
     }
 
+    public static IDisposableComponent createComponent(
+            IViewContext<IScreeningClientServiceAsync> screeningViewContext, Material material,
+            ExperimentSearchByProjectCriteria experimentCriteria,
+            AnalysisProcedureCriteria analysisProcedureCriteria)
+    {
+        AnalysisProcedureListenerHolder listenerHolder = new AnalysisProcedureListenerHolder();
+        IDisposableComponent component =
+                createComponent(screeningViewContext, material, experimentCriteria, listenerHolder);
+        listenerHolder.getAnalysisProcedureListener().analysisProcedureSelected(
+                analysisProcedureCriteria);
+        return component;
+    }
+
     private final IViewContext<IScreeningClientServiceAsync> screeningViewContext;
 
     private MaterialFeaturesFromAllExperimentsComponent(
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsGrid.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsGrid.java
index edc3fb04f73..4802cfa7a47 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsGrid.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsGrid.java
@@ -154,6 +154,9 @@ public class MaterialFeaturesFromAllExperimentsGrid extends
                             }
                             String experimentPermId = summaryOrNull.getExperiment().getPermId();
 
+                            assert analysisProcedureCriteria != null : "analysisProcedureCriteria is not set yet, "
+                                    + "it should not happen because this field is set before the grid refreshes";
+
                             // NOTE: even in not-embedded mode we open specific standalone summary
                             // view instead of material detail view (which contains the summary view
                             // as one of its tabs). The reason is that in such a case we are already
@@ -161,7 +164,7 @@ public class MaterialFeaturesFromAllExperimentsGrid extends
                             // implemented there.
                             MaterialReplicaSummaryViewer.openTab(screeningViewContext,
                                     experimentPermId, getRestrictGlobalScopeLinkToProject(),
-                                    new MaterialIdentifier(material));
+                                    new MaterialIdentifier(material), analysisProcedureCriteria);
                         }
 
                         public String tryGetLink(MaterialSimpleFeatureVectorSummary entity,
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsViewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsViewer.java
index 26540c5f43f..ae4be7d5bef 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsViewer.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialFeaturesFromAllExperimentsViewer.java
@@ -30,6 +30,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningCli
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ScreeningModule;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.utils.MaterialComponentUtils;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchByProjectCriteria;
 
 /**
@@ -41,13 +42,17 @@ public class MaterialFeaturesFromAllExperimentsViewer
 {
     /**
      * Fetches material and opens a tab with {@link MaterialReplicaSummaryComponent}.
+     * 
+     * @param analysisProcedureCriteria
      */
     public static void openTab(IViewContext<IScreeningClientServiceAsync> screeningViewContext,
             MaterialIdentifier materialIdentifier,
-            final ExperimentSearchByProjectCriteria experimentCriteria)
+            final ExperimentSearchByProjectCriteria experimentCriteria,
+            AnalysisProcedureCriteria analysisProcedureCriteria)
     {
         final MaterialFeaturesFromAllExperimentsViewer viewer =
-                new MaterialFeaturesFromAllExperimentsViewer(screeningViewContext);
+                new MaterialFeaturesFromAllExperimentsViewer(screeningViewContext,
+                        analysisProcedureCriteria);
 
         screeningViewContext.getCommonService().getMaterialInfo(materialIdentifier,
                 new AbstractAsyncCallback<Material>(screeningViewContext)
@@ -63,10 +68,14 @@ public class MaterialFeaturesFromAllExperimentsViewer
 
     private final IViewContext<IScreeningClientServiceAsync> screeningViewContext;
 
+    private final AnalysisProcedureCriteria analysisProcedureCriteria;
+
     private MaterialFeaturesFromAllExperimentsViewer(
-            IViewContext<IScreeningClientServiceAsync> screeningViewContext)
+            IViewContext<IScreeningClientServiceAsync> screeningViewContext,
+            AnalysisProcedureCriteria analysisProcedureCriteria)
     {
         this.screeningViewContext = screeningViewContext;
+        this.analysisProcedureCriteria = analysisProcedureCriteria;
     }
 
     private void openTab(Material material, ExperimentSearchByProjectCriteria experimentCriteria)
@@ -91,11 +100,11 @@ public class MaterialFeaturesFromAllExperimentsViewer
                 @Override
                 public ITabItem create()
                 {
-                    // TODO KE: FIXMe what sort of analysis***holder do we have here ?
                     IDisposableComponent tabComponent =
                             MaterialFeaturesFromAllExperimentsComponent.createComponent(
                                     screeningViewContext, material, experimentCriteria,
-                                    new AnalysisProcedureListenerHolder());
+                                    analysisProcedureCriteria);
+
                     return DefaultTabItem.create(getTabTitle(), tabComponent, screeningViewContext);
                 }
 
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java
index 0b9f6b9cdb6..0d572bd1c21 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java
@@ -61,6 +61,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.u
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageDatasetParameters;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellImage;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellReplicaImage;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria;
 
 /**
@@ -87,23 +88,37 @@ public class MaterialReplicaSummaryComponent
             AnalysisProcedureListenerHolder analysisProcedureListenerHolder)
     {
         return new MaterialReplicaSummaryComponent(screeningViewContext,
-                restrictGlobalScopeLinkToProject, experiment).createViewer(material,
+                restrictGlobalScopeLinkToProject, experiment, null).createViewer(material,
                 analysisProcedureListenerHolder);
     }
 
+    public static IDisposableComponent createViewer(
+            IViewContext<IScreeningClientServiceAsync> screeningViewContext, Experiment experiment,
+            Material material, boolean restrictGlobalScopeLinkToProject,
+            AnalysisProcedureCriteria analysisProcedureCriteria)
+    {
+        return new MaterialReplicaSummaryComponent(screeningViewContext,
+                restrictGlobalScopeLinkToProject, experiment, analysisProcedureCriteria)
+                .createViewer(material);
+    }
+
     private final IViewContext<IScreeningClientServiceAsync> screeningViewContext;
 
     private final boolean restrictGlobalScopeLinkToProject;
 
     private final Experiment experiment;
 
+    private final AnalysisProcedureCriteria initialAnalysisProcedureCriteriaOrNull;
+
     private MaterialReplicaSummaryComponent(
             IViewContext<IScreeningClientServiceAsync> screeningViewContext,
-            boolean restrictGlobalScopeLinkToProject, Experiment experiment)
+            boolean restrictGlobalScopeLinkToProject, Experiment experiment,
+            AnalysisProcedureCriteria initialAnalysisProcedureCriteriaOrNull)
     {
         this.screeningViewContext = screeningViewContext;
         this.restrictGlobalScopeLinkToProject = restrictGlobalScopeLinkToProject;
         this.experiment = experiment;
+        this.initialAnalysisProcedureCriteriaOrNull = initialAnalysisProcedureCriteriaOrNull;
     }
 
     private class ImagesFoundCallback extends AbstractAsyncCallback<List<WellReplicaImage>>
@@ -343,6 +358,18 @@ public class MaterialReplicaSummaryComponent
         return widgetWithListener.asWidget();
     }
 
+    private IDisposableComponent createViewer(Material material)
+    {
+        AnalysisProcedureListenerHolder holder = new AnalysisProcedureListenerHolder();
+        IDisposableComponent view = createViewer(material, holder);
+        if (initialAnalysisProcedureCriteriaOrNull != null)
+        {
+            holder.getAnalysisProcedureListener().analysisProcedureSelected(
+                    initialAnalysisProcedureCriteriaOrNull);
+        }
+        return view;
+    }
+
     private IDisposableComponent createViewer(Material material,
             AnalysisProcedureListenerHolder analysisProcedureListenerHolder)
     {
@@ -420,9 +447,12 @@ public class MaterialReplicaSummaryComponent
 
         // in non-embedded mode there is a separate tab in material detail view with all assays
         // information, so we do not display this link there
-        if (screeningViewContext.getModel().isEmbeddedMode())
+        if (screeningViewContext.getModel().isEmbeddedMode()
+                && initialAnalysisProcedureCriteriaOrNull != null)
         {
-            Widget materialInAllAssaysSummaryLink = createMaterialInAllAssaysSummaryLink(material);
+            Widget materialInAllAssaysSummaryLink =
+                    createMaterialInAllAssaysSummaryLink(material,
+                            initialAnalysisProcedureCriteriaOrNull);
             rightLinksPanel.add(materialInAllAssaysSummaryLink, linkMargins);
         }
 
@@ -433,7 +463,8 @@ public class MaterialReplicaSummaryComponent
         return headerPanel;
     }
 
-    private Widget createMaterialInAllAssaysSummaryLink(final Material material)
+    private Widget createMaterialInAllAssaysSummaryLink(final Material material,
+            final AnalysisProcedureCriteria analysisProcedureCriteria)
     {
         final ExperimentSearchCriteria experimentCriteria = createAllAssaysExperimentCriteria();
         String linkUrl =
@@ -446,7 +477,7 @@ public class MaterialReplicaSummaryComponent
                 public void onClick(ClickEvent event)
                 {
                     ClientPluginFactory.openImagingMaterialViewer(material, experimentCriteria,
-                            screeningViewContext);
+                            analysisProcedureCriteria, screeningViewContext);
                 }
             }, linkUrl);
         return linkWidget;
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryViewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryViewer.java
index 9a5cfcc10c7..b656ded6377 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryViewer.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryViewer.java
@@ -33,6 +33,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningCli
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ScreeningModule;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.utils.MaterialComponentUtils;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria;
 
 /**
@@ -47,11 +48,12 @@ public class MaterialReplicaSummaryViewer
      */
     public static void openTab(IViewContext<IScreeningClientServiceAsync> screeningViewContext,
             String experimentPermId, boolean restrictGlobalScopeLinkToProject,
-            MaterialIdentifier materialIdentifier)
+            MaterialIdentifier materialIdentifier,
+            AnalysisProcedureCriteria analysisProcedureCriteria)
     {
         MaterialReplicaSummaryViewer viewer =
                 new MaterialReplicaSummaryViewer(screeningViewContext,
-                        restrictGlobalScopeLinkToProject);
+                        restrictGlobalScopeLinkToProject, analysisProcedureCriteria);
         AbstractAsyncCallback<Experiment> experimentFoundCallback =
                 viewer.createExperimentFoundCallback(materialIdentifier);
         viewer.fetchExperimentByPermId(experimentPermId, experimentFoundCallback);
@@ -61,12 +63,16 @@ public class MaterialReplicaSummaryViewer
 
     private final boolean restrictGlobalScopeLinkToProject;
 
+    private final AnalysisProcedureCriteria analysisProcedureCriteria;
+
     private MaterialReplicaSummaryViewer(
             IViewContext<IScreeningClientServiceAsync> screeningViewContext,
-            boolean restrictGlobalScopeLinkToProject)
+            boolean restrictGlobalScopeLinkToProject,
+            AnalysisProcedureCriteria analysisProcedureCriteria)
     {
         this.screeningViewContext = screeningViewContext;
         this.restrictGlobalScopeLinkToProject = restrictGlobalScopeLinkToProject;
+        this.analysisProcedureCriteria = analysisProcedureCriteria;
     }
 
     private void fetchExperimentByPermId(String experimentPermId,
@@ -138,11 +144,10 @@ public class MaterialReplicaSummaryViewer
                 @Override
                 public ITabItem create()
                 {
-                    // TODO KE: FIXME - what sort of analysis***holder do we have here ?
                     IDisposableComponent tabComponent =
                             MaterialReplicaSummaryComponent.createViewer(screeningViewContext,
                                     experiment, material, restrictGlobalScopeLinkToProject,
-                                    new AnalysisProcedureListenerHolder());
+                                    analysisProcedureCriteria);
                     return DefaultTabItem.create(getTabTitle(), tabComponent, screeningViewContext);
                 }
 
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 d04ca32fe95..3a42e93014a 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
@@ -66,6 +66,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConst
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellImage;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellLocation;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellMetadata;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.SingleExperimentSearchCriteria;
 
@@ -434,6 +435,7 @@ public class WellContentDialog extends Dialog
                     // TODO KE: pass analysis procedure from plate layout to material detail view
                     ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ClientPluginFactory
                             .openImagingMaterialViewer(material, getExperimentCriteria(),
+                                    AnalysisProcedureCriteria.createAllProcedures(),
                                     viewContext);
                 }
 
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellSearchGrid.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellSearchGrid.java
index ecc6b0fa1ff..ca6a7092ea7 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellSearchGrid.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellSearchGrid.java
@@ -404,7 +404,7 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> implements
     private void openImagingMaterialViewer(WellContent wellContent, Material material)
     {
         ClientPluginFactory.openImagingMaterialViewer(material, getExperimentCriteria(wellContent),
-                viewContext);
+                analysisProcedureCriteria, viewContext);
     }
 
     private void linkExperiment()
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/ImagingMaterialLocatorResolver.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/ImagingMaterialLocatorResolver.java
index 47852aec211..276caa3d33a 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/ImagingMaterialLocatorResolver.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/locator/ImagingMaterialLocatorResolver.java
@@ -15,6 +15,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningCli
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ClientPluginFactory;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.dto.ExperimentIdentifierSearchCriteria;
+import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.AnalysisProcedureCriteria;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria;
 
 /**
@@ -41,7 +42,10 @@ public class ImagingMaterialLocatorResolver extends MaterialLocatorResolver
 
         ExperimentIdentifierSearchCriteria experimentCriteriaOrNull =
                 tryGetExperimentIdentifierSearchCriteria(locator);
-        openInitialMaterialViewer(extractMaterialIdentifier(locator), experimentCriteriaOrNull);
+        AnalysisProcedureCriteria analysisProcedureCriteria =
+                extractAnalysisProcedureCriteria(locator);
+        openInitialMaterialViewer(extractMaterialIdentifier(locator), experimentCriteriaOrNull,
+                analysisProcedureCriteria);
     }
 
     private static ExperimentIdentifierSearchCriteria tryGetExperimentIdentifierSearchCriteria(
@@ -80,16 +84,30 @@ public class ImagingMaterialLocatorResolver extends MaterialLocatorResolver
         return null;
     }
 
+    private AnalysisProcedureCriteria extractAnalysisProcedureCriteria(ViewLocator locator)
+    {
+        String analysisProcedureCode =
+                getOptionalParameter(locator, ScreeningLinkExtractor.ANALYSIS_PROCEDURE_KEY);
+
+        return StringUtils.isBlank(analysisProcedureCode) ? AnalysisProcedureCriteria
+                .createAllProcedures() : AnalysisProcedureCriteria
+                .createFromCode(analysisProcedureCode);
+    }
+
     /**
      * Open the gene material details tab for the specified identifier. Optionally select experiment
      * in the viewer.
+     * 
+     * @param analysisProcedureCriteria
      */
     protected void openInitialMaterialViewer(MaterialIdentifier identifier,
-            ExperimentIdentifierSearchCriteria experimentCriteriaOrNull)
+            ExperimentIdentifierSearchCriteria experimentCriteriaOrNull,
+            AnalysisProcedureCriteria analysisProcedureCriteria)
             throws UserFailureException
     {
         viewContext.getCommonService().getMaterialInformationHolder(identifier,
-                new OpenEntityDetailsTabCallback(viewContext, experimentCriteriaOrNull));
+                new OpenEntityDetailsTabCallback(viewContext, experimentCriteriaOrNull,
+                        analysisProcedureCriteria));
     }
 
     private static class OpenEntityDetailsTabCallback extends
@@ -99,13 +117,17 @@ public class ImagingMaterialLocatorResolver extends MaterialLocatorResolver
 
         private final ExperimentIdentifierSearchCriteria scopeOrNull;
 
+        private final AnalysisProcedureCriteria analysisProcedureCriteria;
+
         private OpenEntityDetailsTabCallback(
                 final IViewContext<IScreeningClientServiceAsync> viewContext,
-                ExperimentIdentifierSearchCriteria scopeOrNull)
+                ExperimentIdentifierSearchCriteria scopeOrNull,
+                AnalysisProcedureCriteria analysisProcedureCriteria)
         {
             super(viewContext);
             this.viewContext = viewContext;
             this.scopeOrNull = scopeOrNull;
+            this.analysisProcedureCriteria = analysisProcedureCriteria;
         }
 
         //
@@ -165,7 +187,7 @@ public class ImagingMaterialLocatorResolver extends MaterialLocatorResolver
                 final ExperimentSearchCriteria experimentSearchCriteriaOrNull)
         {
             ClientPluginFactory.openImagingMaterialViewer(material, experimentSearchCriteriaOrNull,
-                    viewContext);
+                    analysisProcedureCriteria, viewContext);
         }
     }
 
-- 
GitLab