diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java index abd9ec0b89660088e709ac728346a0a1b2dd2578..65511e0674399665b3b26dac319ab236dbd9c80e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java @@ -109,8 +109,7 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi Map<String, ExperimentPE> experimentCacheOrNull, PersonPE registratorOrNull) throws UserFailureException { - final SampleIdentifier sampleIdentifier = - SampleIdentifierFactory.parse(newSample); + final SampleIdentifier sampleIdentifier = SampleIdentifierFactory.parse(newSample); SampleOwner sampleOwner = getSampleOwner(sampleOwnerCacheOrNull, sampleIdentifier); SampleTypePE sampleTypePE = (sampleTypeCacheOrNull != null) ? sampleTypeCacheOrNull.get(newSample @@ -353,12 +352,15 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi } protected void checkAllBusinessRules(SamplePE sample, IDataDAO dataDAO, - Map<EntityTypePE, List<EntityTypePropertyTypePE>> cacheOrNull) + Map<EntityTypePE, List<EntityTypePropertyTypePE>> cacheOrNull, boolean spaceUpdated) { checkPropertiesBusinessRules(sample, cacheOrNull); checkExperimentBusinessRules(dataDAO, sample); - checkParentBusinessRules(sample); - checkContainerBusinessRules(sample); + if (spaceUpdated) + { + checkParentBusinessRules(sample); + checkContainerBusinessRules(sample); + } } protected void checkPropertiesBusinessRules(SamplePE sample, @@ -419,7 +421,7 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi return (onlyNewSamples == false) && SampleUtils.hasDatasets(dataDAO, sample); } - protected void updateSpace(SamplePE sample, SampleIdentifier sampleOwnerIdentifier, + protected boolean updateSpace(SamplePE sample, SampleIdentifier sampleOwnerIdentifier, Map<SampleOwnerIdentifier, SampleOwner> sampleOwnerCacheOrNull) { if (sampleOwnerIdentifier != null) @@ -427,9 +429,17 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi final SampleOwner sampleOwner = getSampleOwner(sampleOwnerCacheOrNull, sampleOwnerIdentifier); SpacePE space = sampleOwner.tryGetSpace(); + if (space == sample.getSpace() || (space != null && space.equals(sample.getSpace()))) + { + // not a real update + return false; + } sample.setDatabaseInstance(sampleOwner.tryGetDatabaseInstance()); sample.setSpace(space); + return true; } + + return false; } protected void updateExperiment(SamplePE sample, ExperimentIdentifier expIdentifierOrNull,