From 34ae627b40767a12313a3f1dd3ddaa1d207b5e52 Mon Sep 17 00:00:00 2001 From: felmer <franz-josef.elmer@id.ethz.ch> Date: Mon, 18 Jun 2018 15:12:50 +0200 Subject: [PATCH] SSDM-6731: fixing bug in batch registration as revealed by screening LIBRARY registration for enabled project samples --- .../plugin/generic/server/GenericServer.java | 22 +++++++++++++++++++ .../generic/server/IdentifersExtractor.java | 18 +++++---------- 2 files changed, 28 insertions(+), 12 deletions(-) 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 b3594354347..fdb3181bd20 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 569d3017176..f0bd6fe54e1 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(); } -- GitLab