Newer
Older
import shape.Circle;
import shape.Rectangle;
import shape.Shape;
import java.io.File;
import java.io.IOException;
public class ShapeWriter implements ShapeVisitor {
private PrintWriter printWriter;
private static final Map<Class<? extends Shape>, ShapeSerializer<? extends Shape>> serializers = new HashMap<>();
static {
serializers.put(Circle.class, new CircleSerializer());
serializers.put(Rectangle.class, new RectangleSerializer());
}
public ShapeWriter(PrintWriter printWriter) {
this.printWriter = printWriter;
}
public static void write (File file, Iterable<Shape> shapes) throws IOException {
try(PrintWriter printWriter = new PrintWriter(file)){
ShapeWriter shapeWriter = new ShapeWriter(printWriter);
for (Shape shape : shapes) {
shape.accept(shapeWriter);
}
}
}
@Override
public void visit(Circle circle) {
ShapeSerializer<Circle> serializer = (ShapeSerializer<Circle>) serializers.get(Circle.class);
if (serializer != null) {
String serializedData = serializer.serialize(circle);
printWriter.println(serializedData);
} else {
throw new IllegalArgumentException("No serializer found for Circle");
}
}
@Override
public void visit(Rectangle rectangle) {
ShapeSerializer<Rectangle> serializer = (ShapeSerializer<Rectangle>) serializers.get(Rectangle.class);
if (serializer != null) {
String serializedData = serializer.serialize(rectangle);
printWriter.println(serializedData);
} else {
throw new IllegalArgumentException("No serializer found for Rectangle");
}