From 267e181aa5c2ec2cea4ed13339660371f6bcd4f4 Mon Sep 17 00:00:00 2001
From: jakubs <jakubs>
Date: Tue, 29 Apr 2014 09:03:23 +0000
Subject: [PATCH] SSDM-170 Propagate properties to update to allow dataset
 batch update to delete properties

SVN: 31426
---
 .../business/bo/AbstractBusinessObject.java   | 19 ++++++++++++-------
 .../generic/server/business/bo/DataBO.java    |  2 +-
 .../server/business/bo/DataSetTable.java      |  2 +-
 .../server/business/bo/ExperimentBO.java      |  2 +-
 .../server/business/bo/MaterialBO.java        |  2 +-
 .../generic/server/business/bo/SampleBO.java  |  2 +-
 .../server/business/bo/SampleTable.java       |  2 +-
 .../server/business/bo/ExperimentBOTest.java  | 16 ++++++++--------
 8 files changed, 26 insertions(+), 21 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java
index d66239e83ae..4fb16beedc2 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java
@@ -216,18 +216,23 @@ abstract class AbstractBusinessObject implements IDAOFactory
         return permID == null ? getPermIdDAO().createPermId() : permID;
     }
 
-    protected <T extends EntityPropertyPE> Set<T> convertProperties(final EntityTypePE type,
-            final Set<T> existingProperties, List<IEntityProperty> properties)
+    Set<String> extractPropertiesCodes(List<IEntityProperty> properties)
     {
-        final PersonPE registrator = findPerson();
-        Set<String> propertiesToUpdate = new HashSet<String>();
+        Set<String> propertiesCodes = new HashSet<String>();
         if (properties != null)
         {
             for (IEntityProperty property : properties)
             {
-                propertiesToUpdate.add(property.getPropertyType().getCode());
+                propertiesCodes.add(property.getPropertyType().getCode());
             }
         }
+        return propertiesCodes;
+    }
+
+    protected <T extends EntityPropertyPE> Set<T> convertProperties(final EntityTypePE type,
+            final Set<T> existingProperties, List<IEntityProperty> properties, Set<String> propertiesToUpdate)
+    {
+        final PersonPE registrator = findPerson();
         return entityPropertiesConverter.updateProperties(existingProperties, type, properties,
                 registrator, propertiesToUpdate);
     }
@@ -559,7 +564,7 @@ abstract class AbstractBusinessObject implements IDAOFactory
         return RelationshipUtils.getContainerComponentRelationshipType(getRelationshipTypeDAO());
     }
 
