From 4b9a0e62a87e23ee96f868481c8bda79cb1bf859 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 25 Jan 2018 14:38:47 +0100
Subject: [PATCH] there is uniform way of storing BioEntity id in color schema

---
 .../mapviewer/commands/ColorModelCommand.java |  10 +-
 .../commands/ColorModelCommandTest.java       |  21 +-
 .../model/map/layout/ColorSchema.java         |  24 +-
 .../model/map/layout/ColorSchemaTest.java     |   4 +-
 .../services/impl/LayoutService.java          |   4 +-
 .../services/utils/ColorSchemaReader.java     |   6 +-
 .../services/utils/ColorSchemaXlsxReader.java |   6 +-
 .../mapviewer/services/AllServicesTests.java  |  11 +-
 .../services/impl/LayoutServiceTest2.java     | 419 +++++++++---------
 .../services/utils/ColorSchemaReaderTest.java |   2 +-
 .../utils/ColorSchemaReaderXlsTest.java       |   2 +-
 .../utils/ColorSchemaReaderXlsxTest.java      |   2 +-
 12 files changed, 243 insertions(+), 268 deletions(-)

diff --git a/model-command/src/main/java/lcsb/mapviewer/commands/ColorModelCommand.java b/model-command/src/main/java/lcsb/mapviewer/commands/ColorModelCommand.java
index e66453a029..f6ff490e8d 100644
--- a/model-command/src/main/java/lcsb/mapviewer/commands/ColorModelCommand.java
+++ b/model-command/src/main/java/lcsb/mapviewer/commands/ColorModelCommand.java
@@ -134,10 +134,6 @@ public class ColorModelCommand extends ModelCommand {
       return false;
     }
 
-    if (schema.getReactionIdentifier() != null
-        && schema.getReactionIdentifier().equalsIgnoreCase(reaction.getIdReaction())) {
-      return true;
-    }
     if (schema.getGeneralIdentifier() != null && !schema.getGeneralIdentifier().equals("")) {
       MiriamData md = MiriamType.getMiriamDataFromIdentifier(schema.getGeneralIdentifier());
 
@@ -155,7 +151,7 @@ public class ColorModelCommand extends ModelCommand {
       }
     }
 
-    return false;
+    return true;
   }
 
   private boolean modelMatch(ModelData model, ColorSchema schema) {
@@ -270,10 +266,6 @@ public class ColorModelCommand extends ModelCommand {
         }
       }
 
