From 2ca20f49d73ba5364e6a0ab3eeee7c83b49a6790 Mon Sep 17 00:00:00 2001
From: apvrille <ludovic.apvrille@eurecom.fr>
Date: Wed, 20 Jun 2018 15:39:04 +0200
Subject: [PATCH] Improving SVG generator

---
 src/main/java/myutil/SVGGeneration.java       | 29 +++++++++++++++----
 src/main/java/ui/TDiagramPanel.java           | 12 ++++----
 .../JFrameAvatarInteractiveSimulation.java    |  2 +-
 3 files changed, 30 insertions(+), 13 deletions(-)

diff --git a/src/main/java/myutil/SVGGeneration.java b/src/main/java/myutil/SVGGeneration.java
index 4aae75ad0f..592ce91cb4 100644
--- a/src/main/java/myutil/SVGGeneration.java
+++ b/src/main/java/myutil/SVGGeneration.java
@@ -53,6 +53,7 @@ import java.io.OutputStreamWriter;
 import java.io.Writer;
 
 import javax.swing.*;
+import java.io.*;
 
 /**
    * Class SVGGeneration
@@ -68,8 +69,8 @@ public class SVGGeneration  {
 
     }
 
-    public void saveInSVG(JPanel panel, String fileName) {
-        TraceManager.addDev("New SVG save in " + fileName);
+
+    public SVGGraphics2D getSVGGenerator(JPanel panel) {
         // Get a DOMImplementation.
         DOMImplementation domImpl =
                 GenericDOMImplementation.getDOMImplementation();
@@ -83,11 +84,12 @@ public class SVGGeneration  {
 
         // Ask the test to render into the SVG Graphics2D implementation.
         panel.paint(svgGenerator);
-        /*TestSVGGen test = new TestSVGGen();
-        test.paint(svgGenerator);*/
 
-        // Finally, stream out SVG to the standard output using
-        // UTF-8 encoding.
+        return svgGenerator;
+    }
+
+    public void saveInSVG(JPanel panel, String fileName) {
+        SVGGraphics2D svgGenerator = getSVGGenerator(panel);
         boolean useCSS = true; // we want to use CSS style attributes
         try {
             File fileSave = new File(fileName);
@@ -99,5 +101,20 @@ public class SVGGeneration  {
         }
     }
 
+    public String getSVGString(JPanel panel) {
+        SVGGraphics2D svgGenerator = getSVGGenerator(panel);
+
+        boolean useCSS = true; // we want to use CSS style attributes
+        try {
+            StringWriter ouS = new StringWriter();
+            svgGenerator.stream(ouS, useCSS);
+            String tmp = ouS.toString();
+            return tmp;
+        } catch (Exception e) {
+            TraceManager.addDev("SVG generation failed: " + e.getMessage());
+            return null;
+        }
+    }
+
 
 }
diff --git a/src/main/java/ui/TDiagramPanel.java b/src/main/java/ui/TDiagramPanel.java
index e6db003c23..2a3a47b09a 100755
--- a/src/main/java/ui/TDiagramPanel.java
+++ b/src/main/java/ui/TDiagramPanel.java
@@ -38,10 +38,7 @@
 
 package ui;
 
-import myutil.GenericTree;
-import myutil.GraphicLib;
-import myutil.SVGGraphics;
-import myutil.TraceManager;
+import myutil.*;
 import ui.atd.ATDAttack;
 import ui.atd.ATDBlock;
 import ui.avatarad.AvatarADActivity;
@@ -3576,7 +3573,7 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree {
         h = Math.min(h, getHeight() - y);
 
 
-        StringBuffer sb = new StringBuffer("<?xml version=\"1.0\" standalone=\"no\"?>\n");
+        /*StringBuffer sb = new StringBuffer("<?xml version=\"1.0\" standalone=\"no\"?>\n");
         sb.append("<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n");
         //sb.append(" width=\"" + (w+x) + "\" height=\"" + (h+y) + "\" viewbox=\"" + x + " " + y + " " + w + " " + h + "\">\n");
         sb.append("<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\"");
@@ -3597,7 +3594,10 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree {
 
         sb.append("</svg>");
 
-        return sb.toString();
+        return sb.toString();*/
+
+        SVGGeneration gen = new SVGGeneration();
+        return gen.getSVGString(this);
     }
 
     public String oldSvgCapture() {
diff --git a/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java b/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java
index 91c2ac43c2..864ac4729a 100755
--- a/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java
+++ b/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java
@@ -1902,7 +1902,7 @@ public class JFrameAvatarInteractiveSimulation extends JFrame implements AvatarS
 
         // Ask the test to render into the SVG Graphics2D implementation.
         sdpanel.paint(svgGenerator);
-        
+
 
         // Finally, stream out SVG to the standard output using
         // UTF-8 encoding.
-- 
GitLab