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