From 9ec75cda08b137439069b044f3eb2ccd2d10395f Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Mon, 8 Nov 2010 12:09:45 +0000
Subject: [PATCH] [LMS-1848] fixed links in query results in simple view mode

SVN: 18577
---
 .../client/application/ui/TypedTableGrid.java    |  6 ++++--
 .../ui/TypedTableGridColumnDefinitionUI.java     | 15 ++++++++-------
 .../ui/columns/framework/LinkExtractor.java      | 16 +++++++++++-----
 .../application/ui/grid/ILinkGenerator.java      |  6 +++---
 .../client/application/RawDataSampleGrid.java    | 12 ++++++++----
 .../detailviewers/PlateMetadataBrowser.java      |  8 +++++---
 .../detailviewers/WellSearchGrid.java            | 13 +++++++------
 7 files changed, 46 insertions(+), 30 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java
index bb2a43b6036..f7874d1d868 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java
@@ -33,6 +33,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.RealNumberRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.IColumnDefinitionUI;
+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.grid.AbstractBrowserGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ColumnDefsAndConfigs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICellListenerAndLinkGenerator;
@@ -79,9 +80,10 @@ public abstract class TypedTableGrid<T extends IsSerializable>
             this.header = header;
         }
 
-        public String tryGetLink(T entity)
+        public String tryGetLink(T entity, final ISerializableComparable value)
         {
-            return null; // FIXME LMS-1848
+            return (value == null) ? null : LinkExtractor.createPermlink(entityKind,
+                    value.toString());
         }
 
         public void handle(TableModelRowWithObject<T> rowItem, boolean specialKeyPressed)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGridColumnDefinitionUI.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGridColumnDefinitionUI.java
index 9f11712cc42..65b848525f5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGridColumnDefinitionUI.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGridColumnDefinitionUI.java
@@ -22,19 +22,19 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.TypedTableGridColumnDefinition;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ILinkGenerator;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelColumnHeader;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
 
 /**
- * 
- *
  * @author Franz-Josef Elmer
  */
 public class TypedTableGridColumnDefinitionUI<T extends IsSerializable> extends
-        TypedTableGridColumnDefinition<T> implements IColumnDefinitionUI<TableModelRowWithObject<T>>
+        TypedTableGridColumnDefinition<T> implements
+        IColumnDefinitionUI<TableModelRowWithObject<T>>
 {
     private transient final ILinkGenerator<T> linkGeneratorOrNull;
-    
+
     private boolean hidden;
 
     public TypedTableGridColumnDefinitionUI(TableModelColumnHeader header, String title,
@@ -54,7 +54,7 @@ public class TypedTableGridColumnDefinitionUI<T extends IsSerializable> extends
     {
         this(null, null, null, null, null);
     }
-    
+
     public int getWidth()
     {
         return header.getDefaultColumnWidth();
@@ -81,8 +81,9 @@ public class TypedTableGridColumnDefinitionUI<T extends IsSerializable> extends
         {
             return null;
         }
-        T objectOrNull = entity.getObjectOrNull();
-        return objectOrNull == null ? null : linkGeneratorOrNull.tryGetLink(objectOrNull);
+        final ISerializableComparable value = entity.getValues().get(header.getIndex());
+        final T objectOrNull = entity.getObjectOrNull();
+        return objectOrNull == null ? null : linkGeneratorOrNull.tryGetLink(objectOrNull, value);
     }
 
     public boolean isNumeric()
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 144a622886f..46edb0046ea 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
@@ -105,14 +105,20 @@ public class LinkExtractor
             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 tryPrint(url);
+            return createPermlink(entityOrNull.getEntityKind(), entityOrNull.getPermId());
         }
     }
 