-      // if we have reaction id to match then reject
-      if (schema.getReactionIdentifier() != null) {
-        return false;
-      }
       return true;
     } else {
       return false;
diff --git a/model-command/src/test/java/lcsb/mapviewer/commands/ColorModelCommandTest.java b/model-command/src/test/java/lcsb/mapviewer/commands/ColorModelCommandTest.java
index 252d31a3c8..d240a93b7c 100644
--- a/model-command/src/test/java/lcsb/mapviewer/commands/ColorModelCommandTest.java
+++ b/model-command/src/test/java/lcsb/mapviewer/commands/ColorModelCommandTest.java
@@ -16,6 +16,7 @@ import org.junit.Before;
 import org.junit.Test;
 
 import lcsb.mapviewer.common.Pair;
+import lcsb.mapviewer.model.map.BioEntity;
 import lcsb.mapviewer.model.map.MiriamType;
 import lcsb.mapviewer.model.map.layout.ColorSchema;
 import lcsb.mapviewer.model.map.layout.GenericColorSchema;
@@ -136,7 +137,7 @@ public class ColorModelCommandTest extends CommandTestFunctions {
       Reaction re1 = model.getReactionByReactionId("re1");
       Collection<ColorSchema> schemas = new ArrayList<ColorSchema>();
       ColorSchema schema = new GenericColorSchema();
-      schema.setReactionIdentifier("re1");
+      schema.setElementId("re1");
       schema.setColor(Color.RED);
       schemas.add(schema);
 
@@ -161,7 +162,7 @@ public class ColorModelCommandTest extends CommandTestFunctions {
       Reaction re2 = model.getReactionByReactionId("re2");
       Collection<ColorSchema> schemas = new ArrayList<ColorSchema>();
       ColorSchema schema = new GenericColorSchema();
-      schema.setReactionIdentifier("re2");
+      schema.setElementId("re2");
       schema.setValue(-1.0);
       schemas.add(schema);
 
@@ -267,7 +268,7 @@ public class ColorModelCommandTest extends CommandTestFunctions {
       Model model = getModelForFile("testFiles/sample.xml", false);
       Collection<ColorSchema> schemas = new ArrayList<>();
       ColorSchema schema = new GenericColorSchema();
-      schema.setReactionIdentifier("re1");
+      schema.setElementId("re1");
       schema.setLineWidth(3.0);
       schema.setColor(Color.BLUE);
       schema.setName("");
@@ -289,7 +290,7 @@ public class ColorModelCommandTest extends CommandTestFunctions {
       Model model = getModelForFile("testFiles/sample.xml", false);
       Collection<ColorSchema> schemas = new ArrayList<>();
       ColorSchema schema = new GenericColorSchema();
-      schema.setReactionIdentifier("re1");
+      schema.setElementId("re1");
       schema.setLineWidth(3.0);
       schema.setColor(Color.BLUE);
       schema.setName(null);
@@ -312,13 +313,13 @@ public class ColorModelCommandTest extends CommandTestFunctions {
   }
 
   @Test
-  public void testAliasMatchWithReactionId() throws Exception {
+  public void testAliasMatchWithInvalidElementId() throws Exception {
     try {
       GenericColorSchema colorSchema = new GenericColorSchema();
       colorSchema.setName(null);
-      colorSchema.setReactionIdentifier("1");
+      colorSchema.setElementId("1");
 
-      GenericProtein protein = new GenericProtein("id");
+      BioEntity protein = new GenericProtein("id");
       protein.setName("test");
 
       List<ColorSchema> schemas = new ArrayList<>();
@@ -328,7 +329,7 @@ public class ColorModelCommandTest extends CommandTestFunctions {
 
       assertFalse(factory.match(protein, colorSchema));
 
-      colorSchema.setReactionIdentifier(null);
+      colorSchema.setElementId(null);
       assertTrue(factory.match(protein, colorSchema));
 
     } catch (Exception e) {
@@ -368,7 +369,7 @@ public class ColorModelCommandTest extends CommandTestFunctions {
       Model model = getModelForFile("testFiles/reactions_to_color.xml", false);
 
       ColorSchema schema = new GenericColorSchema();
-      schema.setReactionIdentifier("re4");
+      schema.setElementId("re4");
       schema.setName(null);
       schema.setModelName(model.getName() + "XXX");
 
@@ -391,7 +392,7 @@ public class ColorModelCommandTest extends CommandTestFunctions {
       Model model = getModelForFile("testFiles/reactions_to_color.xml", false);
 
       ColorSchema schema = new GenericColorSchema();
-      schema.setReactionIdentifier("re4");
+      schema.setElementId("re4");
       schema.setName(null);
       schema.setModelName(model.getName());
 
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/layout/ColorSchema.java b/model/src/main/java/lcsb/mapviewer/model/map/layout/ColorSchema.java
index 0d185c7ad4..a8628a8345 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/layout/ColorSchema.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/layout/ColorSchema.java
@@ -7,6 +7,7 @@ import java.util.Collection;
 import java.util.List;
 
 import lcsb.mapviewer.common.Pair;
+import lcsb.mapviewer.model.map.BioEntity;
 import lcsb.mapviewer.model.map.MiriamType;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.species.Element;
@@ -39,10 +40,8 @@ public abstract class ColorSchema implements Serializable {
   private String modelName = null;
 
   /**
-   * Identifier of the reaction to change the color.
+   * Original identifier of the {@link BioEntity} to change the color.
    */
-  private String reactionIdentifier = null;
-  
   private String elementId = null;
 
   /**
@@ -112,7 +111,7 @@ public abstract class ColorSchema implements Serializable {
    */
   protected ColorSchema(ColorSchema original) {
     this.setName(original.getName());
-    this.setReactionIdentifier(original.getReactionIdentifier());
+    this.setElementId(original.getElementId());
     this.setReverseReaction(original.getReverseReaction());
     this.setLineWidth(original.getLineWidth());
     this.addCompartments(original.getCompartments());
@@ -366,23 +365,6 @@ public abstract class ColorSchema implements Serializable {
 
   }
 
-  /**
-   * @return the reactionIdentifier
-   * @see #reactionIdentifier
-   */
-  public String getReactionIdentifier() {
-    return reactionIdentifier;
-  }
-
-  /**
-   * @param reactionIdentifier
-   *          the reactionIdentifier to set
-   * @see #reactionIdentifier
-   */
-  public void setReactionIdentifier(String reactionIdentifier) {
-    this.reactionIdentifier = reactionIdentifier;
-  }
-
   /**
    * @return the lineWidth
    * @see #lineWidth
diff --git a/model/src/test/java/lcsb/mapviewer/model/map/layout/ColorSchemaTest.java b/model/src/test/java/lcsb/mapviewer/model/map/layout/ColorSchemaTest.java
index afeb53d81f..717ca331c5 100644
--- a/model/src/test/java/lcsb/mapviewer/model/map/layout/ColorSchemaTest.java
+++ b/model/src/test/java/lcsb/mapviewer/model/map/layout/ColorSchemaTest.java
@@ -62,8 +62,8 @@ public class ColorSchemaTest {
 			cs.setLineWidth(lineWidth);
 			assertEquals(lineWidth, cs.getLineWidth());
 
-			cs.setReactionIdentifier(reactionIdentifier);
-			assertEquals(reactionIdentifier, cs.getReactionIdentifier());
+			cs.setElementId(reactionIdentifier);
+			assertEquals(reactionIdentifier, cs.getElementId());
 
 			cs.setReverseReaction(reverseReaction);
 			assertEquals(reverseReaction, cs.getReverseReaction());
diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java b/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java
index 3e56dd04c2..7177a69cbe 100644
--- a/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java
@@ -814,7 +814,7 @@ public class LayoutService implements ILayoutService {
       }
       sb.append("\t");
     } else if (column.equals(ColorSchemaColumn.REACTION_IDENTIFIER)) {
-      sb.append(schema.getReactionIdentifier() + "\t");
+      sb.append(schema.getElementId() + "\t");
     } else if (column.equals(ColorSchemaColumn.LINE_WIDTH)) {
       sb.append(schema.getLineWidth() + "\t");
     } else if (column.equals(ColorSchemaColumn.REVERSE_REACTION)) {
@@ -871,7 +871,7 @@ public class LayoutService implements ILayoutService {
       }
       sb.append("\t");
     } else if (column.equals(ColorSchemaColumn.REACTION_IDENTIFIER)) {
-      sb.append(schema.getReactionIdentifier() + "\t");
+      sb.append(schema.getElementId() + "\t");
     } else if (column.equals(ColorSchemaColumn.LINE_WIDTH)) {
       sb.append(schema.getLineWidth() + "\t");
     } else if (column.equals(ColorSchemaColumn.REVERSE_REACTION)) {
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 0176a0da7e..dcdacb20ab 100644
--- a/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaReader.java
+++ b/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaReader.java
@@ -638,12 +638,12 @@ public class ColorSchemaReader {
    * @param schema
    *          {@link ColorSchema} where name should be set
    * @param content
-   *          content of the cell where reaction identifieris stored
+   *          content of the cell where reaction identifiers stored
    */
 
   private void processReactionIdentifier(ColorSchema schema, String content) {
     if (!content.isEmpty()) {
-      schema.setReactionIdentifier(content);
+      schema.setElementId(content);
     }
   }
 
@@ -746,7 +746,7 @@ public class ColorSchemaReader {
       if (schema.getModelName() != null) {
         result.add(ColorSchemaColumn.MODEL_NAME);
       }
-      if (schema.getReactionIdentifier() != null) {
+      if (schema.getElementId() != null) {
         result.add(ColorSchemaColumn.REACTION_IDENTIFIER);
       }
       if (schema.getReverseReaction() != null) {
diff --git a/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaXlsxReader.java b/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaXlsxReader.java
index be39f1a333..b1dc835219 100644
--- a/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaXlsxReader.java
+++ b/service/src/main/java/lcsb/mapviewer/services/utils/ColorSchemaXlsxReader.java
@@ -224,7 +224,7 @@ public class ColorSchemaXlsxReader {
             schema.setColor(colorParser.parse(row.getCell(colorColumn).getStringCellValue()));
           }
           if (reactionIdentifierColumn != null) {
-            schema.setReactionIdentifier(row.getCell(reactionIdentifierColumn).getStringCellValue());
+            schema.setElementId(row.getCell(reactionIdentifierColumn).getStringCellValue());
           }
           if (lineWidthColumn != null) {
             cell = row.getCell(lineWidthColumn);
@@ -271,7 +271,7 @@ public class ColorSchemaXlsxReader {
           }
 
           if (schema.getName() == null && schema.getGeneralIdentifier() == null && foundCustomIdentifiers.size() == 0
-              && schema.getReactionIdentifier() == null) {
+              && schema.getElementId() == null) {
             throw new InvalidColorSchemaException(
                 "One of these columns values is obligatory: name, identifier, reactionIdentifier");
           }
@@ -323,7 +323,7 @@ public class ColorSchemaXlsxReader {
       if (schema.getModelName() != null) {
         result.add(ColorSchemaColumn.MODEL_NAME);
       }
-      if (schema.getReactionIdentifier() != null) {
+      if (schema.getElementId() != null) {
         result.add(ColorSchemaColumn.REACTION_IDENTIFIER);
       }
       if (schema.getReverseReaction() != null) {
diff --git a/service/src/test/java/lcsb/mapviewer/services/AllServicesTests.java b/service/src/test/java/lcsb/mapviewer/services/AllServicesTests.java
index 18f68071be..6b57e86398 100644
--- a/service/src/test/java/lcsb/mapviewer/services/AllServicesTests.java
+++ b/service/src/test/java/lcsb/mapviewer/services/AllServicesTests.java
@@ -12,12 +12,11 @@ import lcsb.mapviewer.services.view.AllViewTests;
 
 @RunWith(Suite.class)
 @SuiteClasses({ AllImplServiceTests.class, //
-		AllOverlayTests.class, //
-		AllSearchTests.class, //
-		AllViewTests.class, //
-		AllUtilsTests.class, //
+    AllOverlayTests.class, //
+    AllSearchTests.class, //
+    AllViewTests.class, //
+    AllUtilsTests.class, //
 })
 public class AllServicesTests {
 
-}
-;
\ No newline at end of file
+};
\ No newline at end of file
diff --git a/service/src/test/java/lcsb/mapviewer/services/impl/LayoutServiceTest2.java b/service/src/test/java/lcsb/mapviewer/services/impl/LayoutServiceTest2.java
index 0d39e9cb6d..1bf9bb3ab4 100644
--- a/service/src/test/java/lcsb/mapviewer/services/impl/LayoutServiceTest2.java
+++ b/service/src/test/java/lcsb/mapviewer/services/impl/LayoutServiceTest2.java
@@ -36,214 +36,215 @@ import lcsb.mapviewer.services.utils.data.ColorSchemaColumn;
 import lcsb.mapviewer.services.utils.data.ColorSchemaType;
 
 public class LayoutServiceTest2 {
-	Logger				 logger					= Logger.getLogger(LayoutServiceTest2.class);
-	ColorExtractor colorExtractor	= new ColorExtractor(Color.RED, Color.GREEN, Color.BLUE);
-
-	@Before
-	public void setUp() throws Exception {
-	}
-
-	@After
-	public void tearDown() throws Exception {
-	}
-
-	@Test
-	public void testValidPreprareTableResultForGeneric() throws Exception {
-		try {
-			class CSR extends ColorSchemaReader {
-				public Collection<ColorSchemaColumn> getSetColorSchemaColumns(Collection<ColorSchema> schemas) {
-					List<ColorSchemaColumn> result = new ArrayList<ColorSchemaColumn>();
-					for (ColorSchemaColumn csc : ColorSchemaColumn.values()) {
-						if (csc.getTypes().contains(ColorSchemaType.GENERIC)) {
-							result.add(csc);
-						}
-					}
-					return result;
-				}
-			}
-			;
-			List<ColorSchema> schemas = new ArrayList<ColorSchema>();
-			ColorSchema cs = new GenericColorSchema();
-			cs.setColor(Color.CYAN);
-			cs.addCompartment("BLA");
-			cs.addIdentifierColumn(new Pair<MiriamType, String>(MiriamType.CAS, "CAS_ID"));
-			cs.setLineWidth(3.3);
-			cs.setMatches(2);
-			cs.setName("UUU");
-			cs.setReactionIdentifier("RE ID");
-			cs.setReverseReaction(true);
-			cs.addType(GenericProtein.class);
-			cs.setValue(1111.1111);
-			schemas.add(cs);
-
-			LayoutService ls = new LayoutService();
-			String result = ls.prepareTableResult(schemas, new CSR());
-			assertNotNull(result);
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-
-	}
-
-	@Test
-	public void testValidPreprareTableResultForGeneVariation() throws Exception {
-		try {
-			class CSR extends ColorSchemaReader {
-				public Collection<ColorSchemaColumn> getSetColorSchemaColumns(Collection<ColorSchema> schemas) {
-					List<ColorSchemaColumn> result = new ArrayList<ColorSchemaColumn>();
-					for (ColorSchemaColumn csc : ColorSchemaColumn.values()) {
-						if (csc.getTypes().contains(ColorSchemaType.GENETIC_VARIANT)) {
-							result.add(csc);
-						}
-					}
-					return result;
-				}
-			}
-			;
-			List<ColorSchema> schemas = new ArrayList<ColorSchema>();
-			GeneVariationColorSchema cs = new GeneVariationColorSchema();
-			cs.setColor(Color.CYAN);
-			cs.addCompartment("BLA");
-			cs.addIdentifierColumn(new Pair<MiriamType, String>(MiriamType.CAS, "CAS_ID"));
-			cs.setLineWidth(3.3);
-			cs.setMatches(2);
-			cs.setName("UUU");
-			cs.setReactionIdentifier("RE ID");
-			cs.setReverseReaction(true);
-			cs.addType(GenericProtein.class);
-			cs.setValue(1111.1111);
-			GeneVariation gv = new GeneVariation();
-			gv.setModifiedDna("C");
-			gv.setContig("chr1");
-			gv.setOriginalDna("T");
-			gv.setPosition(12);
-			gv.setReferenceGenomeType(ReferenceGenomeType.UCSC);
-			gv.setReferenceGenomeVersion("hg19");
-			cs.addGeneVariation(gv);
-			GeneVariation gv2 = new GeneVariation();
-			gv2.setModifiedDna("CC");
-			gv2.setContig("chr2");
-			gv2.setOriginalDna("TT");
-			gv2.setPosition(124);
-			gv2.setReferenceGenomeType(ReferenceGenomeType.UCSC);
-			gv2.setReferenceGenomeVersion("hg18");
-			gv2.addReference(new MiriamData(MiriamType.CHEBI, "XXX"));
-			cs.addGeneVariation(gv2);
-			schemas.add(cs);
-
-			LayoutService ls = new LayoutService();
-			String result = ls.prepareTableResult(schemas, new CSR());
-			assertNotNull(result);
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-
-	}
-
-	@Test
-	public void testEmptyPreprareTableResultForGeneric() throws Exception {
-		try {
-			class CSR extends ColorSchemaReader {
-				public Collection<ColorSchemaColumn> getSetColorSchemaColumns(Collection<ColorSchema> schemas) {
-					List<ColorSchemaColumn> result = new ArrayList<ColorSchemaColumn>();
-					for (ColorSchemaColumn csc : ColorSchemaColumn.values()) {
-						if (csc.getTypes().contains(ColorSchemaType.GENERIC)) {
-							result.add(csc);
-						}
-					}
-					return result;
-				}
-			}
-			;
-			List<ColorSchema> schemas = new ArrayList<ColorSchema>();
-			ColorSchema cs = new GenericColorSchema();
-			schemas.add(cs);
-
-			LayoutService ls = new LayoutService();
-			String result = ls.prepareTableResult(schemas, new CSR());
-			assertNotNull(result);
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-
-	}
-
-	@Test
-	public void testEmptyPreprareTableResultForGeneVariant() throws Exception {
-		try {
-			class CSR extends ColorSchemaReader {
-				public Collection<ColorSchemaColumn> getSetColorSchemaColumns(Collection<ColorSchema> schemas) {
-					List<ColorSchemaColumn> result = new ArrayList<ColorSchemaColumn>();
-					for (ColorSchemaColumn csc : ColorSchemaColumn.values()) {
-						if (csc.getTypes().contains(ColorSchemaType.GENETIC_VARIANT)) {
-							result.add(csc);
-						}
-					}
-					return result;
-				}
-			}
-			;
-			List<ColorSchema> schemas = new ArrayList<ColorSchema>();
-			ColorSchema cs = new GeneVariationColorSchema();
-			schemas.add(cs);
-
-			LayoutService ls = new LayoutService();
-			String result = ls.prepareTableResult(schemas, new CSR());
-			assertNotNull(result);
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-
-	}
-
-	@Test
-	public void testGetLayoutAliasesForInvalidAlias() throws Exception {
-		try {
-
-			Model model = new CellDesignerXmlParser().createModel(new ConverterParams().filename("testFiles/coloring/problematicModel2.xml"));
-
-			FileInputStream fis = new FileInputStream("testFiles/coloring/problematicSchema2.txt");
-			CreateLayoutParams params = new CreateLayoutParams().name("Test").//
-					directory("testDir").//
-					model(model).//
-					colorInputStream(fis).//
-					async(false);
-			ColorSchemaReader reader = new ColorSchemaReader();
-			final Collection<ColorSchema> schemas = reader
-					.readColorSchema(params.getColorInputStream(), TextFileUtils.getHeaderParametersFromFile(params.getColorInputStream()));
-
-			ColorModelCommand command = new ColorModelCommand(model, schemas, colorExtractor);
-			command.execute();
-
-			command.getModifiedElements();
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	@Test
-	public void testSchemaWithCompartments() throws Exception {
-		try {
-			FileInputStream fis = new FileInputStream("testFiles/coloring/schemaWithCompartment.txt");
-			ColorSchemaReader reader = new ColorSchemaReader();
-			final Collection<ColorSchema> schemas = reader.readColorSchema(fis, new HashMap<>());
-			for (ColorSchema colorSchema : schemas) {
-				for (String string : colorSchema.getCompartments()) {
-					assertNotNull(string);
-					assertFalse(string.isEmpty());
-				}
-			}
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
+  Logger logger = Logger.getLogger(LayoutServiceTest2.class);
+  ColorExtractor colorExtractor = new ColorExtractor(Color.RED, Color.GREEN, Color.BLUE);
+
+  @Before
+  public void setUp() throws Exception {
+  }
+
+  @After
+  public void tearDown() throws Exception {
+  }
+
+  @Test
+  public void testValidPreprareTableResultForGeneric() throws Exception {
+    try {
+      class CSR extends ColorSchemaReader {
+        public Collection<ColorSchemaColumn> getSetColorSchemaColumns(Collection<ColorSchema> schemas) {
+          List<ColorSchemaColumn> result = new ArrayList<ColorSchemaColumn>();
+          for (ColorSchemaColumn csc : ColorSchemaColumn.values()) {
+            if (csc.getTypes().contains(ColorSchemaType.GENERIC)) {
+              result.add(csc);
+            }
+          }
+          return result;
+        }
+      }
+      ;
+      List<ColorSchema> schemas = new ArrayList<ColorSchema>();
+      ColorSchema cs = new GenericColorSchema();
+      cs.setColor(Color.CYAN);
+      cs.addCompartment("BLA");
+      cs.addIdentifierColumn(new Pair<MiriamType, String>(MiriamType.CAS, "CAS_ID"));
+      cs.setLineWidth(3.3);
+      cs.setMatches(2);
+      cs.setName("UUU");
+      cs.setElementId("RE ID");
+      cs.setReverseReaction(true);
+      cs.addType(GenericProtein.class);
+      cs.setValue(1111.1111);
+      schemas.add(cs);
+
+      LayoutService ls = new LayoutService();
+      String result = ls.prepareTableResult(schemas, new CSR());
+      assertNotNull(result);
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+
+  }
+
+  @Test
+  public void testValidPreprareTableResultForGeneVariation() throws Exception {
+    try {
+      class CSR extends ColorSchemaReader {
+        public Collection<ColorSchemaColumn> getSetColorSchemaColumns(Collection<ColorSchema> schemas) {
+          List<ColorSchemaColumn> result = new ArrayList<ColorSchemaColumn>();
+          for (ColorSchemaColumn csc : ColorSchemaColumn.values()) {
+            if (csc.getTypes().contains(ColorSchemaType.GENETIC_VARIANT)) {
+              result.add(csc);
+            }
+          }
+          return result;
+        }
+      }
+      ;
+      List<ColorSchema> schemas = new ArrayList<ColorSchema>();
+      GeneVariationColorSchema cs = new GeneVariationColorSchema();
+      cs.setColor(Color.CYAN);
+      cs.addCompartment("BLA");
+      cs.addIdentifierColumn(new Pair<MiriamType, String>(MiriamType.CAS, "CAS_ID"));
+      cs.setLineWidth(3.3);
+      cs.setMatches(2);
+      cs.setName("UUU");
+      cs.setElementId("RE ID");
+      cs.setReverseReaction(true);
+      cs.addType(GenericProtein.class);
+      cs.setValue(1111.1111);
+      GeneVariation gv = new GeneVariation();
+      gv.setModifiedDna("C");
+      gv.setContig("chr1");
+      gv.setOriginalDna("T");
+      gv.setPosition(12);
+      gv.setReferenceGenomeType(ReferenceGenomeType.UCSC);
+      gv.setReferenceGenomeVersion("hg19");
+      cs.addGeneVariation(gv);
+      GeneVariation gv2 = new GeneVariation();
+      gv2.setModifiedDna("CC");
+      gv2.setContig("chr2");
+      gv2.setOriginalDna("TT");
+      gv2.setPosition(124);
+      gv2.setReferenceGenomeType(ReferenceGenomeType.UCSC);
+      gv2.setReferenceGenomeVersion("hg18");
+      gv2.addReference(new MiriamData(MiriamType.CHEBI, "XXX"));
+      cs.addGeneVariation(gv2);
+      schemas.add(cs);
+
+      LayoutService ls = new LayoutService();
+      String result = ls.prepareTableResult(schemas, new CSR());
+      assertNotNull(result);
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+
+  }
+
+  @Test
+  public void testEmptyPreprareTableResultForGeneric() throws Exception {
+    try {
+      class CSR extends ColorSchemaReader {
+        public Collection<ColorSchemaColumn> getSetColorSchemaColumns(Collection<ColorSchema> schemas) {
+          List<ColorSchemaColumn> result = new ArrayList<ColorSchemaColumn>();
+          for (ColorSchemaColumn csc : ColorSchemaColumn.values()) {
+            if (csc.getTypes().contains(ColorSchemaType.GENERIC)) {
+              result.add(csc);
+            }
+          }
+          return result;
+        }
+      }
+      ;
+      List<ColorSchema> schemas = new ArrayList<ColorSchema>();
+      ColorSchema cs = new GenericColorSchema();
+      schemas.add(cs);
+
+      LayoutService ls = new LayoutService();
+      String result = ls.prepareTableResult(schemas, new CSR());
+      assertNotNull(result);
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+
+  }
+
+  @Test
+  public void testEmptyPreprareTableResultForGeneVariant() throws Exception {
+    try {
+      class CSR extends ColorSchemaReader {
+        public Collection<ColorSchemaColumn> getSetColorSchemaColumns(Collection<ColorSchema> schemas) {
+          List<ColorSchemaColumn> result = new ArrayList<ColorSchemaColumn>();
+          for (ColorSchemaColumn csc : ColorSchemaColumn.values()) {
+            if (csc.getTypes().contains(ColorSchemaType.GENETIC_VARIANT)) {
+              result.add(csc);
+            }
+          }
+          return result;
+        }
+      }
+      ;
+      List<ColorSchema> schemas = new ArrayList<ColorSchema>();
+      ColorSchema cs = new GeneVariationColorSchema();
+      schemas.add(cs);
+
+      LayoutService ls = new LayoutService();
+      String result = ls.prepareTableResult(schemas, new CSR());
+      assertNotNull(result);
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+
+  }
+
+  @Test
+  public void testGetLayoutAliasesForInvalidAlias() throws Exception {
+    try {
+
+      Model model = new CellDesignerXmlParser()
+          .createModel(new ConverterParams().filename("testFiles/coloring/problematicModel2.xml"));
+
+      FileInputStream fis = new FileInputStream("testFiles/coloring/problematicSchema2.txt");
+      CreateLayoutParams params = new CreateLayoutParams().name("Test").//
+          directory("testDir").//
+          model(model).//
+          colorInputStream(fis).//
+          async(false);
+      ColorSchemaReader reader = new ColorSchemaReader();
+      final Collection<ColorSchema> schemas = reader.readColorSchema(params.getColorInputStream(),
+          TextFileUtils.getHeaderParametersFromFile(params.getColorInputStream()));
+
+      ColorModelCommand command = new ColorModelCommand(model, schemas, colorExtractor);
+      command.execute();
+
+      command.getModifiedElements();
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  @Test
+  public void testSchemaWithCompartments() throws Exception {
+    try {
+      FileInputStream fis = new FileInputStream("testFiles/coloring/schemaWithCompartment.txt");
+      ColorSchemaReader reader = new ColorSchemaReader();
+      final Collection<ColorSchema> schemas = reader.readColorSchema(fis, new HashMap<>());
+      for (ColorSchema colorSchema : schemas) {
+        for (String string : colorSchema.getCompartments()) {
+          assertNotNull(string);
+          assertFalse(string.isEmpty());
+        }
+      }
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
 
 }
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 6b90443325..d5cc32a208 100644
--- a/service/src/test/java/lcsb/mapviewer/services/utils/ColorSchemaReaderTest.java
+++ b/service/src/test/java/lcsb/mapviewer/services/utils/ColorSchemaReaderTest.java
@@ -200,7 +200,7 @@ public class ColorSchemaReaderTest extends ServiceTestFunctions {
       Collection<ColorSchema> collection = reader.readColorSchema("testFiles/coloring/reactionSchema.txt");
       assertEquals(1, collection.size());
       ColorSchema schema = collection.iterator().next();
-      assertEquals("re1", schema.getReactionIdentifier());
+      assertEquals("re1", schema.getElementId());
       assertEquals(3.0, schema.getLineWidth(), EPSILON);
       assertEquals(Color.RED, schema.getColor());
     } catch (Exception e) {
diff --git a/service/src/test/java/lcsb/mapviewer/services/utils/ColorSchemaReaderXlsTest.java b/service/src/test/java/lcsb/mapviewer/services/utils/ColorSchemaReaderXlsTest.java
index 0c14891425..bcca8eab38 100644
--- a/service/src/test/java/lcsb/mapviewer/services/utils/ColorSchemaReaderXlsTest.java
+++ b/service/src/test/java/lcsb/mapviewer/services/utils/ColorSchemaReaderXlsTest.java
@@ -107,7 +107,7 @@ public class ColorSchemaReaderXlsTest extends ServiceTestFunctions {
 			Collection<ColorSchema> collection = reader.readColorSchema("testFiles/coloring/coloring.xls", "reactionSchema");
 			assertEquals(1, collection.size());
 			ColorSchema schema = collection.iterator().next();
-			assertEquals("re1", schema.getReactionIdentifier());
+			assertEquals("re1", schema.getElementId());
 			assertEquals(3.0, schema.getLineWidth(), EPSILON);
 			assertEquals(Color.RED, schema.getColor());
 		} catch (Exception e) {
diff --git a/service/src/test/java/lcsb/mapviewer/services/utils/ColorSchemaReaderXlsxTest.java b/service/src/test/java/lcsb/mapviewer/services/utils/ColorSchemaReaderXlsxTest.java
index 05bec4e138..e80d01d43b 100644
--- a/service/src/test/java/lcsb/mapviewer/services/utils/ColorSchemaReaderXlsxTest.java
+++ b/service/src/test/java/lcsb/mapviewer/services/utils/ColorSchemaReaderXlsxTest.java
@@ -107,7 +107,7 @@ public class ColorSchemaReaderXlsxTest extends ServiceTestFunctions {
 			Collection<ColorSchema> collection = reader.readColorSchema("testFiles/coloring/coloring.xlsx", "reactionSchema");
 			assertEquals(1, collection.size());
 			ColorSchema schema = collection.iterator().next();
-			assertEquals("re1", schema.getReactionIdentifier());
+			assertEquals("re1", schema.getElementId());
 			assertEquals(3.0, schema.getLineWidth(), EPSILON);
 			assertEquals(Color.RED, schema.getColor());
 		} catch (Exception e) {
-- 
GitLab