From 26bb013d8eff5673c1105dcfe3719d4ddba629a2 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Mon, 23 May 2011 12:00:40 +0000
Subject: [PATCH] LMS-2240 finishing up

SVN: 21436
---
 .../model/EntityGridModelFactory.java         | 45 ++++++++++---------
 .../renderer/AbstractPropertyColRenderer.java |  2 +-
 .../renderer/RealPropertyColRenderer.java     | 10 +----
 .../ui/data/AbstractExternalDataGrid.java     |  3 +-
 .../ui/data/DataSetSearchHitGrid.java         |  3 +-
 .../ui/data/DataSetSearchHitModel.java        |  8 +++-
 .../ui/data/RelatedDataSetGrid.java           |  3 +-
 .../ui/experiment/ExperimentBrowserGrid.java  |  3 +-
 .../ui/grid/ColumnDefsAndConfigs.java         | 35 +++++++++++++--
 .../ui/material/MaterialBrowserGrid.java      |  3 +-
 .../generic/shared/basic/TableCellUtil.java   |  2 +-
 11 files changed, 77 insertions(+), 40 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/EntityGridModelFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/EntityGridModelFactory.java
index da258b89a55..299d543e360 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/EntityGridModelFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/EntityGridModelFactory.java
@@ -16,11 +16,13 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.model;
 
-import java.util.ArrayList;
 import java.util.List;
 
+import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
+
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.renderer.AbstractPropertyColRenderer;
+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.EntityPropertyColDef;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.IColumnDefinitionKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.IColumnDefinitionUI;
@@ -29,6 +31,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.en
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
 import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityPropertiesHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
@@ -75,7 +78,7 @@ public class EntityGridModelFactory<T extends IEntityPropertiesHolder>
      * here we create the columns definition having just one table row. We need them only to render
      * column values (headers have been already created), so no message provider is needed.
      */
-    public List<IColumnDefinitionUI<T>> createColumnsSchemaForRendering(GridRowModel<T> rowModel,
+    private List<IColumnDefinitionUI<T>> createColumnsSchemaForRendering(GridRowModel<T> rowModel,
             RealNumberFormatingParameters realNumberFormatingParameters)
     {
         List<IColumnDefinitionUI<T>> list = createStaticColumnDefinitions(null);
@@ -90,25 +93,26 @@ public class EntityGridModelFactory<T extends IEntityPropertiesHolder>
     }
 
     public ColumnDefsAndConfigs<T> createColumnsSchema(IMessageProvider messageProvider,
-            EntityType selectedTypeOrNull)
+            EntityType selectedTypeOrNull,
+            RealNumberFormatingParameters realNumberFormatingParameters)
     {
         List<PropertyType> propertyTypesOrNull = null;
         if (selectedTypeOrNull != null)
         {
             propertyTypesOrNull = PropertyTypesFilterUtil.extractPropertyTypes(selectedTypeOrNull);
         }
-        return createColumnsSchema(messageProvider, propertyTypesOrNull);
+        return createColumnsSchema(messageProvider, propertyTypesOrNull,
+                realNumberFormatingParameters);
     }
 
     public ColumnDefsAndConfigs<T> createColumnsSchema(IMessageProvider messageProvider,
-            List<PropertyType> propertyTypesOrNull)
+            List<PropertyType> propertyTypesOrNull,
+            RealNumberFormatingParameters realNumberFormatingParameters)
     {
         ColumnDefsAndConfigs<T> columns = createStaticColumnDefsAndConfigs(messageProvider);
         if (propertyTypesOrNull != null)
         {
-            List<IColumnDefinitionUI<T>> propertyColumnsSchema =
-                    createPropertyColumnsSchema(propertyTypesOrNull);
-            columns.addColumns(propertyColumnsSchema);
+            createPropertyColumnsSchema(columns, propertyTypesOrNull, realNumberFormatingParameters);
         }
         return columns;
     }
