summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-01-03 17:31:01 -0800
committerKeith Packard <keithp@keithp.com>2013-01-03 17:31:01 -0800
commitf20781010a6560b7b359af269c502d098917c446 (patch)
treeaeb9db1b1e4b9597609488b4918676551c75aad5
parent36e9603f74b85776ac049758021b51909161aeb1 (diff)
micropeak: Add command line export option
micropeak --export <foo.mpd> will create <foo.csv> full of useful data. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--micropeak/MicroData.java9
-rw-r--r--micropeak/MicroExport.java15
-rw-r--r--micropeak/MicroFileChooser.java18
-rw-r--r--micropeak/MicroPeak.java94
-rw-r--r--micropeak/MicroSave.java10
5 files changed, 100 insertions, 46 deletions
diff --git a/micropeak/MicroData.java b/micropeak/MicroData.java
index 836d3c35..fdfb2dc4 100644
--- a/micropeak/MicroData.java
+++ b/micropeak/MicroData.java
@@ -263,6 +263,15 @@ public class MicroData {
f.write('\n');
}
+ public void export (Writer f) throws IOException {
+ PrintWriter pw = new PrintWriter(f);
+ pw.printf(" Time, Press, Height, Speed, Accel\n");
+ for (MicroDataPoint point : points()) {
+ pw.printf("%6.3f,%6.0f,%7.1f,%7.2f,%7.2f\n",
+ point.time, point.pressure, point.height, point.speed, point.accel);
+ }
+ }
+
public void set_name(String name) {
this.name = name;
}
diff --git a/micropeak/MicroExport.java b/micropeak/MicroExport.java
index 219184da..4b83bb4d 100644
--- a/micropeak/MicroExport.java
+++ b/micropeak/MicroExport.java
@@ -31,6 +31,12 @@ public class MicroExport extends JFileChooser {
JFrame frame;
MicroData data;
+ public static void export(File file, MicroData data) throws FileNotFoundException, IOException {
+ FileWriter fw = new FileWriter(file);
+ data.export(fw);
+ fw.close();
+ }
+
public boolean runDialog() {
int ret;
@@ -76,14 +82,7 @@ public class MicroExport extends JFileChooser {
}
}
try {
- FileWriter fw = new FileWriter(file);
- PrintWriter pw = new PrintWriter(fw);
- pw.printf(" Time, Press, Height, Speed, Accel\n");
- for (MicroDataPoint point : data.points()) {
- pw.printf("%6.3f,%6.0f,%7.1f,%7.2f,%7.2f\n",
- point.time, point.pressure, point.height, point.speed, point.accel);
- }
- fw.close();
+ export(file, data);
return true;
} catch (FileNotFoundException fe) {
JOptionPane.showMessageDialog(frame,
diff --git a/micropeak/MicroFileChooser.java b/micropeak/MicroFileChooser.java
index d2540987..21ddb0f8 100644
--- a/micropeak/MicroFileChooser.java
+++ b/micropeak/MicroFileChooser.java
@@ -36,24 +36,12 @@ public class MicroFileChooser extends JFileChooser {
return file;
}
- public InputStream runDialog() {
+ public File runDialog() {
int ret;
ret = showOpenDialog(frame);
- if (ret == APPROVE_OPTION) {
- file = getSelectedFile();
- if (file == null)
- return null;
- filename = file.getName();
- try {
- return new FileInputStream(file);
- } catch (FileNotFoundException fe) {
- JOptionPane.showMessageDialog(frame,
- fe.getMessage(),
- "Cannot open file",
- JOptionPane.ERROR_MESSAGE);
- }
- }
+ if (ret == APPROVE_OPTION)
+ return getSelectedFile();
return null;
}
diff --git a/micropeak/MicroPeak.java b/micropeak/MicroPeak.java
index d4252fa9..185fa67e 100644
--- a/micropeak/MicroPeak.java
+++ b/micropeak/MicroPeak.java
@@ -56,40 +56,41 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
setTitle(name);
}
- private void RunFile(InputStream input, String name) {
+ private static MicroData ReadFile(File filename) throws IOException, FileNotFoundException {
+ MicroData data = null;
+ FileInputStream fis = new FileInputStream(filename);
try {
- MicroData data = new MicroData(input, name);
- SetData(data);
- } catch (IOException ioe) {
- JOptionPane.showMessageDialog(this,
- ioe.getMessage(),
- "File Read Error",
- JOptionPane.ERROR_MESSAGE);
+ data = new MicroData((InputStream) fis, filename.getName());
} catch (InterruptedException ie) {
+ data = null;
+ } finally {
+ fis.close();
}
- try {
- input.close();
- } catch (IOException ioe) {
- }
+ return data;
}
private void OpenFile(File filename) {
try {
- RunFile (new FileInputStream(filename), filename.getName());
+ SetData(ReadFile(filename));
} catch (FileNotFoundException fne) {
JOptionPane.showMessageDialog(this,
fne.getMessage(),
"Cannot open file",
JOptionPane.ERROR_MESSAGE);
+ } catch (IOException ioe) {
+ JOptionPane.showMessageDialog(this,
+ ioe.getMessage(),
+ "File Read Error",
+ JOptionPane.ERROR_MESSAGE);
}
}
private void SelectFile() {
MicroFileChooser chooser = new MicroFileChooser(this);
- InputStream input = chooser.runDialog();
+ File file = chooser.runDialog();
- if (input != null)
- RunFile(input, chooser.filename);
+ if (file != null)
+ OpenFile(file);
}
private void Preferences() {
@@ -109,6 +110,7 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
"No data",
JOptionPane.INFORMATION_MESSAGE);
}
+
private void Save() {
if (data == null) {
no_data();
@@ -128,6 +130,30 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
export.runDialog();
}
+ private static void CommandGraph(File file) {
+ MicroPeak m = new MicroPeak();
+ m.OpenFile(file);
+ }
+
+ private static void CommandExport(File file) {
+ try {
+ MicroData d = ReadFile(file);
+ if (d != null) {
+ File csv = new File(AltosLib.replace_extension(file.getPath(), ".csv"));
+ try {
+ System.out.printf ("Export \"%s\" to \"%s\"\n", file.getPath(), csv.getPath());
+ MicroExport.export(csv, d);
+ } catch (FileNotFoundException fe) {
+ System.err.printf("Cannot create file \"%s\" (%s)\n", csv.getName(), fe.getMessage());
+ } catch (IOException ie) {
+ System.err.printf("Cannot write file \"%s\" (%s)\n", csv.getName(), ie.getMessage());
+ }
+ }
+ } catch (IOException ie) {
+ System.err.printf("Cannot read file \"%s\" (%s)\n", file.getName(), ie.getMessage());
+ }
+ }
+
private void Close() {
setVisible(false);
dispose();
@@ -233,8 +259,17 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
setVisible(true);
}
+ public static void help(int code) {
+ System.out.printf("Usage: micropeak [OPTION] ... [FILE]...\n");
+ System.out.printf(" Options:\n");
+ System.out.printf(" --csv\tgenerate comma separated output for spreadsheets, etc\n");
+ System.out.printf(" --graph\tgraph a flight\n");
+ System.exit(code);
+ }
+
public static void main(final String[] args) {
boolean opened = false;
+ boolean graphing = true;
try {
UIManager.setLookAndFeel(AltosUIPreferences.look_and_feel());
@@ -242,11 +277,30 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
}
for (int i = 0; i < args.length; i++) {
- MicroPeak m = new MicroPeak();
- m.OpenFile(new File(args[i]));
- opened = true;
+ System.out.printf ("Arg %d: %s\n", i, args[i]);
+ if (args[i].equals("--help"))
+ help(0);
+ else if (args[i].equals("--export"))
+ graphing = false;
+ else if (args[i].equals("--graph"))
+ graphing = true;
+ else if (args[i].startsWith("--"))
+ help(1);
+ else {
+ File file = new File(args[i]);
+ try {
+ if (graphing)
+ CommandGraph(file);
+ else
+ CommandExport(file);
+ opened = true;
+ } catch (Exception e) {
+ System.err.printf("Error processing \"%s\": %s\n",
+ file.getName(), e.getMessage());
+ }
+ }
}
if (!opened)
new MicroPeak();
}
-} \ No newline at end of file
+}
diff --git a/micropeak/MicroSave.java b/micropeak/MicroSave.java
index cb4b4221..2664f170 100644
--- a/micropeak/MicroSave.java
+++ b/micropeak/MicroSave.java
@@ -32,6 +32,12 @@ public class MicroSave extends JFileChooser {
JFrame frame;
MicroData data;
+ public static void save(File file, MicroData data) throws FileNotFoundException, IOException {
+ FileOutputStream fos = new FileOutputStream(file);
+ data.save(fos);
+ fos.close();
+ }
+
public boolean runDialog() {
int ret;
@@ -76,9 +82,7 @@ public class MicroSave extends JFileChooser {
}
}
try {
- FileOutputStream fos = new FileOutputStream(file);
- data.save(fos);
- fos.close();
+ save(file, data);
data.set_name(filename);
return true;
} catch (FileNotFoundException fe) {