From 41f41c8252942f733f543f945fdee082645e6d1a Mon Sep 17 00:00:00 2001
From: "guyslain.naves" <guyslain.naves@lis-lab.fr>
Date: Mon, 10 Oct 2022 16:25:20 +0200
Subject: [PATCH] refactored package name, improved App

---
 src/main/java/com/univamu/App.java            |  8 -----
 src/main/java/com/univamu/svg/Tag.java        |  5 ---
 src/main/java/fr/univamu/App.java             | 31 +++++++++++++++++++
 src/main/java/fr/univamu/Shapes.java          | 18 +++++++++++
 .../univamu/svg/SvgAttribute.java}            | 24 +++++++-------
 .../univamu/svg/SvgElement.java}              | 18 +++++------
 src/main/java/fr/univamu/svg/Tag.java         |  5 +++
 7 files changed, 75 insertions(+), 34 deletions(-)
 delete mode 100644 src/main/java/com/univamu/App.java
 delete mode 100644 src/main/java/com/univamu/svg/Tag.java
 create mode 100644 src/main/java/fr/univamu/App.java
 create mode 100644 src/main/java/fr/univamu/Shapes.java
 rename src/main/java/{com/univamu/svg/Attribute.java => fr/univamu/svg/SvgAttribute.java} (51%)
 rename src/main/java/{com/univamu/svg/Node.java => fr/univamu/svg/SvgElement.java} (75%)
 create mode 100644 src/main/java/fr/univamu/svg/Tag.java

diff --git a/src/main/java/com/univamu/App.java b/src/main/java/com/univamu/App.java
deleted file mode 100644
index 2bba92f..0000000
--- a/src/main/java/com/univamu/App.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.univamu;
-
-public class App {
-
-  public static void main(String[] args) {
-
-  }
-}
diff --git a/src/main/java/com/univamu/svg/Tag.java b/src/main/java/com/univamu/svg/Tag.java
deleted file mode 100644
index 17344ba..0000000
--- a/src/main/java/com/univamu/svg/Tag.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.univamu.svg;
-
-public record Tag(String name, String stringValue) implements Attribute {
-
-}
diff --git a/src/main/java/fr/univamu/App.java b/src/main/java/fr/univamu/App.java
new file mode 100644
index 0000000..34dbeff
--- /dev/null
+++ b/src/main/java/fr/univamu/App.java
@@ -0,0 +1,31 @@
+package fr.univamu;
+
+import fr.univamu.geo.Shape;
+import fr.univamu.svg.SvgElement;
+
+import java.io.FileNotFoundException;
+
+import static fr.univamu.svg.SvgAttribute.tag;
+
+public class App {
+
+  public static SvgElement makeSvg(Shape shape) {
+    return new SvgElement("svg")
+        .add(tag("viewBox","-10 -10 20 20"))
+        .add(tag("xmlns","http://www.w3.org/2000/svg"))
+        .add(shape.toSvg());
+  }
+
+  public static void write(Shape shape, String filepath) throws FileNotFoundException {
+    makeSvg(shape)
+//        .add(tag("stroke","black"))
+//        .add(tag("stroke-width",0.03))
+//        .add(tag("fill","lightgray"))
+        .toFile(filepath);
+
+  }
+
+  public static void main(String[] args) throws FileNotFoundException {
+    // write(new Circle(1),"out/circle.svg");
+  }
+}
diff --git a/src/main/java/fr/univamu/Shapes.java b/src/main/java/fr/univamu/Shapes.java
new file mode 100644
index 0000000..70431cb
--- /dev/null
+++ b/src/main/java/fr/univamu/Shapes.java
@@ -0,0 +1,18 @@
+package fr.univamu;
+
+import fr.univamu.geo.Shape;
+import fr.univamu.geo.Star;
+import fr.univamu.geo.Union;
+
+import java.util.List;
+
+public class Shapes {
+
+  public static Shape stars() {
+    return new Union(List.of(
+        new Star(5,2).scale(1.5),
+        new Star(9,2).scale(1.5).translate(-4,0),
+        new Star(9,4).scale(1.5).translate(4,0)
+    ));
+  }
+}
diff --git a/src/main/java/com/univamu/svg/Attribute.java b/src/main/java/fr/univamu/svg/SvgAttribute.java
similarity index 51%
rename from src/main/java/com/univamu/svg/Attribute.java
rename to src/main/java/fr/univamu/svg/SvgAttribute.java
index f9ecd5e..170b94a 100644
--- a/src/main/java/com/univamu/svg/Attribute.java
+++ b/src/main/java/fr/univamu/svg/SvgAttribute.java
@@ -1,6 +1,6 @@
-package com.univamu.svg;
+package fr.univamu.svg;
 
