diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java index 008bc660ae8438ddd1ad46fb2dd5d504627dd5a7..4343a87b59ef7fb8ebfbef23740118a4c2cb2544 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java @@ -252,13 +252,13 @@ public final class SampleTable extends AbstractSampleBusinessObject implements I final String[] parents = updates.getModifiedParentCodesOrNull(); if (parents != null) { - setParents(sample, parents, null); + setParents(sample, parents, updates.tryGetDefaultSpaceIdentifier()); } } if (details.isContainerUpdateRequested()) { setContainer(updates.getSampleIdentifier(), sample, - updates.getContainerIdentifierOrNull(), null); + updates.getContainerIdentifierOrNull(), updates.tryGetDefaultSpaceIdentifier()); } // NOTE: Checking business rules with relationships is expensive. // Don't perform them unless relevant data were changed. diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/UpdatedSample.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/UpdatedSample.java index 54531eaa5240f95f518764c8f129a4a7b92af868..03509e8409f0e5d0b1cb15927e0183aca9e7fe4d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/UpdatedSample.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/UpdatedSample.java @@ -34,7 +34,8 @@ public final class UpdatedSample extends NewSample + "# but for samples from default space (if it was provided in the form) it is enough to put sample codes (e.g. SAMPLE_1) into the column.\n" + "# The \"container\" column (if not removed) should contain sample identifiers, e.g. /SPACE/SAMPLE_1\n" + "# The \"parent\" column (if not removed) should contain comma separated list of sample identifiers, e.g. /SPACE/SAMPLE_1,/SPACE/SAMPLE_2\n" - + "# The \"experiment\" column (if not removed) should contain experiment identifier, e.g. /SPACE/PROJECT/EXP_1\n"; + + "# The \"experiment\" column (if not removed) should contain experiment identifier, e.g. /SPACE/PROJECT/EXP_1\n" + + "# The \"space\" column is optional, it can be used to override home space for the row\n"; private SampleBatchUpdateDetails batchUpdateDetails; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SampleBatchUpdatesDTO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SampleBatchUpdatesDTO.java index 8786fd292dbadd13b9d5c4b0b2f6df3e13ca851c..0e2b0bbe954ad1115c1619953024dfd6f2a55a7c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SampleBatchUpdatesDTO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SampleBatchUpdatesDTO.java @@ -31,17 +31,21 @@ public class SampleBatchUpdatesDTO extends SampleUpdatesDTO { private static final long serialVersionUID = ServiceVersionHolder.VERSION; + private final String defaultSpaceIdentifierOrNull; + private SampleIdentifier oldSampleIdentifierOrNull; private SampleBatchUpdateDetails details; - public SampleBatchUpdatesDTO(SampleIdentifier oldSampleIdentifier, - List<IEntityProperty> properties, ExperimentIdentifier experimentIdentifierOrNull, - SampleIdentifier sampleIdentifier, String containerIdentifierOrNull, - String[] modifiedParentCodesOrNull, SampleBatchUpdateDetails details) + public SampleBatchUpdatesDTO(String defaultSpaceIdentifierOrNull, + SampleIdentifier oldSampleIdentifier, List<IEntityProperty> properties, + ExperimentIdentifier experimentIdentifierOrNull, SampleIdentifier sampleIdentifier, + String containerIdentifierOrNull, String[] modifiedParentCodesOrNull, + SampleBatchUpdateDetails details) { super(null, properties, experimentIdentifierOrNull, null, null, sampleIdentifier, containerIdentifierOrNull, modifiedParentCodesOrNull); + this.defaultSpaceIdentifierOrNull = defaultSpaceIdentifierOrNull; this.oldSampleIdentifierOrNull = oldSampleIdentifier; this.details = details; } @@ -56,4 +60,9 @@ public class SampleBatchUpdatesDTO extends SampleUpdatesDTO return details; } + public String tryGetDefaultSpaceIdentifier() + { + return defaultSpaceIdentifierOrNull; + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java index 273a92dad1d3dc6ceafa520a21170b85b221633c..7d62578ab4c95303655e993d73b9bcd80bd5e59d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java @@ -283,7 +283,7 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen public void execute(List<NewSample> newSamples) { List<Sample> existingSamples = fetchExistingSamples(newSamples); - + List<NewSample> samplesToUpdate = SampleRegisterOrUpdateUtil.getSamplesToUpdate(newSamples, existingSamples); List<NewSample> samplesToRegister = new ArrayList<NewSample>(newSamples); @@ -306,8 +306,8 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen sampleLister.list(SampleRegisterOrUpdateUtil .createListSamplesByCodeCriteria(codes)); existingSamples.addAll(list); - - // for contained samples add container samples codes + + // for contained samples add container samples codes codes = SampleRegisterOrUpdateUtil.extractCodes(newSamples, true); ListOrSearchSampleCriteria criteria = SampleRegisterOrUpdateUtil.createListSamplesByCodeCriteria(codes); @@ -420,7 +420,8 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen for (NewSample updatedSample : updatedSamples) { final SampleIdentifier oldSampleIdentifier = - SampleIdentifierFactory.parse(updatedSample.getIdentifier()); + SampleIdentifierFactory.parse(updatedSample.getIdentifier(), + updatedSample.getSpaceIdentifier()); final List<IEntityProperty> properties = Arrays.asList(updatedSample.getProperties()); final ExperimentIdentifier experimentIdentifierOrNull; final SampleIdentifier newSampleIdentifier; @@ -429,7 +430,7 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen // experiment is provided - new sample identifier takes experiment space experimentIdentifierOrNull = new ExperimentIdentifierFactory(updatedSample.getExperimentIdentifier()) - .createIdentifier(); + .createIdentifier(updatedSample.getSpaceIdentifier()); newSampleIdentifier = new SampleIdentifier(new GroupIdentifier( experimentIdentifierOrNull.getDatabaseInstanceCode(), @@ -446,9 +447,10 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen final SampleBatchUpdateDetails batchUpdateDetails = createBatchUpdateDetails(updatedSample); - samples.add(new SampleBatchUpdatesDTO(oldSampleIdentifier, properties, - experimentIdentifierOrNull, newSampleIdentifier, containerIdentifierOrNull, - parentsOrNull, batchUpdateDetails)); + samples.add(new SampleBatchUpdatesDTO(updatedSample.getSpaceIdentifier(), + oldSampleIdentifier, properties, experimentIdentifierOrNull, + newSampleIdentifier, containerIdentifierOrNull, parentsOrNull, + batchUpdateDetails)); } return samples; }