summaryrefslogtreecommitdiff
path: root/ao-tools/altosui/AltosCsvReader.java
diff options
context:
space:
mode:
Diffstat (limited to 'ao-tools/altosui/AltosCsvReader.java')
-rw-r--r--ao-tools/altosui/AltosCsvReader.java113
1 files changed, 113 insertions, 0 deletions
diff --git a/ao-tools/altosui/AltosCsvReader.java b/ao-tools/altosui/AltosCsvReader.java
new file mode 100644
index 00000000..600788f4
--- /dev/null
+++ b/ao-tools/altosui/AltosCsvReader.java
@@ -0,0 +1,113 @@
+
+// Copyright (c) 2010 Anthony Towns
+// GPL v2 or later
+
+package altosui;
+
+import java.lang.UnsupportedOperationException;
+import java.util.HashMap;
+import java.util.NoSuchElementException;
+import java.util.Iterator;
+import java.io.*;
+import com.csvreader.CsvReader;
+
+import altosui.AltosDataPoint;
+
+class AltosCsvReader implements Iterable<AltosDataPoint>
+{
+ public CsvReader csv;
+ public AltosDataPoint next = null;
+
+ static protected String [] headers = "version serial flight call time rssi state state_name acceleration pressure altitude height accel_speed baro_speed temperature battery_voltage drogue_voltage main_voltage connected locked nsat latitude longitude altitude year month day hour minute second pad_dist pad_range pad_az pad_el".split(" ");
+
+ AltosCsvReader(Reader stream) {
+ csv = new CsvReader(stream);
+ csv.setComment('#');
+ csv.setUseComments(true);
+ csv.setHeaders(headers);
+ }
+ AltosCsvReader(String filename) throws FileNotFoundException {
+ csv = new CsvReader(filename);
+ csv.setComment('#');
+ csv.setUseComments(true);
+ csv.setHeaders(headers);
+ }
+
+ public Iterator<AltosDataPoint> iterator() {
+ return new Iterator<AltosDataPoint>() {
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ public boolean hasNext() {
+ if (next == null) {
+ try {
+ if (csv.readRecord()) {
+ next = new CsvRow();
+ } else {
+ close();
+ return false;
+ }
+ } catch (IOException e) {
+ close();
+ return false;
+ }
+ }
+ return true;
+ }
+ public AltosDataPoint next() {
+ if (!hasNext())
+ throw new NoSuchElementException();
+ AltosDataPoint res = next;
+ next = null;
+ return res;
+ }
+ };
+ }
+
+ public void close() {
+ csv.close();
+ }
+
+ private class CsvRow extends HashMap<String,String>
+ implements AltosDataPoint
+ {
+ CsvRow() throws IOException {
+ for (int i = 0; i < headers.length; i++) {
+ this.put(headers[i], csv.get(headers[i]).trim());
+ }
+ }
+
+ private int intField(String name) {
+ return Integer.parseInt(get(name).trim());
+ }
+ private double doubleField(String name) {
+ return Double.valueOf(get(name)).doubleValue();
+ }
+ private String stringField(String name) {
+ return get(name);
+ }
+
+ public int version() { return intField("version"); }
+ public int serial() { return intField("serial"); }
+ public int flight() { return intField("flight"); }
+ public String callsign() { return stringField("call"); }
+ public double time() { return doubleField("time"); }
+ public double rssi() { return doubleField("rssi"); }
+
+ public int state() { return intField("state"); }
+ public String state_name() { return stringField("state_name"); }
+
+ public double acceleration() { return doubleField("acceleration"); }
+ public double pressure() { return doubleField("pressure"); }
+ public double altitude() { return doubleField("altitude"); }
+ public double height() { return doubleField("height"); }
+ public double accel_speed() { return doubleField("accel_speed"); }
+ public double baro_speed() { return doubleField("baro_speed"); }
+ public double temperature() { return doubleField("temperature"); }
+ public double battery_voltage() {
+ return doubleField("battery_voltage");
+ }
+ public double drogue_voltage() { return doubleField("drogue_voltage"); }
+ public double main_voltage() { return doubleField("main_voltage"); }
+ }
+}