diff options
| -rw-r--r-- | altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java | 5 | ||||
| -rw-r--r-- | altoslib/AltosGPS.java | 6 | ||||
| -rw-r--r-- | altoslib/AltosParse.java | 21 | ||||
| -rw-r--r-- | altoslib/AltosUnits.java | 21 | ||||
| -rw-r--r-- | altosui/AltosConfigPyroUI.java | 15 | ||||
| -rw-r--r-- | altosui/AltosConfigUI.java | 30 | ||||
| -rw-r--r-- | altosuilib/AltosConfigFreqUI.java | 5 | ||||
| -rw-r--r-- | altosuilib/AltosUIMapPreload.java | 23 | ||||
| -rw-r--r-- | telegps/TeleGPS.java | 9 | ||||
| -rw-r--r-- | telegps/TeleGPSConfigUI.java | 14 | 
10 files changed, 105 insertions, 44 deletions
| diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java index b4fc3bc3..db065b3f 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java @@ -21,6 +21,7 @@ import java.lang.ref.WeakReference;  import java.util.ArrayList;  import java.util.Timer;  import java.util.TimerTask; +import java.text.*;  import android.app.Activity;  import android.app.PendingIntent; @@ -687,8 +688,8 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {  	void setFrequency(String freq) {  		try { -			setFrequency (Double.parseDouble(freq.substring(11, 17))); -		} catch (NumberFormatException e) { +			setFrequency (AltosParse.parse_double_net(freq.substring(11, 17))); +		} catch (ParseException e) {  		}  	} diff --git a/altoslib/AltosGPS.java b/altoslib/AltosGPS.java index 2139efb2..e3aee4ea 100644 --- a/altoslib/AltosGPS.java +++ b/altoslib/AltosGPS.java @@ -195,10 +195,10 @@ public class AltosGPS implements Cloneable, Serializable {  			lon = AltosParse.parse_coord(words[i++]);  			alt = AltosParse.parse_int(words[i++]);  			if (version > 1 || (i < words.length && !words[i].equals("SAT"))) { -				ground_speed = AltosParse.parse_double(AltosParse.strip_suffix(words[i++], "m/s(H)")); +				ground_speed = AltosParse.parse_double_net(AltosParse.strip_suffix(words[i++], "m/s(H)"));  				course = AltosParse.parse_int(words[i++]); -				climb_rate = AltosParse.parse_double(AltosParse.strip_suffix(words[i++], "m/s(V)")); -				hdop = AltosParse.parse_double(AltosParse.strip_suffix(words[i++], "(hdop)")); +				climb_rate = AltosParse.parse_double_net(AltosParse.strip_suffix(words[i++], "m/s(V)")); +				hdop = AltosParse.parse_double_net(AltosParse.strip_suffix(words[i++], "(hdop)"));  				h_error = AltosParse.parse_int(words[i++]);  				v_error = AltosParse.parse_int(words[i++]);  			} diff --git a/altoslib/AltosParse.java b/altoslib/AltosParse.java index 2fb69c15..a8b02b56 100644 --- a/altoslib/AltosParse.java +++ b/altoslib/AltosParse.java @@ -17,6 +17,7 @@  package org.altusmetrum.altoslib_6; +import java.util.*;  import java.text.*;  public class AltosParse { @@ -40,11 +41,23 @@ public class AltosParse {  		}  	} -	public static double parse_double(String v) throws ParseException { +	static NumberFormat nf_locale = NumberFormat.getInstance(); + +	static NumberFormat nf_net = NumberFormat.getInstance(Locale.ROOT); + +	public static double parse_double_locale(String str) throws ParseException {  		try { -			return Double.parseDouble(v); -		} catch (NumberFormatException e) { -			throw new ParseException("error parsing double " + v, 0); +			return nf_locale.parse(str.trim()).doubleValue(); +		} catch (ParseException pe) { +			throw new ParseException("error parsing double " + str, 0); +		} +	} + +	public static double parse_double_net(String str) throws ParseException { +		try { +			return nf_net.parse(str.trim()).doubleValue(); +		} catch (ParseException pe) { +			throw new ParseException("error parsing double " + str, 0);  		}  	} diff --git a/altoslib/AltosUnits.java b/altoslib/AltosUnits.java index f6e34e77..e266b243 100644 --- a/altoslib/AltosUnits.java +++ b/altoslib/AltosUnits.java @@ -17,6 +17,8 @@  package org.altusmetrum.altoslib_6; +import java.text.*; +  public abstract class AltosUnits {  	public abstract double value(double v, boolean imperial_units); @@ -29,13 +31,22 @@ public abstract class AltosUnits {  	public abstract int show_fraction(int width, boolean imperial_units); -	public double parse(String s, boolean imperial_units) throws NumberFormatException { -		double v = Double.parseDouble(s); +	public double parse_locale(String s, boolean imperial_units) throws ParseException { +		double v = AltosParse.parse_double_locale(s); +		return inverse(v, imperial_units); +	} + +	public double parse_net(String s, boolean imperial_units) throws ParseException { +		double v = AltosParse.parse_double_net(s);  		return inverse(v, imperial_units);  	} -	public double parse(String s) throws NumberFormatException { -		return parse(s, AltosConvert.imperial_units); +	public double parse_locale(String s) throws ParseException { +		return parse_locale(s, AltosConvert.imperial_units); +	} + +	public double parse_net(String s) throws ParseException { +		return parse_net(s, AltosConvert.imperial_units);  	}  	public double value(double v) { @@ -105,4 +116,4 @@ public abstract class AltosUnits {  	public String say_units(double v) {  		return say_units(v, AltosConvert.imperial_units);  	} -}
\ No newline at end of file +} diff --git a/altosui/AltosConfigPyroUI.java b/altosui/AltosConfigPyroUI.java index 61208dfe..69b31ff5 100644 --- a/altosui/AltosConfigPyroUI.java +++ b/altosui/AltosConfigPyroUI.java @@ -17,6 +17,7 @@  package altosui; +import java.text.*;  import java.awt.*;  import java.awt.event.*;  import javax.swing.*; @@ -87,9 +88,9 @@ public class AltosConfigPyroUI  			if (units != null) {  				try { -					double v = units.parse(value.getText(), !imperial_units); +					double v = units.parse_locale(value.getText(), !imperial_units);  					set(enabled(), v); -				} catch (NumberFormatException ne) { +				} catch (ParseException pe) {  					set(enabled(), 0.0);  				}  			} @@ -129,9 +130,9 @@ public class AltosConfigPyroUI  				AltosUnits units = AltosPyro.pyro_to_units(flag);  				try {  					if (units != null) -						return units.parse(value.getText()); -					return Double.parseDouble(value.getText()); -				} catch (NumberFormatException e) { +						return units.parse_locale(value.getText()); +					return AltosParse.parse_double_locale(value.getText()); +				} catch (ParseException e) {  					throw new AltosConfigDataException("\"%s\": %s\n", value.getText(), e.getMessage());  				}  			} @@ -298,8 +299,8 @@ public class AltosConfigPyroUI  		String	v = pyro_firing_time_value.getSelectedItem().toString();  		try { -			return Double.parseDouble(v); -		} catch (NumberFormatException e) { +			return AltosParse.parse_double_locale(v); +		} catch (ParseException e) {  			throw new AltosConfigDataException("Invalid pyro firing time \"%s\"", v);  		}  	} diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java index 67decaa4..ef477ca9 100644 --- a/altosui/AltosConfigUI.java +++ b/altosui/AltosConfigUI.java @@ -21,6 +21,7 @@ import java.awt.*;  import java.awt.event.*;  import javax.swing.*;  import javax.swing.event.*; +import java.text.*;  import org.altusmetrum.altoslib_6.*;  import org.altusmetrum.altosuilib_6.*; @@ -976,8 +977,13 @@ public class AltosConfigUI  	} -	public int main_deploy() { -		return (int) (AltosConvert.height.parse(main_deploy_value.getSelectedItem().toString()) + 0.5); +	public int main_deploy() throws AltosConfigDataException { +		String	str = main_deploy_value.getSelectedItem().toString(); +		try { +			return (int) (AltosConvert.height.parse_locale(str) + 0.5); +		} catch (ParseException pe) { +			throw new AltosConfigDataException("invalid main deploy height %s", str); +		}  	}  	String get_main_deploy_label() { @@ -1006,14 +1012,21 @@ public class AltosConfigUI  		String v = main_deploy_value.getSelectedItem().toString();  		main_deploy_label.setText(get_main_deploy_label());  		set_main_deploy_values(); -		int m = (int) (AltosConvert.height.parse(v, !imperial_units) + 0.5); -		set_main_deploy(m); +		try { +			int m = (int) (AltosConvert.height.parse_locale(v, !imperial_units) + 0.5); +			set_main_deploy(m); +		} catch (ParseException pe) { +		}  		if (tracker_motion_value.isEnabled()) {  			String motion = tracker_motion_value.getSelectedItem().toString();  			tracker_motion_label.setText(get_tracker_motion_label());  			set_tracker_motion_values(); -			set_tracker_motion((int) (AltosConvert.height.parse(motion, !imperial_units) + 0.5)); +			try { +				int m = (int) (AltosConvert.height.parse_locale(motion, !imperial_units) + 0.5); +				set_tracker_motion(m); +			} catch (ParseException pe) { +			}  		}  		if (!was_dirty) @@ -1272,7 +1285,12 @@ public class AltosConfigUI  	}  	public int tracker_motion() throws AltosConfigDataException { -		return (int) AltosConvert.height.parse(tracker_motion_value.getSelectedItem().toString()); +		String str = tracker_motion_value.getSelectedItem().toString(); +		try { +			return (int) (AltosConvert.height.parse_locale(str) + 0.5); +		} catch (ParseException pe) { +			throw new AltosConfigDataException("invalid tracker motion %s", str); +		}  	}  	public void set_tracker_interval(int tracker_interval) { diff --git a/altosuilib/AltosConfigFreqUI.java b/altosuilib/AltosConfigFreqUI.java index 6253e3e4..21514a81 100644 --- a/altosuilib/AltosConfigFreqUI.java +++ b/altosuilib/AltosConfigFreqUI.java @@ -18,6 +18,7 @@  package org.altusmetrum.altosuilib_6;  import java.awt.*; +import java.text.*;  import java.awt.event.*;  import javax.swing.*;  import java.util.*; @@ -51,10 +52,10 @@ class AltosEditFreqUI extends AltosUIDialog implements ActionListener {  		String	d_s = description.getText();  		try { -			double	f_d = Double.parseDouble(f_s); +			double	f_d = AltosParse.parse_double_locale(f_s);  			return new AltosFrequency(f_d, d_s); -		} catch (NumberFormatException ne) { +		} catch (ParseException ne) {  		}  		return null;  	} diff --git a/altosuilib/AltosUIMapPreload.java b/altosuilib/AltosUIMapPreload.java index e82b6c60..1973ae6e 100644 --- a/altosuilib/AltosUIMapPreload.java +++ b/altosuilib/AltosUIMapPreload.java @@ -53,33 +53,33 @@ class AltosUIMapPos extends Box {  		hemi.setSelectedIndex(h);  	} -	public double get_value() throws NumberFormatException { +	public double get_value() throws ParseException {  		int	h = hemi.getSelectedIndex();  		String	d_t = deg.getText();  		String	m_t = min.getText();  		double 	d, m, v;  		try { -			d = Double.parseDouble(d_t); -		} catch (NumberFormatException ne) { +			d = AltosParse.parse_double_locale(d_t); +		} catch (ParseException pe) {  			JOptionPane.showMessageDialog(owner,  						      String.format("Invalid degrees \"%s\"",  								    d_t),  						      "Invalid number",  						      JOptionPane.ERROR_MESSAGE); -			throw ne; +			throw pe;  		}  		try {  			if (m_t.equals(""))  				m = 0;  			else -				m = Double.parseDouble(m_t); -		} catch (NumberFormatException ne) { +				m = AltosParse.parse_double_locale(m_t); +		} catch (ParseException pe) {  			JOptionPane.showMessageDialog(owner,  						      String.format("Invalid minutes \"%s\"",  								    m_t),  						      "Invalid number",  						      JOptionPane.ERROR_MESSAGE); -			throw ne; +			throw pe;  		}  		v = d + m/60.0;  		if (h == 1) @@ -142,9 +142,9 @@ class AltosUISite {  		name = elements[0];  		try { -			latitude = Double.parseDouble(elements[1]); -			longitude = Double.parseDouble(elements[2]); -		} catch (NumberFormatException ne) { +			latitude = AltosParse.parse_double_net(elements[1]); +			longitude = AltosParse.parse_double_net(elements[2]); +		} catch (ParseException pe) {  			throw new ParseException(String.format("Invalid site line %s", line), 0);  		}  	} @@ -171,6 +171,7 @@ class AltosUISites extends Thread {  		try {  			add(new AltosUISite(line));  		} catch (ParseException pe) { +			System.out.printf("parse exception %s\n", pe.toString());  		}  	} @@ -394,7 +395,7 @@ public class AltosUIMapPreload extends AltosUIFrame implements ActionListener, I  						max_z = min_z;  					r = (Integer) radius.getSelectedItem();  					loading = true; -				} catch (NumberFormatException ne) { +				} catch (ParseException pe) {  					load_button.setSelected(false);  				}  				start_load(); diff --git a/telegps/TeleGPS.java b/telegps/TeleGPS.java index fe335176..7570d380 100644 --- a/telegps/TeleGPS.java +++ b/telegps/TeleGPS.java @@ -23,6 +23,7 @@ import javax.swing.*;  import java.io.*;  import java.util.concurrent.*;  import java.util.*; +import java.text.*;  import org.altusmetrum.altoslib_6.*;  import org.altusmetrum.altosuilib_6.*; @@ -679,9 +680,13 @@ public class TeleGPS  				if (args.length < i + 3) {  					help(1);  				} else { -					double lat = Double.parseDouble(args[i+1]); -					double lon = Double.parseDouble(args[i+2]); +					try { +					double lat = AltosParse.parse_double_locale(args[i+1]); +					double lon = AltosParse.parse_double_locale(args[i+2]);  					AltosUIMap.prefetch_maps(lat, lon); +					} catch (ParseException e) { +						System.out.printf("Can't parse number %s\n", e.toString()); +					}  					i += 2;  				}  			} else if (args[i].equals("--replay")) diff --git a/telegps/TeleGPSConfigUI.java b/telegps/TeleGPSConfigUI.java index 97ab34b4..4e657586 100644 --- a/telegps/TeleGPSConfigUI.java +++ b/telegps/TeleGPSConfigUI.java @@ -17,6 +17,7 @@  package org.altusmetrum.telegps; +import java.text.*;  import java.awt.*;  import java.awt.event.*;  import javax.swing.*; @@ -686,7 +687,11 @@ public class TeleGPSConfigUI  			String motion = tracker_motion_value.getSelectedItem().toString();  			tracker_motion_label.setText(get_tracker_motion_label());  			set_tracker_motion_values(); -			set_tracker_motion((int) (AltosConvert.height.parse(motion, !imperial_units) + 0.5)); +			try { +				int m = (int) (AltosConvert.height.parse_locale(motion, !imperial_units) + 0.5); +				set_tracker_motion(m); +			} catch (ParseException pe) { +			}  		}  		if (!was_dirty)  			set_clean(); @@ -886,7 +891,12 @@ public class TeleGPSConfigUI  	}  	public int tracker_motion() throws AltosConfigDataException { -		return (int) AltosConvert.height.parse(tracker_motion_value.getSelectedItem().toString()); +		String str = tracker_motion_value.getSelectedItem().toString(); +		try { +			return (int) (AltosConvert.height.parse_locale(str) + 0.5); +		} catch (ParseException pe) { +			throw new AltosConfigDataException("invalid tracker motion %s", str); +		}  	}  	public void set_tracker_interval(int tracker_interval) { | 