+    /** creates permid for entities other than material */
+    public static String createPermlink(EntityKind entityKind, String permId)
+    {
+        assert entityKind != EntityKind.MATERIAL;
+        URLMethodWithParameters url = new URLMethodWithParameters("");
+        url.addParameter(PermlinkUtilities.ENTITY_KIND_PARAMETER_KEY, entityKind.name());
+        url.addParameter(PermlinkUtilities.PERM_ID_PARAMETER_KEY, permId);
+        return tryPrint(url);
+    }
+
     public static final String tryExtract(Project p)
     {
         if (p == null)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ILinkGenerator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ILinkGenerator.java
index 76bd185a38f..05e3c2f3337 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ILinkGenerator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ILinkGenerator.java
@@ -18,12 +18,12 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid;
 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
+
 /**
- * 
- *
  * @author Franz-Josef Elmer
  */
 public interface ILinkGenerator<T extends IsSerializable>
 {
-    public String tryGetLink(T entity);
+    public String tryGetLink(T entity, ISerializableComparable comparableValue);
 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/RawDataSampleGrid.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/RawDataSampleGrid.java
index 940cf861f17..c39877914e9 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/RawDataSampleGrid.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/RawDataSampleGrid.java
@@ -37,6 +37,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteri
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.client.web.client.IPhosphoNetXClientServiceAsync;
@@ -53,7 +54,8 @@ class RawDataSampleGrid extends TypedTableGrid<Sample>
             final IViewContext<IPhosphoNetXClientServiceAsync> viewContext)
     {
         RawDataSampleGrid grid = new RawDataSampleGrid(viewContext);
-        DisposableEntityChooser<TableModelRowWithObject<Sample>> disposable = grid.asDisposableWithoutToolbar();
+        DisposableEntityChooser<TableModelRowWithObject<Sample>> disposable =
+                grid.asDisposableWithoutToolbar();
         return new DatabaseModificationAwareComponent(disposable.getComponent(), disposable);
     }
 
@@ -80,7 +82,7 @@ class RawDataSampleGrid extends TypedTableGrid<Sample>
         linkMSInjectionSample();
         linkBiologicalSample();
     }
-    
+
     private void linkMSInjectionSample()
     {
         registerListenerAndLinkGenerator(RawDataSampleGridIDs.CODE,
@@ -94,10 +96,11 @@ class RawDataSampleGrid extends TypedTableGrid<Sample>
                                     specialKeyPressed);
                         }
 
-                        public String tryGetLink(Sample entity)
+                        public String tryGetLink(Sample entity, ISerializableComparable value)
                         {
                             return LinkExtractor.tryExtract(entity);
                         }
+
                     });
     }
 
@@ -114,7 +117,8 @@ class RawDataSampleGrid extends TypedTableGrid<Sample>
                                     .getGeneratedFrom(), false, specialKeyPressed);
                         }
 
-                        public String tryGetLink(Sample entity)
+                        public String tryGetLink(Sample entity,
+                                ISerializableComparable comparableValue)
                         {
                             return LinkExtractor.tryExtract(entity.getGeneratedFrom());
                         }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMetadataBrowser.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMetadataBrowser.java
index c4c4862758a..347e2cab3e1 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMetadataBrowser.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMetadataBrowser.java
@@ -38,6 +38,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSe
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithPermId;
 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.ISerializableComparable;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ScreeningDisplayTypeIDGenerator;
