package io.vivarium.serialization; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; import com.googlecode.gwtstreamer.client.Streamer; import io.vivarium.util.UserFacingError; public class FileIO { public static void saveSerializer(VivariumObject serializer, String fileName, Format f) { String data = null; if (f == Format.JSON) { data = JSONConverter.serializerToJSONString(serializer); } else { throw new UserFacingError("Writing format " + f + " is not supported."); } saveStringToFile(data, fileName); } public static void saveSerializerCollection(VivariumObjectCollection serializer, String fileName, Format f) { String data = null; if (f == Format.JSON) { data = JSONConverter.serializerToJSONString(serializer); } else if (f == Format.GWT) { data = Streamer.get().toString(serializer); } else { throw new UserFacingError("Writing format " + f + " is not supported."); } saveStringToFile(data, fileName); } public static void saveStringToFile(String dataString, String fileName) { try { saveStringToFile(dataString, new File(fileName)); } catch (IOException e) { throw new UserFacingError("Unable to write the file " + fileName); } } public static void saveStringToFile(String dataString, File file) throws IOException { try (FileOutputStream fos = new FileOutputStream(file)) { byte[] jsonByteData = dataString.getBytes("UTF-8"); fos.write(jsonByteData); fos.flush(); } } public static String loadFileToString(String fileName) { try { return loadFileToString(new File(fileName)); } catch (FileNotFoundException e) { throw new UserFacingError("Unable to read the file " + fileName); } } public static String loadFileToString(File file) throws FileNotFoundException { try (Scanner scanner = new Scanner(file, "UTF-8")) { return scanner.useDelimiter("\\Z").next(); } } public static VivariumObjectCollection loadObjectCollection(String fileName, Format f) { String data = loadFileToString(fileName); if (f == Format.JSON) { return JSONConverter.jsonStringToSerializerCollection(data); } else if (f == Format.GWT) { return (VivariumObjectCollection) Streamer.get().fromString(data); } else { throw new UserFacingError("Loading format " + f + " is not supported"); } } }