From aae1a6fe07ff6f83b0b6534b38b73ce0b5d0e592 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Thu, 5 Aug 2010 14:08:49 +0000
Subject: [PATCH] [LMS-1676] changes in Sample DTO to hold collection of
 parents; changes in parent columns in sample browsers; changes in sample
 detail view properties section

SVN: 17347
---
 .../application/model/SampleModelFactory.java |  6 +--
 .../sample/AbstractParentSampleColDef.java    | 31 ++-------------
 .../sample/ParentContainerSampleColDef.java   | 15 ++++----
 .../ParentGeneratedFromSampleColDef.java      | 38 +++++++++++++++----
 .../ui/sample/SampleBrowserGrid.java          |  2 +-
 .../bo/SampleGenericBusinessRules.java        |  1 +
 .../business/bo/SampleHierarchyFiller.java    | 25 ++----------
 .../bo/samplelister/SampleListingWorker.java  |  2 +-
 .../generic/shared/basic/dto/Sample.java      | 32 ++++++++++++++--
 .../basic/dto/ServiceVersionHolder.java       |  2 +-
 .../openbis/generic/shared/dto/SamplePE.java  | 23 +++++++++--
 .../shared/translator/SampleTranslator.java   | 11 ++++--
 .../sample/GenericSampleEditForm.java         |  3 +-
 .../sample/GenericSampleViewer.java           | 10 +++--
 .../ui/sample/columns/SampleRow.java          | 11 ++----
 .../server/business/bo/SampleBOTest.java      |  5 ++-
 16 files changed, 124 insertions(+), 93 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/SampleModelFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/SampleModelFactory.java
index aaeecf9ed43..6c631de947c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/SampleModelFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/SampleModelFactory.java
@@ -108,18 +108,18 @@ public final class SampleModelFactory
             if (sampleTypeOrNull.isShowParents())
             {
                 String headerText = tryGetMessage(msgProviderOrNull, Dict.PARENTS);
-                list.add(new ParentGeneratedFromSampleColDef(1, headerText));
+                list.add(new ParentGeneratedFromSampleColDef(headerText));
             }
             if (sampleTypeOrNull.isShowContainer())
             {
                 String headerText = tryGetMessage(msgProviderOrNull, Dict.PART_OF);
-                list.add(new ParentContainerSampleColDef(1, headerText));
+                list.add(new ParentContainerSampleColDef(headerText));
             }
         }
         return list;
     }
 
