From ef30f29dc45632dd8b689d0910e11a384f5fa6ad Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Wed, 15 Jun 2011 11:20:30 +0000
Subject: [PATCH] [LMS-2281] table editing for boolean and date properties

SVN: 21699
---
 .../application/ui/grid/ColumnUtils.java      | 52 ++++++++++++++++++-
 .../generic/shared/basic/TableCellUtil.java   |  6 ++-
 2 files changed, 54 insertions(+), 4 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnUtils.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnUtils.java
index 87b4d5b99ed..8e230877268 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnUtils.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnUtils.java
@@ -16,10 +16,15 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid;
 
+import java.util.Date;
+
 import com.extjs.gxt.ui.client.event.FieldEvent;
+import com.extjs.gxt.ui.client.widget.form.CheckBox;
+import com.extjs.gxt.ui.client.widget.form.Field;
 import com.extjs.gxt.ui.client.widget.grid.CellEditor;
 import com.google.gwt.event.dom.client.KeyCodes;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.DateFormField;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
 
 /**
@@ -50,10 +55,53 @@ public class ColumnUtils
                             }
                         }
                     };
-                return editor;
+                break;
+            case BOOLEAN:
+                CheckBox checkBox = new CheckBox();
+                editor = new StringBasedCellEditor(checkBox);
+                break;
+            case TIMESTAMP:
+                editor = new StringBasedCellEditor(new DateFormField("", false));
+                break;
             default:
                 editor = new CellEditor(new DefaultCellEditorField());
-                return editor;
         }
+        return editor;
+    }
+
+    /**
+     * Extension of GXT {@link CellEditor} with automatic conversion from String values that we hold
+     * in tables to specific data types (like {@link Date} or {@link Boolean}) handled by editor
+     * fields and vice versa.
+     */
+    private static class StringBasedCellEditor extends CellEditor
+    {
+
+        public StringBasedCellEditor(Field<? extends Object> field)
+        {
+            super(field);
+        }
+
+        @Override
+        public Object preProcessValue(Object value)
+        {
+            if (value == null)
+            {
+                return value;
+            }
+            return getField().getPropertyEditor().convertStringValue(value.toString());
+        }
+
+        @Override
+        @SuppressWarnings("unchecked")
+        public Object postProcessValue(Object value)
+        {
+            if (value == null)
+            {
+                return value;
+            }
+            return getField().getPropertyEditor().getStringValue(value);
+        }
+
     }
 }
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 f0e89e9f4a9..caab9b29905 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
@@ -82,13 +82,15 @@ public class TableCellUtil
             case VARCHAR:
             case MULTILINE_VARCHAR:
             case BOOLEAN:
-//            case CONTROLLEDVOCABULARY:
+            case TIMESTAMP:
+                // case CONTROLLEDVOCABULARY:
+                // case MATERIAL:
                 return true;
             default:
                 return false;
         }
     }
-    
+
     private TableCellUtil()
     {
     }
-- 
GitLab