Switch from GPLv2 to GPLv2+
[fw/altos] / altoslib / AltosKML.java
index cc9a9f51051b9339eefde74b40954053e62744a3..25108bf97c67ad27660f8d1e3915b561c1724b8e 100644 (file)
@@ -3,7 +3,8 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
-package org.altusmetrum.altoslib_3;
+package org.altusmetrum.altoslib_11;
 
 import java.io.*;
+import java.util.*;
+
+class KMLWriter extends PrintWriter {
+       public PrintWriter printf(String format, Object ... arguments) {
+               return printf(Locale.ROOT, format, arguments);
+       }
+
+       public KMLWriter(File name) throws FileNotFoundException {
+               super(name);
+       }
+}
 
 public class AltosKML implements AltosWriter {
 
        File                    name;
-       PrintStream             out;
+       PrintWriter             out;
        int                     flight_state = -1;
        AltosState              prev = null;
        double                  gps_start_altitude;
 
        static final String[] kml_state_colors = {
-               "FF000000",
-               "FF000000",
-               "FF000000",
-               "FF0000FF",
-               "FF4080FF",
-               "FF00FFFF",
-               "FFFF0000",
-               "FF00FF00",
-               "FF000000",
-               "FFFFFFFF"
+               "FF000000",     // startup
+               "FF000000",     // idle
+               "FF000000",     // pad
+               "FF0000FF",     // boost
+               "FF4080FF",     // fast
+               "FF00FFFF",     // coast
+               "FFFF0000",     // drogue
+               "FF00FF00",     // main
+               "FF000000",     // landed
+               "FFFFFFFF",     // invalid
+               "FFFF0000",     // stateless
        };
 
+       static String state_color(int state) {
+               if (state < 0 || kml_state_colors.length <= state)
+                       return kml_state_colors[AltosLib.ao_flight_invalid];
+               return kml_state_colors[state];
+       }
+
        static final String kml_header_start =
                "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n" +
@@ -94,8 +113,9 @@ public class AltosKML implements AltosWriter {
        boolean started = false;
 
        void state_start(AltosState state) {
-               String  state_name = AltosLib.state_name(state.state);
-               out.printf(kml_style_start, state_name, kml_state_colors[state.state]);
+               String  state_name = AltosLib.state_name(state.state());
+               String  state_color = state_color(state.state());
+               out.printf(kml_style_start, state_name, state_color);
                out.printf("\tState: %s\n", state_name);
                out.printf("%s", kml_style_end);
                out.printf(kml_placemark_start, state_name, state_name);
@@ -129,6 +149,10 @@ public class AltosKML implements AltosWriter {
                        end();
                        prev = null;
                }
+               if (out != null) {
+                       out.close();
+                       out = null;
+               }
        }
 
        public void write(AltosState state) {
@@ -148,8 +172,8 @@ public class AltosKML implements AltosWriter {
                }
                if (prev != null && prev.gps_sequence == state.gps_sequence)
                        return;
-               if (state.state != flight_state) {
-                       flight_state = state.state;
+               if (state.state() != flight_state) {
+                       flight_state = state.state();
                        if (prev != null) {
                                coord(state);
                                state_end(prev);
@@ -169,7 +193,7 @@ public class AltosKML implements AltosWriter {
 
        public AltosKML(File in_name) throws FileNotFoundException {
                name = in_name;
-               out = new PrintStream(name);
+               out = new KMLWriter(name);
        }
 
        public AltosKML(String in_string) throws FileNotFoundException {