summaryrefslogtreecommitdiff
path: root/altoslib/AltosPreferencesBackend.java
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2016-04-28 12:29:16 -0700
committerKeith Packard <keithp@keithp.com>2016-04-28 12:29:16 -0700
commitec20e2f72460010c4f59e6d59775671260e01026 (patch)
tree26550cdb6537581616e5ee8505dd80613a1f7c52 /altoslib/AltosPreferencesBackend.java
parent3c7b68b8a513b611500dfd734182e1a2e7bdd40c (diff)
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 <keithp@keithp.com>
Diffstat (limited to 'altoslib/AltosPreferencesBackend.java')
-rw-r--r--altoslib/AltosPreferencesBackend.java76
1 files changed, 57 insertions, 19 deletions
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);
}