diff options
author | Keith Packard <keithp@keithp.com> | 2016-04-28 12:29:16 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2016-04-28 12:29:16 -0700 |
commit | ec20e2f72460010c4f59e6d59775671260e01026 (patch) | |
tree | 26550cdb6537581616e5ee8505dd80613a1f7c52 /altoslib | |
parent | 3c7b68b8a513b611500dfd734182e1a2e7bdd40c (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')
-rw-r--r-- | altoslib/AltosFrequency.java | 6 | ||||
-rw-r--r-- | altoslib/AltosLink.java | 4 | ||||
-rw-r--r-- | altoslib/AltosMapLoader.java | 2 | ||||
-rw-r--r-- | altoslib/AltosPreferences.java | 98 | ||||
-rw-r--r-- | altoslib/AltosPreferencesBackend.java | 76 |
5 files changed, 89 insertions, 97 deletions
diff --git a/altoslib/AltosFrequency.java b/altoslib/AltosFrequency.java index 80e0d724..9542fe33 100644 --- a/altoslib/AltosFrequency.java +++ b/altoslib/AltosFrequency.java @@ -17,7 +17,11 @@ package org.altusmetrum.altoslib_10; -public class AltosFrequency { +import java.io.*; +import java.util.*; +import java.text.*; + +public class AltosFrequency implements Serializable { public double frequency; public String description; diff --git a/altoslib/AltosLink.java b/altoslib/AltosLink.java index 73bab3ef..cd8609c0 100644 --- a/altoslib/AltosLink.java +++ b/altoslib/AltosLink.java @@ -170,8 +170,8 @@ public abstract class AltosLink implements Runnable { boolean can_cancel = can_cancel_reply(); String reply = null; - if (!can_cancel && remote) - System.out.printf("Uh-oh, reading remote serial device from swing thread\n"); +// if (!can_cancel && remote) +// System.out.printf("Uh-oh, reading remote serial device from swing thread\n"); if (remote && can_cancel) { timeout = 500; diff --git a/altoslib/AltosMapLoader.java b/altoslib/AltosMapLoader.java index 9d4059e6..15fd756e 100644 --- a/altoslib/AltosMapLoader.java +++ b/altoslib/AltosMapLoader.java @@ -88,7 +88,6 @@ public class AltosMapLoader implements AltosMapTileListener, AltosMapStoreListen for (int y = (int) upper_left.y; y <= lower_right.y; y += AltosMap.px_size) { for (int x = (int) upper_left.x; x <= lower_right.x; x += AltosMap.px_size) { - listener.debug("Make tile at %d, %d\n", x, y); AltosPointInt point = new AltosPointInt(x, y); AltosLatLon ul = transform.lat_lon(point); AltosLatLon center = transform.lat_lon(new AltosPointDouble(x + AltosMap.px_size/2, y + AltosMap.px_size/2)); @@ -174,7 +173,6 @@ public class AltosMapLoader implements AltosMapTileListener, AltosMapStoreListen ++tiles_loaded_total; ++tiles_loaded_layer; - listener.debug("total %d layer %d\n", tiles_loaded_total, tiles_loaded_layer); if (tiles_loaded_layer == tiles_this_layer) { ++layers_loaded; diff --git a/altoslib/AltosPreferences.java b/altoslib/AltosPreferences.java index 4bf48f6d..cc340d03 100644 --- a/altoslib/AltosPreferences.java +++ b/altoslib/AltosPreferences.java @@ -116,6 +116,7 @@ public class AltosPreferences { public final static String frequency_count = "COUNT"; public final static String frequency_format = "FREQUENCY-%d"; public final static String description_format = "DESCRIPTION-%d"; + public final static String frequenciesPreference = "FREQUENCIES"; /* Units preference */ @@ -132,24 +133,29 @@ public class AltosPreferences { static int map_type; public static AltosFrequency[] load_common_frequencies() { + AltosFrequency[] frequencies = null; - boolean existing = false; - existing = backend.nodeExists(common_frequencies_node_name); - if (existing) { - AltosPreferencesBackend node = backend.node(common_frequencies_node_name); - int count = node.getInt(frequency_count, 0); + frequencies = (AltosFrequency[]) backend.getSerializable(frequenciesPreference, null); + + if (frequencies == null) { + if (backend.nodeExists(common_frequencies_node_name)) { + AltosPreferencesBackend node = backend.node(common_frequencies_node_name); + int count = node.getInt(frequency_count, 0); - frequencies = new AltosFrequency[count]; - for (int i = 0; i < count; i++) { - double frequency; - String description; + frequencies = new AltosFrequency[count]; + for (int i = 0; i < count; i++) { + double frequency; + String description; - frequency = node.getDouble(String.format(frequency_format, i), 0.0); - description = node.getString(String.format(description_format, i), null); - frequencies[i] = new AltosFrequency(frequency, description); + frequency = node.getDouble(String.format(frequency_format, i), 0.0); + description = node.getString(String.format(description_format, i), null); + frequencies[i] = new AltosFrequency(frequency, description); + } } - } else { + } + + if (frequencies == null) { frequencies = new AltosFrequency[10]; for (int i = 0; i < 10; i++) { frequencies[i] = new AltosFrequency(434.550 + i * .1, @@ -159,15 +165,6 @@ public class AltosPreferences { return frequencies; } - public static void save_common_frequencies(AltosFrequency[] frequencies) { - AltosPreferencesBackend node = backend.node(common_frequencies_node_name); - - node.putInt(frequency_count, frequencies.length); - for (int i = 0; i < frequencies.length; i++) { - node.putDouble(String.format(frequency_format, i), frequencies[i].frequency); - node.putString(String.format(description_format, i), frequencies[i].description); - } - } public static int launcher_serial; public static int launcher_channel; @@ -355,28 +352,10 @@ public class AltosPreferences { public static void set_state(int serial, AltosState state, AltosListenerState listener_state) { - backend.debug("set_state for %d pos %g,%g\n", - serial, - state.gps != null ? state.gps.lat : 0.0, - state.gps != null ? state.gps.lon : 0.0); - - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - try { - ObjectOutputStream oos = new ObjectOutputStream(baos); - - AltosSavedState saved_state = new AltosSavedState(state, listener_state); - oos.writeObject(saved_state); - - byte[] bytes = baos.toByteArray(); - - synchronized(backend) { - backend.putBytes(String.format(statePreferenceFormat, serial), bytes); - backend.putInt(statePreferenceLatest, serial); - flush_preferences(); - } - } catch (IOException ie) { - backend.debug("set_state failed %s\n", ie.toString()); + synchronized(backend) { + backend.putSerializable(String.format(statePreferenceFormat, serial), + new AltosSavedState(state, listener_state)); + backend.putInt(statePreferenceLatest, serial); } } @@ -386,7 +365,6 @@ public class AltosPreferences { for (String key : keys) { if (key.startsWith(statePreferenceHead)) { - backend.debug("list_states %s\n", key); try { int serial = AltosParse.parse_int(key.substring(statePreferenceHead.length())); states.add(serial); @@ -412,35 +390,9 @@ public class AltosPreferences { } public static AltosSavedState state(int serial) { - byte[] bytes = null; - - backend.debug("get state %d\n", serial); - synchronized(backend) { - bytes = backend.getBytes(String.format(statePreferenceFormat, serial), null); - } - - if (bytes == null) { - backend.debug("no state for %d\n", serial); - return null; - } - - ByteArrayInputStream bais = new ByteArrayInputStream(bytes); - - try { - ObjectInputStream ois = new ObjectInputStream(bais); - AltosSavedState saved_state = (AltosSavedState) ois.readObject(); - backend.debug("got saved state for %d: %g,%g\n", - serial, - saved_state.state.gps != null ? saved_state.state.gps.lat : 0.0, - saved_state.state.gps != null ? saved_state.state.gps.lon : 0.0); - return saved_state; - } catch (IOException ie) { - backend.debug("IO exception %s\n", ie.toString()); - } catch (ClassNotFoundException ce) { - backend.debug("ClassNotFoundException %s\n", ce.toString()); + return (AltosSavedState) backend.getSerializable(String.format(statePreferenceFormat, serial), null); } - return null; } public static void set_scanning_telemetry(int new_scanning_telemetry) { @@ -556,7 +508,7 @@ public class AltosPreferences { public static void set_common_frequencies(AltosFrequency[] frequencies) { synchronized(backend) { common_frequencies = frequencies; - save_common_frequencies(frequencies); + backend.putSerializable(frequenciesPreference, frequencies); flush_preferences(); } } 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); } |