From 34c50d190a5b16ca809712b43376300828849e7d Mon Sep 17 00:00:00 2001
From: anttil <anttil>
Date: Thu, 11 Dec 2014 12:07:56 +0000
Subject: [PATCH] SSDM-1268: Prevent dynamic property calculation failing if -
 for some reason - the system tries to calculate dynamic properties for an
 entity that does not have any properties.

SVN: 33025
---
 .../DynamicPropertyEvaluator.java             | 65 ++++++++++++-------
 1 file changed, 41 insertions(+), 24 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluator.java
index 0f02581d87b..c3ff30ec57e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/dynamic_property/DynamicPropertyEvaluator.java
@@ -113,12 +113,16 @@ public class DynamicPropertyEvaluator implements IDynamicPropertyEvaluator
                                 .setParameter("sample", entity);
                 allPropertyTypes = propertyTypeQuery.list();
 
-                propertyQuery =
-                        session.createQuery(
-                                "SELECT property FROM SamplePropertyPE property WHERE " +
-                                        "property.entity = :sample AND property.entityTypePropertyType IN (:types)")
-                                .setParameter("sample", entity).setParameterList("types", allPropertyTypes);
-                existingProperties = propertyQuery.list();
+                if (allPropertyTypes.size() > 0) {
+                    propertyQuery =
+                            session.createQuery(
+                                    "SELECT property FROM SamplePropertyPE property WHERE " +
+                                            "property.entity = :sample AND property.entityTypePropertyType IN (:types)")
+                                    .setParameter("sample", entity).setParameterList("types", allPropertyTypes);
+                    existingProperties = propertyQuery.list();
+                } else {
+                    existingProperties = new ArrayList<EntityPropertyPE>();
+                }
                 break;
             case DATA_SET:
                 propertyTypeQuery =
@@ -127,12 +131,16 @@ public class DynamicPropertyEvaluator implements IDynamicPropertyEvaluator
                                 .setParameter("data", entity);
                 allPropertyTypes = propertyTypeQuery.list();
 
-                propertyQuery =
-                        session.createQuery(
-                                "SELECT property FROM DataSetPropertyPE property WHERE " +
-                                        "property.entity = :data AND property.entityTypePropertyType IN (:types)")
-                                .setParameter("data", entity).setParameterList("types", allPropertyTypes);
-                existingProperties = propertyQuery.list();
+                if (allPropertyTypes.size() > 0) {
+                    propertyQuery =
+                            session.createQuery(
+                                    "SELECT property FROM DataSetPropertyPE property WHERE " +
+                                            "property.entity = :data AND property.entityTypePropertyType IN (:types)")
+                                    .setParameter("data", entity).setParameterList("types", allPropertyTypes);
+                    existingProperties = propertyQuery.list();
+                } else {
+                    existingProperties = new ArrayList<EntityPropertyPE>();
+                }
                 break;
             case EXPERIMENT:
                 propertyTypeQuery =
@@ -141,12 +149,17 @@ public class DynamicPropertyEvaluator implements IDynamicPropertyEvaluator
                                 .setParameter("experiment", entity);
                 allPropertyTypes = propertyTypeQuery.list();
 
-                propertyQuery =
-                        session.createQuery(
-                                "SELECT property FROM ExperimentPropertyPE property WHERE " +
-                                        "property.entity = :experiment AND property.entityTypePropertyType IN (:types)")
-                                .setParameter("experiment", entity).setParameterList("types", allPropertyTypes);
-                existingProperties = propertyQuery.list();
+                if (allPropertyTypes.size() > 0) {
+                    propertyQuery =
+                            session.createQuery(
+                                    "SELECT property FROM ExperimentPropertyPE property WHERE " +
+                                            "property.entity = :experiment AND property.entityTypePropertyType IN (:types)")
+                                    .setParameter("experiment", entity).setParameterList("types", allPropertyTypes);
+                    existingProperties = propertyQuery.list();
+                } else {
+                    existingProperties = new ArrayList<EntityPropertyPE>();
+                }
+                    
                 break;
             case MATERIAL:
                 propertyTypeQuery =
@@ -155,12 +168,16 @@ public class DynamicPropertyEvaluator implements IDynamicPropertyEvaluator
                                 .setParameter("material", entity);
                 allPropertyTypes = propertyTypeQuery.list();
 
-                propertyQuery =
-                        session.createQuery(
-                                "SELECT property FROM MaterialPropertyPE property WHERE " +
-                                        "property.entity = :material AND property.entityTypePropertyType IN (:types)")
-                                .setParameter("material", entity).setParameterList("types", allPropertyTypes);
-                existingProperties = propertyQuery.list();
+                if (allPropertyTypes.size() > 0) {
+                    propertyQuery =
+                            session.createQuery(
+                                    "SELECT property FROM MaterialPropertyPE property WHERE " +
+                                            "property.entity = :material AND property.entityTypePropertyType IN (:types)")
+                                    .setParameter("material", entity).setParameterList("types", allPropertyTypes);
+                    existingProperties = propertyQuery.list();
+                } else {
+                    existingProperties = new ArrayList<EntityPropertyPE>();
+                }
                 break;
             default:
                 throw new IllegalArgumentException(entity.getEntityKind().toString());
-- 
GitLab