diff --git a/eu_basysbio/source/java/eu/basysbio/cisd/dss/LcaMicDataSetUploader.java b/eu_basysbio/source/java/eu/basysbio/cisd/dss/LcaMicDataSetUploader.java index 969ac7fa427fd08ed735cf758e4a613465e03bfa..b4e04c6ca47f5a6f472ce497d1a365d11b104e57 100644 --- a/eu_basysbio/source/java/eu/basysbio/cisd/dss/LcaMicDataSetUploader.java +++ b/eu_basysbio/source/java/eu/basysbio/cisd/dss/LcaMicDataSetUploader.java @@ -94,6 +94,7 @@ class LcaMicDataSetUploader extends AbstractDataSetUploader property.setValue(HeaderUtils.join(timeValues)); } } + String lastBBAID = null; for (int i = 1; i < columns.size(); i++) { Column column = columns.get(i); @@ -105,11 +106,19 @@ class LcaMicDataSetUploader extends AbstractDataSetUploader { throw new UserFailureException("Invalid header: Missing BBA ID: " + header); } - String bbaID = items[10]; - if (bbaID.startsWith("BBA") == false) + String bbaIDOfColumn = items[10]; + if (bbaIDOfColumn.startsWith("BBA") == false) { throw new UserFailureException("Invalid header: BBA ID doesn't start with 'BBA': " + header); } + if (lastBBAID != null && bbaIDOfColumn.equals(lastBBAID) == false) + { + throw new UserFailureException( + "Invalid headers: All BBA IDs should be the same. " + + "The folowing two different BBA IDs found: " + lastBBAID + + " " + bbaIDOfColumn); + } + lastBBAID = bbaIDOfColumn; items[10] = "NB"; StringBuilder builder = new StringBuilder("BBA ID"); for (String value : timeValues) @@ -117,7 +126,7 @@ class LcaMicDataSetUploader extends AbstractDataSetUploader items[3] = value; builder.append("\t").append(StringUtils.join(items, DataColumnHeader.SEPARATOR)); } - builder.append("\n").append(bbaID); + builder.append("\n").append(bbaIDOfColumn); List<String> values = column.getValues(); for (String value : values) { diff --git a/eu_basysbio/sourceTest/java/eu/basysbio/cisd/dss/LcaMicDataSetUploaderTest.java b/eu_basysbio/sourceTest/java/eu/basysbio/cisd/dss/LcaMicDataSetUploaderTest.java index de85809ad7abb0ea763586ad5ff7e0c77603e64d..465d5291b17946f40323607581fce2a927f441b3 100644 --- a/eu_basysbio/sourceTest/java/eu/basysbio/cisd/dss/LcaMicDataSetUploaderTest.java +++ b/eu_basysbio/sourceTest/java/eu/basysbio/cisd/dss/LcaMicDataSetUploaderTest.java @@ -27,6 +27,7 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase; +import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.filesystem.FileUtilities; import ch.systemsx.cisd.etlserver.cifex.CifexExtractorHelper; import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; @@ -90,7 +91,39 @@ public class LcaMicDataSetUploaderTest extends AbstractFileSystemTestCase } @Test - public void test() + public void testNonUniqueBbaIDs() + { + File tsvFile = new File(workingDirectory, "data.tsv"); + FileUtilities + .writeToFile( + tsvFile, + "# Ma::MS::B1::NT::EX::T1::NC::GrowthRate::Value[h^(-1)]::LIN::BBA9001#A_S20090325-2::NC\t0.68\n" + + "Time (s)\t" + + "Ma::MS::B1::NT::EX::T1::NC::LcaMicCfd::Value[um]::LIN::BBA9001#A_S20090325-2::NC\t" + + "Ma::MS::B1::NT::EX::T1::NC::LcaMicAbsFl::Mean[Au]::LIN::BBA9002#A_S20090325-2::NC\t" + + "Ma::MS::B1::NT::EX::T1::NC::LcaMicAbsFl::Std[Au]::LIN::BBA9001#A_S20090325-2::NC\n" + + "12\t2.5\t5.5\tN/A\n42\t42.5\t45.5\t3.25\n"); + + DataSetInformation dataSetInformation = new DataSetInformation(); + dataSetInformation.setExperimentIdentifier(new ExperimentIdentifier("p1", "e1")); + dataSetInformation.setDataSetCode("abc-1"); + dataSetInformation.setUploadingUserEmail("ab@c.de"); + try + { + uploader.handleTSVFile(tsvFile, dataSetInformation, feeder); + fail("UserFailureException expected"); + } catch (UserFailureException ex) + { + assertEquals("Invalid headers: All BBA IDs should be the same. " + + "The folowing two different BBA IDs found: " + + "BBA9001#A_S20090325-2 BBA9002#A_S20090325-2", ex.getMessage()); + } + + context.assertIsSatisfied(); + } + + @Test + public void testHappyCase() { File tsvFile = new File(workingDirectory, "data.tsv"); FileUtilities.writeToFile(tsvFile, LcaMicDataSetPropertiesExtractorTest.EXAMPLE @@ -104,8 +137,8 @@ public class LcaMicDataSetUploaderTest extends AbstractFileSystemTestCase List<String> data = getData(1); assertEquals("BBA ID\t" + - "Ma::MS::B1::12::EX::T1::NC::LcaMicCfd::Value[um]::LIN::NB::NC\t" + - "Ma::MS::B1::42::EX::T1::NC::LcaMicCfd::Value[um]::LIN::NB::NC", data.get(0)); + "Ma::MS::B1::12::EX::T1::NC::LcaMicCfd::Value[um]::LIN::NB::NC\t" + + "Ma::MS::B1::42::EX::T1::NC::LcaMicCfd::Value[um]::LIN::NB::NC", data.get(0)); assertEquals("BBA9001#A_S20090325-2\t2.5\t42.5", data.get(1)); checkProperties(1); data = getData(2);