From 53623528532b952945feadce7323f29256204838 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Wed, 26 Jan 2011 08:18:44 +0000
Subject: [PATCH] LMS-1949 implemented also for experiments and materials

SVN: 19591
---
 .../shared/basic/dto/NewBasicExperiment.java  |  2 +-
 .../shared/basic/dto/NewExperiment.java       |  2 +-
 .../generic/shared/basic/dto/NewMaterial.java |  2 +-
 .../plugin/generic/server/GenericServer.java  |  2 ++
 .../server/IPropertiesBatchManager.java       |  9 +++++++
 .../server/PropertiesBatchManager.java        | 26 ++++++++++++++++---
 .../generic/server/GenericServerTest.java     | 18 ++++++++++---
 7 files changed, 52 insertions(+), 9 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewBasicExperiment.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewBasicExperiment.java
index 6f82a602363..a9d42a2f0b6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewBasicExperiment.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewBasicExperiment.java
@@ -21,7 +21,7 @@ package ch.systemsx.cisd.openbis.generic.shared.basic.dto;
  * 
  * @author Izabela Adamczyk
  */
-public class NewBasicExperiment extends Identifier<NewBasicExperiment>
+public class NewBasicExperiment extends Identifier<NewBasicExperiment> implements IPropertiesBean
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewExperiment.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewExperiment.java
index 457281c20b6..0050f95a97c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewExperiment.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewExperiment.java
@@ -23,7 +23,7 @@ import java.util.List;
  * 
  * @author Izabela Adamczyk
  */
-public final class NewExperiment extends Identifier<NewExperiment>
+public final class NewExperiment extends Identifier<NewExperiment> implements IPropertiesBean
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewMaterial.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewMaterial.java
index 745b30830d8..caebaa50192 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewMaterial.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewMaterial.java
@@ -21,7 +21,7 @@ package ch.systemsx.cisd.openbis.generic.shared.basic.dto;
  * 
  * @author Izabela Adamczyk
  */
-public final class NewMaterial extends Code<NewMaterial>
+public final class NewMaterial extends Code<NewMaterial> implements IPropertiesBean
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java
index def1780070a..58337ef9c66 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java
@@ -554,6 +554,7 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen
         }
         ServerUtils.prevalidate(newMaterials, "material");
         final MaterialTypePE materialTypePE = findMaterialType(materialTypeCode);
