diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java index c26d2a0d29a7e4bafa21f9f916e5c70e9fd93edc..ceade489181e346af5ad8fee4e292fd9b1fc49c7 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Map; import net.lemnik.eodsql.DynamicTransactionQuery; + import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked; import ch.systemsx.cisd.base.exceptions.InterruptedExceptionUnchecked; @@ -699,6 +700,19 @@ abstract class AbstractTransactionState<T extends DataSetInformation> AtomicEntityOperationDetails<T> createEntityOperationDetails( List<DataSetRegistrationInformation<T>> dataSetRegistrations) { + for (DataSetRegistrationInformation<T> dataSetRegistrationInformation : dataSetRegistrations) + { + DataSetInformation dsInfo = dataSetRegistrationInformation.getDataSetInformation(); + if (dsInfo.isLinkSample() == false) + { + // A storage processor might need the sample even though the data sets should + // not be linked to the sample because they are data sets of a container data + // set. + dsInfo.setSample(null); + dsInfo.setSampleCode(null); + dataSetRegistrationInformation.getExternalData().setSampleIdentifierOrNull(null); + } + } List<NewSpace> spaceRegistrations = convertSpacesToBeRegistered(); List<NewProject> projectRegistrations = convertProjectsToBeRegistered(); diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/dto/DataSetInformation.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/dto/DataSetInformation.java index e1a87c5d472c6dd05c9d8b9ca1c52df16be88f61..68d51bb95b59033d3a20a26ddf4b7448fbf112ca 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/dto/DataSetInformation.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/dto/DataSetInformation.java @@ -78,6 +78,8 @@ public class DataSetInformation implements Serializable /** sample with properties, enriched with connected experiment with properties. */ private transient Sample sample; + + private transient boolean linkSample = true; private transient Experiment experiment; @@ -285,6 +287,16 @@ public class DataSetInformation implements Serializable this.sampleCode = sampleCode; } + public boolean isLinkSample() + { + return linkSample; + } + + public void setLinkSample(boolean linkSample) + { + this.linkSample = linkSample; + } + public final String getDataSetCode() { return extractableData.getCode(); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/impl/ImageContainerDataSet.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/impl/ImageContainerDataSet.java index 0f65a686ba896961247f211622c1dc7ba67ffd4c..1c2ef66881ccaef023232759d403e245727d12d7 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/impl/ImageContainerDataSet.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/impl/ImageContainerDataSet.java @@ -40,6 +40,8 @@ public class ImageContainerDataSet extends DataSet<DataSetInformation> implement private DataSet<ImageDataSetInformation> originalDataset; private List<IDataSet> thumbnailDatasets = Collections.emptyList(); + + private boolean establishSampleLinkForContainedDataSets = false; public ImageContainerDataSet( DataSetRegistrationDetails<? extends DataSetInformation> registrationDetails, @@ -53,6 +55,16 @@ public class ImageContainerDataSet extends DataSet<DataSetInformation> implement setPropertyValue(ScreeningConstants.ANALYSIS_PROCEDURE, analysisProcedure); } + public void establishSampleLinkForContainedDataSets() + { + establishSampleLinkForContainedDataSets = true; + } + + public boolean sampleLinkForContainedDataSetsShouldBeEstablished() + { + return establishSampleLinkForContainedDataSets; + } + public DataSet<ImageDataSetInformation> getOriginalDataset() { return originalDataset; @@ -80,10 +92,17 @@ public class ImageContainerDataSet extends DataSet<DataSetInformation> implement if (originalDataset != null) { originalDataset.setSample(sampleOrNull); + originalDataset.getRegistrationDetails().getDataSetInformation() + .setLinkSample(establishSampleLinkForContainedDataSets); } for (IDataSet thumbnailDataset : thumbnailDatasets) { thumbnailDataset.setSample(sampleOrNull); + if (thumbnailDatasets instanceof DataSet) + { + ((DataSet<?>) thumbnailDatasets).getRegistrationDetails().getDataSetInformation() + .setLinkSample(establishSampleLinkForContainedDataSets); + } } } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/IImageDataSet.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/IImageDataSet.java index 997f12b2e7347ed6e72775ecd75c56b57c41025c..221f500fa40d9662f4d8ac0d96912dd30f12c9a1 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/IImageDataSet.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/IImageDataSet.java @@ -33,4 +33,12 @@ public interface IImageDataSet extends IDataSet /** Sets analysis procedure. Makes sense only for segmentation datasets. */ void setAnalysisProcedure(String analysisProcedure); + + /** + * If this method is called the contained data sets (original data set and thumbnails) will + * automatically linked to the sample specified by + * {@link IDataSet#setSample(ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.ISampleImmutable)}. + * By default there will be no such links. + */ + void establishSampleLinkForContainedDataSets(); }