@@ -118,8 +122,7 @@ public class EntityGridModelFactory<T extends IEntityPropertiesHolder>
     {
         List<IColumnDefinitionUI<T>> commonColumnsSchema =
                 createStaticColumnDefinitions(messageProvider);
-        ColumnDefsAndConfigs<T> columns = ColumnDefsAndConfigs.create(commonColumnsSchema);
-        return columns;
+        return ColumnDefsAndConfigs.create(commonColumnsSchema);
     }
 
     private List<IColumnDefinitionUI<T>> createStaticColumnDefinitions(
@@ -128,19 +131,21 @@ public class EntityGridModelFactory<T extends IEntityPropertiesHolder>
         return BaseEntityModel.createColumnsDefinition(staticColumnDefinitions, msgProviderOrNull);
     }
 
-    private static <T extends IEntityPropertiesHolder> List<IColumnDefinitionUI<T>> createPropertyColumnsSchema(
-            List<PropertyType> propertyTypes)
+    public static <T extends IEntityPropertiesHolder> void createPropertyColumnsSchema(
+            ColumnDefsAndConfigs<T> columns, List<PropertyType> propertyTypes,
+            RealNumberFormatingParameters realNumberFormatingParameters)
     {
-        List<IColumnDefinitionUI<T>> list = createColDefList();
         for (PropertyType propertyType : propertyTypes)
         {
-            list.add(new EntityPropertyColDef<T>(propertyType, true, propertyTypes));
+            EntityPropertyColDef<T> def =
+                    new EntityPropertyColDef<T>(propertyType, true, propertyTypes);
+            GridCellRenderer<BaseEntityModel<?>> renderer = null;
+            DataTypeCode dataTypeCode = propertyType.getDataType().getCode();
+            if (dataTypeCode == DataTypeCode.REAL)
+            {
+                renderer = new RealNumberRenderer(realNumberFormatingParameters);
+            }
+            columns.addColumn(def, renderer);
         }
-        return list;
-    }
-
-    private static <T> ArrayList<IColumnDefinitionUI<T>> createColDefList()
-    {
-        return new ArrayList<IColumnDefinitionUI<T>>();
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/AbstractPropertyColRenderer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/AbstractPropertyColRenderer.java
index 3cb68e71ebb..228535d98d1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/AbstractPropertyColRenderer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/AbstractPropertyColRenderer.java
@@ -53,7 +53,7 @@ public abstract class AbstractPropertyColRenderer<T extends IEntityPropertiesHol
         switch (colDef.getDataTypeCode())
         {
             case REAL:
-                return new RealPropertyColRenderer<S>(colDef, realNumberFormatingParameters);
+                return new RealPropertyColRenderer<S>(colDef);
             case HYPERLINK:
                 return new HyperlinkPropertyColRenderer<S>(colDef);
             case MULTILINE_VARCHAR:
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/RealPropertyColRenderer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/RealPropertyColRenderer.java
index 8bcc6f02648..46ded536631 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/RealPropertyColRenderer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/renderer/RealPropertyColRenderer.java
@@ -16,11 +16,9 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.model.renderer;
 
-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.EntityPropertyColDef;
 import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityPropertiesHolder;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters;
 
 /**
  * An {@link AbstractPropertyColRenderer} which renders Real values.
@@ -31,20 +29,16 @@ public class RealPropertyColRenderer<T extends IEntityPropertiesHolder> extends
         AbstractPropertyColRenderer<T>
 {
 
-    private final RealNumberFormatingParameters realNumberFormatingParameters;
-
-    public RealPropertyColRenderer(EntityPropertyColDef<T> colDef,
-            RealNumberFormatingParameters realNumberFormatingParameters)
+    public RealPropertyColRenderer(EntityPropertyColDef<T> colDef)
     {
         super(colDef);
-        this.realNumberFormatingParameters = realNumberFormatingParameters;
     }
 
     @Override
     protected String renderValue(GridRowModel<T> entity)
     {
         String value = colDef.getValue(entity);
-        return RealNumberRenderer.render(value, realNumberFormatingParameters);
+        return value;
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java
index 2e7b56d5d25..9bc035a8094 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java
@@ -334,7 +334,8 @@ public abstract class AbstractExternalDataGrid
 
     protected ColumnDefsAndConfigs<ExternalData> createColumnsSchema()
     {
-        return getColumnsFactory().createColumnsSchema(viewContext, criteria.tryGetPropertyTypes());
+        return getColumnsFactory().createColumnsSchema(viewContext, criteria.tryGetPropertyTypes(),
+                viewContext.getDisplaySettingsManager().getRealNumberFormatingParameters());
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetSearchHitGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetSearchHitGrid.java
index 73c4dda8e2f..cdab9fb0c9e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetSearchHitGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetSearchHitGrid.java
@@ -195,7 +195,8 @@ public class DataSetSearchHitGrid extends AbstractExternalDataGrid implements
     protected ColumnDefsAndConfigs<ExternalData> createColumnsSchema()
     {
         List<PropertyType> propertyTypes = criteria == null ? null : criteria.tryGetPropertyTypes();
-        return DataSetSearchHitModel.createColumnsSchema(viewContext, propertyTypes);
+        return DataSetSearchHitModel.createColumnsSchema(viewContext, propertyTypes, viewContext
+                .getDisplaySettingsManager().getRealNumberFormatingParameters());
     }
 
     /** @return this grid as a disposable component with a specified toolbar at the top. */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetSearchHitModel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetSearchHitModel.java
index 6fede3cefc0..82e41e60734 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetSearchHitModel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetSearchHitModel.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.EntityGridModelFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.PropertyTypeRenderer;
 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.specific.data.CommonExternalDataColDefKind;
@@ -31,6 +32,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingParameters;
 
 /**
  * @author Tomasz Pylak
@@ -89,7 +91,8 @@ public class DataSetSearchHitModel extends BaseEntityModel<ExternalData>
     }
 
     public static ColumnDefsAndConfigs<ExternalData> createColumnsSchema(
-            IMessageProvider messageProvider, List<PropertyType> mergedPropertyTypesOrNull)
+            IMessageProvider messageProvider, List<PropertyType> mergedPropertyTypesOrNull,
+            RealNumberFormatingParameters realNumberFormatingParameters)
     {
         List<IColumnDefinitionUI<ExternalData>> commonColumnsSchema =
                 createCommonColumnsSchema(messageProvider);
@@ -100,7 +103,8 @@ public class DataSetSearchHitModel extends BaseEntityModel<ExternalData>
         {
             List<PropertyType> datasetProperties =
                     PropertyTypesFilterUtil.filterDataSetPropertyTypes(mergedPropertyTypesOrNull);
-            columns.addColumns(createDatasetPropertyTypeColDefs(datasetProperties));
+            EntityGridModelFactory.createPropertyColumnsSchema(columns, datasetProperties,
+                    realNumberFormatingParameters);
         }
         return columns;
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/RelatedDataSetGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/RelatedDataSetGrid.java
index b42270620e6..c291544dfc0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/RelatedDataSetGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/RelatedDataSetGrid.java
@@ -91,7 +91,8 @@ public class RelatedDataSetGrid extends AbstractExternalDataGrid
     protected ColumnDefsAndConfigs<ExternalData> createColumnsSchema()
     {
         List<PropertyType> propertyTypes = criteria == null ? null : criteria.tryGetPropertyTypes();
-        return DataSetSearchHitModel.createColumnsSchema(viewContext, propertyTypes);
+        return DataSetSearchHitModel.createColumnsSchema(viewContext, propertyTypes, viewContext
+                .getDisplaySettingsManager().getRealNumberFormatingParameters());
     }
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java
index 25c90f7d0c0..e526cc577eb 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java
@@ -290,7 +290,8 @@ public class ExperimentBrowserGrid extends
     protected ColumnDefsAndConfigs<Experiment> createColumnsDefinition()
     {
         ColumnDefsAndConfigs<Experiment> schema =
-                getColumnsFactory().createColumnsSchema(viewContext, criteria.getExperimentType());
+                getColumnsFactory().createColumnsSchema(viewContext, criteria.getExperimentType(),
+                        viewContext.getDisplaySettingsManager().getRealNumberFormatingParameters());
         schema.setGridCellRendererFor(CommonExperimentColDefKind.SHOW_DETAILS_LINK.id(),
                 createShowDetailsLinkCellRenderer());
         GridCellRenderer<BaseEntityModel<?>> linkCellRenderer = createInternalLinkCellRenderer();
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnDefsAndConfigs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnDefsAndConfigs.java
index b0058740514..b28d19015c9 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnDefsAndConfigs.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnDefsAndConfigs.java
@@ -30,6 +30,7 @@ import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel;
 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.IColumnDefinitionUI;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.lang.StringEscapeUtils;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition;
 
 /**
@@ -59,11 +60,32 @@ public class ColumnDefsAndConfigs<T>
     {
         for (IColumnDefinitionUI<T> column : columnsSchema)
         {
-            columnConfigs.add(createColumn(column));
-            columnDefs.add(column);
+            addColumn(column);
         }
     }
 
+    public void addColumn(IColumnDefinitionUI<T> column,
+            GridCellRenderer<BaseEntityModel<?>> rendererOrNull)
+    {
+        ColumnConfig columnConfig = createColumn(column);
+        if (rendererOrNull != null)
+        {
+            columnConfig.setRenderer(rendererOrNull);
+        }
+        addColumn(column, columnConfig);
+    }
+    
+    private void addColumn(IColumnDefinitionUI<T> column)
+    {
+        addColumn(column, createColumn(column));
+    }
+
+    private void addColumn(IColumnDefinitionUI<T> column, ColumnConfig columnConfig)
+    {
+        columnConfigs.add(columnConfig);
+        columnDefs.add(column);
+    }
+
     public void setGridCellRendererFor(String columnID, GridCellRenderer<BaseEntityModel<?>> render)
     {
         for (ColumnConfig columnConfig : columnConfigs)
@@ -93,7 +115,14 @@ public class ColumnDefsAndConfigs<T>
         columnConfig.setHidden(column.isHidden());
         if (column.isEditable())
         {
-            CellEditor editor = new CellEditor(new TextField<String>());
+            CellEditor editor = new CellEditor(new TextField<String>()
+                {
+                    @Override
+                    public void setValue(String value)
+                    {
+                        super.setValue(StringEscapeUtils.unescapeHtml(value));
+                    }
+                });
             columnConfig.setEditor(editor);
         }
         return columnConfig;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserGrid.java
index f57f7556fd6..1a5e0b861a6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserGrid.java
@@ -228,7 +228,8 @@ public class MaterialBrowserGrid extends
     {
         ColumnDefsAndConfigs<Material> schema =
                 getColumnsFactory().createColumnsSchema(viewContext,
-                        criteria.getListCriteria().tryGetMaterialType());
+                        criteria.getListCriteria().tryGetMaterialType(),
+                        viewContext.getDisplaySettingsManager().getRealNumberFormatingParameters());
         schema.setGridCellRendererFor(CommonMaterialColDefKind.CODE.id(),
                 createInternalLinkCellRenderer());
         return schema;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/TableCellUtil.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/TableCellUtil.java
index 962594d2444..c9c02df7c3c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/TableCellUtil.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/TableCellUtil.java
@@ -81,7 +81,7 @@ public class TableCellUtil
             case INTEGER:
             case VARCHAR:
             case BOOLEAN:
-            case CONTROLLEDVOCABULARY:
+//            case CONTROLLEDVOCABULARY:
                 return true;
             default:
                 return false;
-- 
GitLab