+        getPropertiesBatchManager().manageProperties(materialTypePE, newMaterials);
         final Session session = getSession(sessionToken);
         IBatchOperation<NewMaterial> strategy = new IBatchOperation<NewMaterial>()
             {
@@ -830,6 +831,7 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen
         assert sessionToken != null : "Unspecified session token.";
         assert experiments.getExperimentTypeCode() != null : "Experiments type not specified";
         assert experiments.getNewExperiments() != null : "Experiments collection not specified";
+        getPropertiesBatchManager().manageProperties(experiments);
 
         final Session session = getSession(sessionToken);
         final List<NewBasicExperiment> newExperiments = experiments.getNewExperiments();
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/IPropertiesBatchManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/IPropertiesBatchManager.java
index 0bb13c1c0f0..465030353ed 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/IPropertiesBatchManager.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/IPropertiesBatchManager.java
@@ -16,7 +16,12 @@
 
 package ch.systemsx.cisd.openbis.plugin.generic.server;
 
+import java.util.List;
+
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperimentsWithType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewMaterial;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSamplesWithTypes;
+import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialTypePE;
 
 /**
  * Interface of classes which manage managed properties in batch updates.
@@ -26,4 +31,8 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSamplesWithTypes;
 public interface IPropertiesBatchManager
 {
     public void manageProperties(NewSamplesWithTypes newSamplesWithTypes);
+
+    public void manageProperties(NewExperimentsWithType experiments);
+
+    public void manageProperties(MaterialTypePE materialTypePE, List<NewMaterial> newMaterials);
 }
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/PropertiesBatchManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/PropertiesBatchManager.java
index 8d9750f10f6..1998588bdd7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/PropertiesBatchManager.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/PropertiesBatchManager.java
@@ -32,13 +32,17 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IPropertiesBean;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperimentsWithType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewMaterial;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSamplesWithTypes;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.api.ValidationException;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentTypePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ScriptPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.managed_property.ManagedPropertyEvaluator;
 
 /**
@@ -57,16 +61,32 @@ public class PropertiesBatchManager implements IPropertiesBatchManager
 
     public void manageProperties(NewSamplesWithTypes newSamplesWithTypes)
     {
-        List<NewSample> newSamples = newSamplesWithTypes.getNewSamples();
         ISampleTypeDAO sampleTypeDAO = daoFactory.getSampleTypeDAO();
         String code = newSamplesWithTypes.getSampleType().getCode();
         SampleTypePE sampleType = sampleTypeDAO.tryFindSampleTypeByCode(code);
         Set<? extends EntityTypePropertyTypePE> sampleTypePropertyTypes =
                 sampleType.getSampleTypePropertyTypes();
     
-        managePropertiesBeans(newSamples, sampleTypePropertyTypes);
+        managePropertiesBeans(newSamplesWithTypes.getNewSamples(), sampleTypePropertyTypes);
     }
     
+    public void manageProperties(NewExperimentsWithType experiments)
+    {
+        String code = experiments.getExperimentTypeCode();
+        ExperimentTypePE entityType = (ExperimentTypePE) daoFactory.getEntityTypeDAO(EntityKind.EXPERIMENT).tryToFindEntityTypeByCode(code);
+        Set<? extends EntityTypePropertyTypePE> entityTypePropertyTypes =
+        entityType.getExperimentTypePropertyTypes();
+
+        managePropertiesBeans(experiments.getNewExperiments(), entityTypePropertyTypes);
+    }
+    
+    public void manageProperties(MaterialTypePE materialTypePE, List<NewMaterial> newMaterials)
+    {
+        Set<? extends EntityTypePropertyTypePE> entityTypePropertyTypes =
+        materialTypePE.getMaterialTypePropertyTypes();
+        managePropertiesBeans(newMaterials, entityTypePropertyTypes);
+    }
+
     private void managePropertiesBeans(List<? extends IPropertiesBean> propertiesBeans,
             Set<? extends EntityTypePropertyTypePE> entityTypePropertyTypes)
     {
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerTest.java
index 522eabd5cc2..c6592548895 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerTest.java
@@ -469,6 +469,8 @@ public final class GenericServerTest extends AbstractServerTestCase
                 {
                     one(daoFactory).getEntityTypeDAO(EntityKind.MATERIAL);
                     will(returnValue(entityTypeDAO));
+                    
+                    one(propertiesBatchManager).manageProperties(materialTypePE, newMaterials);
 
                     one(entityTypeDAO).tryToFindEntityTypeByCode(typeCode);
                     will(returnValue(materialTypePE));
@@ -846,8 +848,15 @@ public final class GenericServerTest extends AbstractServerTestCase
     public void testRegisterExperimentEmptyCollection() throws Exception
     {
         prepareGetSession();
-        createServer().registerExperiments(SESSION_TOKEN,
-                new NewExperimentsWithType(EXPERIMENT_TYPE, createNewExperiments()));
+        final NewExperimentsWithType experiments =
+                new NewExperimentsWithType(EXPERIMENT_TYPE, createNewExperiments());
+        context.checking(new Expectations()
+            {
+                {
+                    one(propertiesBatchManager).manageProperties(experiments);
+                }
+            });
+        createServer().registerExperiments(SESSION_TOKEN, experiments);
     }
 
     @Test
@@ -858,9 +867,12 @@ public final class GenericServerTest extends AbstractServerTestCase
         final List<NewBasicExperiment> entities =
                 createNewExperiments(new NewBasicExperiment(EXPERIMENT_IDENTIFIER1),
                         new NewBasicExperiment(EXPERIMENT_IDENTIFIER2));
+        final NewExperimentsWithType experiments =
+                new NewExperimentsWithType(EXPERIMENT_TYPE, entities);
         context.checking(new Expectations()
             {
                 {
+                    one(propertiesBatchManager).manageProperties(experiments);
                     one(daoFactory).getEntityTypeDAO(EntityKind.EXPERIMENT);
                     will(returnValue(entityTypeDAO));
                     one(entityTypeDAO).tryToFindEntityTypeByCode(EXPERIMENT_TYPE);
@@ -872,7 +884,7 @@ public final class GenericServerTest extends AbstractServerTestCase
                 }
             });
         createServer().registerExperiments(SESSION_TOKEN,
-                new NewExperimentsWithType(EXPERIMENT_TYPE, entities));
+                experiments);
         context.assertIsSatisfied();
     }
 }
-- 
GitLab