From b7067b12d72af52e771d35b483b2077fbc9df871 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 7 Jun 2019 13:52:00 +0200
Subject: [PATCH] allow empty type for data overlay

---
 CHANGELOG                                     |  1 +
 .../services/utils/ColorSchemaReader.java     | 22 ++++----
 .../services/utils/ColorSchemaReaderTest.java | 50 ++++++-------------
 3 files changed, 27 insertions(+), 46 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 34e4b4e661..bd089b970b 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -19,6 +19,7 @@ minerva (12.3.1~beta.1) unstable; urgency=low
     info/submap panel (#824)
   * Bug fix: when changing data in edit user dialog there was a need to click
     close button twice (#818)
+  * Bug fix: empty type for data overlay is allowed (#827)
 
 minerva (13.1.0~beta.0) unstable; urgency=low
   * Feature: annotators are more flexible - you can define set of input and
diff --git a/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaReader.java b/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaReader.java
index 3b2eb71dc6..40a7e31684 100644
--- a/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaReader.java
+++ b/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaReader.java
@@ -591,21 +591,23 @@ public class ColorSchemaReader {
     return result;
   }
 
-  private List<Class<? extends Element>> parseSpeciesTypes(String typesString, String errorPrefix)
+  List<Class<? extends Element>> parseSpeciesTypes(String typesString, String errorPrefix)
       throws InvalidColorSchemaException {
     List<Class<? extends Element>> result = new ArrayList<>();
     String[] types = typesString.split(",");
     for (String string : types) {
-      SpeciesMapping mapping = SpeciesMapping.getMappingByString(string);
-      if (mapping != null) {
-        result.add(mapping.getModelClazz());
-      } else {
-        String validStrings = "";
-        for (SpeciesMapping speciesMapping : SpeciesMapping.values()) {
-          validStrings += speciesMapping.getCellDesignerString() + ", ";
+      if (!string.isEmpty()) {
+        SpeciesMapping mapping = SpeciesMapping.getMappingByString(string);
+        if (mapping != null) {
+          result.add(mapping.getModelClazz());
+        } else {
+          String validStrings = "";
+          for (SpeciesMapping speciesMapping : SpeciesMapping.values()) {
+            validStrings += speciesMapping.getCellDesignerString() + ", ";
+          }
+          throw new InvalidColorSchemaException(
+              errorPrefix + "Unknown class type: " + string + ". Valid values are: " + validStrings);
         }
-        throw new InvalidColorSchemaException(
-            errorPrefix + "Unknown class type: " + string + ". Valid values are: " + validStrings);
       }
     }
     return result;
diff --git a/service/src/test/java/lcsb/mapviewer/services/utils/ColorSchemaReaderTest.java b/service/src/test/java/lcsb/mapviewer/services/utils/ColorSchemaReaderTest.java
index 119fb25312..2f02c86852 100644
--- a/service/src/test/java/lcsb/mapviewer/services/utils/ColorSchemaReaderTest.java
+++ b/service/src/test/java/lcsb/mapviewer/services/utils/ColorSchemaReaderTest.java
@@ -17,6 +17,7 @@ import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.io.output.ByteArrayOutputStream;
@@ -28,19 +29,24 @@ import org.junit.Test;
 import lcsb.mapviewer.commands.ColorExtractor;
 import lcsb.mapviewer.commands.ColorModelCommand;
 import lcsb.mapviewer.common.TextFileUtils;
+import lcsb.mapviewer.model.map.BioEntity;
 import lcsb.mapviewer.model.map.MiriamData;
 import lcsb.mapviewer.model.map.layout.ColorSchema;
 import lcsb.mapviewer.model.map.layout.GeneVariation;
 import lcsb.mapviewer.model.map.layout.GeneVariationColorSchema;
 import lcsb.mapviewer.model.map.layout.InvalidColorSchemaException;
 import lcsb.mapviewer.model.map.model.Model;
+import lcsb.mapviewer.model.map.species.Element;
 import lcsb.mapviewer.services.ServiceTestFunctions;
 
 public class ColorSchemaReaderTest extends ServiceTestFunctions {
   Logger logger = Logger.getLogger(ColorSchemaReaderTest.class);
 
+  ColorSchemaReader reader;
+
   @Before
   public void setUp() throws Exception {
+    reader = new ColorSchemaReader();
   }
 
   @After
@@ -50,8 +56,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
   @Test
   public void testReadSchema() throws Exception {
     try {
-      ColorSchemaReader reader = new ColorSchemaReader();
-
       Collection<ColorSchema> schemas = reader.readColorSchema("testFiles/enricoData/ageing.txt");
 
       assertNotNull(schemas);
@@ -81,8 +85,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
 
       ByteArrayInputStream bin = new ByteArrayInputStream(data);
 
-      ColorSchemaReader reader = new ColorSchemaReader();
-
       Collection<ColorSchema> schemas = reader.readColorSchema(bin,
           TextFileUtils.getHeaderParametersFromFile(new ByteArrayInputStream(data)));
       assertNotNull(schemas);
@@ -101,8 +103,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
 
       ByteArrayInputStream bin = new ByteArrayInputStream(data);
 
-      ColorSchemaReader reader = new ColorSchemaReader();
-
       Collection<ColorSchema> schemas = reader.readColorSchema(bin,
           TextFileUtils.getHeaderParametersFromFile(new ByteArrayInputStream(data)));
       assertNotNull(schemas);
@@ -140,8 +140,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
 
       ByteArrayInputStream bin = new ByteArrayInputStream(data);
 
-      ColorSchemaReader reader = new ColorSchemaReader();
-
       Collection<ColorSchema> schemas = reader.readColorSchema(bin,
           TextFileUtils.getHeaderParametersFromFile(new ByteArrayInputStream(data)));
       assertNotNull(schemas);
@@ -168,8 +166,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
 
       ByteArrayInputStream bin = new ByteArrayInputStream(data);
 
-      ColorSchemaReader reader = new ColorSchemaReader();
-
       Collection<ColorSchema> schemas = reader.readColorSchema(bin,
           TextFileUtils.getHeaderParametersFromFile(new ByteArrayInputStream(data)));
       assertNotNull(schemas);
@@ -188,8 +184,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
 
       ByteArrayInputStream bin = new ByteArrayInputStream(data);
 
-      ColorSchemaReader reader = new ColorSchemaReader();
-
       Collection<ColorSchema> schemas = reader.readColorSchema(bin,
           TextFileUtils.getHeaderParametersFromFile(new ByteArrayInputStream(data)));
       assertNotNull(schemas);
@@ -203,8 +197,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
   @Test
   public void testReadInvalidGeneVariantsSchema() throws Exception {
     try {
-      ColorSchemaReader reader = new ColorSchemaReader();
-
       reader.readColorSchema("testFiles/coloring/gene_variants_invalid_genome.txt");
       fail("Exception expected");
     } catch (InvalidColorSchemaException e) {
@@ -217,8 +209,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
   @Test
   public void testReadSchema2() throws Exception {
     try {
-      ColorSchemaReader reader = new ColorSchemaReader();
-
       Collection<ColorSchema> schemas = reader.readColorSchema("testFiles/coloring/goodSchema.txt");
 
       assertNotNull(schemas);
@@ -234,7 +224,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
   public void testReadSchema3() throws Exception {
     try {
       try {
-        ColorSchemaReader reader = new ColorSchemaReader();
         reader.readColorSchema("testFiles/coloring/wrongSchema.txt");
         fail("Excepion expected");
       } catch (InvalidColorSchemaException e) {
@@ -248,7 +237,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
   @Test
   public void testProblematicStephanSchema3() throws Exception {
     try {
-      ColorSchemaReader reader = new ColorSchemaReader();
       reader.readColorSchema("testFiles/coloring/problematicSchema.txt");
     } catch (Exception e) {
       e.printStackTrace();
@@ -259,7 +247,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
   @Test
   public void testReadReactionSchema() throws Exception {
     try {
-      ColorSchemaReader reader = new ColorSchemaReader();
       Collection<ColorSchema> collection = reader.readColorSchema("testFiles/coloring/reactionSchema.txt");
       assertEquals(1, collection.size());
       ColorSchema schema = collection.iterator().next();
@@ -275,8 +262,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
   @Test(timeout = 15000)
   public void testNextVersionReadSchema() throws Exception {
     try {
-      ColorSchemaReader reader = new ColorSchemaReader();
-
       Collection<ColorSchema> schemas = reader.readColorSchema("testFiles/coloring/goodLayout.v=1.0.txt");
 
       assertNotNull(schemas);
@@ -295,8 +280,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
 
       Model model = getModelForFile("testFiles/coloring/protein_to_color.xml", false);
 
-      ColorSchemaReader reader = new ColorSchemaReader();
-
       Collection<ColorSchema> schemas = reader.readColorSchema("testFiles/coloring/problematicSchema.txt");
       ColorModelCommand factory = new ColorModelCommand(model, schemas, colorExtractor);
       factory.execute();
@@ -312,7 +295,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
   @Test
   public void testColoringWithValueOrColor() throws Exception {
     try {
-      ColorSchemaReader reader = new ColorSchemaReader();
       Map<String, String> params = new HashMap<>();
       params.put(TextFileUtils.COLUMN_COUNT_PARAM, "3");
 
@@ -331,7 +313,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
   @Test
   public void testElementsByType() throws Exception {
     try {
-      ColorSchemaReader reader = new ColorSchemaReader();
       Map<String, String> params = new HashMap<>();
       params.put(TextFileUtils.COLUMN_COUNT_PARAM, "3");
 
@@ -349,7 +330,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
   @Test
   public void testColoringWithInvalidValueAndColor() throws Exception {
     try {
-      ColorSchemaReader reader = new ColorSchemaReader();
       Map<String, String> params = new HashMap<>();
       params.put(TextFileUtils.COLUMN_COUNT_PARAM, "3");
 
@@ -366,7 +346,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
   @Test
   public void testColoringWithEmptyColor() throws Exception {
     try {
-      ColorSchemaReader reader = new ColorSchemaReader();
       Map<String, String> params = new HashMap<>();
       params.put(TextFileUtils.COLUMN_COUNT_PARAM, "3");
 
@@ -383,7 +362,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
   @Test
   public void testColoringWithInvalidValueAndColor2() throws Exception {
     try {
-      ColorSchemaReader reader = new ColorSchemaReader();
       Map<String, String> params = new HashMap<>();
       params.put(TextFileUtils.COLUMN_COUNT_PARAM, "3");
 
@@ -398,8 +376,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
   @Test
   public void testSchemasWithId() throws Exception {
     try {
-      ColorSchemaReader reader = new ColorSchemaReader();
-
       Collection<ColorSchema> schemas = reader.readColorSchema("testFiles/coloring/schemaWithIdentifiers.txt");
       for (ColorSchema colorSchema : schemas) {
         for (MiriamData md : colorSchema.getMiriamData()) {
@@ -417,9 +393,8 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
   @Test
   public void testSchemasWithIdSnakeCase() throws Exception {
     try {
-      ColorSchemaReader reader = new ColorSchemaReader();
-
-      Collection<ColorSchema> schemas = reader.readColorSchema("testFiles/coloring/schema_with_identifiers_in_snake_case.txt");
+      Collection<ColorSchema> schemas = reader
+          .readColorSchema("testFiles/coloring/schema_with_identifiers_in_snake_case.txt");
       for (ColorSchema colorSchema : schemas) {
         for (MiriamData md : colorSchema.getMiriamData()) {
           assertNotNull(md.getResource());
@@ -436,8 +411,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
   @Test
   public void testSchemasWithEmptyNameAndId() throws Exception {
     try {
-      ColorSchemaReader reader = new ColorSchemaReader();
-
       Collection<ColorSchema> schemas = reader.readColorSchema("testFiles/coloring/schemaIdWithoutName.txt");
       for (ColorSchema colorSchema : schemas) {
         for (MiriamData md : colorSchema.getMiriamData()) {
@@ -455,7 +428,6 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
   @Test
   public void testSimpleNameSchemas() throws Exception {
     try {
-      ColorSchemaReader reader = new ColorSchemaReader();
       String input = "#header\ns1\ns2\n";
       Collection<ColorSchema> schemas = reader
           .readSimpleNameColorSchema(new ByteArrayInputStream(input.getBytes(StandardCharsets.UTF_8)));
@@ -466,4 +438,10 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
     }
   }
 
+  @Test
+  public void testParseSpeciesTypesForEmptyString() throws Exception {
+    List<Class<? extends Element>> classes = reader.parseSpeciesTypes("", null);
+    assertEquals(0, classes.size());
+  }
+
 }
-- 
GitLab