From c14bb492ded8e953bd908ae459f9b7823061ac0e Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Wed, 26 Aug 2009 14:39:50 +0000
Subject: [PATCH] SE-126 protXML file uploading: parameter name is either code
 of a sample or value of property MZXML_FILENAME

SVN: 12296
---
 .../phosphonetx/AbundanceHandler.java         | 33 +++++++++++++++----
 .../ResultDataSetUploaderTest.java            | 31 +++++++++++++----
 2 files changed, 50 insertions(+), 14 deletions(-)

diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/AbundanceHandler.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/AbundanceHandler.java
index aceab659958..c5ac2124a17 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/AbundanceHandler.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/AbundanceHandler.java
@@ -17,13 +17,16 @@
 package ch.systemsx.cisd.openbis.etlserver.phosphonetx;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
+import ch.rinn.restrictions.Private;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
 import ch.systemsx.cisd.openbis.etlserver.phosphonetx.dto.Experiment;
 import ch.systemsx.cisd.openbis.etlserver.phosphonetx.dto.Parameter;
 import ch.systemsx.cisd.openbis.etlserver.phosphonetx.dto.Sample;
+import ch.systemsx.cisd.openbis.generic.shared.dto.ListSamplesByPropertyCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.GroupIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
@@ -33,6 +36,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
  */
 class AbundanceHandler extends AbstractHandler
 {
+    @Private static final String MZXML_FILENAME = "MZXML_FILENAME";
+    
     private final IEncapsulatedOpenBISService openbisService;
     private final GroupIdentifier groupIdentifier;
     private final Experiment experiment;
@@ -69,18 +74,32 @@ class AbundanceHandler extends AbstractHandler
             SampleIdentifier sampleIdentifier =
                 new SampleIdentifier(groupIdentifier, parameterName);
             SamplePE samplePE = openbisService.tryGetSampleWithExperiment(sampleIdentifier);
-            if (samplePE == null)
+            String permID;
+            if (samplePE != null)
             {
-                samplePE =
-                        openbisService.tryToGetSampleWithProperty("MZXML_FILENAME",
-                                groupIdentifier, parameterName);
-                if (samplePE == null)
+                permID = samplePE.getPermId();
+            } else
+            {
+                List<ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample> list =
+                        openbisService
+                                .listSamplesByCriteria(new ListSamplesByPropertyCriteria(
+                                        MZXML_FILENAME, parameterName, groupIdentifier
+                                                .getGroupCode(), null));
+                if (list == null || list.size() == 0)
+                {
+                    throw new UserFailureException("Protein '" + proteinName
+                            + "' has an abundance value for an unidentified samples: "
+                            + parameterName);
+                }
+                if (list.size() > 1)
                 {
                     throw new UserFailureException("Protein '" + proteinName
-                            + "' has an abundance value for a non-existing sample: " + sampleIdentifier);
+                            + "' has an abundance value for which " + list.size()
+                            + " samples are found: " + parameterName);
                 }
+                permID = list.get(0).getPermId();
             }
-            sample = getOrCreateSample(experiment, samplePE.getPermId());
+            sample = getOrCreateSample(experiment, permID);
             samples.put(parameterName, sample);
         }
         return sample;
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/ResultDataSetUploaderTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/ResultDataSetUploaderTest.java
index a42b6b4b6f5..c53c2590e38 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/ResultDataSetUploaderTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/etlserver/phosphonetx/ResultDataSetUploaderTest.java
@@ -23,6 +23,8 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
 import org.testng.AssertJUnit;
@@ -57,6 +59,7 @@ import ch.systemsx.cisd.openbis.etlserver.phosphonetx.dto.Sequence;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.GroupPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.ListSamplesByPropertyCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.GroupIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
@@ -297,17 +300,31 @@ public class ResultDataSetUploaderTest extends AssertJUnit
         p1.getParameters().add(createAbundance(CELL_LYSATE1, 2.5));
         p1.getParameters().add(new Parameter());
         final GroupIdentifier groupIdentifier = new GroupIdentifier(DB_INSTANCE, GROUP_CODE);
+        String upperCaseParameterName = CELL_LYSATE1.toUpperCase();
         final SampleIdentifier sampleIdentifier =
-                new SampleIdentifier(groupIdentifier, CELL_LYSATE1
-                        .toUpperCase());
+                new SampleIdentifier(groupIdentifier, upperCaseParameterName);
+        final ListSamplesByPropertyCriteria criteria =
+                new ListSamplesByPropertyCriteria(AbundanceHandler.MZXML_FILENAME,
+                        upperCaseParameterName, GROUP_CODE, null);
         context.checking(new Expectations()
             {
                 {
                     one(service).tryGetSampleWithExperiment(sampleIdentifier);
                     will(returnValue(null));
-                    
-                    one(service).tryToGetSampleWithProperty("MZXML_FILENAME", groupIdentifier, CELL_LYSATE1
-                            .toUpperCase());
+
+                    one(service).listSamplesByCriteria(
+                            with(new BaseMatcher<ListSamplesByPropertyCriteria>()
+                                {
+                                    public boolean matches(Object item)
+                                    {
+                                        return criteria.toString().equals(item.toString());
+                                    }
+
+                                    public void describeTo(Description description)
+                                    {
+                                        description.appendValue(criteria);
+                                    }
+                                }));
                 }
             });
         p1.setPeptides(Collections.<Peptide> emptyList());
@@ -321,8 +338,8 @@ public class ResultDataSetUploaderTest extends AssertJUnit
         } catch (UserFailureException ex)
         {
             AssertionUtil.assertContains("Protein '" + PROTEIN_NAME1
-                    + "' has an abundance value for a non-existing sample: " + sampleIdentifier, ex
-                    .getMessage());
+                    + "' has an abundance value for an unidentified samples: "
+                    + upperCaseParameterName, ex.getMessage());
         }
 
         context.assertIsSatisfied();
-- 
GitLab