remove the csv build dep, as that code will be abandoned
[fw/altos] / ao-tools / altosui / AltosCsvReader.java
1
2 // Copyright (c) 2010 Anthony Towns
3 // GPL v2 or later
4
5 package altosui;
6
7 import java.lang.UnsupportedOperationException;
8 import java.util.HashMap;
9 import java.util.NoSuchElementException;
10 import java.util.Iterator;
11 import java.io.*;
12 import com.csvreader.CsvReader;
13
14 import altosui.AltosDataPoint;
15
16 class AltosCsvReader implements Iterable<AltosDataPoint>
17 {
18     public CsvReader csv;
19     public AltosDataPoint next = null;
20
21     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(" ");
22
23     AltosCsvReader(Reader stream) {
24         csv = new CsvReader(stream);
25         csv.setComment('#');
26         csv.setUseComments(true);
27         csv.setHeaders(headers);
28     }
29     AltosCsvReader(String filename) throws FileNotFoundException {
30         csv = new CsvReader(filename);
31         csv.setComment('#');
32         csv.setUseComments(true);
33         csv.setHeaders(headers);
34     }
35
36     public Iterator<AltosDataPoint> iterator() {
37         return new Iterator<AltosDataPoint>() {
38             public void remove() { 
39                 throw new UnsupportedOperationException(); 
40             }
41             public boolean hasNext() {
42                 if (next == null) {
43                     try {
44                         if (csv.readRecord()) {
45                             next = new CsvRow();
46                         } else {
47                             close();
48                             return false;
49                         }
50                     } catch (IOException e) {
51                         close();
52                         return false;
53                     }
54                 }
55                 return true;
56             }
57             public AltosDataPoint next() {
58                 if (!hasNext())
59                     throw new NoSuchElementException();
60                 AltosDataPoint res = next;
61                 next = null;
62                 return res;
63             }
64         };
65     }
66
67     public void close() {
68         csv.close();
69     }
70
71     private class CsvRow extends HashMap<String,String>
72             implements AltosDataPoint 
73     {
74         CsvRow() throws IOException {
75             for (int i = 0; i < headers.length; i++) {
76                 this.put(headers[i], csv.get(headers[i]).trim());
77             }
78         }
79
80         private int intField(String name) {
81             return Integer.parseInt(get(name).trim());
82         }
83         private double doubleField(String name) {
84             return Double.valueOf(get(name)).doubleValue();
85         }
86         private String stringField(String name) {
87             return get(name);
88         }
89
90         public int version() { return intField("version"); }
91         public int serial() { return intField("serial"); }
92         public int flight() { return intField("flight"); }
93         public String callsign() { return stringField("call"); }
94         public double time() { return doubleField("time"); }
95         public double rssi() { return doubleField("rssi"); }
96
97         public int state() { return intField("state"); }
98         public String state_name() { return stringField("state_name"); }
99
100         public double acceleration() { return doubleField("acceleration"); }
101         public double pressure() { return doubleField("pressure"); }
102         public double altitude() { return doubleField("altitude"); }
103         public double height() { return doubleField("height"); }
104         public double accel_speed() { return doubleField("accel_speed"); }
105         public double baro_speed() { return doubleField("baro_speed"); }
106         public double temperature() { return doubleField("temperature"); }
107         public double battery_voltage() { 
108             return doubleField("battery_voltage"); 
109         }
110         public double drogue_voltage() { return doubleField("drogue_voltage"); }
111         public double main_voltage() { return doubleField("main_voltage"); }
112     }
113 }