From 93380f6ef6492c9f2e34fda1f69a2afed25716d2 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Tue, 11 May 2010 06:48:11 +0000
Subject: [PATCH] SE-246 RawDataServiceInternal.processRawData() implemented

SVN: 15881
---
 .../server/RawDataServiceInternal.java        | 31 ++-----
 .../phosphonetx/server/business/Manager.java  |  5 +-
 .../shared/dto/MsInjectionSample.java         | 20 +++--
 .../server/RawDataServiceInternalTest.java    | 81 ++++++++-----------
 4 files changed, 56 insertions(+), 81 deletions(-)

diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternal.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternal.java
index def74792eaf..c56856f69e5 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternal.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternal.java
@@ -26,26 +26,21 @@ import java.util.Set;
 import ch.rinn.restrictions.Private;
 import ch.systemsx.cisd.authentication.ISessionManager;
 import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
-import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.spring.IInvocationLoggerContext;
 import ch.systemsx.cisd.openbis.generic.server.AbstractServer;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.ICommonBusinessObjectFactory;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.IExternalDataTable;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.samplelister.ISampleLister;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
-import ch.systemsx.cisd.openbis.generic.server.dataaccess.IExternalDataDAO;
-import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleDAO;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.IValidator;
-import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListOrSearchSampleCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListSampleCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataStoreServicePE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
 import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTypeTranslator;
@@ -106,31 +101,21 @@ public class RawDataServiceInternal extends AbstractServer<IRawDataServiceIntern
 
         List<MsInjectionSample> samples = loadAllRawDataSamples(session);
         Set<Long> sampleIDs = new HashSet<Long>();
+        List<String> dataSetCodes = new ArrayList<String>();
         for (MsInjectionSample sample : samples)
         {
             if (RAW_DATA_SAMPLE_VALIDATOR.isValid(person, sample))
             {
                 sampleIDs.add(sample.getSample().getId());
+                Map<String, ExternalData> latestDataSets = sample.getLatestDataSets();
+                ExternalData latestDataSet = latestDataSets.get(dataSetType);
+                if (latestDataSet != null)
+                {
+                    dataSetCodes.add(latestDataSet.getCode());
+                }
             }
         }
 
-        ISampleDAO sampleDAO = getDAOFactory().getSampleDAO();
-        IExternalDataDAO externalDataDAO = getDAOFactory().getExternalDataDAO();
-        List<String> dataSetCodes = new ArrayList<String>();
-        for (long id : rawDataSampleIDs)
-        {
-            if (sampleIDs.contains(id) == false)
-            {
-                throw new UserFailureException("Invalid or unauthorized access on sample with ID: "
-                        + id);
-            }
-            SamplePE sample = sampleDAO.getByTechId(new TechId(id));
-            List<ExternalDataPE> dataSets = externalDataDAO.listExternalData(sample);
-            for (ExternalDataPE dataSet : dataSets)
-            {
-                dataSetCodes.add(dataSet.getCode());
-            }
-        }
         String dataStoreServerCode = findDataStoreServer(dataSetProcessingKey);
         IExternalDataTable externalDataTable =
                 businessObjectFactory.createExternalDataTable(session);
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/Manager.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/Manager.java
index 944a500d97e..764fa94098e 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/Manager.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/Manager.java
@@ -17,7 +17,6 @@
 package ch.systemsx.cisd.openbis.plugin.phosphonetx.server.business;
 
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -69,12 +68,10 @@ public class Manager
             Long sampleID = dataSetSampleMap.get(dataSet.getId());
             if (sampleID != null)
             {
-                String code = dataSet.getDataSetType().getCode();
-                Date registrationDate = dataSet.getRegistrationDate();
                 MsInjectionSample sample = samples.get(sampleID);
                 if (sample != null)
                 {
-                    sample.addLatestDataSet(code, registrationDate);
+                    sample.addLatestDataSet(dataSet);
                 }
             }
         }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/dto/MsInjectionSample.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/dto/MsInjectionSample.java
