From ba23fe0ae9284ef53ec5b816b55303ee5be8180b Mon Sep 17 00:00:00 2001
From: anttil <anttil>
Date: Mon, 27 Aug 2012 06:01:22 +0000
Subject: [PATCH] BIS-153 / SP-258: Material type and experiment type support
 added.

SVN: 26451
---
 .../client/application/ui/TypedTableGrid.java |  2 +-
 .../application/ui/data/DataSetTypeGrid.java  | 36 ++-------
 ...java => AbstractEditEntityTypeDialog.java} | 37 ++++++++-
 .../entity_type/AbstractEntityTypeGrid.java   | 40 +++++++++-
 .../ui/entity_type/AddEntityTypeDialog.java   | 75 +++++++++++++++++++
 .../application/ui/sample/SampleTypeGrid.java | 45 ++---------
 .../client/dto/DataSetTypeGridColumnIDs.java  |  3 -
 .../client/dto/EntityTypeGridColumnIDs.java   |  6 +-
 .../client/dto/SampleTypeGridColumnIDs.java   |  3 -
 .../server/resultset/DataSetTypeProvider.java |  5 --
 .../server/resultset/EntityTypeProvider.java  | 15 ++--
 .../server/resultset/SampleTypeProvider.java  |  5 --
 .../openbis/generic/server/CommonServer.java  | 16 ++++
 .../server/business/bo/EntityTypeBO.java      | 18 ++++-
 .../translator/ExperimentTranslator.java      |  3 +
 15 files changed, 211 insertions(+), 98 deletions(-)
 rename openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/{AbstractEditTypeDialog.java => AbstractEditEntityTypeDialog.java} (64%)
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AddEntityTypeDialog.java

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 d48ca3db143..21eddb50d3a 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
@@ -2395,7 +2395,7 @@ public abstract class TypedTableGrid<T extends Serializable> extends LayoutConta
         @Override
         public void saveModifications()
         {
-            saveModifications(TypedTableGrid.this.createRefreshGridSilentlyAction());
+            saveModifications(TypedTableGrid.this.createRefreshGridAction());
         }
 
         private void setAfterSaveAction(IDelegatedAction afterSaveAction)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetTypeGrid.java
index fbddaa00aeb..46453ccca49 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetTypeGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetTypeGrid.java
@@ -29,7 +29,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpP
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.DataSetKindSelectionWidget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AbstractEntityTypeGrid;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AddTypeDialog;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AddEntityTypeDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.CheckBoxField;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.DescriptionField;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ScriptChooserField;
@@ -183,12 +183,12 @@ public class DataSetTypeGrid extends AbstractEntityTypeGrid<DataSetType>
     }
 
     @Override
-    protected Window createRegisterEntityTypeDialog(String title, DataSetType newEntityType)
+    protected Window createRegisterEntityTypeDialog(String title, DataSetType newEntityType,
+            EntityKind entityKind)
     {
-        return new AddTypeDialog<DataSetType>(viewContext, title, postRegistrationCallback,
-                newEntityType)
+        return new AddEntityTypeDialog<DataSetType>(viewContext, title, postRegistrationCallback,
+                newEntityType, entityKind)
             {
-
                 private TextField<String> mainDataSetPatternField;
 
                 private TextField<String> mainDataSetPathField;
@@ -197,8 +197,6 @@ public class DataSetTypeGrid extends AbstractEntityTypeGrid<DataSetType>
 
                 private CheckBoxField deletionDisallow;
 
-                private ScriptChooserField scriptChooser;
-
                 {
                     dataSetKindSelectionWidget = createContainerField();
                     addField(dataSetKindSelectionWidget);
@@ -214,12 +212,6 @@ public class DataSetTypeGrid extends AbstractEntityTypeGrid<DataSetType>
 
                     DialogWithOnlineHelpUtils.addHelpButton(viewContext, this,
                             createHelpPageIdentifier());
-
-                    scriptChooser =
-                            createScriptChooserField(viewContext, null, true,
-                                    ScriptType.ENTITY_VALIDATION, EntityKind.DATA_SET);
-                    addField(scriptChooser);
-
                 }
 
                 @Override
@@ -232,10 +224,6 @@ public class DataSetTypeGrid extends AbstractEntityTypeGrid<DataSetType>
                             .getBaseObject());
                     dataSetType.setDeletionDisallow(deletionDisallow.getValue());
 
-                    Script script = new Script();
-                    script.setName(scriptChooser.getValue());
-                    dataSetType.setValidationScript(script);
-
                     DataSetTypeGrid.this.register(dataSetType, registrationCallback);
                 }
 
