From 95070f11267c620743db7aee6aa884fbc7d32860 Mon Sep 17 00:00:00 2001
From: izabel <izabel>
Date: Wed, 16 Jun 2010 08:29:31 +0000
Subject: [PATCH] fix: contained sample should not be allowed as a container

SVN: 16543
---
 .../bo/AbstractSampleBusinessObject.java         | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

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 51e1f5e20fc..8568f69ef84 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
@@ -178,7 +178,8 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi
     protected void setContainer(final SampleIdentifier sampleIdentifier, final SamplePE samplePE,
             String containerIdentifier)
     {
-        final SamplePE containerPE = tryGetValidSample(containerIdentifier, sampleIdentifier);
+        final SamplePE containerPE =
+                tryGetValidNotContainedSample(containerIdentifier, sampleIdentifier);
         samplePE.setContainer(containerPE);
     }
 
@@ -215,6 +216,19 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi
         return parentPE;
     }
 
+    private SamplePE tryGetValidNotContainedSample(final String parentIdentifierOrNull,
+            final SampleIdentifier sampleIdentifier)
+    {
+        SamplePE sample = tryGetValidSample(parentIdentifierOrNull, sampleIdentifier);
+        if (sample.getContainer() != null)
+        {
+            throw UserFailureException.fromTemplate(
+                    "Cannot register sample '%s': parent '%s' is part of another sample.",
+                    sampleIdentifier, parentIdentifierOrNull);
+        }
+        return sample;
+    }
+
     final SampleTypePE getSampleType(final String code) throws UserFailureException
     {
         final SampleTypePE sampleType = getSampleTypeDAO().tryFindSampleTypeByCode(code);
-- 
GitLab