index 99a8b8fbde3..45ef8105d4a 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/dto/MsInjectionSample.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/shared/dto/MsInjectionSample.java
@@ -20,6 +20,7 @@ import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 
 /**
@@ -30,7 +31,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 public class MsInjectionSample
 {
     private final Sample sample;
-    private final Map<String, Date> latestRegistrationDates = new LinkedHashMap<String, Date>();
+    private final Map<String, ExternalData> latestDataSets = new LinkedHashMap<String, ExternalData>();
 
     public MsInjectionSample(Sample sample)
     {
@@ -42,24 +43,27 @@ public class MsInjectionSample
         return sample;
     }
 
-    public Map<String, Date> getLatestRegistrationDates()
+    public Map<String, ExternalData> getLatestDataSets()
     {
-        return latestRegistrationDates;
+        return latestDataSets;
     }
 
-    public void addLatestDataSet(String dataSetTypeCode, Date registrationDate)
+    public void addLatestDataSet(ExternalData dataSet)
     {
-        Date date = latestRegistrationDates.get(dataSetTypeCode);
-        if (date == null || date.getTime() < registrationDate.getTime())
+        String dataSetTypeCode = dataSet.getDataSetType().getCode();
+        Date registrationDate = dataSet.getRegistrationDate();
+        ExternalData latestDataSet = latestDataSets.get(dataSetTypeCode);
+        if (latestDataSet == null
+                || latestDataSet.getRegistrationDate().getTime() < registrationDate.getTime())
         {
-            latestRegistrationDates.put(dataSetTypeCode, registrationDate);
+            latestDataSets.put(dataSetTypeCode, dataSet);
         }
     }
 
     @Override
     public String toString()
     {
-        return sample.getIdentifier()+":"+latestRegistrationDates;
+        return sample.getIdentifier()+":"+latestDataSets;
     }
     
     
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternalTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternalTest.java
index 40ef550f52c..b319f969d5b 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternalTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/RawDataServiceInternalTest.java
@@ -40,15 +40,15 @@ import ch.systemsx.cisd.openbis.generic.server.business.bo.ICommonBusinessObject
 import ch.systemsx.cisd.openbis.generic.server.business.bo.samplelister.ISampleLister;
 import ch.systemsx.cisd.openbis.generic.shared.AbstractServerTestCase;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind;
 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.ListOrSearchSampleCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataStoreServicePE;
-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.SampleTypePE;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.IRawDataServiceInternal;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.dto.MsInjectionSample;
@@ -98,47 +98,54 @@ public class RawDataServiceInternalTest extends AbstractServerTestCase
         context.checking(new Expectations()
             {
                 {
-                    for (long id : ids)
-                    {
-                        one(sampleDAO).getByTechId(new TechId(id));
-                        SamplePE sample = new SamplePE();
-                        sample.setId(id);
-                        sample.setCode("s" + id);
-                        will(returnValue(sample));
-                        
-                        one(externalDataDAO).listExternalData(sample);
-                        List<ExternalDataPE> dataSets = new ArrayList<ExternalDataPE>();
-                        for (int i = 0; i < (int) (id % 3); i++)
-                        {
-                            ExternalDataPE dataSet = new ExternalDataPE();
-                            dataSet.setCode("ds" + id + "." + i);
-                            dataSets.add(dataSet);
-                        }
-                        will(returnValue(dataSets ));
-                    }
-                    
                     one(dataStoreDAO).listDataStores();
-                    DataStorePE s1 = store("s1", service("a", PROCESSING), service(COPY_PROCESSING_KEY, QUERIES));
+                    DataStorePE s1 =
+                            store("s1", service("a", PROCESSING), service(COPY_PROCESSING_KEY,
+                                    QUERIES));
                     DataStorePE s2 = store("s2", service(COPY_PROCESSING_KEY, PROCESSING));
                     will(returnValue(Arrays.asList(s1, s2)));
-                    
+
                     one(boFactory).createExternalDataTable(SESSION);
                     will(returnValue(externalDataTable));
-                    
-                    List<String> dataSetCodes = Arrays.asList("ds2.0", "ds2.1");
+
+                    List<String> dataSetCodes = Arrays.asList("ds-2", "ds-42");
                     HashMap<String, String> parameterBindings = new HashMap<String, String>();
-                    one(externalDataTable).processDatasets(COPY_PROCESSING_KEY, "s2", dataSetCodes, parameterBindings);
+                    one(externalDataTable).processDatasets(COPY_PROCESSING_KEY, "s2", dataSetCodes,
+                            parameterBindings);
                 }
                 
             });
         
-        service.processRawData(SESSION_TOKEN, COPY_PROCESSING_KEY, ids, "");
+        service.processRawData(SESSION_TOKEN, COPY_PROCESSING_KEY, ids, "dt-0");
         
         context.assertIsSatisfied();
     }
 
     private void prepareListRawDataSamples(final Long... sampleIDs)
     {
+        final List<Sample> samples = new ArrayList<Sample>();
+        final List<ExternalData> dataSets = new ArrayList<ExternalData>();
+        final LinkedHashSet<TechId> experimentIds = new LinkedHashSet<TechId>();
+        for (Long id : sampleIDs)
+        {
+            Sample sample = new Sample();
+            sample.setId(id);
+            sample.setIdentifier("S" + id);
+            Experiment experiment = new Experiment();
+            experiment.setId(id * 10);
+            sample.setExperiment(experiment);
+            Sample parent = new Sample();
+            parent.setId(id * 100);
+            sample.setGeneratedFrom(parent);
+            samples.add(sample);
+            ExternalData dataSet = new ExternalData();
+            dataSet.setId(id * 1000);
+            dataSet.setCode("ds-" + id);
+            dataSet.setDataSetType(new DataSetType("dt-" + id % 2));
+            dataSet.setSample(sample);
+            dataSets.add(dataSet);
+            experimentIds.add(new TechId(id * 10));
+        }
         context.checking(new Expectations()
             {
                 {
@@ -178,31 +185,13 @@ public class RawDataServiceInternalTest extends AbstractServerTestCase
                                 description.appendValue(sampleType);
                             }
                         }));
-                    List<Sample> samples = new ArrayList<Sample>();
-                    for (Long id : sampleIDs)
-                    {
-                        Sample sample = new Sample();
-                        sample.setId(id);
-                        sample.setIdentifier("S" + id);
-                        Experiment experiment = new Experiment();
-                        experiment.setId(id * 10);
-                        sample.setExperiment(experiment);
-                        Sample parent = new Sample();
-                        parent.setId(id * 100);
-                        sample.setGeneratedFrom(parent);
-                        samples.add(sample);
-                    }
                     will(returnValue(samples));
                     
                     one(boFactory).createDatasetLister(SESSION, "");
                     will(returnValue(datasetLister));
                     
-                    LinkedHashSet<TechId> experimentIds = new LinkedHashSet<TechId>();
-                    for (Long id : sampleIDs)
-                    {
-                        experimentIds.add(new TechId(id * 10));
-                    }
                     one(datasetLister).listByExperimentTechIds(experimentIds);
+                    will(returnValue(dataSets));
                     
                     one(datasetLister).listParentIds(Collections.<Long>emptySet());
                     will(returnValue(Collections.<Long, Set<Long>>emptyMap()));
-- 
GitLab