@@ -282,18 +270,4 @@ public class DataSetTypeGrid extends AbstractEntityTypeGrid<DataSetType>
         GWTUtils.setToolTip(field, viewContext.getMessage(Dict.DELETION_DISALLOW_TOOLTIP));
         return field;
     }
-
-    private ScriptChooserField createScriptChooserField(
-            final IViewContext<ICommonClientServiceAsync> viewContext, String initialValue,
-            boolean visible, ScriptType scriptTypeOrNull, EntityKind entityKindOrNull)
-    {
-        ScriptChooserField field =
-                ScriptChooserField.create(viewContext.getMessage(Dict.VALIDATION_SCRIPT),
-                        false,
-                        initialValue,
-                        viewContext, scriptTypeOrNull, entityKindOrNull);
-        FieldUtil.setVisibility(visible, field);
-        return field;
-    }
-
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEditTypeDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEditEntityTypeDialog.java
similarity index 64%
rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEditTypeDialog.java
rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEditEntityTypeDialog.java
index e714b49f3f9..e50032e3285 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEditTypeDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEditEntityTypeDialog.java
@@ -19,21 +19,25 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity
 import com.google.gwt.user.client.rpc.AsyncCallback;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
+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.ui.field.DescriptionField;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ScriptChooserField;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractRegistrationDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
 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.Script;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType;
 
 /**
  * Abstract super class of dialogs editing an entity type.
  * 
  * @author Franz-Josef Elmer
  */
