From 4556e821fec1fe0c2b2283152e7375b7d2f16c3e Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Mon, 21 Jun 2010 10:49:07 +0000
Subject: [PATCH] OBP-22 Column for biological experiment added to the view and
 the API. Minor version of API incremented.

SVN: 16639
---
 .../client/api/v1/RawDataApiTest.java           |  3 ++-
 .../client/web/public/phosphonetx-dictionary.js |  1 +
 .../web/server/RawDataSampleProvider.java       | 11 +++++++++++
 .../server/api/v1/RawDataService.java           |  8 +++++++-
 .../shared/api/v1/dto/MsInjectionDataInfo.java  | 13 +++++++++++++
 .../web/server/RawDataSampleProviderTest.java   | 17 +++++++++++------
 6 files changed, 45 insertions(+), 8 deletions(-)

diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/api/v1/RawDataApiTest.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/api/v1/RawDataApiTest.java
index 9434db53ec9..8ac8fadc944 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/api/v1/RawDataApiTest.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/api/v1/RawDataApiTest.java
@@ -52,7 +52,8 @@ public class RawDataApiTest
             if (latestDataSets.isEmpty() == false)
             {
                 System.out.println("   " + info.getMsInjectionSampleCode() + " -> "
-                        + info.getBiologicalSampleIdentifier() + ": latest data sets: "
+                        + info.getBiologicalSampleIdentifier() + " -> "
+                        + info.getBiologicalExperimentIdentifier() + ": latest data sets: "
                         + latestDataSets);
             }
         }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/public/phosphonetx-dictionary.js b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/public/phosphonetx-dictionary.js
index 0c634318f3b..16a371fbf88 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/public/phosphonetx-dictionary.js
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/public/phosphonetx-dictionary.js
@@ -45,6 +45,7 @@ var phosphonetx = {
   openbis_raw_data_sample_browser_CODE: "MS INJECTION Sample",
   openbis_raw_data_sample_browser_REGISTRATION_DATE: "Registration Date",
   openbis_raw_data_sample_browser_PARENT: "Biological Sample",
+  openbis_raw_data_sample_browser_EXPERIMENT: "Experiment",
   copy_data_sets_button_label: "Process Data Sets",
   copy_data_sets_title: "Process Data Sets",
   copy_data_sets_message: "Please, enter the data set type of the data sets of the samples {1} to be processed by '{0}'.", 
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProvider.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProvider.java
index f8a58957e7f..f7213cca791 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProvider.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProvider.java
@@ -25,6 +25,7 @@ import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.client.web.server.GenericColumnsHelper.Column;
 import ch.systemsx.cisd.openbis.generic.client.web.server.GenericColumnsHelper.PropertyColumns;
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.IOriginalDataProvider;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableColumnHeader;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableRow;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
@@ -39,6 +40,9 @@ import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.dto.MsInjectionSample;
 class RawDataSampleProvider implements IOriginalDataProvider<GenericTableRow>
 {
 
+    @Private
+    static final String EXPERIMENT = "EXPERIMENT";
+    
     @Private
     static final String PARENT = "PARENT";
 
@@ -97,10 +101,12 @@ class RawDataSampleProvider implements IOriginalDataProvider<GenericTableRow>
         Column dateColumn =
                 new Column(GenericTableColumnHeader.untitledStringHeader(1, REGISTRATION_DATE));
         Column parentColumn = new Column(GenericTableColumnHeader.untitledStringHeader(2, PARENT));
+        Column experimentColumn = new Column(GenericTableColumnHeader.untitledLinkableStringHeader(3, EXPERIMENT));
         List<Column> columns = new ArrayList<Column>();
         columns.add(codeColumn);
         columns.add(dateColumn);
         columns.add(parentColumn);
+        columns.add(experimentColumn);
         int fixedColumns = columns.size();
         PropertyColumns samplePropertyColumns = new PropertyColumns();
         PropertyColumns parentPropertyColumns = new PropertyColumns();
@@ -111,6 +117,11 @@ class RawDataSampleProvider implements IOriginalDataProvider<GenericTableRow>
             dateColumn.addDate(i, sample.getRegistrationDate());
             Sample parent = sample.getGeneratedFrom();
             parentColumn.addStringWithID(i, parent.getIdentifier(), parent.getId());
+            Experiment experiment = parent.getExperiment();
+            if (experiment != null)
+            {
+                experimentColumn.addStringWithID(i, experiment.getIdentifier(), experiment.getId());
+            }
             addPropertyTypes(samplePropertyColumns, i, sample);
             addPropertyTypes(parentPropertyColumns, i, sample.getGeneratedFrom());
         }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/api/v1/RawDataService.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/api/v1/RawDataService.java
index 43f83366751..4600bbe58f4 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/api/v1/RawDataService.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/api/v1/RawDataService.java
@@ -36,6 +36,7 @@ import ch.systemsx.cisd.openbis.generic.server.AbstractServer;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
@@ -117,6 +118,11 @@ public class RawDataService extends AbstractServer<IRawDataService> implements I
         Sample bioSample = msiSample.getGeneratedFrom();
         info.setBiologicalSampleID(bioSample.getId());
         info.setBiologicalSampleIdentifier(bioSample.getIdentifier());
+        Experiment experiment = bioSample.getExperiment();
+        if (experiment != null)
+        {
+            info.setBiologicalExperimentIdentifier(experiment.getIdentifier());
+        }
         info.setBiologicalSampleProperties(translate(bioSample.getProperties()));
         Map<String, Date> latestDataSetRegistrationDates = new HashMap<String, Date>();
         for (Entry<String, ExternalData> entry : sample.getLatestDataSets().entrySet())
@@ -206,7 +212,7 @@ public class RawDataService extends AbstractServer<IRawDataService> implements I
 
     public int getMinorVersion()
     {
-        return 0;
+        return 1;
     }
 
 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/api/v1/dto/MsInjectionDataInfo.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/api/v1/dto/MsInjectionDataInfo.java
index f972537b185..8bf75e5b448 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/api/v1/dto/MsInjectionDataInfo.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/api/v1/dto/MsInjectionDataInfo.java
@@ -25,6 +25,7 @@ import java.util.Map;
  * for 
  * <ul><li>MS_INJECTION sample: ID, properties, code and registration date
  * <li>Biological sample: identifier and properties
+ * <li>Identifier of biological experiment (i.e. experiment of biological sample) if present
  * <li>Registration dates of the most recently registered data sets for each data set type 
  * </ul>
  *
@@ -46,6 +47,8 @@ public class MsInjectionDataInfo implements Serializable
     
     private String biologicalSampleIdentifier;
     
+    private String biologicalExperimentIdentifier;
+    
     private Map<PropertyKey, Serializable> biologicalSampleProperties;
     
     private Map<String, Date> latestDataSetRegistrationDates;
@@ -111,6 +114,16 @@ public class MsInjectionDataInfo implements Serializable
         this.biologicalSampleIdentifier = biologicalSampleIdentifier;
     }
 