-    protected void updateProperties(EntityTypePE entityType, List<IEntityProperty> properties,
+    protected void updateProperties(EntityTypePE entityType, List<IEntityProperty> properties, Set<String> propertiesToUpdate,
             IEntityPropertiesHolder entityAsPropertiesHolder,
             IModifierAndModificationDateBean entityAsModifiableBean)
     {
@@ -573,7 +578,7 @@ abstract class AbstractBusinessObject implements IDAOFactory
             existingPropertyValuesByCode.put(propertyCode, getValue(existingProperty));
         }
         Set<? extends EntityPropertyPE> convertedProperties =
-                convertProperties(entityType, existingProperties, properties);
+                convertProperties(entityType, existingProperties, properties, propertiesToUpdate);
         if (isEquals(existingPropertyValuesByCode, convertedProperties) == false)
         {
             entityAsPropertiesHolder.setProperties(convertedProperties);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java
index 7abdc6b4245..29e4708565e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java
@@ -610,7 +610,7 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO
         updateContainer(updates.getModifiedContainerDatasetCodeOrNull());
         updateComponents(updates.getModifiedContainedDatasetCodesOrNull());
         updateFileFormatType(data, updates.getFileFormatTypeCode());
-        updateProperties(data.getEntityType(), updates.getProperties(), data, data);
+        updateProperties(data.getEntityType(), updates.getProperties(), extractPropertiesCodes(updates.getProperties()), data, data);
 
         if (data.getContainedDataSets() != null)
         {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
index f2bbf1317c0..626174af647 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
@@ -1064,7 +1064,7 @@ public final class DataSetTable extends AbstractDataSetBusinessObject implements
 
         DataSetBatchUpdateDetails details = dataSetUpdates.getDetails();
 
-        updateProperties(dataSet.getEntityType(), dataSetUpdates.getProperties(), dataSet, dataSet);
+        updateProperties(dataSet.getEntityType(), dataSetUpdates.getProperties(), details.getPropertiesToUpdate(), dataSet, dataSet);
         checkPropertiesBusinessRules(dataSet);
 
         boolean isExperimentFromSample = false;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java
index 0dce83e611e..ebbd94cc577 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java
@@ -448,7 +448,7 @@ public final class ExperimentBO extends AbstractBusinessObject implements IExper
         {
             throwModifiedEntityException("Experiment");
         }
-        updateProperties(experiment.getEntityType(), updates.getProperties(), experiment,
+        updateProperties(experiment.getEntityType(), updates.getProperties(), extractPropertiesCodes(updates.getProperties()), experiment,
                 experiment);
 
         ProjectPE project = findProject(updates.getProjectIdentifier());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialBO.java
index a089aea7d41..a1e54190c00 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialBO.java
@@ -152,7 +152,7 @@ public final class MaterialBO extends AbstractMaterialBusinessObject implements
     {
         final Set<MaterialPropertyPE> existingProperties = material.getProperties();
         final MaterialTypePE type = material.getMaterialType();
-        material.setProperties(convertProperties(type, existingProperties, properties));
+        material.setProperties(convertProperties(type, existingProperties, properties, extractPropertiesCodes(properties)));
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java
index 2053b1feb1a..50d1f24646c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java
@@ -298,7 +298,7 @@ public final class SampleBO extends AbstractSampleBusinessObject implements ISam
         {
             throwModifiedEntityException("Sample");
         }
-        updateProperties(sample.getSampleType(), updates.getProperties(), sample, sample);
+        updateProperties(sample.getSampleType(), updates.getProperties(), extractPropertiesCodes(updates.getProperties()), sample, sample);
         spaceUpdated = updateSpace(sample, updates.getSampleIdentifier(), null);
         if (updates.isUpdateExperimentLink())
         {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java
index 97a6498c1b2..f780fe6579b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java
@@ -418,7 +418,7 @@ public final class SampleTable extends AbstractSampleBusinessObject implements I
     {
         final Set<SamplePropertyPE> existingProperties = sample.getProperties();
         final SampleTypePE type = sample.getSampleType();
-        sample.setProperties(convertProperties(type, existingProperties, properties));
+        sample.setProperties(convertProperties(type, existingProperties, properties, extractPropertiesCodes(properties)));
     }
 
     private void batchUpdateProperties(SamplePE sample, List<IEntityProperty> properties,
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java
index 10921387bfc..0fd255c7d1c 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java
@@ -465,7 +465,7 @@ public final class ExperimentBOTest extends AbstractBOTest
         prepareUpdateProperties(exp.getProperties(), newProperties, experimentType,
                 ManagerTestTool.EXAMPLE_SESSION.tryGetPerson(),
                 Arrays.asList(changedProperty, addedProperty));
-        bo.updateProperties(experiment.getEntityType(), newProperties, experiment, experiment);
+        bo.updateProperties(experiment.getEntityType(), newProperties, Collections.<String> emptySet(), experiment, experiment);
 
         assertTrue(experiment.getProperties().contains(changedProperty));
         assertFalse(experiment.getProperties().contains(deletedProperty));
@@ -492,7 +492,7 @@ public final class ExperimentBOTest extends AbstractBOTest
                 new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter,
                         managedPropertyEvaluatorFactory);
 
-        bo.updateProperties(entityType, newProperties, entityAsPropertiesHolder,
+        bo.updateProperties(entityType, newProperties, Collections.<String> emptySet(), entityAsPropertiesHolder,
                 entityAsModifiableBean);
 
         context.assertIsSatisfied();
@@ -519,7 +519,7 @@ public final class ExperimentBOTest extends AbstractBOTest
                 new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter,
                         managedPropertyEvaluatorFactory);
 
-        bo.updateProperties(entityType, newProperties, entityAsPropertiesHolder,
+        bo.updateProperties(entityType, newProperties, Collections.<String> emptySet(), entityAsPropertiesHolder,
                 entityAsModifiableBean);
 
         context.assertIsSatisfied();
@@ -547,7 +547,7 @@ public final class ExperimentBOTest extends AbstractBOTest
                 new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter,
                         managedPropertyEvaluatorFactory);
 
-        bo.updateProperties(entityType, newProperties, entityAsPropertiesHolder,
+        bo.updateProperties(entityType, newProperties, Collections.<String> emptySet(), entityAsPropertiesHolder,
                 entityAsModifiableBean);
 
         context.assertIsSatisfied();
@@ -575,7 +575,7 @@ public final class ExperimentBOTest extends AbstractBOTest
                 new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter,
                         managedPropertyEvaluatorFactory);
 
-        bo.updateProperties(entityType, newProperties, entityAsPropertiesHolder,
+        bo.updateProperties(entityType, newProperties, Collections.<String> emptySet(), entityAsPropertiesHolder,
                 entityAsModifiableBean);
 
         context.assertIsSatisfied();
@@ -604,7 +604,7 @@ public final class ExperimentBOTest extends AbstractBOTest
                 new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter,
                         managedPropertyEvaluatorFactory);
 
-        bo.updateProperties(entityType, newProperties, entityAsPropertiesHolder,
+        bo.updateProperties(entityType, newProperties, Collections.<String> emptySet(), entityAsPropertiesHolder,
                 entityAsModifiableBean);
 
         context.assertIsSatisfied();
@@ -629,7 +629,7 @@ public final class ExperimentBOTest extends AbstractBOTest
                 new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter,
                         managedPropertyEvaluatorFactory);
 
-        bo.updateProperties(entityType, newProperties, entityAsPropertiesHolder,
+        bo.updateProperties(entityType, newProperties, Collections.<String> emptySet(), entityAsPropertiesHolder,
                 entityAsModifiableBean);
 
         context.assertIsSatisfied();
@@ -654,7 +654,7 @@ public final class ExperimentBOTest extends AbstractBOTest
                 new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, propertiesConverter,
                         managedPropertyEvaluatorFactory);
 
-        bo.updateProperties(entityType, newProperties, entityAsPropertiesHolder,
+        bo.updateProperties(entityType, newProperties, Collections.<String> emptySet(), entityAsPropertiesHolder,
                 entityAsModifiableBean);
 
         context.assertIsSatisfied();
-- 
GitLab