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
No related branches found
No related tags found
No related merge requests found
Pipeline #35564 failed
...@@ -20,7 +20,7 @@ dependencies { ...@@ -20,7 +20,7 @@ dependencies {
testImplementation 'org.hamcrest:hamcrest-library:1.3' testImplementation 'org.hamcrest:hamcrest-library:1.3'
} }
mainClassName = "state.App" mainClassName = "serializer.App"
test { 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; package serializer;
import shape.Circle;
import shape.Shape; import shape.Shape;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
public class ShapeReader { 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 { public static List<Shape> read(File file) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new FileReader(file)); List<Shape> shapes = new ArrayList<>();
/*for(String line : bufferedReader.lines().toList()) { try(BufferedReader bufferedReader = new BufferedReader(new FileReader(file))) {
System.out.println(line); String line ;
}*/ while ((line = bufferedReader.readLine()) != null) {
return 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; package serializer;
import shape.Circle;
import shape.Rectangle;
import shape.Shape; import shape.Shape;
import java.io.File; import java.io.File;
...@@ -7,9 +9,31 @@ import java.io.IOException; ...@@ -7,9 +9,31 @@ import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.List; 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 { public static void write (File file, List<Shape> shapes) throws IOException {
PrintWriter printWriter = new PrintWriter(file); try(PrintWriter printWriter = new PrintWriter(file)){
printWriter.println("Coucou"); 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; ...@@ -2,6 +2,7 @@ package shape;
import javafx.scene.canvas.GraphicsContext; import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import serializer.ShapeVisitor;
public class Circle implements Shape { public class Circle implements Shape {
...@@ -45,6 +46,11 @@ public class Circle implements Shape { ...@@ -45,6 +46,11 @@ public class Circle implements Shape {
return isFinished; return isFinished;
} }
@Override
public void accept(ShapeVisitor visitor) {
visitor.visit(this);
}
public void setX(double x) { public void setX(double x) {
this.x = x; this.x = x;
} }
...@@ -75,4 +81,7 @@ public class Circle implements Shape { ...@@ -75,4 +81,7 @@ public class Circle implements Shape {
this.radius = width/2; this.radius = width/2;
} }
public double getRadius() {
return radius;
}
} }
...@@ -3,6 +3,7 @@ package shape; ...@@ -3,6 +3,7 @@ package shape;
import javafx.geometry.Point2D; import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext; import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import serializer.ShapeVisitor;
public class Rectangle implements Shape{ public class Rectangle implements Shape{
...@@ -47,6 +48,11 @@ public class Rectangle implements Shape{ ...@@ -47,6 +48,11 @@ public class Rectangle implements Shape{
return isFinished; return isFinished;
} }
@Override
public void accept(ShapeVisitor visitor) {
visitor.visit(this);
}
public void updateSize(double newX, double newY) { public void updateSize(double newX, double newY) {
this.width = Math.abs(newX - this.x); this.width = Math.abs(newX - this.x);
...@@ -85,4 +91,12 @@ public class Rectangle implements Shape{ ...@@ -85,4 +91,12 @@ public class Rectangle implements Shape{
if(width < 0 ){ this.x += width;} if(width < 0 ){ this.x += width;}
if(height < 0){ this.y += height;} if(height < 0){ this.y += height;}
} }
public double getWidth() {
return width;
}
public double getHeight() {
return height;
}
} }
...@@ -3,10 +3,12 @@ package shape; ...@@ -3,10 +3,12 @@ package shape;
import javafx.geometry.Point2D; import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext; import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import serializer.ShapeVisitor;
public interface Shape { public interface Shape {
void paint(GraphicsContext graphicsContext); void paint(GraphicsContext graphicsContext);
boolean contains(double x, double y); boolean contains(double x, double y);
void translate(double dx, double dy); void translate(double dx, double dy);
boolean isFinished(); 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