From a61059a00225815b069c67cc6464fdbbfd0fbc15 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Thu, 26 May 2011 06:32:20 +0000
Subject: [PATCH] refactoring SampleBrowserGrid and ExperimentBrowserGrid by
 introducing superclass AbstractEntityGrid. This fixes missing table editing
 in refactored ExperimentBrowserGrid

SVN: 21477
---
 .../ui/data/AbstractExternalDataGrid.java     |  1 +
 .../ui/experiment/ExperimentBrowserGrid.java  | 18 ++--
 .../experiment/ExperimentBrowserToolbar.java  |  2 +-
 .../ui/grid/AbstractEntityBrowserGrid.java    | 15 ---
 .../ui/grid/AbstractEntityGrid.java           | 95 +++++++++++++++++++
 .../client/application/ui/grid/GridUtils.java |  1 -
 .../ui/grid/ICriteriaProvider.java            | 37 ++++++++
 .../entity/PropertyTypesCriteriaProvider.java |  2 +-
 .../ui/material/MaterialBrowserGrid.java      |  1 +
 .../ui/material/MaterialBrowserToolbar.java   |  2 +-
 .../ui/sample/ISampleCriteriaProvider.java    |  2 +-
 .../ui/sample/SampleBrowserGrid.java          | 43 +--------
 .../ExperimentWellMaterialBrowserGrid.java    |  1 +
 13 files changed, 154 insertions(+), 66 deletions(-)
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractEntityGrid.java
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ICriteriaProvider.java

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 9bc035a8094..b3f9b33c3bb 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
@@ -42,6 +42,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.Ab
 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.IBrowserGridActionInvoker;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICellListener;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICriteriaProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.entity.PropertyTypesCriteria;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.entity.PropertyTypesCriteriaProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.entity.PropertyTypesFilterUtil;
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 86c78057210..bb04f3c186c 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
@@ -45,12 +45,13 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTa
 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.columns.specific.experiment.CommonExperimentColDefKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentDataSetArchivingMenu.SelectedAndDisplayedItems;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractEntityBrowserGrid.ICriteriaProvider;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractEntityGrid;
 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.DisposableEntityChooser;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.GridUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IBrowserGridActionInvoker;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICellListenerAndLinkGenerator;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICriteriaProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityDetailsTabHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedActionWithResult;
@@ -63,6 +64,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.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
@@ -74,7 +76,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject
  * 
  * @author Tomasz Pylak
  */
-public class ExperimentBrowserGrid extends TypedTableGrid<Experiment>
+public class ExperimentBrowserGrid extends AbstractEntityGrid<Experiment>
 {
 
     private static final String PREFIX = "experiment-browser";
@@ -330,12 +332,6 @@ public class ExperimentBrowserGrid extends TypedTableGrid<Experiment>
         viewContext.getService().listExperiments(criteria, callback);
     }
 
-    @Override
-    protected void showEntityViewer(TableModelRowWithObject<Experiment> experiment, boolean editMode, boolean inBackground)
-    {
-        showEntityInformationHolderViewer(experiment.getObjectOrNull(), editMode, inBackground);
-    }
-
     @Override
     protected ColumnDefsAndConfigs<TableModelRowWithObject<Experiment>> createColumnsDefinition()
     {
@@ -395,6 +391,12 @@ public class ExperimentBrowserGrid extends TypedTableGrid<Experiment>
         }
     }
 
