diff --git a/integration-tests/test_openbis_sync.py b/integration-tests/test_openbis_sync.py index c3426a623a3a82882348fa1a5e0fd0e9139ef6a1..d97415da3e67d2169903d86e786550370a1b52dd 100755 --- a/integration-tests/test_openbis_sync.py +++ b/integration-tests/test_openbis_sync.py @@ -295,7 +295,9 @@ class TestCase(systemtest.testcase.TestCase): base64string = base64.encodestring('%s:%s' % (user, password)).replace('\n', '') request.add_header("Authorization", "Basic %s" % base64string) data = urllib.urlencode({'mode' : 'test'}) - response = urllib2.urlopen(request, data, context=ssl._create_unverified_context()) +# response = urllib2.urlopen(request, data, context=ssl._create_unverified_context()) +# TODO if python version > 2.10: replace next line by the line above + response = urllib2.urlopen(request, data) return response def getHarvesterConfigFolder(self): diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParser.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParser.java index 1a7b95d7e7228077f72eafcbf6cb04a7eefdc3e6..03dd43ea4abc1f5c627dece2b600d268d1ea83c4 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParser.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParser.java @@ -357,7 +357,7 @@ public class SampleUploadSectionsParser return results; } - private static void generateIdentifiers(boolean projectSamplesEnabled, + static void generateIdentifiers(boolean projectSamplesEnabled, String defaultGroupIdentifier, SampleCodeGenerator sampleCodeGenerator, boolean isAutoGenerateCodes, List<NewSamplesWithTypes> newSamplesWithTypes) @@ -370,27 +370,28 @@ public class SampleUploadSectionsParser List<String> codes = sampleCodeGenerator.generateCodes(newSamples.size()); for (int i = 0; i < newSamples.size(); i++) { + NewSample sample = newSamples.get(i); String spaceCodeOrNull = null; - if (newSamples.get(i).getDefaultSpaceIdentifier() == null || newSamples.get(i).getDefaultSpaceIdentifier().isEmpty()) + if (StringUtils.isBlank(sample.getDefaultSpaceIdentifier())) { spaceCodeOrNull = defaultGroupIdentifier; } else { - spaceCodeOrNull = newSamples.get(i).getDefaultSpaceIdentifier(); + spaceCodeOrNull = sample.getDefaultSpaceIdentifier(); } spaceCodeOrNull = spaceCodeOrNull.substring(1); String projectCodeOrNull = null; - if (projectSamplesEnabled && newSamples.get(i).getExperimentIdentifier() != null - && !newSamples.get(i).getExperimentIdentifier().isEmpty()) + if (projectSamplesEnabled && StringUtils.isNotBlank(sample.getExperimentIdentifier())) { - String[] experimentIdentifierParts = newSamples.get(i).getExperimentIdentifier().split("/"); - if(experimentIdentifierParts.length != 4) { - throw new UserFailureException("Incorrect format for the experiment identifier: " + newSamples.get(i).getExperimentIdentifier()); + String[] experimentIdentifierParts = sample.getExperimentIdentifier().split("/"); + if (experimentIdentifierParts.length != 4) + { + throw new UserFailureException("Incorrect format for the experiment identifier: " + sample.getExperimentIdentifier()); } spaceCodeOrNull = experimentIdentifierParts[experimentIdentifierParts.length - 3]; projectCodeOrNull = experimentIdentifierParts[experimentIdentifierParts.length - 2]; } - newSamples.get(i).setIdentifier(createIdentifier(spaceCodeOrNull, projectCodeOrNull, codes.get(i))); + sample.setIdentifier(createIdentifier(spaceCodeOrNull, projectCodeOrNull, codes.get(i))); } } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParserTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParserTest.java new file mode 100644 index 0000000000000000000000000000000000000000..2814364ef0b89c7cd718b1a2c2c0afd4c2e40a9e --- /dev/null +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParserTest.java @@ -0,0 +1,153 @@ +/* + * Copyright 2018 ETH Zuerich, SIS + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.shared.parser; + +import static org.testng.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import org.testng.annotations.Test; + +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSamplesWithTypes; + +/** + * @author Franz-Josef Elmer + */ +public class SampleUploadSectionsParserTest +{ + private static final class Generator implements SampleUploadSectionsParser.SampleCodeGenerator + { + private int counter; + + @Override + public List<String> generateCodes(int size) + { + + List<String> codes = new ArrayList<>(size); + for (int i = 0; i < size; i++) + { + codes.add("S-" + counter++); + } + return codes; + } + + } + + @Test + public void testGenerateIdentifiersWithDefaultSpaceAndNoProjectSamples() + { + // Given + NewSamplesWithTypes swt1 = new NewSamplesWithTypes(); + swt1.setNewEntities(Arrays.asList(s().defaultSpace("/MY_SPACE"), + s().experiment("/A/B/C"))); + NewSamplesWithTypes swt2 = new NewSamplesWithTypes(); + swt2.setNewEntities(Arrays.asList(s().defaultSpace("/ABC").experiment("/D/E/F"))); + + // When + SampleUploadSectionsParser.generateIdentifiers(false, "/DEFAULT", new Generator(), true, Arrays.asList(swt1, swt2)); + + // Then + assertEquals(extractIdentifiers(swt1).toString(), "[/MY_SPACE/S-0, /DEFAULT/S-1]"); + assertEquals(extractIdentifiers(swt2).toString(), "[/ABC/S-2]"); + } + + @Test + public void testGenerateIdentifiersWithNoDefaultSpaceAndNoProjectSamples() + { + // Given + NewSamplesWithTypes swt1 = new NewSamplesWithTypes(); + swt1.setNewEntities(Arrays.asList(s().defaultSpace("/MY_SPACE"), + s().defaultSpace("/A1").experiment("/A/B/C"))); + NewSamplesWithTypes swt2 = new NewSamplesWithTypes(); + swt2.setNewEntities(Arrays.asList(s().defaultSpace("/ABC").experiment("/D/E/F"))); + + // When + SampleUploadSectionsParser.generateIdentifiers(false, null, new Generator(), true, Arrays.asList(swt1, swt2)); + + // Then + assertEquals(extractIdentifiers(swt1).toString(), "[/MY_SPACE/S-0, /A1/S-1]"); + assertEquals(extractIdentifiers(swt2).toString(), "[/ABC/S-2]"); + } + + @Test + public void testGenerateIdentifiersWithDefaultSpaceAndProjectSamples() + { + // Given + NewSamplesWithTypes swt1 = new NewSamplesWithTypes(); + swt1.setNewEntities(Arrays.asList(s().defaultSpace("/MY_SPACE"), + s().experiment("/A/B/C"))); + NewSamplesWithTypes swt2 = new NewSamplesWithTypes(); + swt2.setNewEntities(Arrays.asList(s().defaultSpace("/ABC").experiment("/D/E/F"))); + + // When + SampleUploadSectionsParser.generateIdentifiers(true, "/DEFAULT", new Generator(), true, Arrays.asList(swt1, swt2)); + + // Then + assertEquals(extractIdentifiers(swt1).toString(), "[/MY_SPACE/S-0, /A/B/S-1]"); + assertEquals(extractIdentifiers(swt2).toString(), "[/D/E/S-2]"); + } + + @Test + public void testGenerateIdentifiersWithNoDefaultSpaceAndProjectSamples() + { + // Given + NewSamplesWithTypes swt1 = new NewSamplesWithTypes(); + swt1.setNewEntities(Arrays.asList(s().defaultSpace("/MY_SPACE"), s().defaultSpace("/A1").experiment("/A/B/C"))); + NewSamplesWithTypes swt2 = new NewSamplesWithTypes(); + swt2.setNewEntities(Arrays.asList(s().defaultSpace("/ABC").experiment("/D/E/F"), + s().defaultSpace("/S1").experiment("/C/D/E"))); + + // When + SampleUploadSectionsParser.generateIdentifiers(true, null, new Generator(), true, Arrays.asList(swt1, swt2)); + + // Then + assertEquals(extractIdentifiers(swt1).toString(), "[/MY_SPACE/S-0, /A/B/S-1]"); + assertEquals(extractIdentifiers(swt2).toString(), "[/D/E/S-2, /C/D/S-3]"); + } + + private List<String> extractIdentifiers(NewSamplesWithTypes samplesWithTypes) + { + return samplesWithTypes.getNewEntities().stream().map(NewSample::getIdentifier).collect(Collectors.toList()); + } + + private NewSampleBuilder s() + { + return new NewSampleBuilder(); + } + + private static final class NewSampleBuilder extends NewSample + { + private static final long serialVersionUID = 1L; + + public NewSampleBuilder defaultSpace(String defaultSpaceIdentifier) + { + setDefaultSpaceIdentifier(defaultSpaceIdentifier); + return this; + } + + public NewSampleBuilder experiment(String experimentIdentifier) + { + setExperimentIdentifier(experimentIdentifier); + return this; + } + } + +}