@@ -53,7 +54,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellMetadata;
 public class PlateMetadataBrowser extends TypedTableGrid<WellMetadata>
 {
     public static final String BROWSER_ID = GenericConstants.ID_PREFIX + "plate_metadata_browser";
-    
+
     /**
      * Fetches information about the plate with the specified plate id and opens plate metadata
      * browser tab for that plate.
@@ -155,7 +156,7 @@ public class PlateMetadataBrowser extends TypedTableGrid<WellMetadata>
                                     .getWellSample(), false, specialKeyPressed);
                         }
 
-                        public String tryGetLink(WellMetadata entity)
+                        public String tryGetLink(WellMetadata entity, ISerializableComparable value)
                         {
                             return LinkExtractor.tryExtract(entity.getWellSample());
                         }
@@ -171,7 +172,8 @@ public class PlateMetadataBrowser extends TypedTableGrid<WellMetadata>
     }
 
     @Override
-    protected void prepareExportEntities(TableExportCriteria<TableModelRowWithObject<WellMetadata>> exportCriteria,
+    protected void prepareExportEntities(
+            TableExportCriteria<TableModelRowWithObject<WellMetadata>> exportCriteria,
             AbstractAsyncCallback<String> callback)
     {
         screeningViewContext.getService().prepareExportPlateMetadata(exportCriteria, callback);
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 be86515cb8f..24ebb2131f3 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
@@ -67,6 +67,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWit
 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.Experiment;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
 import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync;
@@ -247,7 +248,7 @@ public class WellSearchGrid extends TypedTableGrid<WellContent>
         registerListenerAndLinkGenerator(WELL_CONTENT_MATERIAL,
                 new ICellListenerAndLinkGenerator<WellContent>()
                     {
-                        public String tryGetLink(WellContent entity)
+                        public String tryGetLink(WellContent entity, ISerializableComparable value)
                         {
                             Material material = entity.getMaterialContent();
                             String experimentIdentifier =
@@ -279,7 +280,7 @@ public class WellSearchGrid extends TypedTableGrid<WellContent>
         registerListenerAndLinkGenerator(WellSearchGridColumnIds.EXPERIMENT,
                 new ICellListenerAndLinkGenerator<WellContent>()
                     {
-                        public String tryGetLink(WellContent entity)
+                        public String tryGetLink(WellContent entity, ISerializableComparable value)
                         {
                             return LinkExtractor.tryExtract(entity.getExperiment());
                         }
@@ -298,7 +299,7 @@ public class WellSearchGrid extends TypedTableGrid<WellContent>
         registerListenerAndLinkGenerator(WellSearchGridColumnIds.PLATE,
                 new ICellListenerAndLinkGenerator<WellContent>()
                     {
-                        public String tryGetLink(WellContent entity)
+                        public String tryGetLink(WellContent entity, ISerializableComparable value)
                         {
                             return LinkExtractor.tryExtract(entity.getPlate());
                         }
@@ -317,7 +318,7 @@ public class WellSearchGrid extends TypedTableGrid<WellContent>
         registerListenerAndLinkGenerator(WellSearchGridColumnIds.WELL,
                 new ICellListenerAndLinkGenerator<WellContent>()
                     {
-                        public String tryGetLink(WellContent entity)
+                        public String tryGetLink(WellContent entity, ISerializableComparable value)
                         {
                             return LinkExtractor.tryExtract(entity.getWell());
                         }
@@ -336,7 +337,7 @@ public class WellSearchGrid extends TypedTableGrid<WellContent>
         registerListenerAndLinkGenerator(WellSearchGridColumnIds.IMAGE_DATA_SET,
                 new ICellListenerAndLinkGenerator<WellContent>()
                     {
-                        public String tryGetLink(WellContent entity)
+                        public String tryGetLink(WellContent entity, ISerializableComparable value)
                         {
                             DatasetImagesReference imageDataset = entity.tryGetImageDataset();
                             if (imageDataset != null)
@@ -366,7 +367,7 @@ public class WellSearchGrid extends TypedTableGrid<WellContent>
         registerListenerAndLinkGenerator(WellSearchGridColumnIds.IMAGE_ANALYSIS_DATA_SET,
                 new ICellListenerAndLinkGenerator<WellContent>()
                     {
-                        public String tryGetLink(WellContent entity)
+                        public String tryGetLink(WellContent entity, ISerializableComparable value)
                         {
                             DatasetReference dataset = entity.tryGetFeatureVectorDataset();
                             if (dataset != null)
-- 
GitLab