-    private static ArrayList<AbstractParentSampleColDef> createColDefList()
+    private static List<AbstractParentSampleColDef> createColDefList()
     {
         return new ArrayList<AbstractParentSampleColDef>();
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/AbstractParentSampleColDef.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/AbstractParentSampleColDef.java
index be6416de342..a9192fe0d9f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/AbstractParentSampleColDef.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/AbstractParentSampleColDef.java
@@ -26,22 +26,17 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 public abstract class AbstractParentSampleColDef extends AbstractColumnDefinition<Sample> implements
         IsSerializable
 {
-    abstract protected Sample tryGetParent(Sample sample);
+    abstract public Sample tryGetParent(Sample sample);
 
-    abstract protected String getIdentifierPrefix();
-
-    private int/* the level which should be shown */level;
-
-    AbstractParentSampleColDef(int level, String headerText)
+    AbstractParentSampleColDef(String headerText)
     {
         super(headerText, AbstractColumnDefinitionKind.DEFAULT_COLUMN_WIDTH, false, false);
-        this.level = level;
     }
 
     @Override
     protected String tryGetValue(Sample sample)
     {
-        Sample parent = tryGetParentSample(sample);
+        Sample parent = tryGetParent(sample);
         if (parent != null)
         {
             return parent.getIdentifier();
@@ -54,24 +49,6 @@ public abstract class AbstractParentSampleColDef extends AbstractColumnDefinitio
     @Override
     public String tryGetLink(Sample sample)
     {
-        return LinkExtractor.tryExtract(tryGetParentSample(sample));
-    }
-
-    public String getIdentifier()
-    {
-        return getIdentifierPrefix() + level;
+        return LinkExtractor.tryExtract(tryGetParent(sample));
     }
-
-    public final Sample tryGetParentSample(final Sample sample)
-    {
-        Sample parent = sample;
-        int depth = level;
-        while (depth > 0 && parent != null)
-        {
-            parent = tryGetParent(parent);
-            depth--;
-        }
-        return parent;
-    }
-
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/ParentContainerSampleColDef.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/ParentContainerSampleColDef.java
index 226197069e2..e10873e432a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/ParentContainerSampleColDef.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/ParentContainerSampleColDef.java
@@ -23,27 +23,26 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
  */
 public class ParentContainerSampleColDef extends AbstractParentSampleColDef
 {
-    private static final String PARENT_PREFIX = "containerParent";
+    private static final String IDENTIFIER = "containerParent";
 
     // GWT only
     public ParentContainerSampleColDef()
     {
-        super(0, null);
+        this(null);
     }
 
-    public ParentContainerSampleColDef(int level, String headerText)
+    public ParentContainerSampleColDef(String headerText)
     {
-        super(level, headerText);
+        super(headerText);
     }
 
-    @Override
-    protected String getIdentifierPrefix()
+    public String getIdentifier()
     {
-        return PARENT_PREFIX;
+        return IDENTIFIER;
     }
 
     @Override
-    protected Sample tryGetParent(Sample sample)
+    public Sample tryGetParent(Sample sample)
     {
         return sample.getContainer();
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/ParentGeneratedFromSampleColDef.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/ParentGeneratedFromSampleColDef.java
index 9eda659f854..51f305068e7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/ParentGeneratedFromSampleColDef.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/sample/ParentGeneratedFromSampleColDef.java
@@ -20,28 +20,50 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 
 public class ParentGeneratedFromSampleColDef extends AbstractParentSampleColDef
 {
-    private static final String PARENT_PREFIX = "generatedFromParent";
+    private static final String IDENTIFIER = "generatedFromParent";
 
     // GWT only
     public ParentGeneratedFromSampleColDef()
     {
-        super(0, null);
+        this(null);
     }
 
-    public ParentGeneratedFromSampleColDef(int level, String headerText)
+    public ParentGeneratedFromSampleColDef(String headerText)
     {
-        super(level, headerText);
+        super(headerText);
+    }
+
+    public String getIdentifier()
+    {
+        return IDENTIFIER;
     }
 
     @Override
-    protected String getIdentifierPrefix()
+    public Sample tryGetParent(Sample sample)
     {
-        return PARENT_PREFIX;
+        if (sample.getParents().size() == 1)
+        {
+            return sample.getGeneratedFrom();
+        } else
+        {
+            return null;
+        }
     }
 
     @Override
-    protected Sample tryGetParent(Sample sample)
+    protected String tryGetValue(Sample sample)
     {
-        return sample.getGeneratedFrom();
+        int parentsSize = sample.getParents().size();
+        if (parentsSize == 0)
+        {
+            return null;
+        } else if (parentsSize == 1)
+        {
+            return super.tryGetValue(sample);
+        } else
+        {
+            return parentsSize + "";
+        }
     }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
index ba367e06366..d88d29e1d96 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
@@ -612,7 +612,7 @@ public class SampleBrowserGrid extends
                             @Override
                             protected IEntityInformationHolder getEntity(Sample rowItem)
                             {
-                                return parentColDef.tryGetParentSample(rowItem);
+                                return parentColDef.tryGetParent(rowItem);
                             }
                         });
         }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleGenericBusinessRules.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleGenericBusinessRules.java
index 4ffbc1654c7..320ea860897 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleGenericBusinessRules.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleGenericBusinessRules.java
@@ -85,6 +85,7 @@ public class SampleGenericBusinessRules
         if (sample == null)
             return;
         assertValidParentRelation(sample.getContainer(), sample, "contained in");
+        // FIXME 2010-08-05, Piotr Buczek: use parents - not generatedFrom
         assertValidParentRelation(sample.getGeneratedFrom(), sample, "child of");
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleHierarchyFiller.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleHierarchyFiller.java
index 79dd1827416..a72ebe14e84 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleHierarchyFiller.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleHierarchyFiller.java
@@ -42,35 +42,18 @@ public final class SampleHierarchyFiller
 
     private final static void enrichContainerHierarchy(final SamplePE sample)
     {
-        SamplePE container = sample;
-        final Integer integer = sample.getSampleType().getContainerHierarchyDepth();
-        assert integer != null : "'partOf' hierarchy depth not specified.";
-        int containerHierarchyDepth = getPositiveIntegerValue(integer);
-        while (containerHierarchyDepth-- > 0 && container != null)
-        {
-            container = container.getContainer();
-            initialize(container);
-        }
+        final SamplePE container = sample.getContainer();
+        initialize(container);
     }
 
     private final static void enrichParentHierarchy(final SamplePE sample)
     {
-        SamplePE generatedFrom = sample;
-        final Integer integer = sample.getSampleType().getGeneratedFromHierarchyDepth();
-        assert integer != null : "'generatedFrom' hierarchy depth not specified.";
-        int generatedFromHierarchyDepth = getPositiveIntegerValue(integer);
-        while (generatedFromHierarchyDepth-- > 0 && generatedFrom != null)
+        for (SamplePE parent : sample.getParents())
         {
-            generatedFrom = generatedFrom.getGeneratedFrom();
-            initialize(generatedFrom);
+            initialize(parent);
         }
     }
 
-    public final static int getPositiveIntegerValue(int integer)
-    {
-        return integer == 0 ? 1 : integer;
-    }
-
     private final static void initialize(final SamplePE sample)
     {
         if (sample != null)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java
index 2f92e392d8e..e9a1968868e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java
@@ -697,7 +697,7 @@ final class SampleListingWorker
         {
             final RelatedSampleRecord record = e.getValue();
             final Sample parent = sampleMap.get(record.relatedSampleId);
-            record.sample.setGeneratedFrom(parent);
+            record.sample.addParent(parent);
         }
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java
index 7cb5b9ba494..2fbb11ffd5a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java
@@ -52,7 +52,7 @@ public final class Sample extends CodeWithRegistration<Sample> implements IInval
 
     private Sample container;
 
-    private Sample generatedFrom;
+    private List<Sample> parents = new ArrayList<Sample>();
 
     private List<IEntityProperty> properties;
 
@@ -156,14 +156,40 @@ public final class Sample extends CodeWithRegistration<Sample> implements IInval
         this.container = container;
     }
 
+    public List<Sample> getParents()
+    {
+        return parents;
+    }
+
+    public void setParents(List<Sample> parents)
+    {
+        this.parents = parents;
+    }
+
+    public void addParent(final Sample parent)
+    {
+        parents.add(parent);
+    }
+
     public Sample getGeneratedFrom()
     {
-        return generatedFrom;
+        if (parents.size() == 0)
+        {
+            return null;
+        }
+        if (parents.size() > 1)
+        {
+            throw new IllegalStateException("Sample " + getIdentifier()
+                    + " has more than one parent");
+        }
+        return parents.get(0);
     }
 
+    // used only for testing
     public void setGeneratedFrom(final Sample generatedFrom)
     {
-        this.generatedFrom = generatedFrom;
+        parents = new ArrayList<Sample>();
+        parents.add(generatedFrom);
     }
 
     public List<IEntityProperty> getProperties()
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ServiceVersionHolder.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ServiceVersionHolder.java
index a29e32b5a17..6e7d1afb39b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ServiceVersionHolder.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ServiceVersionHolder.java
@@ -24,5 +24,5 @@ package ch.systemsx.cisd.openbis.generic.shared.basic.dto;
 public final class ServiceVersionHolder
 {
 
-    public static final int VERSION = 16; // for S86
+    public static final int VERSION = 17; // for S87
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SamplePE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SamplePE.java
index f21755fe120..cf1418b40af 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SamplePE.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SamplePE.java
@@ -415,17 +415,34 @@ public class SamplePE extends AttachmentHolderPE implements IIdAndCodeHolder, Co
     @Transient
     public SamplePE getGeneratedFrom()
     {
-        Set<SampleRelationshipPE> relationships = getParentRelationships();
+        final List<SamplePE> parents = getParents();
+        if (parents.size() == 0)
+        {
+            return null;
+        }
+        if (parents.size() > 1)
+        {
+            throw new IllegalStateException("Sample " + getIdentifier()
+                    + " has more than one parent");
+        }
+        return parents.get(0);
+    }
+
+    @Transient
+    public List<SamplePE> getParents()
+    {
+        final Set<SampleRelationshipPE> relationships = getParentRelationships();
+        final List<SamplePE> parents = new ArrayList<SamplePE>();
         for (SampleRelationshipPE r : relationships)
         {
             assert r.getChildSample().equals(this);
             if (r.getRelationship().getCode().equals(
                     BasicConstant.PARENT_CHILD_INTERNAL_RELATIONSHIP))
             {
-                return r.getParentSample();
+                parents.add(r.getParentSample());
             }
         }
-        return null;
+        return parents;
     }
 
     public void setExperiment(final ExperimentPE experiment)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SampleTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SampleTranslator.java
index 58c9979a13f..ea028f697d1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SampleTranslator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SampleTranslator.java
@@ -126,12 +126,15 @@ public final class SampleTranslator
                         baseIndexURL, containerDep - 1, 0, false));
             }
         }
-        if (generatedFromDep > 0 && samplePE.getGeneratedFrom() != null)
+        if (generatedFromDep > 0 && samplePE.getParentRelationships() != null)
         {
-            if (HibernateUtils.isInitialized(samplePE.getGeneratedFrom()))
+            if (HibernateUtils.isInitialized(samplePE.getParentRelationships()))
             {
-                result.setGeneratedFrom(SampleTranslator.translate(samplePE.getGeneratedFrom(),
-                        baseIndexURL, 0, generatedFromDep - 1, false));
+                for (SamplePE parent : samplePE.getParents())
+                {
+                    result.addParent(SampleTranslator.translate(parent, baseIndexURL, 0,
+                            generatedFromDep - 1, false));
+                }
             }
         }
         result.setInvalidation(InvalidationTranslator.translate(samplePE.getInvalidation()));
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java
index 7ca4263647b..422758df6f9 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java
@@ -152,7 +152,8 @@ public final class GenericSampleEditForm extends AbstractGenericSampleRegisterEd
 
     private void initializeGeneratedFromParent()
     {
-        Sample parentSample = originalSample.getGeneratedFrom();
+        // FIXME 2010-08-05, Piotr Buczek: use parents - not generatedFrom
+        Sample parentSample = originalSample.getGeneratedFrom(); 
         if (parentSample != null)
         {
             parent.updateValue(parentSample.getIdentifier());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
index c93ecb47293..118883e09af 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
@@ -283,10 +283,14 @@ abstract public class GenericSampleViewer extends AbstractViewer<Sample> impleme
         {
             properties.put(messageProvider.getMessage(Dict.DERIVED_SAMPLE) + "s", generated.length);
         }
-        Sample generatedFrom = sample.getGeneratedFrom();
-        if (generatedFrom != null)
+        final List<Sample> parents = sample.getParents();
+        final int parentsSize = parents.size();
+        if (parentsSize == 1)
         {
-            properties.put(messageProvider.getMessage(Dict.PARENT), generatedFrom);
+            properties.put(messageProvider.getMessage(Dict.PARENT), parents.get(0));
+        } else if (parentsSize > 1)
+        {
+            properties.put(messageProvider.getMessage(Dict.PARENTS), parentsSize);
         }
         Sample partOf = sample.getContainer();
         if (partOf != null)
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/columns/SampleRow.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/columns/SampleRow.java
index e71c1072216..28191328af8 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/columns/SampleRow.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/columns/SampleRow.java
@@ -126,26 +126,23 @@ public class SampleRow extends RowWithProperties
 
     public SampleRow derivedFromAncestors(final String... ancestorCodes)
     {
-        int level = 1;
         for (String ancestorCode : ancestorCodes)
         {
-            derivedFromAncestor(ancestorCode, level);
-            level++;
+            derivedFromAncestor(ancestorCode);
         }
         return this;
     }
 
-    private SampleRow derivedFromAncestor(final String ancestorCode, final int level)
+    private SampleRow derivedFromAncestor(final String ancestorCode)
     {
-        final String identifier =
-                new ParentGeneratedFromSampleColDef(level, "dummy").getIdentifier();
+        final String identifier = new ParentGeneratedFromSampleColDef("dummy").getIdentifier();
         withCell(identifier, ancestorCode);
         return this;
     }
 
     public SampleRow partOfContainer(final String containerCode)
     {
-        final String identifier = new ParentContainerSampleColDef(1, "dummy").getIdentifier();
+        final String identifier = new ParentContainerSampleColDef("dummy").getIdentifier();
         withCell(identifier, containerCode);
         return this;
     }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBOTest.java
index 17a045707bd..5590b9218f5 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBOTest.java
@@ -507,8 +507,9 @@ public final class SampleBOTest extends AbstractBOTest
                 new SampleUpdatesDTO(SAMPLE_TECH_ID, null, null, Collections
                         .<NewAttachment> emptyList(), now, null, parent.getSampleIdentifier()
                         .toString(), null));
-        assertNotNull(sample.getGeneratedFrom());
-        assertEquals(parent, sample.getGeneratedFrom());
+        SamplePE newParent = sample.getGeneratedFrom();
+        assertNotNull(newParent);
+        assertEquals(parent, newParent);
         context.assertIsSatisfied();
 
     }
-- 
GitLab