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