From fb783bf9a2b32c22f86f8266539d80d36b0c7f89 Mon Sep 17 00:00:00 2001
From: cramakri <cramakri>
Date: Wed, 23 Jun 2010 14:07:54 +0000
Subject: [PATCH] LMS-1584 Added code to find out which sample a data set is
 associated with, even if this association is indirect.

SVN: 16699
---
 .../business/bo/SimpleDataSetHelper.java      | 11 +++++++
 .../dto/SimpleDataSetInformationDTO.java      | 29 ++++++++++++++-----
 .../AbstractFeatureVectorMigrator.java        | 13 +++++----
 3 files changed, 39 insertions(+), 14 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SimpleDataSetHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SimpleDataSetHelper.java
index 1085a2fe73c..3e097579e7a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SimpleDataSetHelper.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SimpleDataSetHelper.java
@@ -17,8 +17,10 @@
 package ch.systemsx.cisd.openbis.generic.server.business.bo;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 
+import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
@@ -58,6 +60,15 @@ public class SimpleDataSetHelper
         SamplePE sampleOrNull = data.tryGetSample();
         result.setSampleCode(sampleOrNull == null ? null : sampleOrNull.getCode());
         result.setDataSetType(data.getDataSetType().getCode());
+
+        HashSet<String> parentCodes = new HashSet<String>();
+        for (DataPE parent : data.getParents())
+        {
+            parentCodes.add(parent.getCode());
+        }
+
+        result.setParentDataSetCodes(parentCodes);
+
         return result;
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java
index 2bec7fdd5e0..76c9d83cf0b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SimpleDataSetInformationDTO.java
@@ -17,6 +17,7 @@
 package ch.systemsx.cisd.openbis.generic.shared.dto;
 
 import java.io.Serializable;
+import java.util.Collection;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder;
 
@@ -29,21 +30,23 @@ public class SimpleDataSetInformationDTO implements Serializable
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
-    String dataSetCode;
+    private String dataSetCode;
 
-    String dataSetLocation;
+    private String dataSetLocation;
 
-    String dataSetType;
+    private String dataSetType;
 
-    String sampleCode;
+    private String sampleCode;
 
-    String groupCode;
+    private String groupCode;
 
-    String experimentCode;
+    private String experimentCode;
 
-    String projectCode;
+    private String projectCode;
 
-    String databaseInstanceCode;
+    private String databaseInstanceCode;
+
+    private Collection<String> parentDataSetCodes;
 
     public String getDataSetType()
     {
@@ -126,4 +129,14 @@ public class SimpleDataSetInformationDTO implements Serializable
         this.databaseInstanceCode = dbInstanceCode;
     }
 
+    public Collection<String> getParentDataSetCodes()
+    {
+        return parentDataSetCodes;
+    }
+
+    public void setParentDataSetCodes(Collection<String> parentDataSetCodes)
+    {
+        this.parentDataSetCodes = parentDataSetCodes;
+    }
+
 }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/AbstractFeatureVectorMigrator.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/AbstractFeatureVectorMigrator.java
index 22d4236cc83..ce06b80ce70 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/AbstractFeatureVectorMigrator.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/AbstractFeatureVectorMigrator.java
@@ -37,6 +37,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants;
 
@@ -134,7 +135,7 @@ public abstract class AbstractFeatureVectorMigrator implements IMigrator
     private Sample findSampleCodeForDataSet(SimpleDataSetInformationDTO dataSetInfo)
     {
         String sampleCodeOrNull = dataSetInfo.getSampleCode();
-        Sample sample = null;
+        SampleIdentifier sampleId = null;
         if (null == sampleCodeOrNull)
         {
             // check the parent data sets for a sample
@@ -142,20 +143,20 @@ public abstract class AbstractFeatureVectorMigrator implements IMigrator
             for (String dataSetCode : parentDataSetCodes)
             {
                 ExternalData externalData = openBisService.tryGetDataSetForServer(dataSetCode);
-                if (externalData.getSample() != null)
+                if (externalData != null && externalData.getSample() != null)
                 {
-                    sample = externalData.getSample();
+                    sampleId = SampleIdentifierFactory.parse(externalData.getSampleIdentifier());
                     break;
                 }
             }
         } else
         {
-            SampleIdentifier sampleId =
+            sampleId =
                     new SampleIdentifier(new SpaceIdentifier(dataSetInfo.getDatabaseInstanceCode(),
                             dataSetInfo.getGroupCode()), dataSetInfo.getSampleCode());
-            sample = openBisService.tryGetSampleWithExperiment(sampleId);
         }
-        return sample;
+
+        return openBisService.tryGetSampleWithExperiment(sampleId);
     }
 
     public void close()
-- 
GitLab