-public interface Attribute {
+public interface SvgAttribute {
 
   String name();
   String stringValue();
@@ -9,36 +9,36 @@ public interface Attribute {
     return name() + "=\"" + stringValue() + "\"";
   }
 
-  static Attribute tag(String name, String value) {
+  static SvgAttribute tag(String name, String value) {
     return new Tag(name, value);
   }
 
-  static Attribute tag(String name, double value) {
+  static SvgAttribute tag(String name, double value) {
     return new Tag(name, String.valueOf(value));
   }
-  static Attribute tag(String name, int value) {
+  static SvgAttribute tag(String name, int value) {
     return new Tag(name, String.valueOf(value));
   }
-  static Attribute tag(String name, boolean value) {
+  static SvgAttribute tag(String name, boolean value) {
     return new Tag(name, String.valueOf(value));
   }
-  static Attribute tag(String name, float value) {
+  static SvgAttribute tag(String name, float value) {
     return new Tag(name, String.valueOf(value));
   }
-  static Attribute tag(String name, long value) {
+  static SvgAttribute tag(String name, long value) {
     return new Tag(name, String.valueOf(value));
   }
-  static Attribute tag(String name, char value) {
+  static SvgAttribute tag(String name, char value) {
     return new Tag(name, String.valueOf(value));
   }
-  static Attribute tag(String name, short value) {
+  static SvgAttribute tag(String name, short value) {
     return new Tag(name, String.valueOf(value));
   }
-  static Attribute tag(String name, byte value) {
+  static SvgAttribute tag(String name, byte value) {
     return new Tag(name, String.valueOf(value));
   }
 
-  static Attribute tag(String name, Object value) {
+  static SvgAttribute tag(String name, Object value) {
     return new Tag(name, value.toString());
   }
 }
diff --git a/src/main/java/com/univamu/svg/Node.java b/src/main/java/fr/univamu/svg/SvgElement.java
similarity index 75%
rename from src/main/java/com/univamu/svg/Node.java
rename to src/main/java/fr/univamu/svg/SvgElement.java
index 4e45ecf..1ff6dfb 100644
--- a/src/main/java/com/univamu/svg/Node.java
+++ b/src/main/java/fr/univamu/svg/SvgElement.java
@@ -1,4 +1,4 @@
-package com.univamu.svg;
+package fr.univamu.svg;
 
 import java.io.FileNotFoundException;
 import java.io.PrintStream;
@@ -7,27 +7,27 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-public class Node {
+public class SvgElement {
 
   private final String name;
-  private final Map<String, Attribute> attributes = new HashMap<>();
-  private final List<Node> children = new ArrayList<>();
+  private final Map<String, SvgAttribute> attributes = new HashMap<>();
+  private final List<SvgElement> children = new ArrayList<>();
 
-  public Node(String name) {
+  public SvgElement(String name) {
     this.name = name;
   }
 
-  public Node add(Attribute attribute) {
+  public SvgElement add(SvgAttribute attribute) {
     attributes.put(attribute.name(),attribute);
     return this; // allows chaining of adds
   }
 
-  public List<Node> children() {
+  public List<SvgElement> children() {
     return children;
   }
 
-  public Node add(Node node) {
-    this.children.add(node);
+  public SvgElement add(SvgElement svgElement) {
+    this.children.add(svgElement);
     return this; // allows chaining of adds
   }
 
diff --git a/src/main/java/fr/univamu/svg/Tag.java b/src/main/java/fr/univamu/svg/Tag.java
new file mode 100644
index 0000000..b9da3e0
--- /dev/null
+++ b/src/main/java/fr/univamu/svg/Tag.java
@@ -0,0 +1,5 @@
+package fr.univamu.svg;
+
+public record Tag(String name, String stringValue) implements SvgAttribute {
+
+}
-- 
GitLab