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 83dc9a079d0475dae293a0c929d5ff0b5771ede8..5b1ae06f50ad209933de306f4ba1dec80be4f6ab 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 @@ -142,8 +142,8 @@ final class SampleListingWorker private final LongSet idsOfSamplesAwaitingParentResolution = new LongOpenHashSet(); - private final Long2ObjectMap<RelatedSampleRecord> samplesAwaitingParentResolution = - new Long2ObjectOpenHashMap<RelatedSampleRecord>(); + private final List<RelatedSampleRecord> samplesAwaitingParentResolution = + new ArrayList<RelatedSampleRecord>(); private final Long2ObjectMap<RelatedSampleRecord> samplesAwaitingContainerResolution = new Long2ObjectOpenHashMap<RelatedSampleRecord>(); @@ -695,18 +695,16 @@ final class SampleListingWorker idsOfSamplesAwaitingParentResolution); for (SampleRelationRecord relation : parentRelations) { - samplesAwaitingParentResolution.put(relation.sample_id_child, new RelatedSampleRecord( - sampleMap.get(relation.sample_id_child), relation.sample_id_parent)); + samplesAwaitingParentResolution.add(new RelatedSampleRecord(sampleMap + .get(relation.sample_id_child), relation.sample_id_parent)); addRelatedParentSampleToRequested(relation.sample_id_parent); } } private void resolveParents() { - for (Long2ObjectMap.Entry<RelatedSampleRecord> e : samplesAwaitingParentResolution - .long2ObjectEntrySet()) + for (RelatedSampleRecord record : samplesAwaitingParentResolution) { - final RelatedSampleRecord record = e.getValue(); final Sample parent = sampleMap.get(record.relatedSampleId); record.sample.addParent(parent); } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorkerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorkerTest.java index 3421d474e7d7da70266ed2254455ddaae0380b42..2bc20b5d9caddac71112b2009ae3331db486b595 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorkerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorkerTest.java @@ -208,20 +208,43 @@ public class SampleListingWorkerTest extends AbstractDAOTest { if (s.getId().equals(CHILD_WITH_2_PARENTS_ID)) { - assertNotNull("ID:" + s.getId(), s.getGeneratedFrom()); - assertEquals("ID:" + s.getId(), PARENT2_ID, s.getGeneratedFrom().getId().longValue()); - // FIXME - // test s.getGeneratedFrom throws exception - // assertEquals(2, s.getParents().size()); - // for (Sample parent : s.getParents()) - // { - // assertTrue("ID:" + s.getId(), parent.getId().equals(PARENT1_ID) - // || parent.getId().equals(PARENT2_ID)); - // } + checkParents(s, Arrays.asList(PARENT1_ID, PARENT2_ID)); + checkGetGeneratedFromFail(s); } else { - assertNotNull("ID:" + s.getId(), s.getGeneratedFrom()); - assertEquals("ID:" + s.getId(), PARENT1_ID, s.getGeneratedFrom().getId().longValue()); + checkGeneratedFrom(s, PARENT1_ID); } } + + private void checkGetGeneratedFromFail(Sample s) + { + boolean fail = false; + try + { + s.getGeneratedFrom(); + } catch (IllegalStateException e) + { + // expected + } + if (fail) + { + fail("Expected IllegalStateException"); + } + } + + private void checkParents(Sample s, List<Long> expectedParentIds) + { + assertEquals(expectedParentIds.size(), s.getParents().size()); + for (Sample parent : s.getParents()) + { + expectedParentIds.contains(parent.getId()); + assertTrue("ID:" + s.getId(), expectedParentIds.contains(parent.getId())); + } + } + + private void checkGeneratedFrom(Sample s, Long expectedParentId) + { + assertNotNull("ID:" + s.getId(), s.getGeneratedFrom()); + assertEquals("ID:" + s.getId(), expectedParentId, s.getGeneratedFrom().getId()); + } }