From ad6b46de16ff8584e3f2b9319ca97a6e637e8516 Mon Sep 17 00:00:00 2001
From: anttil <anttil>
Date: Mon, 27 Aug 2012 08:13:22 +0000
Subject: [PATCH] BIS-153 / SP-258: Disallow setting an entity a validation
 script meant for another entity kind.

SVN: 26454
---
 .../openbis/generic/server/business/bo/EntityTypeBO.java    | 3 ++-
 .../cisd/openbis/generic/shared/basic/dto/DataSetType.java  | 6 ++++++
 .../cisd/openbis/generic/shared/basic/dto/EntityType.java   | 5 +++++
 .../openbis/generic/shared/basic/dto/ExperimentType.java    | 6 ++++++
 .../cisd/openbis/generic/shared/basic/dto/MaterialType.java | 6 ++++++
 .../cisd/openbis/generic/shared/basic/dto/SampleType.java   | 6 ++++++
 6 files changed, 31 insertions(+), 1 deletion(-)

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 99afd224568..4f63068c47c 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
@@ -82,7 +82,8 @@ public final class EntityTypeBO extends AbstractBusinessObject implements IEntit
         {
             ScriptPE script = getScriptDAO()
                     .tryFindByName(entityType.getValidationScript().getName());
-            if (script != null)
+
+            if (script != null && entityType.isEntityKind(script.getEntityKind()))
             {
                 return script;
             } else
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSetType.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSetType.java
index ee56ae512fe..20076689556 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSetType.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSetType.java
@@ -97,4 +97,10 @@ public class DataSetType extends EntityType
         this.deletionDisallow = deletionDisallow;
     }
 
+    @Override
+    public boolean isEntityKind(EntityKind kind)
+    {
+        return kind == null || kind == EntityKind.DATA_SET;
+    }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EntityType.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EntityType.java
index c12df20ed3d..2609af62355 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EntityType.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EntityType.java
@@ -68,4 +68,9 @@ abstract public class EntityType extends BasicEntityType
             });
         return etpts;
     }
+
+    /**
+     * return true if this entity type is of given kind, or if the kind is null
+     */
+    public abstract boolean isEntityKind(EntityKind kind);
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExperimentType.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExperimentType.java
index c68a1875a58..4d89353e1de 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExperimentType.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExperimentType.java
@@ -40,4 +40,10 @@ public class ExperimentType extends EntityType
     {
         this.experimentTypePropertyTypes = experimentTypePropertyTypes;
     }
+
+    @Override
+    public boolean isEntityKind(EntityKind kind)
+    {
+        return kind == null || kind == EntityKind.EXPERIMENT;
+    }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MaterialType.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MaterialType.java
index 8b35fafe8d0..5b25f8389e6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MaterialType.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MaterialType.java
@@ -53,4 +53,10 @@ public class MaterialType extends EntityType
         this.materialTypePropertyTypes = materialTypePropertyTypes;
     }
 
+    @Override
+    public boolean isEntityKind(EntityKind kind)
+    {
+        return kind == null || kind == EntityKind.MATERIAL;
+    }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/SampleType.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/SampleType.java
index a87cf3e2576..414df51e5ac 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/SampleType.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/SampleType.java
@@ -260,4 +260,10 @@ public final class SampleType extends EntityType implements Serializable
                 allPropertyTypes));
     }
 
+    @Override
+    public boolean isEntityKind(EntityKind kind)
+    {
+        return kind == null || kind == EntityKind.SAMPLE;
+    }
+
 }
-- 
GitLab