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