From a933265b87db4286b52c42a697c48da3d380f748 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 25 Oct 2019 15:31:22 +0200
Subject: [PATCH] border color is considered when creating/exporting pathways

---
 .../model/celldesigner/LayerXmlParser.java    | 33 ++++++++++++++++---
 .../celldesigner/LayerXmlParserTest.java      |  2 ++
 .../commands/CreateHierarchyCommand.java      |  1 +
 3 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/LayerXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/LayerXmlParser.java
index a72a5d3780..a0a0459c99 100644
--- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/LayerXmlParser.java
+++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/LayerXmlParser.java
@@ -1,9 +1,8 @@
 package lcsb.mapviewer.converter.model.celldesigner;
 
-import java.awt.*;
+import java.awt.Color;
 import java.awt.geom.Point2D;
 import java.util.*;
-import java.util.List;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -502,6 +501,11 @@ public class LayerXmlParser {
             result.setBackgroundColor(backgroundColor);
             notes = removeBackgroundColor(notes);
           }
+          Color borderColor = extractBorderColor(notes);
+          if (borderColor != null) {
+            result.setBorderColor(borderColor);
+            notes = removeBorderColor(notes);
+          }
           result.setNotes(notes);
         } else if (node.getNodeName().equalsIgnoreCase("celldesigner:paint")) {
           result.setColor(commonParser.getColor(node));
@@ -523,10 +527,18 @@ public class LayerXmlParser {
   }
 
   String removeBackgroundColor(String notes) {
+    return removeColor(notes, "BackgroundColor");
+  }
+
+  String removeBorderColor(String notes) {
+    return removeColor(notes, "BorderColor");
+  }
+
+  private String removeColor(String notes, String string) {
     String lines[] = notes.split("[\n\r]+");
     StringBuilder result = new StringBuilder("");
     for (String line : lines) {
-      if (!line.startsWith("BackgroundColor=") && !line.startsWith("BackgroundColor:")) {
+      if (!line.startsWith(string + "=") && !line.startsWith(string + ":")) {
         result.append(line + "\n");
       }
     }
@@ -534,10 +546,18 @@ public class LayerXmlParser {
   }
 
   Color extractBackgroundColor(String notes) {
+    return extractColor(notes, "BackgroundColor");
+  }
+
+  Color extractBorderColor(String notes) {
+    return extractColor(notes, "BorderColor");
+  }
+
+  private Color extractColor(String notes, String string) {
     String lines[] = notes.split("[\n\r]+");
     for (String line : lines) {
-      if (line.startsWith("BackgroundColor=") ||line.startsWith("BackgroundColor:")) {
-        String colorString = line.replace("BackgroundColor=", "").replace("BackgroundColor:", "");
+      if (line.startsWith(string + "=") || line.startsWith(string + ":")) {
+        String colorString = line.replace(string + "=", "").replace(string + ":", "");
         return new ColorParser().parse(colorString);
       }
     }
@@ -562,6 +582,9 @@ public class LayerXmlParser {
     if (!layer.getBackgroundColor().equals(Color.LIGHT_GRAY)) {
       notes += "\nBackgroundColor:" + new ColorParser().colorToHtml(layer.getBackgroundColor());
     }
+    if (!layer.getBorderColor().equals(Color.LIGHT_GRAY)) {
+      notes += "\nBorderColor:" + new ColorParser().colorToHtml(layer.getBorderColor());
+    }
     result.append(notes);
     result.append("\n</celldesigner:layerNotes>");
     result.append("<celldesigner:paint color=\"" + XmlParser.colorToString(layer.getColor()) + "\"/>");
diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/LayerXmlParserTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/LayerXmlParserTest.java
index 8f943b08cc..d91b77fc09 100644
--- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/LayerXmlParserTest.java
+++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/LayerXmlParserTest.java
@@ -326,8 +326,10 @@ public class LayerXmlParserTest extends CellDesignerTestFunctions {
   public void testLayerTextToXmlWithCustomDefaultBackgroundColor() throws Exception {
     LayerText text = new LayerText();
     text.setBackgroundColor(Color.BLUE);
+    text.setBorderColor(Color.YELLOW);
     String xml = parser.layerTextToXml(text);
     assertTrue(xml.contains("BackgroundColor"));
+    assertTrue(xml.contains("BorderColor"));
   }
 
 }
diff --git a/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java b/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java
index 7170fbbaf8..a7ccbb23a0 100644
--- a/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java
+++ b/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java
@@ -169,6 +169,7 @@ public class CreateHierarchyCommand extends ModelCommand {
         compartment.setHeight(text.getHeight());
         compartment.setFontColor(text.getColor());
         compartment.setFillColor(text.getBackgroundColor());
+        compartment.setBorderColor(text.getBorderColor());
         compartment.setName(extractNameFromText(text.getNotes()));
         compartment.setNotes(extractNotesFromText(text.getNotes()));
         compartment.setZ(text.getZ());
-- 
GitLab