diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/ConversionUtils.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/ConversionUtils.java index 26ddfa67f5ba058bbce92f60da5e2a06f2fce974..1a9a3a66cd0d8777853166b24f0b4570c52cd4d5 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/ConversionUtils.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/ConversionUtils.java @@ -83,7 +83,7 @@ public class ConversionUtils { ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment experiment = apiExperiment.getExperiment(); - + ExperimentUpdatesDTO updates = new ExperimentUpdatesDTO(); updates.setVersion(experiment.getModificationDate()); @@ -138,11 +138,18 @@ public class ConversionUtils ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample sample = apiSample.getSample(); Set<ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample> sampleParents = sample.getParents(); - String[] parentIdentifiers = new String[sampleParents.size()]; - int i = 0; - for (ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample parent : sampleParents) + String[] parentIdentifiers; + if (apiSample.getUpdateDetails().isParentsUpdateRequested()) + { + parentIdentifiers = new String[sampleParents.size()]; + int i = 0; + for (ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample parent : sampleParents) + { + parentIdentifiers[i++] = parent.getIdentifier(); + } + } else { - parentIdentifiers[i++] = parent.getIdentifier(); + parentIdentifiers = null; } List<NewAttachment> attachments = Collections.emptyList(); diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/Sample.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/Sample.java index e9e568d7c25172806da9d0713cee9db18aaca93c..db6990810aebc30dc0feffc73abe0a007208d2c0 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/Sample.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/Sample.java @@ -19,12 +19,14 @@ package ch.systemsx.cisd.etlserver.registrator.api.v1.impl; import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Set; import ch.systemsx.cisd.etlserver.registrator.api.v1.ISample; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IExperimentImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.ISampleImmutable; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseInstance; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleBatchUpdateDetails; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; @@ -38,6 +40,8 @@ import ch.systemsx.cisd.openbis.generic.shared.util.EntityHelper; public class Sample extends SampleImmutable implements ISample { + private final SampleBatchUpdateDetails updateDetails; + /** * This code is derived from * {@link ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.SampleBuilder}, which is in @@ -77,17 +81,29 @@ public class Sample extends SampleImmutable implements ISample public Sample(ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample sample) { super(sample); + updateDetails = new SampleBatchUpdateDetails(); + initializeUpdateDetails(); } public Sample(SampleImmutable sample) { - super(sample.getSample()); + this(sample.getSample()); } public Sample(String sampleIdentifier, String permId) { super(buildSampleWithIdentifier(sampleIdentifier), false); getSample().setPermId(permId); + updateDetails = new SampleBatchUpdateDetails(); + initializeUpdateDetails(); + } + + private void initializeUpdateDetails() + { + updateDetails.setExperimentUpdateRequested(false); + updateDetails.setContainerUpdateRequested(false); + updateDetails.setParentsUpdateRequested(false); + updateDetails.setPropertiesToUpdate(new HashSet<String>()); } @Override @@ -95,12 +111,15 @@ public class Sample extends SampleImmutable implements ISample { ExperimentImmutable exp = (ExperimentImmutable) experiment; getSample().setExperiment(exp.getExperiment()); + updateDetails.setExperimentUpdateRequested(true); } @Override public void setPropertyValue(String propertyCode, String propertyValue) { EntityHelper.createOrUpdateProperty(getSample(), propertyCode, propertyValue); + Set<String> propertiesToUpdate = updateDetails.getPropertiesToUpdate(); + propertiesToUpdate.add(propertyCode); } @Override @@ -117,6 +136,7 @@ public class Sample extends SampleImmutable implements ISample { SampleImmutable containerImpl = (SampleImmutable) container; getSample().setContainer(containerImpl.getSample()); + updateDetails.setContainerUpdateRequested(true); } @Override @@ -130,6 +150,15 @@ public class Sample extends SampleImmutable implements ISample } getSample().setParents(parents); + updateDetails.setParentsUpdateRequested(true); + } + + /** + * Package-visible accessor for use in converting the Sample to an updates DTO. + */ + SampleBatchUpdateDetails getUpdateDetails() + { + return updateDetails; } }