Skip to content
Snippets Groups Projects
ShapeWriter.java 1.83 KiB
Newer Older
  • Learn to ignore specific revisions
  • BasileCouetoux's avatar
    BasileCouetoux committed
    package serializer;
    
    
    import shape.Circle;
    import shape.Rectangle;
    
    BasileCouetoux's avatar
    BasileCouetoux committed
    import shape.Shape;
    
    import java.io.File;
    import java.io.IOException;
    
    COUETOUX Basile's avatar
    COUETOUX Basile committed
    import java.io.PrintWriter;
    
    import java.util.HashMap;
    
    BasileCouetoux's avatar
    BasileCouetoux committed
    import java.util.List;
    
    import java.util.Map;
    
    BasileCouetoux's avatar
    BasileCouetoux committed
    
    
    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");
            }
    
    BasileCouetoux's avatar
    BasileCouetoux committed
        }
    }