From 3cd2a919bc1513e5ac08b2f5f44dc77316b24f90 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Mon, 20 Sep 2010 07:55:25 +0000
Subject: [PATCH] [LMS-1757] fixed links to materials in simple view mode

SVN: 17908
---
 .../ui/columns/framework/LinkExtractor.java   | 15 ++++--
 .../detailviewers/PlateMaterialReviewer.java  |  2 +-
 .../detailviewers/WellContentDialog.java      | 54 ++++++++++++-------
 3 files changed, 46 insertions(+), 25 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/LinkExtractor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/LinkExtractor.java
index 9b56546cfd0..07c14b525db 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/LinkExtractor.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/LinkExtractor.java
@@ -40,10 +40,17 @@ public class LinkExtractor
         {
             return null;
         }
-        URLMethodWithParameters url = new URLMethodWithParameters("");
-        url.addParameter(PermlinkUtilities.ENTITY_KIND_PARAMETER_KEY, entityOrNull.getEntityKind().name());
-        url.addParameter(PermlinkUtilities.PERM_ID_PARAMETER_KEY, entityOrNull.getPermId());
-        return print(url);
+        if (entityOrNull.getEntityKind() == EntityKind.MATERIAL)
+        {
+            return tryExtractMaterial(entityOrNull);
+        } else
+        {
+            URLMethodWithParameters url = new URLMethodWithParameters("");
+            url.addParameter(PermlinkUtilities.ENTITY_KIND_PARAMETER_KEY, entityOrNull
+                    .getEntityKind().name());
+            url.addParameter(PermlinkUtilities.PERM_ID_PARAMETER_KEY, entityOrNull.getPermId());
+            return print(url);
+        }
     }
 
     public static final String tryExtract(Project p)
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 a79959057d6..1e6896a31ac 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
@@ -365,7 +365,7 @@ public class PlateMaterialReviewer extends AbstractSimpleBrowserGrid<WellContent
     {
         ColumnDefsAndConfigs<WellContent> schema = super.createColumnsDefinition();
         setLinksRenderer(schema, new PlateMaterialReviewerColDefKind[]
-            { PlateMaterialReviewerColDefKind.WELL_CONTENT_MATERIAL,
+            {
                     PlateMaterialReviewerColDefKind.WELL_CONTENT_MATERIAL,
                     PlateMaterialReviewerColDefKind.PLATE, PlateMaterialReviewerColDefKind.WELL,
                     PlateMaterialReviewerColDefKind.DATASET,
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 c622d3b159e..411ee35d5f5 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
@@ -34,12 +34,14 @@ import com.extjs.gxt.ui.client.widget.layout.TableData;
 import com.extjs.gxt.ui.client.widget.layout.TableLayout;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.Widget;
 
 import ch.systemsx.cisd.common.shared.basic.utils.StringUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.LinkRenderer;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.LinkExtractor;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityDetailsTabClickListener;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
@@ -162,8 +164,8 @@ public class WellContentDialog extends Dialog
             WellContent wellContent, WellImages wellImages)
     {
         WellContentDialog contentDialog =
-                new WellContentDialog(wellContent.getWell(), null,
-                        getExperiment(wellContent.getExperiment()), viewContext);
+                new WellContentDialog(wellContent.getWell(), null, getExperiment(wellContent
+                        .getExperiment()), viewContext);
 
         // NOTE: channel chooser state will be not reused among different dialogs
         DefaultChannelState channelState = new DefaultChannelState();
@@ -196,8 +198,8 @@ public class WellContentDialog extends Dialog
                     return createTilesGrid(images, channel, sessionId);
                 }
             };
-        return ChannelChooser.createViewerWithChannelChooser(viewerFactory, channelState,
-                images.getChannelsCodes());
+        return ChannelChooser.createViewerWithChannelChooser(viewerFactory, channelState, images
+                .getChannelsCodes());
     }
 
     private static LayoutContainer createTilesGrid(final WellImages images, String channel,
@@ -265,8 +267,8 @@ public class WellContentDialog extends Dialog
                             getImageHeight(images));
                 }
             };