+    public final String getBiologicalExperimentIdentifier()
+    {
+        return biologicalExperimentIdentifier;
+    }
+
+    public final void setBiologicalExperimentIdentifier(String biologicalExperimentIdentifier)
+    {
+        this.biologicalExperimentIdentifier = biologicalExperimentIdentifier;
+    }
+
     public Map<PropertyKey, Serializable> getBiologicalSampleProperties()
     {
         return biologicalSampleProperties;
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProviderTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProviderTest.java
index 816d9e7278c..3607d05d025 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProviderTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/server/RawDataSampleProviderTest.java
@@ -32,6 +32,7 @@ import ch.rinn.restrictions.Friend;
 import ch.systemsx.cisd.openbis.generic.shared.AbstractServerTestCase;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableColumnHeader;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableRow;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericValueEntityProperty;
@@ -102,15 +103,19 @@ public class RawDataSampleProviderTest extends AbstractServerTestCase
     {
         Sample ms1 = sample("MS1", sample("ABC", "beta", "alpha"), "one");
         Sample ms2 = sample("MS2", sample("DE", "gamma", "beta"), "one");
-        Sample ms3 = sample("MS3", sample("FG", "alpha", "gamma"), "2");
+        Sample parent = sample("FG", "alpha", "gamma");
+        Experiment experiment = new Experiment();
+        experiment.setIdentifier("/G/P/E1");
+        parent.setExperiment(experiment);
+        Sample ms3 = sample("MS3", parent, "2");
         prepareListRawDataSamples(ms1, ms2, ms3);
         
         List<GenericTableRow> data = provider.getOriginalData();
         
         assertEquals(3, data.size());
-        assertRow("MS1, Mon Mar 30 17:18:20 CET 1970, /G/ABC, null, 3.0, 6, 4, null", data.get(0));
-        assertRow("MS2, Mon Mar 30 17:20:00 CET 1970, /G/DE, null, 3.0, null, 5, 5", data.get(1));
-        assertRow("MS3, Mon Mar 30 17:21:40 CET 1970, /G/FG, 1, null, 5, null, 6", data.get(2));
+        assertRow("MS1, Mon Mar 30 17:18:20 CET 1970, /G/ABC, null, null, 3.0, 6, 4, null", data.get(0));
+        assertRow("MS2, Mon Mar 30 17:20:00 CET 1970, /G/DE, null, null, 3.0, null, 5, 5", data.get(1));
+        assertRow("MS3, Mon Mar 30 17:21:40 CET 1970, /G/FG, /G/P/E1, 1, null, 5, null, 6", data.get(2));
         context.assertIsSatisfied();
     }
     
@@ -135,9 +140,9 @@ public class RawDataSampleProviderTest extends AbstractServerTestCase
         assertFixedColumns(headers);
         for (int i = 0; i < expectedTitles.length; i++)
         {
-            assertPropertyHeader(expectedTitles[i], i + 3, headers);
+            assertPropertyHeader(expectedTitles[i], i + 4, headers);
         }
-        assertEquals(expectedTitles.length + 3, headers.size());
+        assertEquals(expectedTitles.length + 4, headers.size());
     }
     
     private void assertFixedColumns(List<GenericTableColumnHeader> headers)
-- 
GitLab