Skip to content
Snippets Groups Projects
Commit 0784c6fd authored by MANSOUR Chadi's avatar MANSOUR Chadi
Browse files

added all classes and is working correctly

parent ff43402b
Branches
No related tags found
No related merge requests found
Pipeline #35564 failed
......@@ -20,7 +20,7 @@ dependencies {
testImplementation 'org.hamcrest:hamcrest-library:1.3'
}
mainClassName = "state.App"
mainClassName = "serializer.App"
test {
......
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);
}
}
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);
}
}
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;
}
}
}
package serializer;
import shape.Shape;
public interface ShapeSerializer<S extends Shape> {
String code();
String serialize(S shape);
S unserialize(String s);
}
package serializer;
import shape.Circle;
import shape.Rectangle;
public interface ShapeVisitor {
void visit(Circle circle);
void visit(Rectangle rectangle);
}
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());
}
}
......@@ -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;
}
}
......@@ -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;
}
}
......@@ -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);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment