diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java index b3594354347a22213553e6cfe5fd5f88bcea1366..fdb3181bd20a0a942a638de421155617a90c85e2 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java @@ -987,6 +987,10 @@ public final class GenericServer extends AbstractServer<IGenericServerInternal> final List<NewSamplesWithTypes> newSamplesWithType, List<NewMaterialsWithTypes> newMaterialsWithType) throws UserFailureException { + if (isProjectSamplesEnabled(sessionToken)) + { + injectProjectIdentifiers(newSamplesWithType); + } EntityExistenceChecker entityExistenceChecker = new EntityExistenceChecker(getDAOFactory()); entityExistenceChecker.checkNewMaterials(newMaterialsWithType); entityExistenceChecker.checkNewSamples(newSamplesWithType); @@ -1007,6 +1011,24 @@ public final class GenericServer extends AbstractServer<IGenericServerInternal> privateRegisterOrUpdateSamples(sessionToken, newSamplesWithType); } + private void injectProjectIdentifiers(final List<NewSamplesWithTypes> newSamplesWithType) + { + for (NewSamplesWithTypes newSamples : newSamplesWithType) + { + for (NewSample newSample : newSamples.getNewEntities()) + { + String experimentIdentifier = newSample.getExperimentIdentifier(); + if (experimentIdentifier != null) + { + ExperimentIdentifier identifier = ExperimentIdentifierFactory.parse(experimentIdentifier); + String projectCode = identifier.getProjectCode(); + String spaceCode = identifier.getSpaceCode(); + newSample.setProjectIdentifier(new ProjectIdentifier(spaceCode, projectCode).asProjectIdentifierString()); + } + } + } + } + @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/IdentifersExtractor.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/IdentifersExtractor.java index 569d30171764da00b9a9f50aa510c3b29016355f..f0bd6fe54e1f22115ba1f471184e171fba5997b9 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/IdentifersExtractor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/IdentifersExtractor.java @@ -34,17 +34,18 @@ class IdentifersExtractor { private final SampleIdentifier oldSampleIdentifier; - private final SampleIdentifier newSampleIdentifier; + private SampleIdentifier newSampleIdentifier; - private final ExperimentIdentifier experimentIdentifierOrNull; + private ExperimentIdentifier experimentIdentifierOrNull; - private final ProjectIdentifier projectIdentifierOrNull; + private ProjectIdentifier projectIdentifierOrNull; private final String containerIdentifierOrNull; IdentifersExtractor(NewSample updatedSample) { oldSampleIdentifier = SampleIdentifierFactory.parse(updatedSample); + newSampleIdentifier = oldSampleIdentifier; String experimentIdentifier = updatedSample.getExperimentIdentifier(); String projectIdentifier = updatedSample.getProjectIdentifier(); String defaultSpaceIdentifier = updatedSample.getDefaultSpaceIdentifier(); @@ -60,19 +61,12 @@ class IdentifersExtractor new SampleIdentifier(new SpaceIdentifier( experimentIdentifierOrNull.getSpaceCode()), sampleCode); - projectIdentifierOrNull = null; - } else if (projectIdentifier != null) + } + if (projectIdentifier != null) { projectIdentifierOrNull = new ProjectIdentifierFactory(projectIdentifier).createIdentifier(defaultSpaceIdentifier); - experimentIdentifierOrNull = null; newSampleIdentifier = new SampleIdentifier(projectIdentifierOrNull, sampleCode); - } else - { - // no experiment - leave sample identifier unchanged - experimentIdentifierOrNull = null; - projectIdentifierOrNull = null; - newSampleIdentifier = oldSampleIdentifier; } containerIdentifierOrNull = updatedSample.getContainerIdentifier(); }