From 0784c6fd276be450d7a66c2a189480c49ebd2676 Mon Sep 17 00:00:00 2001 From: m19023837 <chadi.mansour@etu.univ-amu.fr> Date: Fri, 18 Oct 2024 11:24:27 +0200 Subject: [PATCH] added all classes and is working correctly --- build.gradle | 2 +- .../java/serializer/CircleSerializer.java | 24 ++++++++++++++ .../java/serializer/RectangleSerializer.java | 25 +++++++++++++++ src/main/java/serializer/ShapeReader.java | 31 ++++++++++++++++--- src/main/java/serializer/ShapeSerializer.java | 9 ++++++ src/main/java/serializer/ShapeVisitor.java | 10 ++++++ src/main/java/serializer/ShapeWriter.java | 30 ++++++++++++++++-- src/main/java/shape/Circle.java | 9 ++++++ src/main/java/shape/Rectangle.java | 14 +++++++++ src/main/java/shape/Shape.java | 2 ++ 10 files changed, 147 insertions(+), 9 deletions(-) create mode 100644 src/main/java/serializer/CircleSerializer.java create mode 100644 src/main/java/serializer/RectangleSerializer.java create mode 100644 src/main/java/serializer/ShapeSerializer.java create mode 100644 src/main/java/serializer/ShapeVisitor.java diff --git a/build.gradle b/build.gradle index de962db..1234c51 100644 --- a/build.gradle +++ b/build.gradle @@ -20,7 +20,7 @@ dependencies { testImplementation 'org.hamcrest:hamcrest-library:1.3' } -mainClassName = "state.App" +mainClassName = "serializer.App" test { diff --git a/src/main/java/serializer/CircleSerializer.java b/src/main/java/serializer/CircleSerializer.java new file mode 100644 index 0000000..f507696 --- /dev/null +++ b/src/main/java/serializer/CircleSerializer.java @@ -0,0 +1,24 @@ +package serializer; + +import shape.Circle; + +public class CircleSerializer implements ShapeSerializer<Circle> { + @Override + public String code() { + return "Circle"; + } + + @Override + public String serialize(Circle shape) { + return String.format("%f %f %f", shape.getX(), shape.getY(), shape.getRadius()); + } + + @Override + public Circle unserialize(String s) { + String[] split = s.split(" "); + double x = Double.parseDouble(split[0]); + double y = Double.parseDouble(split[1]); + double radius = Double.parseDouble(split[2]); + return new Circle(x, y, radius); + } +} diff --git a/src/main/java/serializer/RectangleSerializer.java b/src/main/java/serializer/RectangleSerializer.java new file mode 100644 index 0000000..de8c663 --- /dev/null +++ b/src/main/java/serializer/RectangleSerializer.java @@ -0,0 +1,25 @@ +package serializer; + +import shape.Rectangle; + +public class RectangleSerializer implements ShapeSerializer<Rectangle> { + @Override + public String code() { + return "Rectangle"; + } + + @Override + public String serialize(Rectangle shape) { + return String.format("%f %f %f %f", shape.getX(), shape.getY(), shape.getWidth(), shape.getHeight()); + } + + @Override + public Rectangle unserialize(String s) { + String[] split = s.split(" "); + double x = Double.parseDouble(split[0]); + double y = Double.parseDouble(split[1]); + double width = Double.parseDouble(split[2]); + double height = Double.parseDouble(split[3]); + return new Rectangle(x, y, width, height); + } +} diff --git a/src/main/java/serializer/ShapeReader.java b/src/main/java/serializer/ShapeReader.java index 54540cc..d01759c 100644 --- a/src/main/java/serializer/ShapeReader.java +++ b/src/main/java/serializer/ShapeReader.java @@ -1,19 +1,40 @@ package serializer; +import shape.Circle; import shape.Shape; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class ShapeReader { + + private static final Map<String, ShapeSerializer<?>> serializers = new HashMap<>(); + + static { + serializers.put("circle", new CircleSerializer()); + serializers.put("rectangle", new RectangleSerializer()); + } public static List<Shape> read(File file) throws IOException { - BufferedReader bufferedReader = new BufferedReader(new FileReader(file)); - /*for(String line : bufferedReader.lines().toList()) { - System.out.println(line); - }*/ - return null; + List<Shape> shapes = new ArrayList<>(); + try(BufferedReader bufferedReader = new BufferedReader(new FileReader(file))) { + String line ; + while ((line = bufferedReader.readLine()) != null) { + String[] parts = line.split(" ",2); + String code = parts[0]; + String data = parts[1]; + ShapeSerializer<?> serializer = serializers.get(code); + if (serializer != null) { + Shape shape = serializer.unserialize(data); + shapes.add(shape); + } + } + return shapes; + } } } diff --git a/src/main/java/serializer/ShapeSerializer.java b/src/main/java/serializer/ShapeSerializer.java new file mode 100644 index 0000000..fe6fc76 --- /dev/null +++ b/src/main/java/serializer/ShapeSerializer.java @@ -0,0 +1,9 @@ +package serializer; + +import shape.Shape; + +public interface ShapeSerializer<S extends Shape> { + String code(); + String serialize(S shape); + S unserialize(String s); +} diff --git a/src/main/java/serializer/ShapeVisitor.java b/src/main/java/serializer/ShapeVisitor.java new file mode 100644 index 0000000..c5266b5 --- /dev/null +++ b/src/main/java/serializer/ShapeVisitor.java @@ -0,0 +1,10 @@ +package serializer; + +import shape.Circle; +import shape.Rectangle; + + +public interface ShapeVisitor { + void visit(Circle circle); + void visit(Rectangle rectangle); +} diff --git a/src/main/java/serializer/ShapeWriter.java b/src/main/java/serializer/ShapeWriter.java index 6a76ef8..b5c4856 100644 --- a/src/main/java/serializer/ShapeWriter.java +++ b/src/main/java/serializer/ShapeWriter.java @@ -1,5 +1,7 @@ package serializer; +import shape.Circle; +import shape.Rectangle; import shape.Shape; import java.io.File; @@ -7,9 +9,31 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.List; -public class ShapeWriter { +public class ShapeWriter implements ShapeVisitor { + + private PrintWriter printWriter; + + public ShapeWriter(PrintWriter printWriter) { + this.printWriter = printWriter; + } + public static void write (File file, List<Shape> shapes) throws IOException { - PrintWriter printWriter = new PrintWriter(file); - printWriter.println("Coucou"); + try(PrintWriter printWriter = new PrintWriter(file)){ + ShapeWriter shapeWriter = new ShapeWriter(printWriter); + + for (Shape shape : shapes) { + shape.accept(shapeWriter); + } + } + } + + @Override + public void visit(Circle circle) { + printWriter.printf("Circle %f %f %f%n", circle.getX(), circle.getY(), circle.getRadius()); + } + + @Override + public void visit(Rectangle rectangle) { + printWriter.printf("Rectangle %f %f %f %f%n", rectangle.getX(), rectangle.getY(), rectangle.getWidth() ,rectangle.getHeight()); } } diff --git a/src/main/java/shape/Circle.java b/src/main/java/shape/Circle.java index e543fbe..d5b8ec6 100644 --- a/src/main/java/shape/Circle.java +++ b/src/main/java/shape/Circle.java @@ -2,6 +2,7 @@ package shape; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; +import serializer.ShapeVisitor; public class Circle implements Shape { @@ -45,6 +46,11 @@ public class Circle implements Shape { return isFinished; } + @Override + public void accept(ShapeVisitor visitor) { + visitor.visit(this); + } + public void setX(double x) { this.x = x; } @@ -75,4 +81,7 @@ public class Circle implements Shape { this.radius = width/2; } + public double getRadius() { + return radius; + } } diff --git a/src/main/java/shape/Rectangle.java b/src/main/java/shape/Rectangle.java index 97ac381..eec8077 100644 --- a/src/main/java/shape/Rectangle.java +++ b/src/main/java/shape/Rectangle.java @@ -3,6 +3,7 @@ package shape; import javafx.geometry.Point2D; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; +import serializer.ShapeVisitor; public class Rectangle implements Shape{ @@ -47,6 +48,11 @@ public class Rectangle implements Shape{ return isFinished; } + @Override + public void accept(ShapeVisitor visitor) { + visitor.visit(this); + } + public void updateSize(double newX, double newY) { this.width = Math.abs(newX - this.x); @@ -85,4 +91,12 @@ public class Rectangle implements Shape{ if(width < 0 ){ this.x += width;} if(height < 0){ this.y += height;} } + + public double getWidth() { + return width; + } + + public double getHeight() { + return height; + } } diff --git a/src/main/java/shape/Shape.java b/src/main/java/shape/Shape.java index 98f44a7..6b0bdb2 100644 --- a/src/main/java/shape/Shape.java +++ b/src/main/java/shape/Shape.java @@ -3,10 +3,12 @@ package shape; import javafx.geometry.Point2D; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; +import serializer.ShapeVisitor; public interface Shape { void paint(GraphicsContext graphicsContext); boolean contains(double x, double y); void translate(double dx, double dy); boolean isFinished(); + void accept(ShapeVisitor visitor); } -- GitLab