package at.favre.tools.dconvert.ui; import at.favre.tools.dconvert.arg.Arguments; import java.io.*; import java.util.Base64; import java.util.prefs.Preferences; /** * Simple persistence store for UI */ public class SerializePreferenceStore implements IPreferenceStore { public static final String ARGS_KEY = "args"; private Preferences prefs; public SerializePreferenceStore() { this.prefs = Preferences.userNodeForPackage(GUI.class); } @Override public void save(Arguments arg) { try { prefs.put(ARGS_KEY, serialize(arg)); } catch (Exception e) { prefs.remove(ARGS_KEY); e.printStackTrace(); } } @Override public Arguments get() { try { String saved = prefs.get(ARGS_KEY, null); if (saved == null) { return null; } Object out = unserialize(saved); return (Arguments) out; } catch (Exception e) { prefs.remove(ARGS_KEY); e.printStackTrace(); return null; } } private static String serialize(Serializable obj) throws IOException { ObjectOutput out = null; try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) { out = new ObjectOutputStream(bos); out.writeObject(obj); return Base64.getEncoder().encodeToString(bos.toByteArray()); } finally { try { if (out != null) { out.close(); } } catch (IOException ex) { // ignore close exception } } } private static Object unserialize(String base64Obj) throws IOException, ClassNotFoundException { try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(Base64.getDecoder().decode(base64Obj)))) { return in.readObject(); } } }