diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/ConversionUtils.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/ConversionUtils.java index 636d97137ff8ddd3f747e2132a8a25847dfd6d2e..66069e499f98544c8af0cfa683d832e6f2b2c565 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/ConversionUtils.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/ConversionUtils.java @@ -228,6 +228,7 @@ public class ConversionUtils data.setDataStoreCode(dataStoreCode); data.setExperimentIdentifierOrNull(dataSetInformation.getExperimentIdentifier()); data.setSampleIdentifierOrNull(dataSetInformation.getSampleIdentifier()); + data.setSamplePermIdOrNull(getSamplePermIdOrNull(dataSetInformation)); data.setParentDataSetCodes(dataSetInformation.getParentDataSetCodes()); data.setStorageFormat(storageFormat); @@ -239,6 +240,12 @@ public class ConversionUtils return data; } + private static String getSamplePermIdOrNull(DataSetInformation dataSetInformation) + { + ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample sample = dataSetInformation.tryToGetSample(); + return sample == null ? null : sample.getPermId(); + } + public static NewLinkDataSet convertToNewLinkDataSet( DataSetRegistrationDetails<?> registrationDetails, String dataStoreCode) { diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v2/ExampleJavaDataSetRegistrationDropboxV2.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v2/ExampleJavaDataSetRegistrationDropboxV2.java index 9eae847a6ab3bbbfeedda2114c102e3686000328..722c8adce944bd76cd5ea1882b19230ba064cf45 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v2/ExampleJavaDataSetRegistrationDropboxV2.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v2/ExampleJavaDataSetRegistrationDropboxV2.java @@ -16,7 +16,7 @@ package ch.systemsx.cisd.etlserver.registrator.api.v2; -import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.IExperimentImmutable; +import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.ISampleImmutable; /** * An example dropbox implemented in Java. @@ -30,12 +30,11 @@ public class ExampleJavaDataSetRegistrationDropboxV2 extends @Override public void process(IDataSetRegistrationTransactionV2 transaction) { - String sampleId = "/CISD/JAVA-TEST"; - ISample sample = transaction.createNewSample(sampleId, "DYNAMIC_PLATE"); - IExperimentImmutable exp = - transaction.getSearchService().getExperiment("/CISD/NEMO/EXP-TEST-1"); - sample.setExperiment(exp); - IDataSet dataSet = transaction.createNewDataSet(); + @SuppressWarnings("deprecation") + ISampleImmutable container = transaction.getSample("/CISD/PLATE_WELLSEARCH"); + ISample sample = transaction.createNewSample("/CISD/DP1-A", "NORMAL"); + sample.setContainer(container); + IDataSet dataSet = transaction.createNewDataSet("UNKNOWN"); dataSet.setSample(sample); transaction.moveFile(transaction.getIncoming().getAbsolutePath(), dataSet); } diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/JavaDropboxSystemTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/JavaDropboxSystemTest.java index c70328785a8f2dec8a5f90217f8c118119b964c1..5f7ad4b636ef6e9b0a6f50e4937c1458444e2a98 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/JavaDropboxSystemTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/JavaDropboxSystemTest.java @@ -17,6 +17,8 @@ package ch.systemsx.cisd.openbis.datastoreserver.systemtests; import java.io.File; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; import java.util.LinkedList; import java.util.List; @@ -25,7 +27,13 @@ import org.testng.annotations.Test; import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClause; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchClauseAttribute; +import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData; +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.basic.dto.TrackingDataSetCriteria; /** @@ -102,12 +110,26 @@ public class JavaDropboxSystemTest extends SystemTestCase List<AbstractExternalData> x = openBISService.listDataSetsByCode(codes); assertEquals("Exactly one dataset should have been imported.", 1, x.size()); - - for (AbstractExternalData a : x) + assertEquals("/CISD/PLATE_WELLSEARCH:DP1-A", x.get(0).getSampleIdentifier()); + + SearchCriteria searchCriteria = new SearchCriteria(); + searchCriteria.addMatchClause(MatchClause.createAttributeMatch(MatchClauseAttribute.CODE, "PLATE_WELLSEARCH")); + List<Sample> samples = openBISService.searchForSamples(searchCriteria); + assertEquals("[/CISD/PLATE_WELLSEARCH]", extractIdentifiers(samples).toString()); + List<Sample> components = openBISService.listSamples(ListSampleCriteria.createForContainer(new TechId(samples.get(0)))); + assertEquals("[/CISD/PLATE_WELLSEARCH:DP1-A, /CISD/PLATE_WELLSEARCH:WELL-A01, /CISD/PLATE_WELLSEARCH:WELL-A02]", + extractIdentifiers(components).toString()); + } + + private List<String> extractIdentifiers(List<Sample> samples) + { + List<String> identifiers = new ArrayList<>(); + for (Sample sample : samples) { - assertEquals("/CISD/JAVA-TEST", a.getSampleIdentifier()); - assertEquals("/CISD/NEMO/EXP-TEST-1", a.getExperiment().getIdentifier()); + identifiers.add(sample.getIdentifier()); } + Collections.sort(identifiers); + return identifiers; } private void createExampleDataSet(File exampleDataSet) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServer.java index 4ed6eb2bc14729b431b0b1da58ee1b88c7167f6d..18fdf36cd9f1fde99434aef8846ca8e6b6a01a6d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServer.java @@ -47,6 +47,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id.StorageFormatPermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.datastore.id.DataStorePermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.externaldms.id.ExternalDmsPermId; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SamplePermId; import ch.ethz.sis.openbis.generic.server.asapi.v3.context.IProgress; import ch.ethz.sis.openbis.generic.server.asapi.v3.context.IProgressListener; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext; @@ -2475,11 +2476,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD } // sample - if (newData.getSampleIdentifierOrNull() != null) - { - creation.setSampleId(new ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SampleIdentifier(newData.getSampleIdentifierOrNull() - .toString())); - } + injectSampleId(creation, newData); // data store if (newData.getDataStoreCode() != null) @@ -2588,6 +2585,20 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD return ids.size(); } + private void injectSampleId(DataSetCreation creation, NewExternalData newData) + { + SampleIdentifier sampleIdentifier = newData.getSampleIdentifierOrNull(); + String permId = newData.getSamplePermIdOrNull(); + if (permId != null) + { + creation.setSampleId(new SamplePermId(permId)); + } else if (sampleIdentifier != null) + { + creation.setSampleId(new ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SampleIdentifier( + sampleIdentifier.toString())); + } + } + private void checkDataSetCreationAllowed(Session session, List<? extends NewExternalData> dataSets) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/NewExternalData.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/NewExternalData.java index 0db7c371f3f057b6d94e096cb2bdcdaea81ac220..9f3fd67b3c89ecf7477a81c47e32e340506a73f7 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/NewExternalData.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/NewExternalData.java @@ -77,6 +77,8 @@ public class NewExternalData implements Serializable private ExperimentIdentifier experimentIdentifierOrNull; private SampleIdentifier sampleIdentifierOrNull; + + private String samplePermIdOrNull; public ExperimentIdentifier getExperimentIdentifierOrNull() { @@ -98,6 +100,16 @@ public class NewExternalData implements Serializable this.sampleIdentifierOrNull = sampleIdentifierOrNull; } + public String getSamplePermIdOrNull() + { + return samplePermIdOrNull; + } + + public void setSamplePermIdOrNull(String samplePermId) + { + this.samplePermIdOrNull = samplePermId; + } + /** Returns <code>dataSetType</code>. */ public final DataSetType getDataSetType() {