+    @Override
+    protected EntityKind getEntityKind()
+    {
+        return EntityKind.EXPERIMENT;
+    }
+
     protected final IDelegatedActionWithResult<DisplayedAndSelectedExperiments> getDisplayedAndSelectedItemsAction()
     {
         return new IDelegatedActionWithResult<DisplayedAndSelectedExperiments>()
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserToolbar.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserToolbar.java
index 3f24bea13d4..add1f1b3aca 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserToolbar.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserToolbar.java
@@ -34,8 +34,8 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ExperimentTypeModel;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICriteriaProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractEntityBrowserGrid.ICriteriaProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.IDataRefreshCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ListExperimentsCriteria;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractEntityBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractEntityBrowserGrid.java
index e4e4a95af52..21c8e912f5d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractEntityBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractEntityBrowserGrid.java
@@ -81,21 +81,6 @@ public abstract class AbstractEntityBrowserGrid<T extends IEntityPropertiesHolde
     // criteria used in the previous refresh operation or null if it has not occurred yet
     protected K criteria;
 
-    public interface ICriteriaProvider<K>
-    {
-        /** @return criteria used as the main grid filter */
-        K tryGetCriteria();
-
-        /**
-         * calls the refresh callback only after appropriate criteria are updated. But if there is
-         * nothing to update in the criteria provider the callback is called immediately.
-         */
-        void update(Set<DatabaseModificationKind> observedModifications,
-                final IDataRefreshCallback dataRefreshCallback);
-
-        DatabaseModificationKind[] getRelevantModifications();
-    }
-
     protected AbstractEntityBrowserGrid(IViewContext<ICommonClientServiceAsync> viewContext,
             String gridId, DisplayTypeIDGenerator displayTypeIDGenerator)
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractEntityGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractEntityGrid.java
new file mode 100644
index 00000000000..83cae4c12de
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractEntityGrid.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2011 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid;
+
+import java.util.Arrays;
+import java.util.List;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDisplayTypeIDGenerator;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGridColumnIDs;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithProperties;
+import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
+
+/**
+ * Abstract super class of {@link TypedTableGrid}-based entity browsers.
+ *
+ * @author Franz-Josef Elmer
+ */
+public abstract class AbstractEntityGrid<E extends IEntityInformationHolderWithProperties> extends TypedTableGrid<E>
+{
+    public AbstractEntityGrid(IViewContext<ICommonClientServiceAsync> viewContext,
+            String browserId, boolean refreshAutomatically,
+            IDisplayTypeIDGenerator displayTypeIDGenerator)
+    {
+        super(viewContext, browserId, refreshAutomatically, displayTypeIDGenerator);
+    }
+
+    public AbstractEntityGrid(IViewContext<ICommonClientServiceAsync> viewContext,
+            String browserId, IDisplayTypeIDGenerator displayTypeIDGenerator)
+    {
+        super(viewContext, browserId, displayTypeIDGenerator);
+    }
+    
+    protected abstract EntityKind getEntityKind();
+
+    @Override
+    protected boolean isEditable(BaseEntityModel<TableModelRowWithObject<E>> model,
+            String columnID)
+    {
+        String propertyName = columnID.substring(SampleGridColumnIDs.PROPERTIES_PREFIX.length());
+        E sample = model.getBaseObject().getObjectOrNull();
+        BasicEntityType entityType = sample.getEntityType();
+        IEntityProperty propertyOrNull = tryGetProperty(sample, propertyName);
+        if (propertyOrNull != null && propertyOrNull.isScriptable())
+        {
+            return false;
+        }
+        List<IColumnDefinition<TableModelRowWithObject<E>>> columnDefinitions =
+                getColumnDefinitions(Arrays.asList(columnID));
+        IColumnDefinition<TableModelRowWithObject<E>> columnDefinition =
+                columnDefinitions.get(0);
+        return columnDefinition.tryToGetProperty(entityType.getCode()) != null;
+    }
+    
+    @Override
+    protected void handleEditingEvent(BaseEntityModel<TableModelRowWithObject<E>> model,
+            String columnID, String newValueOrNull)
+    {
+        E entity = model.getBaseObject().getObjectOrNull();
+        TechId sampleID = new TechId(entity.getId());
+        String propertyName = columnID.substring(SampleGridColumnIDs.PROPERTIES_PREFIX.length());
+        viewContext.getService().updateProperty(getEntityKind(), sampleID, propertyName,
+                newValueOrNull, createPostEditingRefreshCallback());
+    }
+
+    @Override
+    protected void showEntityViewer(TableModelRowWithObject<E> row, boolean editMode,
+            boolean inBackground)
+    {
+        showEntityInformationHolderViewer(row.getObjectOrNull(), editMode, inBackground);
+    }
+
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/GridUtils.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/GridUtils.java
index fb4945ae713..b6b15b63e19 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/GridUtils.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/GridUtils.java
@@ -24,7 +24,6 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractEntityBrowserGrid.ICriteriaProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.SetUtils;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ICriteriaProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ICriteriaProvider.java
new file mode 100644
index 00000000000..30ab367f0b5
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ICriteriaProvider.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2011 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid;
+
+import java.util.Set;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.IDataRefreshCallback;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
+
+public interface ICriteriaProvider<K>
+{
+    /** @return criteria used as the main grid filter */
+    K tryGetCriteria();
+
+    /**
+     * calls the refresh callback only after appropriate criteria are updated. But if there is
+     * nothing to update in the criteria provider the callback is called immediately.
+     */
+    void update(Set<DatabaseModificationKind> observedModifications,
+            final IDataRefreshCallback dataRefreshCallback);
+
+    DatabaseModificationKind[] getRelevantModifications();
+}
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/entity/PropertyTypesCriteriaProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/entity/PropertyTypesCriteriaProvider.java
index a426e3a393b..60230022d73 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/entity/PropertyTypesCriteriaProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/entity/PropertyTypesCriteriaProvider.java
@@ -5,7 +5,7 @@ import java.util.Set;
 
 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.ui.grid.AbstractEntityBrowserGrid.ICriteriaProvider;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICriteriaProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.IDataRefreshCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
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 1a5e0b861a6..b7a97bebdb5 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
@@ -38,6 +38,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.Ab
 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.DisposableEntityChooser;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IBrowserGridActionInvoker;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICriteriaProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedActionWithResult;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ListMaterialDisplayCriteria;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserToolbar.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserToolbar.java
index 98e025b5e4a..4eb60fb9fe6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserToolbar.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserToolbar.java
@@ -33,7 +33,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.MaterialTypeModel;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractEntityBrowserGrid.ICriteriaProvider;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICriteriaProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.IDataRefreshCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/ISampleCriteriaProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/ISampleCriteriaProvider.java
index 5fed1f2e7f4..4b146d64fe0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/ISampleCriteriaProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/ISampleCriteriaProvider.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractEntityBrowserGrid.ICriteriaProvider;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICriteriaProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ListSampleDisplayCriteria;
 
 public interface ISampleCriteriaProvider extends
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
index 3fd72ea98be..5c3699850c9 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
@@ -43,14 +43,14 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.Base
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.LinkRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.PersonRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.DisplayedAndSelectedEntities;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid;
 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.AbstractEntityBrowserGrid.ICriteriaProvider;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractEntityGrid;
 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.DisposableEntityChooser;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.GridUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IBrowserGridActionInvoker;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICellListenerAndLinkGenerator;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICriteriaProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.entity.PropertyTypesCriteria;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.entity.PropertyTypesCriteriaProvider;
@@ -68,7 +68,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGridColumnID
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.CodeConverter;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
@@ -77,7 +76,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTypePropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListSampleCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project;
@@ -91,7 +89,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject
  * 
  * @author Franz-Josef Elmer
  */
-public class SampleBrowserGrid extends TypedTableGrid<Sample>
+public class SampleBrowserGrid extends AbstractEntityGrid<Sample>
 {
     private static final String PREFIX = GenericConstants.ID_PREFIX + "sample-browser";
 
@@ -513,25 +511,6 @@ public class SampleBrowserGrid extends TypedTableGrid<Sample>
                 .getMessage(Dict.SHOW_DETAILS_LINK_TEXT_VALUE));
     }
 
-    @Override
-    protected boolean isEditable(BaseEntityModel<TableModelRowWithObject<Sample>> model,
-            String columnID)
-    {
-        String propertyName = columnID.substring(SampleGridColumnIDs.PROPERTIES_PREFIX.length());
-        Sample sample = model.getBaseObject().getObjectOrNull();
-        EntityType entityType = sample.getEntityType();
-        IEntityProperty propertyOrNull = tryGetProperty(sample, propertyName);
-        if (propertyOrNull != null && propertyOrNull.isScriptable())
-        {
-            return false;
-        }
-        List<IColumnDefinition<TableModelRowWithObject<Sample>>> columnDefinitions =
-                getColumnDefinitions(Arrays.asList(columnID));
-        IColumnDefinition<TableModelRowWithObject<Sample>> columnDefinition =
-                columnDefinitions.get(0);
-        return columnDefinition.tryToGetProperty(entityType.getCode()) != null;
-    }
-    
     protected boolean isPropertyEditable(EntityType entityType, String propertyColumnNameWithoutPrefix)
     {
         String propertyTypeCode = CodeConverter.getPropertyTypeCode(propertyColumnNameWithoutPrefix);
@@ -547,14 +526,9 @@ public class SampleBrowserGrid extends TypedTableGrid<Sample>
     }
 
     @Override
-    protected void handleEditingEvent(BaseEntityModel<TableModelRowWithObject<Sample>> model,
-            String columnID, String newValueOrNull)
+    protected EntityKind getEntityKind()
     {
-        Sample sample = model.getBaseObject().getObjectOrNull();
-        TechId sampleID = new TechId(sample.getId());
-        String propertyName = columnID.substring(SampleGridColumnIDs.PROPERTIES_PREFIX.length());
-        viewContext.getService().updateProperty(EntityKind.SAMPLE, sampleID, propertyName,
-                newValueOrNull, createPostEditingRefreshCallback());
+        return EntityKind.SAMPLE;
     }
 
     @Override
@@ -765,13 +739,6 @@ public class SampleBrowserGrid extends TypedTableGrid<Sample>
         }
     }
 
-    @Override
-    protected void showEntityViewer(TableModelRowWithObject<Sample> row, boolean editMode,
-            boolean inBackground)
-    {
-        showEntityInformationHolderViewer(row.getObjectOrNull(), editMode, inBackground);
-    }
-
     protected final IDelegatedAction createGridRefreshDelegatedAction()
     {
         return new IDelegatedAction()
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 d5a093dd3c2..8c2308389bb 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
@@ -22,6 +22,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.Base
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.material.CommonMaterialColDefKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.DisposableEntityChooser;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ICriteriaProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.material.MaterialBrowserGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.material.MaterialBrowserToolbar;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
-- 
GitLab