-public abstract class AbstractEditTypeDialog<T extends EntityType> extends
+public abstract class AbstractEditEntityTypeDialog<T extends EntityType> extends
         AbstractRegistrationDialog
 {
     public static final String DIALOG_ID = GenericConstants.ID_PREFIX + "edit-type-dialog";
@@ -42,11 +46,13 @@ public abstract class AbstractEditTypeDialog<T extends EntityType> extends
 
     private final DescriptionField descriptionField;
 
+    private ScriptChooserField scriptChooser;
+
     private final EntityKind entityKind;
 
     private final IViewContext<ICommonClientServiceAsync> viewContext;
 
-    protected AbstractEditTypeDialog(IViewContext<ICommonClientServiceAsync> viewContext,
+    protected AbstractEditEntityTypeDialog(IViewContext<ICommonClientServiceAsync> viewContext,
             String title, IDelegatedAction postRegistrationCallback, EntityKind entityKind,
             T entityType)
     {
@@ -58,15 +64,42 @@ public abstract class AbstractEditTypeDialog<T extends EntityType> extends
         descriptionField = createDescriptionField(viewContext);
         FieldUtil.setValueWithUnescaping(descriptionField, entityType.getDescription());
         addField(descriptionField);
+
+        scriptChooser =
+                createScriptChooserField(viewContext, null, true,
+                        ScriptType.ENTITY_VALIDATION, entityKind);
+        addField(scriptChooser);
+        scriptChooser.setValue(entityType.getValidationScript() != null ? entityType
+                .getValidationScript().getName() : "");
+
     }
 
     @Override
     protected void register(AsyncCallback<Void> registrationCallback)
     {
         type.setDescription(descriptionField.getValue());
+
+        Script script = new Script();
+        script.setName(scriptChooser.getValue());
+        type.setValidationScript(script);
+
         setSpecificAttributes(type);
         viewContext.getCommonService().updateEntityType(entityKind, type, registrationCallback);
     }
 
     abstract protected void setSpecificAttributes(T entityType);
+
+    private ScriptChooserField createScriptChooserField(
+            final IViewContext<ICommonClientServiceAsync> context, String initialValue,
+            boolean visible, ScriptType scriptTypeOrNull, EntityKind entityKindOrNull)
+    {
+        ScriptChooserField field =
+                ScriptChooserField.create(context.getMessage(Dict.VALIDATION_SCRIPT),
+                        false,
+                        initialValue,
+                        context, scriptTypeOrNull, entityKindOrNull);
+        FieldUtil.setVisibility(visible, field);
+        return field;
+    }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java
index a778a85f46a..5f0da22d8dc 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java
@@ -35,6 +35,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.ui.TypedTableGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.DescriptionField;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ScriptChooserField;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ColumnDefsAndConfigs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractRegistrationDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ConfirmationDialog;
@@ -45,6 +46,8 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.EntityTypeGridColu
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
 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.Script;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
 
 /**
@@ -161,14 +164,16 @@ abstract public class AbstractEntityTypeGrid<T extends EntityType> extends Typed
                 viewContext.getMessage(Dict.ADD_TYPE_TITLE_TEMPLATE, entityKind.getDescription());
 
         T newEntityType = createNewEntityType();
-        return createRegisterEntityTypeDialog(title, newEntityType);
+        return createRegisterEntityTypeDialog(title, newEntityType, entityKind);
     }
 
     abstract protected T createNewEntityType();
 
-    protected Window createRegisterEntityTypeDialog(String title, T newEntityType)
+    protected Window createRegisterEntityTypeDialog(String title, T newEntityType,
+            EntityKind entityKind)
     {
-        return new AddTypeDialog<T>(viewContext, title, postRegistrationCallback, newEntityType)
+        return new AddEntityTypeDialog<T>(viewContext, title, postRegistrationCallback,
+                newEntityType, entityKind)
             {
                 @Override
                 protected void register(T entityType, AsyncCallback<Void> registrationCallback)
@@ -187,16 +192,32 @@ abstract public class AbstractEntityTypeGrid<T extends EntityType> extends Typed
         return new AbstractRegistrationDialog(viewContext, title, postRegistrationCallback)
             {
                 private final DescriptionField descriptionField;
+
+                private final ScriptChooserField scriptChooser;
+
                 {
                     descriptionField = createDescriptionField(viewContext);
                     FieldUtil.setValueWithUnescaping(descriptionField, entityType.getDescription());
                     addField(descriptionField);
+
+                    Script script = entityType.getValidationScript();
+
+                    scriptChooser =
+                            createScriptChooserField(viewContext, script != null ? script.getName()
+                                    : null, true, ScriptType.ENTITY_VALIDATION, entityKind);
+                    addField(scriptChooser);
+
                 }
 
                 @Override
                 protected void register(AsyncCallback<Void> registrationCallback)
                 {
                     entityType.setDescription(descriptionField.getValue());
+
+                    Script script = new Script();
+                    script.setName(scriptChooser.getValue());
+                    entityType.setValidationScript(script);
+
                     viewContext.getService().updateEntityType(entityKind, entityType,
                             registrationCallback);
                 }
@@ -245,4 +266,17 @@ abstract public class AbstractEntityTypeGrid<T extends EntityType> extends Typed
         return new DatabaseModificationKind[] {};
     }
 
+    protected ScriptChooserField createScriptChooserField(
+            final IViewContext<ICommonClientServiceAsync> context, String initialValue,
+            boolean visible, ScriptType scriptTypeOrNull, EntityKind entityKindOrNull)
+    {
+        ScriptChooserField field =
+                ScriptChooserField.create(context.getMessage(Dict.VALIDATION_SCRIPT),
+                        false,
+                        initialValue,
+                        context, scriptTypeOrNull, entityKindOrNull);
+        FieldUtil.setVisibility(visible, field);
+        return field;
+    }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AddEntityTypeDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AddEntityTypeDialog.java
new file mode 100644
index 00000000000..16e3a66a720
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AddEntityTypeDialog.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2009 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.entity_type;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ScriptChooserField;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
+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.Script;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType;
+
+/**
+ * Abstract super class of all dialogs adding a new entity type.
+ * 
+ * @author Tomasz Pylak
+ */
+public abstract class AddEntityTypeDialog<T extends EntityType> extends AddTypeDialog<T>
+{
+    private ScriptChooserField scriptChooser;
+
+    public AddEntityTypeDialog(final IViewContext<ICommonClientServiceAsync> viewContext,
+            String title,
+            final IDelegatedAction postRegistrationCallback, T newEntityType, EntityKind entityKind)
+    {
+        super(viewContext, title, postRegistrationCallback, newEntityType);
+
+        scriptChooser =
+                createScriptChooserField(viewContext, null, true,
+                        ScriptType.ENTITY_VALIDATION, entityKind);
+        addField(scriptChooser);
+    }
+
+    @Override
+    protected void register(AsyncCallback<Void> registrationCallback)
+    {
+        Script script = new Script();
+        script.setName(scriptChooser.getValue());
+        newEntityType.setValidationScript(script);
+        super.register(registrationCallback);
+    }
+
+    private ScriptChooserField createScriptChooserField(
+            final IViewContext<ICommonClientServiceAsync> viewContext, String initialValue,
+            boolean visible, ScriptType scriptTypeOrNull, EntityKind entityKindOrNull)
+    {
+        ScriptChooserField field =
+                ScriptChooserField.create(viewContext.getMessage(Dict.VALIDATION_SCRIPT),
+                        false,
+                        initialValue,
+                        viewContext, scriptTypeOrNull, entityKindOrNull);
+        FieldUtil.setVisibility(visible, field);
+        return field;
+    }
+
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeGrid.java
index 022c01e0b11..265b964a624 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeGrid.java
@@ -27,23 +27,19 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericCon
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AbstractEditTypeDialog;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AbstractEditEntityTypeDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AbstractEntityTypeGrid;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AddTypeDialog;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AddEntityTypeDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.CheckBoxField;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.CodeField;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ScriptChooserField;
 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.AbstractSaveDialog;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.DialogWithOnlineHelpUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 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.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
 
 /**
@@ -72,8 +68,6 @@ public class SampleTypeGrid extends AbstractEntityTypeGrid<SampleType>
 
     private static final Boolean DEFAULT_SHOW_PARENTS_VALUE = true;
 
-    private static final Script DEFAULT_VALIDATION_SCRIPT_VALUE = null;
-
     public static IDisposableComponent create(
             final IViewContext<ICommonClientServiceAsync> viewContext)
     {
@@ -128,7 +122,7 @@ public class SampleTypeGrid extends AbstractEntityTypeGrid<SampleType>
         String title =
                 viewContext.getMessage(Dict.EDIT_TYPE_TITLE_TEMPLATE, entityKind.getDescription(),
                         code);
-        return new AbstractEditTypeDialog<SampleType>(viewContext, title, postRegistrationCallback,
+        return new AbstractEditEntityTypeDialog<SampleType>(viewContext, title, postRegistrationCallback,
                 EntityKind.SAMPLE, sampleType)
             {
                 private final SampleTypeDialogFieldHelper helper;
@@ -154,10 +148,11 @@ public class SampleTypeGrid extends AbstractEntityTypeGrid<SampleType>
     }
 
     @Override
-    protected Window createRegisterEntityTypeDialog(String title, SampleType newEntityType)
+    protected Window createRegisterEntityTypeDialog(String title, SampleType newEntityType,
+            EntityKind entityKind)
     {
-        return new AddTypeDialog<SampleType>(viewContext, title, postRegistrationCallback,
-                newEntityType)
+        return new AddEntityTypeDialog<SampleType>(viewContext, title, postRegistrationCallback,
+                newEntityType, entityKind)
             {
                 private final SampleTypeDialogFieldHelper helper;
 
@@ -170,7 +165,6 @@ public class SampleTypeGrid extends AbstractEntityTypeGrid<SampleType>
                     sampleType.setAutoGeneratedCode(DEFAULT_AUTO_GENERATE_CODES_VALUE);
                     sampleType.setShowParentMetadata(DEFAULT_SHOW_PARENT_METADATA_VALUE);
                     sampleType.setGeneratedCodePrefix(DEFAULT_GENERATED_CODE_PREFIX_VALUE);
-                    sampleType.setValidationScript(DEFAULT_VALIDATION_SCRIPT_VALUE);
                     helper =
                             new SampleTypeDialogFieldHelper(viewContext, this, sampleType,
                                     createHelpPageIdentifier());
@@ -219,8 +213,6 @@ public class SampleTypeGrid extends AbstractEntityTypeGrid<SampleType>
 
         private final TextField<String> generatedCodePrefixField;
 
-        private final ScriptChooserField scriptChooser;
-
         public SampleTypeDialogFieldHelper(IViewContext<ICommonClientServiceAsync> viewContext,
                 AbstractSaveDialog dialog, SampleType sampleType,
                 HelpPageIdentifier helpPageIdentifier)
@@ -260,12 +252,6 @@ public class SampleTypeGrid extends AbstractEntityTypeGrid<SampleType>
 
             DialogWithOnlineHelpUtils.addHelpButton(viewContext, dialog, helpPageIdentifier);
 
-            Script script = sampleType.getValidationScript();
-
-            scriptChooser =
-                    createScriptChooserField(viewContext, script != null ? script.getName()
-                            : null, true, ScriptType.ENTITY_VALIDATION, EntityKind.SAMPLE);
-            dialog.addField(scriptChooser);
         }
 
         public void setAttributes(SampleType sampleType)
@@ -278,23 +264,6 @@ public class SampleTypeGrid extends AbstractEntityTypeGrid<SampleType>
             sampleType.setSubcodeUnique(subcodeUniqueField.getValue());
             sampleType.setGeneratedCodePrefix(generatedCodePrefixField.getValue());
 
-            Script script = new Script();
-            script.setName(scriptChooser.getValue());
-            sampleType.setValidationScript(script);
-        }
-
-        private ScriptChooserField createScriptChooserField(
-                final IViewContext<ICommonClientServiceAsync> viewContext, String initialValue,
-                boolean visible, ScriptType scriptTypeOrNull, EntityKind entityKindOrNull)
-        {
-            ScriptChooserField field =
-                    ScriptChooserField.create(viewContext.getMessage(Dict.VALIDATION_SCRIPT),
-                            false,
-                            initialValue,
-                            viewContext, scriptTypeOrNull, entityKindOrNull);
-            FieldUtil.setVisibility(visible, field);
-            return field;
         }
     }
-
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DataSetTypeGridColumnIDs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DataSetTypeGridColumnIDs.java
index 984790960b9..8c66b1fbf1d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DataSetTypeGridColumnIDs.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DataSetTypeGridColumnIDs.java
@@ -30,7 +30,4 @@ public class DataSetTypeGridColumnIDs extends EntityTypeGridColumnIDs
     public static final String DATA_SET_KIND = "DATA_SET_KIND";
 
     public static final String DELETION_DISALLOW = "DELETION_DISALLOW";
-
-    public static final String VALIDATION_SCRIPT = "VALIDATION_SCRIPT";
-
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/EntityTypeGridColumnIDs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/EntityTypeGridColumnIDs.java
index 9a5ad73a02c..b42022b4d86 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/EntityTypeGridColumnIDs.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/EntityTypeGridColumnIDs.java
@@ -18,12 +18,16 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.dto;
 
 /**
  * Common column IDs for entity type grids.
- *
+ * 
  * @author Franz-Josef Elmer
  */
 public class EntityTypeGridColumnIDs
 {
     public static final String CODE = "CODE";
+
     public static final String DESCRIPTION = "DESCRIPTION";
+
     public static final String DATABASE_INSTANCE = "DATABASE_INSTANCE";
+
+    public static final String VALIDATION_SCRIPT = "VALIDATION_SCRIPT";
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/SampleTypeGridColumnIDs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/SampleTypeGridColumnIDs.java
index c99c9137323..79421674437 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/SampleTypeGridColumnIDs.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/SampleTypeGridColumnIDs.java
@@ -36,7 +36,4 @@ public class SampleTypeGridColumnIDs extends EntityTypeGridColumnIDs
     public static final String SHOW_PARENT_METADATA_LABEL = "IS_SHOW_PARENT_METADATA";
 
     public static final String GENERATED_CODE_PREFIX = "GENERATED_CODE_PREFIX";
-
-    public static final String VALIDATION_SCRIPT = "VALIDATION_SCRIPT";
-
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/DataSetTypeProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/DataSetTypeProvider.java
index e1b88fb1205..ee48ccc8153 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/DataSetTypeProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/DataSetTypeProvider.java
@@ -20,7 +20,6 @@ import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataSetType
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataSetTypeGridColumnIDs.DELETION_DISALLOW;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataSetTypeGridColumnIDs.MAIN_DATA_SET_PATH;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataSetTypeGridColumnIDs.MAIN_DATA_SET_PATTERN;
-import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataSetTypeGridColumnIDs.VALIDATION_SCRIPT;
 
 import java.util.List;
 
@@ -54,7 +53,6 @@ public class DataSetTypeProvider extends EntityTypeProvider<DataSetType>
         builder.addColumn(DELETION_DISALLOW).hideByDefault();
         builder.addColumn(MAIN_DATA_SET_PATH).hideByDefault();
         builder.addColumn(MAIN_DATA_SET_PATTERN).hideByDefault();
-        builder.addColumn(VALIDATION_SCRIPT).hideByDefault();
     }
 
     @Override
@@ -65,9 +63,6 @@ public class DataSetTypeProvider extends EntityTypeProvider<DataSetType>
                 SimpleYesNoRenderer.render(type.isDeletionDisallow()));
         builder.column(MAIN_DATA_SET_PATH).addString(type.getMainDataSetPath());
         builder.column(MAIN_DATA_SET_PATTERN).addString(type.getMainDataSetPattern());
-        builder.column(VALIDATION_SCRIPT).addString(
-                type.getValidationScript() != null ? type.getValidationScript().getName()
-                        : "");
     }
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/EntityTypeProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/EntityTypeProvider.java
index 15b3851f4de..dc04a7ccbc7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/EntityTypeProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/EntityTypeProvider.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.server.resultset;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.EntityTypeGridColumnIDs.CODE;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.EntityTypeGridColumnIDs.DATABASE_INSTANCE;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.EntityTypeGridColumnIDs.DESCRIPTION;
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.EntityTypeGridColumnIDs.VALIDATION_SCRIPT;
 
 import java.util.List;
 
@@ -29,10 +30,11 @@ import ch.systemsx.cisd.openbis.generic.shared.util.TypedTableModelBuilder;
 
 /**
  * Abstract super class of providers of {@link EntityType} instances.
- *
+ * 
  * @author Franz-Josef Elmer
  */
-public abstract class EntityTypeProvider<T extends EntityType> extends AbstractCommonTableModelProvider<T>
+public abstract class EntityTypeProvider<T extends EntityType> extends
+        AbstractCommonTableModelProvider<T>
 {
     public EntityTypeProvider(ICommonServer commonServer, String sessionToken)
     {
@@ -47,6 +49,7 @@ public abstract class EntityTypeProvider<T extends EntityType> extends AbstractC
         builder.addColumn(CODE);
         builder.addColumn(DESCRIPTION).withDefaultWidth(300);
         builder.addColumn(DATABASE_INSTANCE).hideByDefault();
+        builder.addColumn(VALIDATION_SCRIPT).hideByDefault();
         addMoreColumns(builder);
         for (T type : types)
         {
@@ -54,17 +57,19 @@ public abstract class EntityTypeProvider<T extends EntityType> extends AbstractC
             builder.column(CODE).addString(type.getCode());
             builder.column(DESCRIPTION).addString(type.getDescription());
             builder.column(DATABASE_INSTANCE).addString(type.getDatabaseInstance().getCode());
+            builder.column(VALIDATION_SCRIPT).addString(
+                    type.getValidationScript() != null ? type.getValidationScript().getName() : "");
             addMoreCells(builder, type);
         }
         return builder.getModel();
     }
-    
+
     protected abstract List<T> listTypes();
-    
+
     protected void addMoreColumns(TypedTableModelBuilder<T> builder)
     {
     }
-    
+
     protected void addMoreCells(TypedTableModelBuilder<T> builder, T type)
     {
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleTypeProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleTypeProvider.java
index 7739f248b35..3d518b8af99 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleTypeProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleTypeProvider.java
@@ -23,7 +23,6 @@ import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleTypeG
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleTypeGridColumnIDs.IS_SHOW_PARENTS;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleTypeGridColumnIDs.SHOW_PARENT_METADATA_LABEL;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleTypeGridColumnIDs.SUBCODE_UNIQUE_LABEL;
-import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleTypeGridColumnIDs.VALIDATION_SCRIPT;
 
 import java.util.List;
 
@@ -61,7 +60,6 @@ public class SampleTypeProvider extends EntityTypeProvider<SampleType>
         builder.addColumn(AUTO_GENERATE_CODES_LABEL).hideByDefault();
         builder.addColumn(SHOW_PARENT_METADATA_LABEL).hideByDefault();
         builder.addColumn(GENERATED_CODE_PREFIX).hideByDefault();
-        builder.addColumn(VALIDATION_SCRIPT).hideByDefault();
     }
 
     @Override
@@ -78,9 +76,6 @@ public class SampleTypeProvider extends EntityTypeProvider<SampleType>
         builder.column(SHOW_PARENT_METADATA_LABEL).addString(
                 SimpleYesNoRenderer.render(type.isShowParentMetadata()));
         builder.column(GENERATED_CODE_PREFIX).addString(type.getGeneratedCodePrefix());
-        builder.column(VALIDATION_SCRIPT).addString(
-                type.getValidationScript() != null ? type.getValidationScript().getName()
-                        : "");
     }
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
index f4f77f4b78f..1b0a1161172 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
@@ -1268,7 +1268,23 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt
         IEntityTypeDAO entityTypeDAO =
                 getDAOFactory().getEntityTypeDAO(DtoConverters.convertEntityKind(entityKind));
         EntityTypePE entityTypePE = entityTypeDAO.tryToFindEntityTypeByCode(entityType.getCode());
+
         entityTypePE.setDescription(entityType.getDescription());
+        if (entityType.getValidationScript() == null
+                || entityType.getValidationScript().getName() == null
+                || entityType.getValidationScript().getName().equals(""))
+        {
+            entityTypePE.setValidationScript(null);
+        } else
+        {
+            ScriptPE script = getDAOFactory().getScriptDAO()
+                    .tryFindByName(entityType.getValidationScript().getName());
+            if (script != null)
+            {
+                entityTypePE.setValidationScript(script);
+            }
+        }
+
         updateSpecificEntityTypeProperties(entityKind, entityTypePE, entityType);
         entityTypeDAO.createOrUpdateEntityType(entityTypePE);
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBO.java
index 25a114e155b..99afd224568 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/EntityTypeBO.java
@@ -73,7 +73,23 @@ public final class EntityTypeBO extends AbstractBusinessObject implements IEntit
 
     private ScriptPE getValidationScriptPE(EntityType entityType)
     {
-        return getScriptDAO().getByTechId(new TechId(entityType.getValidationScript().getId()));
+        if (entityType.getValidationScript() == null
+                || entityType.getValidationScript().getName() == null
+                || entityType.getValidationScript().getName().equals(""))
+        {
+            return null;
+        } else
+        {
+            ScriptPE script = getScriptDAO()
+                    .tryFindByName(entityType.getValidationScript().getName());
+            if (script != null)
+            {
+                return script;
+            } else
+            {
+                return null;
+            }
+        }
     }
 
     private EntityTypePE convertGeneric(EntityType entityType, EntityKind kind,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExperimentTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExperimentTranslator.java
index e5c56d30186..45b21cf638e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExperimentTranslator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExperimentTranslator.java
@@ -139,6 +139,9 @@ public final class ExperimentTranslator
         result.setDescription(experimentType.getDescription());
         result.setDatabaseInstance(DatabaseInstanceTranslator.translate(experimentType
                 .getDatabaseInstance()));
+        result.setValidationScript(ScriptTranslator.translate(experimentType
+                .getValidationScript()));
+
         result.setExperimentTypePropertyTypes(ExperimentTypePropertyTypeTranslator.translate(
                 experimentType.getExperimentTypePropertyTypes(), result, cacheOrNull));
 
-- 
GitLab