-        return ChannelChooser.createViewerWithChannelChooser(viewerFactory, channelState,
-                images.getChannelsCodes());
+        return ChannelChooser.createViewerWithChannelChooser(viewerFactory, channelState, images
+                .getChannelsCodes());
     }
 
     // ---------------- STATIC METHODS -------------------
@@ -285,15 +287,15 @@ public class WellContentDialog extends Dialog
 
     private static SingleExperimentSearchCriteria getExperiment(WellData wellData)
     {
-        return new SingleExperimentSearchCriteria(wellData.getExperimentId().getId(),
-                wellData.getExperimentDisplayIdentifier());
+        return new SingleExperimentSearchCriteria(wellData.getExperimentId().getId(), wellData
+                .getExperimentDisplayIdentifier());
     }
 
     private static SingleExperimentSearchCriteria getExperiment(
             ExperimentReference experimentReference)
     {
-        return new SingleExperimentSearchCriteria(experimentReference.getId(),
-                experimentReference.getExperimentIdentifier());
+        return new SingleExperimentSearchCriteria(experimentReference.getId(), experimentReference
+                .getExperimentIdentifier());
     }
 
     private static float getImageSizeMultiplyFactor(WellImages images)
@@ -348,7 +350,7 @@ public class WellContentDialog extends Dialog
                 }
             });
     }
-    
+
     private void addComponent(LayoutContainer component)
     {
         add(component);
@@ -408,8 +410,8 @@ public class WellContentDialog extends Dialog
         if (material != null)
         {
 
-            if (material.getMaterialType().getCode()
-                    .equalsIgnoreCase(ScreeningConstants.GENE_PLUGIN_TYPE_CODE))
+            if (material.getMaterialType().getCode().equalsIgnoreCase(
+                    ScreeningConstants.GENE_PLUGIN_TYPE_CODE))
             {
                 container.add(createEntityExternalLink(material));
             } else
@@ -458,8 +460,8 @@ public class WellContentDialog extends Dialog
             }
         } else
         {
-            container.add(new Html(LinkRenderer.renderAsLinkWithAnchor("gene database",
-                    viewContext.getMessage(Dict.GENE_LIBRARY_SEARCH_URL, gene.getCode()), true)));
+            container.add(new Html(LinkRenderer.renderAsLinkWithAnchor("gene database", viewContext
+                    .getMessage(Dict.GENE_LIBRARY_SEARCH_URL, gene.getCode()), true)));
         }
         container.add(new Text("]"));
         return container;
@@ -467,17 +469,29 @@ public class WellContentDialog extends Dialog
 
     private Widget createPlateLocationsMaterialViewerLink(final IEntityInformationHolder material)
     {
-        return LinkRenderer.getLinkWidget(material.getCode(), new ClickHandler()
+        final String href = LinkExtractor.tryExtractMaterial(material);
+        final ClickHandler listener = new ClickHandler()
             {
                 public void onClick(ClickEvent event)
                 {
                     WellContentDialog.this.hide();
                     ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ClientPluginFactory
-                            .openPlateLocationsMaterialViewer(material,
-                                    ExperimentSearchCriteria.createExperiment(experiment),
-                                    viewContext);
+                            .openPlateLocationsMaterialViewer(material, ExperimentSearchCriteria
+                                    .createExperiment(experiment), viewContext);
                 }
-            });
+            };
+        Anchor link = (Anchor) LinkRenderer.getLinkWidget(material.getCode(), listener, href);
+        if (viewContext.isSimpleMode())
+        {
+            link.addClickHandler(new ClickHandler()
+                {
+                    public void onClick(ClickEvent event)
+                    {
+                        WellContentDialog.this.hide();
+                    }
+                });
+        }
+        return link;
     }
 
     private Widget createEntityLink(IEntityInformationHolder entity)
-- 
GitLab