From ec20e2f72460010c4f59e6d59775671260e01026 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 28 Apr 2016 12:29:16 -0700 Subject: altoslib: Make AltosPreferencesBackend abstract. Add set/put Serializable This lets us add functionality to this directly, such as the new serializable APIs. Signed-off-by: Keith Packard --- altoslib/AltosPreferencesBackend.java | 76 ++++++++++++++++++++++++++--------- 1 file changed, 57 insertions(+), 19 deletions(-) (limited to 'altoslib/AltosPreferencesBackend.java') diff --git a/altoslib/AltosPreferencesBackend.java b/altoslib/AltosPreferencesBackend.java index 9f2e8f7c..6e1124e2 100644 --- a/altoslib/AltosPreferencesBackend.java +++ b/altoslib/AltosPreferencesBackend.java @@ -17,34 +17,72 @@ package org.altusmetrum.altoslib_10; -import java.io.File; +import java.io.*; +import java.util.*; +import java.text.*; -public interface AltosPreferencesBackend { +public abstract class AltosPreferencesBackend { - public String getString(String key, String def); - public void putString(String key, String value); + public abstract String getString(String key, String def); + public abstract void putString(String key, String value); - public int getInt(String key, int def); - public void putInt(String key, int value); + public abstract int getInt(String key, int def); + public abstract void putInt(String key, int value); - public double getDouble(String key, double def); - public void putDouble(String key, double value); + public abstract double getDouble(String key, double def); + public abstract void putDouble(String key, double value); - public boolean getBoolean(String key, boolean def); - public void putBoolean(String key, boolean value); + public abstract boolean getBoolean(String key, boolean def); + public abstract void putBoolean(String key, boolean value); - public byte[] getBytes(String key, byte[] def); - public void putBytes(String key, byte[] value); + public abstract byte[] getBytes(String key, byte[] def); + public abstract void putBytes(String key, byte[] value); - public boolean nodeExists(String key); - public AltosPreferencesBackend node(String key); + public Serializable getSerializable(String key, Serializable def) { + byte[] bytes = null; - public String[] keys(); - public void remove(String key); + bytes = getBytes(key, null); + if (bytes == null) + return def; - public void flush(); + ByteArrayInputStream bais = new ByteArrayInputStream(bytes); - public File homeDirectory(); + try { + ObjectInputStream ois = new ObjectInputStream(bais); + Serializable object = (Serializable) ois.readObject(); + return object; + } catch (IOException ie) { + debug("IO exception %s\n", ie.toString()); + } catch (ClassNotFoundException ce) { + debug("ClassNotFoundException %s\n", ce.toString()); + } + return def; + } - public void debug(String format, Object ... arguments); + public void putSerializable(String key, Serializable object) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + try { + ObjectOutputStream oos = new ObjectOutputStream(baos); + + oos.writeObject(object); + byte[] bytes = baos.toByteArray(); + + putBytes(key, bytes); + } catch (IOException ie) { + debug("set_state failed %s\n", ie.toString()); + } + } + + public abstract boolean nodeExists(String key); + public abstract AltosPreferencesBackend node(String key); + + public abstract String[] keys(); + public abstract void remove(String key); + + public abstract void flush(); + + public abstract File homeDirectory(); + + public abstract void debug(String format, Object ... arguments); } -- cgit v1.2.3