Skip to content
Snippets Groups Projects
ShapeReader.java 1.18 KiB
Newer Older
  • Learn to ignore specific revisions
  • BasileCouetoux's avatar
    BasileCouetoux committed
    package serializer;
    
    
    import shape.Circle;
    
    BasileCouetoux's avatar
    BasileCouetoux committed
    import shape.Shape;
    
    
    COUETOUX Basile's avatar
    COUETOUX Basile committed
    import java.io.BufferedReader;
    
    BasileCouetoux's avatar
    BasileCouetoux committed
    import java.io.File;
    
    COUETOUX Basile's avatar
    COUETOUX Basile committed
    import java.io.FileReader;
    
    BasileCouetoux's avatar
    BasileCouetoux committed
    import java.io.IOException;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    
    BasileCouetoux's avatar
    BasileCouetoux committed
    import java.util.List;
    
    import java.util.Map;
    
    BasileCouetoux's avatar
    BasileCouetoux committed
    
    public class ShapeReader {
    
    
        private static final Map<String, ShapeSerializer<?>> serializers = new HashMap<>();
    
        static {
            serializers.put("circle", new CircleSerializer());
            serializers.put("rectangle", new RectangleSerializer());
        }
    
    COUETOUX Basile's avatar
    COUETOUX Basile committed
        public static List<Shape> read(File file) throws IOException {
    
            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;
            }
    
    BasileCouetoux's avatar
    BasileCouetoux committed
        }
    }