diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/sample/ListSampleTechIdByIdentifier.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/sample/ListSampleTechIdByIdentifier.java index dc4c7ef7ac3c0e99c1d3bb0796c8beb08c440741..2677186b333933152788e9dd5835828547c7127b 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/sample/ListSampleTechIdByIdentifier.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/sample/ListSampleTechIdByIdentifier.java @@ -38,7 +38,13 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFa */ public class ListSampleTechIdByIdentifier implements IListObjectById<SampleIdentifier, Long> { - private Map<Long, SampleIdentifier> identifiersByTechIds = new HashMap<Long, SampleIdentifier>(); + private Map<Long, SampleIdentifier> identifiersByTechIds = new HashMap<Long, SampleIdentifier>(); + private String homeSpaceCodeOrNull; + + public ListSampleTechIdByIdentifier(String homeSpaceCodeOrNull) + { + this.homeSpaceCodeOrNull = homeSpaceCodeOrNull; + } @Override public Class<SampleIdentifier> getIdClass() @@ -63,7 +69,17 @@ public class ListSampleTechIdByIdentifier implements IListObjectById<SampleIdent String spaceCode = null; if (sampleIdentifier2.isSpaceLevel()) { - spaceCode = CodeConverter.tryToDatabase(sampleIdentifier2.getSpaceLevel().getSpaceCode()); + if (sampleIdentifier2.isInsideHomeSpace()) + { + if (homeSpaceCodeOrNull == null) + { + continue; + } + spaceCode = homeSpaceCodeOrNull; + } else + { + spaceCode = CodeConverter.tryToDatabase(sampleIdentifier2.getSpaceLevel().getSpaceCode()); + } } String sampleSubCode = CodeConverter.tryToDatabase(sampleIdentifier2.getSampleSubCode()); String containerCode = CodeConverter.tryToDatabase(sampleIdentifier2.tryGetContainerCode()); diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/sample/MapSampleTechIdByIdExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/sample/MapSampleTechIdByIdExecutor.java index fc3a69622099792365c023534e67ddeeb2619574..1e8116c19a503f9ab80a9e4cfee6d4eb9f08c06c 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/sample/MapSampleTechIdByIdExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/sample/MapSampleTechIdByIdExecutor.java @@ -25,6 +25,7 @@ import ch.ethz.sis.openbis.generic.server.api.v3.executor.IOperationContext; import ch.ethz.sis.openbis.generic.server.api.v3.executor.common.AbstractMapObjectByIdExecutor; import ch.ethz.sis.openbis.generic.server.api.v3.helper.common.IListObjectById; import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.sample.ISampleId; +import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; /** * @@ -41,7 +42,8 @@ public class MapSampleTechIdByIdExecutor extends AbstractMapObjectByIdExecutor<I List<IListObjectById<? extends ISampleId, Long>> listers = new LinkedList<IListObjectById<? extends ISampleId, Long>>(); listers.add(new ListSampleTechIdByPermId()); - listers.add(new ListSampleTechIdByIdentifier()); + SpacePE homeSpace = context.getSession().tryGetHomeGroup(); + listers.add(new ListSampleTechIdByIdentifier(homeSpace == null ? null : homeSpace.getCode())); return listers; } diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/MapSampleTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/MapSampleTest.java index 936facf86f4111a9121213f173c32efcb0aa23ad..1094f1a7fb76ba1543dbb62589687c2b7d05e2bf 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/MapSampleTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/MapSampleTest.java @@ -63,6 +63,8 @@ import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.sample.SampleIdentifier; import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.sample.SamplePermId; import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.space.SpacePermId; import ch.systemsx.cisd.common.test.AssertionUtil; +import ch.systemsx.cisd.openbis.generic.shared.basic.CodeConverter; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory; /** * @author pkupczyk @@ -103,11 +105,12 @@ public class MapSampleTest extends AbstractSampleTest SampleIdentifier identifier2 = new SampleIdentifier("/TEST-SPACE/CP-TEST-4"); SampleIdentifier identifier3 = new SampleIdentifier("/CISD/3VCP8"); SampleIdentifier identifier4 = new SampleIdentifier("/MP"); - SampleIdentifier identifier5 = new SampleIdentifier("/MP:A03"); - SampleIdentifier identifier6 = new SampleIdentifier("/CISD/CL1:A03"); + SampleIdentifier identifier5 = new SampleIdentifier("/MP:a03"); + SampleIdentifier identifier6 = new SampleIdentifier("/cisd/cl1:A03"); + SampleIdentifier identifier7 = new SampleIdentifier("//CL1:A01"); List<SampleIdentifier> identifiers = Arrays.asList(identifier1, identifier2, identifier3, identifier4, - identifier5, identifier6); + identifier5, identifier6, identifier7); Map<ISampleId, Sample> map = v3api.mapSamples(sessionToken, identifiers, new SampleFetchOptions()); assertEquals(map.size(), identifiers.size()); @@ -115,15 +118,35 @@ public class MapSampleTest extends AbstractSampleTest Iterator<Sample> iter = map.values().iterator(); for (SampleIdentifier identifier : identifiers) { - assertEquals(iter.next().getIdentifier(), identifier); + assertEquals(iter.next().getIdentifier(), normalize(identifier)); } for (SampleIdentifier identifier : identifiers) { - assertEquals(map.get(identifier).getIdentifier(), identifier); + assertEquals(map.get(identifier).getIdentifier(), normalize(identifier)); } v3api.logout(sessionToken); } + + private SampleIdentifier normalize(SampleIdentifier identifier) + { + ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier identifier2 = SampleIdentifierFactory.parse(identifier.getIdentifier()); + String spaceCode = null; + if (identifier2.isSpaceLevel()) + { + if (identifier2.isInsideHomeSpace()) + { + spaceCode = "CISD"; + } else + { + spaceCode = CodeConverter.tryToDatabase(identifier2.getSpaceLevel().getSpaceCode()); + } + } + String sampleSubCode = CodeConverter.tryToDatabase(identifier2.getSampleSubCode()); + String containerCode = CodeConverter.tryToDatabase(identifier2.tryGetContainerCode()); + return new SampleIdentifier(spaceCode, containerCode, sampleSubCode); + + } @Test public void testMapByIdsNonexistent()