[josm-plugins] 01/01: Imported Upstream version 0.0.svn28420+ds2
Bas Couwenberg
sebastic at xs4all.nl
Sat Oct 18 12:06:29 UTC 2014
This is an automated email from the git hooks/post-receive script.
sebastic-guest pushed a commit to annotated tag upstream/0.0.svn28420+ds2
in repository josm-plugins.
commit 246bce6195c2a4dd8a4f16bd64687b4088ba231b
Author: David Paleino <dapal at debian.org>
Date: Fri Nov 9 21:30:45 2012 +0100
Imported Upstream version 0.0.svn28420+ds2
---
livegps/.classpath | 7 -
livegps/.project | 17 -
livegps/README | 14 -
livegps/build.xml | 182 ---
livegps/images/autocentermenu.png | Bin 577 -> 0 bytes
livegps/images/capturemenu.png | Bin 743 -> 0 bytes
livegps/images/centermenu.png | Bin 745 -> 0 bytes
livegps/images/dialogs/livegps.png | Bin 2778 -> 0 bytes
livegps/josm-livegps.launch | 12 -
livegps/src/livegps/AppendableGpxTrackSegment.java | 62 -
livegps/src/livegps/LiveGpsAcquirer.java | 347 -----
livegps/src/livegps/LiveGpsData.java | 238 ---
livegps/src/livegps/LiveGpsDialog.java | 108 --
livegps/src/livegps/LiveGpsLayer.java | 231 ---
livegps/src/livegps/LiveGpsPlugin.java | 234 ---
livegps/src/livegps/LiveGpsStatus.java | 49 -
livegps/src/livegps/SingleSegmentGpxTrack.java | 43 -
livegps/src/org/json/JSONArray.java | 918 ------------
livegps/src/org/json/JSONException.java | 31 -
livegps/src/org/json/JSONObject.java | 1584 --------------------
livegps/src/org/json/JSONString.java | 18 -
livegps/src/org/json/JSONTokener.java | 435 ------
svn-info.xml | 10 +-
23 files changed, 5 insertions(+), 4535 deletions(-)
diff --git a/livegps/.classpath b/livegps/.classpath
deleted file mode 100644
index b5edc13..0000000
--- a/livegps/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry combineaccessrules="false" kind="src" path="/JOSM"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/livegps/.project b/livegps/.project
deleted file mode 100644
index 29f9c6a..0000000
--- a/livegps/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>livegps</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
-</projectDescription>
diff --git a/livegps/README b/livegps/README
deleted file mode 100644
index 373df65..0000000
--- a/livegps/README
+++ /dev/null
@@ -1,14 +0,0 @@
-liveGPS plugin for josm
------------------------
-
-Author: Frederik Ramm <frederik at remote.org>
-Public Domain.
-
-* Install like any other plugin
-* start the unix program "gpsd" on any machine in the network
- (http://gpsd.berlios.de/)
-* run josm
-* activate track acquisition in "LiveGPS" menu
-
-Some problems exist!
-
diff --git a/livegps/build.xml b/livegps/build.xml
deleted file mode 100644
index 96e45b6..0000000
--- a/livegps/build.xml
+++ /dev/null
@@ -1,182 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-** This is the build file for the livegps plugin
-**
-** Maintaining versions
-** ====================
-** see README.template
-**
-** Usage
-** =====
-** To build it run
-**
-** > ant dist
-**
-** To install the generated plugin locally (in your default plugin directory) run
-**
-** > ant install
-**
-** To build against the core in ../../core, create a correct manifest and deploy to
-** SVN,
-** set the properties commit.message and plugin.main.version
-** and run
-** > ant publish
-**
-**
--->
-<project name="livegps" default="dist" basedir=".">
- <property name="commit.message" value="Changed the constructor signature of the plugin main class"/>
- <property name="plugin.main.version" value="4980"/>
- <property name="josm" location="../../core/dist/josm-custom.jar"/>
- <property name="plugin.dist.dir" value="../../dist"/>
- <property name="plugin.build.dir" value="build"/>
- <property name="plugin.jar" value="${plugin.dist.dir}/${ant.project.name}.jar"/>
- <property name="ant.build.javac.target" value="1.5"/>
- <target name="init">
- <mkdir dir="${plugin.build.dir}"/>
- </target>
- <target name="compile" depends="init">
- <echo message="creating ${plugin.jar}"/>
- <javac srcdir="src" classpath="${josm}" debug="true" destdir="${plugin.build.dir}">
- <compilerarg value="-Xlint:deprecation"/>
- <compilerarg value="-Xlint:unchecked"/>
- </javac>
- </target>
- <target name="dist" depends="compile,revision">
- <copy todir="${plugin.build.dir}/images">
- <fileset dir="images"/>
- </copy>
- <copy todir="${plugin.build.dir}/data">
- <fileset dir="data"/>
- </copy>
- <jar destfile="${plugin.jar}" basedir="${plugin.build.dir}">
- <manifest>
- <attribute name="Author" value="Frederik Ramm"/>
- <attribute name="Plugin-Class" value="livegps.LiveGpsPlugin"/>
- <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
- <attribute name="Plugin-Description" value="Support live GPS input (moving dot) through a connection to gpsd server."/>
- <attribute name="Plugin-Icon" value="images/dialogs/livegps.png"/>
- <attribute name="Plugin-Link" value="http://wiki.openstreetmap.org/index.php/JOSM/Plugins/LiveGPS"/>
- <attribute name="Plugin-Mainversion" value="${plugin.main.version}"/>
- <attribute name="Plugin-Stage" value="50"/>
- <attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
- </manifest>
- </jar>
- </target>
- <target name="revision">
- <exec append="false" output="REVISION" executable="svn" failifexecutionfails="false">
- <env key="LANG" value="C"/>
- <arg value="info"/>
- <arg value="--xml"/>
- <arg value="."/>
- </exec>
- <xmlproperty file="REVISION" prefix="version" keepRoot="false" collapseAttributes="true"/>
- <delete file="REVISION"/>
- </target>
- <target name="clean">
- <delete dir="${plugin.build.dir}"/>
- <delete file="${plugin.jar}"/>
- </target>
- <target name="install" depends="dist">
- <property environment="env"/>
- <condition property="josm.plugins.dir" value="${env.APPDATA}/JOSM/plugins" else="${user.home}/.josm/plugins">
- <and>
- <os family="windows"/>
- </and>
- </condition>
- <copy file="${plugin.jar}" todir="${josm.plugins.dir}"/>
- </target>
- <!--
- ************************** Publishing the plugin ***********************************
- -->
- <!--
- ** extracts the JOSM release for the JOSM version in ../core and saves it in the
- ** property ${coreversion.info.entry.revision}
- **
- -->
- <target name="core-info">
- <exec append="false" output="core.info.xml" executable="svn" failifexecutionfails="false">
- <env key="LANG" value="C"/>
- <arg value="info"/>
- <arg value="--xml"/>
- <arg value="../../core"/>
- </exec>
- <xmlproperty file="core.info.xml" prefix="coreversion" keepRoot="true" collapseAttributes="true"/>
- <echo>Building against core revision ${coreversion.info.entry.revision}.</echo>
- <echo>Plugin-Mainversion is set to ${plugin.main.version}.</echo>
- <delete file="core.info.xml"/>
- </target>
- <!--
- ** commits the source tree for this plugin
- -->
- <target name="commit-current">
- <echo>Commiting the plugin source with message '${commit.message}' ...</echo>
- <exec append="true" output="svn.log" executable="svn" failifexecutionfails="false">
- <env key="LANG" value="C"/>
- <arg value="commit"/>
- <arg value="-m '${commit.message}'"/>
- <arg value="."/>
- </exec>
- </target>
- <!--
- ** updates (svn up) the source tree for this plugin
- -->
- <target name="update-current">
- <echo>Updating plugin source ...</echo>
- <exec append="true" output="svn.log" executable="svn" failifexecutionfails="false">
- <env key="LANG" value="C"/>
- <arg value="up"/>
- <arg value="."/>
- </exec>
- <echo>Updating ${plugin.jar} ...</echo>
- <exec append="true" output="svn.log" executable="svn" failifexecutionfails="false">
- <env key="LANG" value="C"/>
- <arg value="up"/>
- <arg value="../dist/${plugin.jar}"/>
- </exec>
- </target>
- <!--
- ** commits the plugin.jar
- -->
- <target name="commit-dist">
- <echo>
- ***** Properties of published ${plugin.jar} *****
- Commit message : '${commit.message}'
- Plugin-Mainversion: ${plugin.main.version}
- JOSM build version: ${coreversion.info.entry.revision}
- Plugin-Version : ${version.entry.commit.revision}
- ***** / Properties of published ${plugin.jar} *****
-
- Now commiting ${plugin.jar} ...
- </echo>
- <exec append="true" output="svn.log" executable="svn" failifexecutionfails="false">
- <env key="LANG" value="C"/>
- <arg value="-m '${commit.message}'"/>
- <arg value="commit"/>
- <arg value="${plugin.jar}"/>
- </exec>
- </target>
- <!-- ** make sure svn is present as a command line tool ** -->
- <target name="ensure-svn-present">
- <exec append="true" output="svn.log" executable="svn" failifexecutionfails="false" failonerror="false" resultproperty="svn.exit.code">
- <env key="LANG" value="C"/>
- <arg value="--version"/>
- </exec>
- <fail message="Fatal: command 'svn --version' failed. Please make sure svn is installed on your system.">
- <!-- return code not set at all? Most likely svn isn't installed -->
- <condition>
- <not>
- <isset property="svn.exit.code"/>
- </not>
- </condition>
- </fail>
- <fail message="Fatal: command 'svn --version' failed. Please make sure a working copy of svn is installed on your system.">
- <!-- error code from SVN? Most likely svn is not what we are looking on this system -->
- <condition>
- <isfailure code="${svn.exit.code}"/>
- </condition>
- </fail>
- </target>
- <target name="publish" depends="ensure-svn-present,core-info,commit-current,update-current,clean,dist,commit-dist">
- </target>
-</project>
diff --git a/livegps/images/autocentermenu.png b/livegps/images/autocentermenu.png
deleted file mode 100644
index 2b83bcf..0000000
Binary files a/livegps/images/autocentermenu.png and /dev/null differ
diff --git a/livegps/images/capturemenu.png b/livegps/images/capturemenu.png
deleted file mode 100644
index 232dbcd..0000000
Binary files a/livegps/images/capturemenu.png and /dev/null differ
diff --git a/livegps/images/centermenu.png b/livegps/images/centermenu.png
deleted file mode 100644
index 37a8c65..0000000
Binary files a/livegps/images/centermenu.png and /dev/null differ
diff --git a/livegps/images/dialogs/livegps.png b/livegps/images/dialogs/livegps.png
deleted file mode 100644
index c2f281b..0000000
Binary files a/livegps/images/dialogs/livegps.png and /dev/null differ
diff --git a/livegps/josm-livegps.launch b/livegps/josm-livegps.launch
deleted file mode 100644
index d2780b6..0000000
--- a/livegps/josm-livegps.launch
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/JOSM/src/org/openstreetmap/josm/gui/MainApplication.java"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JDK 6"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.openstreetmap.josm.gui.MainApplication"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="livegps"/>
-</launchConfiguration>
diff --git a/livegps/src/livegps/AppendableGpxTrackSegment.java b/livegps/src/livegps/AppendableGpxTrackSegment.java
deleted file mode 100644
index 1631cd3..0000000
--- a/livegps/src/livegps/AppendableGpxTrackSegment.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package livegps;
-
-import java.util.Collection;
-
-import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.gpx.GpxTrackSegment;
-import org.openstreetmap.josm.data.gpx.WayPoint;
-import org.openstreetmap.josm.tools.CopyList;
-
-/**
- * Thread safe implementation of GpxTrackSegement
- *
- */
-public class AppendableGpxTrackSegment implements GpxTrackSegment {
-
- private WayPoint[] wayPoints = new WayPoint[16];
- private int size;
- private Bounds bounds;
- private double length;
-
- public Bounds getBounds() {
- return bounds;
- }
-
- public Collection<WayPoint> getWayPoints() {
- return new CopyList<WayPoint>(wayPoints, size);
- }
-
- public void addWaypoint(WayPoint p) {
- if (wayPoints.length == size) {
- WayPoint[] newWaypoints = new WayPoint[wayPoints.length * 2];
- System.arraycopy(wayPoints, 0, newWaypoints, 0, wayPoints.length);
- wayPoints = newWaypoints;
- }
-
- if (size > 0) {
- Double distance = wayPoints[size - 1].getCoor().greatCircleDistance(p.getCoor());
- if (!distance.isNaN() && !distance.isInfinite()) {
- length += distance;
- }
- }
-
- if (bounds == null) {
- bounds = new Bounds(p.getCoor());
- } else {
- bounds.extend(p.getCoor());
- }
-
- wayPoints[size] = p;
- size++;
- }
-
- public double length() {
- return length;
- }
-
- @Override
- public int getUpdateCount() {
- return size;
- }
-
-}
diff --git a/livegps/src/livegps/LiveGpsAcquirer.java b/livegps/src/livegps/LiveGpsAcquirer.java
deleted file mode 100644
index e3f06af..0000000
--- a/livegps/src/livegps/LiveGpsAcquirer.java
+++ /dev/null
@@ -1,347 +0,0 @@
-package livegps;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.lang.Float;
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.InetAddress;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.coor.LatLon;
-
-import org.json.JSONObject;
-import org.json.JSONException;
-
-public class LiveGpsAcquirer implements Runnable {
- private static final String DEFAULT_HOST = "localhost";
- private static final int DEFAULT_PORT = 2947;
- private static final String C_HOST = "livegps.gpsd.host";
- private static final String C_PORT = "livegps.gpsd.port";
- private String gpsdHost;
- private int gpsdPort;
-
- private Socket gpsdSocket;
- private BufferedReader gpsdReader;
- private boolean connected = false;
- private boolean shutdownFlag = false;
- private boolean JSONProtocol = true;
-
- private final List<PropertyChangeListener> propertyChangeListener = new ArrayList<PropertyChangeListener>();
- private PropertyChangeEvent lastStatusEvent;
- private PropertyChangeEvent lastDataEvent;
-
- /**
- * Constructor, initializes the configurable settings.
- */
- public LiveGpsAcquirer() {
- super();
-
- gpsdHost = Main.pref.get(C_HOST, DEFAULT_HOST);
- gpsdPort = Main.pref.getInteger(C_PORT, DEFAULT_PORT);
- // put the settings back in to the preferences, makes keys appear.
- Main.pref.put(C_HOST, gpsdHost);
- Main.pref.putInteger(C_PORT, gpsdPort);
- }
-
- /**
- * Adds a property change listener to the acquirer.
- * @param listener the new listener
- */
- public void addPropertyChangeListener(PropertyChangeListener listener) {
- if (!propertyChangeListener.contains(listener)) {
- propertyChangeListener.add(listener);
- }
- }
-
- /**
- * Remove a property change listener from the acquirer.
- * @param listener the new listener
- */
- public void removePropertyChangeListener(PropertyChangeListener listener) {
- if (propertyChangeListener.contains(listener)) {
- propertyChangeListener.remove(listener);
- }
- }
-
- /**
- * Fire a gps status change event. Fires events with key "gpsstatus" and a {@link LiveGpsStatus}
- * object as value.
- * The status event may be sent any time.
- * @param status the status.
- * @param statusMessage the status message.
- */
- public void fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus status,
- String statusMessage) {
- PropertyChangeEvent event = new PropertyChangeEvent(this, "gpsstatus",
- null, new LiveGpsStatus(status, statusMessage));
-
- if (!event.equals(lastStatusEvent)) {
- firePropertyChangeEvent(event);
- lastStatusEvent = event;
- }
- }
-
- /**
- * Fire a gps data change event to all listeners. Fires events with key "gpsdata" and a
- * {@link LiveGpsData} object as values.
- * This event is only sent, when the suppressor permits it. This
- * event will cause the UI to re-draw itself, which has some performance penalty,
- * @param oldData the old gps data.
- * @param newData the new gps data.
- */
- public void fireGpsDataChangeEvent(LiveGpsData oldData, LiveGpsData newData) {
- PropertyChangeEvent event = new PropertyChangeEvent(this, "gpsdata",
- oldData, newData);
-
- if (!event.equals(lastDataEvent)) {
- firePropertyChangeEvent(event);
- lastDataEvent = event;
- }
- }
-
- /**
- * Fires the given event to all listeners.
- * @param event the event to fire.
- */
- protected void firePropertyChangeEvent(PropertyChangeEvent event) {
- for (PropertyChangeListener listener : propertyChangeListener) {
- listener.propertyChange(event);
- }
- }
-
- public void run() {
- LiveGpsData oldGpsData = null;
- LiveGpsData gpsData = null;
-
- shutdownFlag = false;
- while (!shutdownFlag) {
-
- while (!connected) {
- try {
- connect();
- } catch (IOException iox) {
- fireGpsStatusChangeEvent( LiveGpsStatus.GpsStatus.CONNECTION_FAILED, tr("Connection Failed"));
- try {
- Thread.sleep(1000);
- } catch (InterruptedException ignore) {}
- };
- }
-
- assert (connected);
-
- try {
- String line;
-
- // <FIXXME date="23.06.2007" author="cdaller">
- // TODO this read is blocking if gps is connected but has no
- // fix, so gpsd does not send positions
- line = gpsdReader.readLine();
- // </FIXXME>
- if (line == null)
- throw new IOException();
-
- if (JSONProtocol == true)
- gpsData = ParseJSON(line);
- else
- gpsData = ParseOld(line);
-
- if (gpsData == null)
- continue;
-
- fireGpsDataChangeEvent(oldGpsData, gpsData);
- oldGpsData = gpsData;
- } catch (IOException iox) {
- System.out.println("LiveGps: lost connection to gpsd");
- fireGpsStatusChangeEvent(
- LiveGpsStatus.GpsStatus.CONNECTION_FAILED,
- tr("Connection Failed"));
- disconnect();
- try {
- Thread.sleep(1000);
- } catch (InterruptedException ignore) {} ;
- // send warning to layer
- }
- }
-
- System.out.println("LiveGps: Disconnected from gpsd");
- fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus.DISCONNECTED,
- tr("Not connected"));
- disconnect();
- }
-
- public void shutdown() {
- shutdownFlag = true;
- }
-
- private void connect() throws IOException {
- JSONObject greeting;
- String line, type, release;
-
- System.out.println("LiveGps: trying to connect to gpsd at " + gpsdHost + ":" + gpsdPort);
- fireGpsStatusChangeEvent( LiveGpsStatus.GpsStatus.CONNECTING, tr("Connecting"));
-
- InetAddress[] addrs = InetAddress.getAllByName(gpsdHost);
- for (int i = 0; i < addrs.length && gpsdSocket == null; i++) {
- try {
- gpsdSocket = new Socket(addrs[i], gpsdPort);
- break;
- } catch (IOException e) {
- System.out.println("LiveGps: Could not open connection to gpsd: " + e);
- gpsdSocket = null;
- }
- }
-
- if (gpsdSocket == null || gpsdSocket.isConnected() == false)
- throw new IOException();
-
- /*
- * First emit the "w" symbol. The older version will activate, the newer one will ignore it.
- */
- gpsdSocket.getOutputStream().write(new byte[] { 'w', 13, 10 });
-
- gpsdReader = new BufferedReader(new InputStreamReader(gpsdSocket.getInputStream()));
- line = gpsdReader.readLine();
- if (line == null)
- return;
-
- try {
- greeting = new JSONObject(line);
- type = greeting.getString("class");
- if (type.equals("VERSION")) {
- release = greeting.getString("release");
- System.out.println("LiveGps: Connected to gpsd " + release);
- } else
- System.out.println("LiveGps: Unexpected JSON in gpsd greeting: " + line);
- } catch (JSONException jex) {
- if (line.startsWith("GPSD,")) {
- connected = true;
- JSONProtocol = false;
- System.out.println("LiveGps: Connected to old gpsd protocol version.");
- fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus.CONNECTED, tr("Connected"));
- }
- }
-
- if (JSONProtocol == true) {
- JSONObject Watch = new JSONObject();
- try {
- Watch.put("enable", true);
- Watch.put("json", true);
- } catch (JSONException je) {};
-
- String Request = "?WATCH=" + Watch.toString() + ";\n";
- gpsdSocket.getOutputStream().write(Request.getBytes());
-
- connected = true;
- fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus.CONNECTED, tr("Connected"));
- }
- }
-
- private void disconnect() {
- assert(gpsdSocket != null);
-
- connected = false;
-
- try {
- gpsdSocket.close();
- gpsdSocket = null;
- } catch (Exception e) {
- System.out.println("LiveGps: Unable to close socket; reconnection may not be possible");
- }
- }
-
- private LiveGpsData ParseJSON(String line) {
- JSONObject report;
- String type;
- double lat = 0;
- double lon = 0;
- float speed = 0;
- float course = 0;
- float epx = 0;
- float epy = 0;
-
- try {
- report = new JSONObject(line);
- type = report.getString("class");
- } catch (JSONException jex) {
- System.out.println("LiveGps: line read from gpsd is not a JSON object:" + line);
- return null;
- }
- if (!type.equals("TPV"))
- return null;
-
- try {
- lat = report.getDouble("lat");
- lon = report.getDouble("lon");
- speed = (new Float(report.getDouble("speed"))).floatValue();
- course = (new Float(report.getDouble("track"))).floatValue();
- if (report.has("epx"))
- epx = (new Float(report.getDouble("epx"))).floatValue();
- if (report.has("epy"))
- epy = (new Float(report.getDouble("epy"))).floatValue();
-
- return new LiveGpsData(lat, lon, course, speed, epx, epy);
- } catch (JSONException je) {}
-
- return null;
- }
-
- private LiveGpsData ParseOld(String line) {
- String words[];
- double lat = 0;
- double lon = 0;
- float speed = 0;
- float course = 0;
-
- words = line.split(",");
- if ((words.length == 0) || (!words[0].equals("GPSD")))
- return null;
-
- for (int i = 1; i < words.length; i++) {
- if ((words[i].length() < 2) || (words[i].charAt(1) != '=')) {
- // unexpected response.
- continue;
- }
-
- char what = words[i].charAt(0);
- String value = words[i].substring(2);
- switch (what) {
- case 'O':
- // full report, tab delimited.
- String[] status = value.split("\\s+");
- if (status.length >= 5) {
- lat = Double.parseDouble(status[3]);
- lon = Double.parseDouble(status[4]);
- try {
- speed = Float.parseFloat(status[9]);
- course = Float.parseFloat(status[8]);
- } catch (NumberFormatException nex) {}
- return new LiveGpsData(lat, lon, course, speed);
- }
- break;
- case 'P':
- // position report, tab delimited.
- String[] pos = value.split("\\s+");
- if (pos.length >= 2) {
- lat = Double.parseDouble(pos[0]);
- lon = Double.parseDouble(pos[1]);
- speed = Float.NaN;
- course = Float.NaN;
- return new LiveGpsData(lat, lon, course, speed);
- }
- break;
- default:
- // not interested
- }
- }
-
- return null;
- }
-}
diff --git a/livegps/src/livegps/LiveGpsData.java b/livegps/src/livegps/LiveGpsData.java
deleted file mode 100644
index c79ab9c..0000000
--- a/livegps/src/livegps/LiveGpsData.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/**
- *
- */
-package livegps;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.awt.Point;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Way;
-
-/**
- * @author cdaller
- *
- */
-public class LiveGpsData {
- private boolean fix;
- private LatLon latLon;
- private float course;
- private float speed;
- private float epx, epy;
- private String wayString;
- private Way way;
-
- /**
- * @param latitude
- * @param longitude
- * @param course
- * @param speed
- * @param haveFix
- */
- public LiveGpsData(double latitude, double longitude, float course, float speed) {
- super();
- this.fix = true;
- this.latLon = new LatLon(latitude, longitude);
- this.course = course;
- this.speed = speed;
- }
- /**
- * @param latitude
- * @param longitude
- * @param course
- * @param speed
- * @param haveFix
- * @param epx
- * @param epy
- */
- public LiveGpsData(double latitude, double longitude, float course, float speed, float epx, float epy) {
- super();
- this.fix = true;
- this.latLon = new LatLon(latitude, longitude);
- this.course = course;
- this.speed = speed;
- this.epx = epx;
- this.epy = epy;
- }
-
- /**
- * @return the course
- */
- public float getCourse() {
- return this.course;
- }
- /**
- * @param course the course to set
- */
- public void setCourse(float course) {
- this.course = course;
- }
- /**
- * @return the haveFix
- */
- public boolean isFix() {
- return this.fix;
- }
- /**
- * @param haveFix the haveFix to set
- */
- public void setFix(boolean haveFix) {
- this.fix = haveFix;
- }
- /**
- * @return the latitude
- */
- public double getLatitude() {
- return this.latLon.lat();
- }
- /**
- * @return the longitude
- */
- public double getLongitude() {
- return this.latLon.lon();
- }
- /**
- * @return the speed in metres per second!
- */
- public float getSpeed() {
- return this.speed;
- }
- /**
- * @param speed the speed to set
- */
- public void setSpeed(float speed) {
- this.speed = speed;
- }
-
- /**
- * @return the latlon
- */
- public LatLon getLatLon() {
- return this.latLon;
- }
-
- /**
- * @param latLon
- */
- public void setLatLon(LatLon latLon) {
- this.latLon = latLon;
- }
-
- public void setEpy(float epy) {
- this.epy = epy;
- }
-
- public void setEpx(float epx) {
- this.epx = epx;
- }
-
- public float getEpy() {
- return this.epy;
- }
-
- public float getEpx() {
- return this.epx;
- }
-
- public String toString() {
- return getClass().getSimpleName() + "[fix=" + fix + ", lat=" + latLon.lat()
- + ", long=" + latLon.lon() + ", speed=" + speed + ", course=" + course + "]";
- }
-
- /**
- * Returns the name of the way that is closest to the current coordinates or an
- * empty string if no way is around.
- *
- * @return the name of the way that is closest to the current coordinates.
- */
- public String getWayInfo() {
- if(wayString == null) {
- Way way = getWay();
- if(way != null) {
- StringBuilder builder = new StringBuilder();
- String tmp = way.get("name");
- if(tmp != null) {
- builder.append(tmp);
- } else {
- builder.append(tr("no name"));
- }
- tmp = way.get("ref");
- if(tmp != null) {
- builder.append(" (").append(tmp).append(")");
- }
- tmp = way.get("highway");
- if(tmp != null) {
- builder.append(" {").append(tmp).append("}");
- }
- String type = "";
- tmp = way.get("tunnel");
- if(tmp != null) {
- type = type + "T";
- }
- tmp = way.get("bridge");
- if(tmp != null) {
- type = type + "B";
- }
- if(type.length() > 0) {
- builder.append(" [").append(type).append("]");
- }
- wayString = builder.toString();
- } else {
- wayString = "";
- }
- }
- return wayString;
- }
-
- /**
- * Returns the closest way to this position.
- * @return the closest way to this position.
- */
- public Way getWay() {
- if(way == null && Main.map != null && Main.map.mapView != null) {
- Point xy = Main.map.mapView.getPoint(getLatLon());
- way = Main.map.mapView.getNearestWay(xy,
- OsmPrimitive.isUsablePredicate);
- }
- return way;
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#hashCode()
- */
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + Float.floatToIntBits(this.course);
- result = prime * result + ((this.latLon == null) ? 0 : this.latLon.hashCode());
- result = prime * result + Float.floatToIntBits(this.speed);
- return result;
- }
- /* (non-Javadoc)
- * @see java.lang.Object#equals(java.lang.Object)
- */
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- final LiveGpsData other = (LiveGpsData) obj;
- if (Float.floatToIntBits(this.course) != Float.floatToIntBits(other.course))
- return false;
- if (this.latLon == null) {
- if (other.latLon != null)
- return false;
- } else if (!this.latLon.equals(other.latLon))
- return false;
- if (Float.floatToIntBits(this.speed) != Float.floatToIntBits(other.speed))
- return false;
- return true;
- }
-}
diff --git a/livegps/src/livegps/LiveGpsDialog.java b/livegps/src/livegps/LiveGpsDialog.java
deleted file mode 100644
index d495a63..0000000
--- a/livegps/src/livegps/LiveGpsDialog.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- *
- */
-package livegps;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.GridLayout;
-import java.awt.event.KeyEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-
-import org.openstreetmap.josm.gui.MapFrame;
-import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
-import org.openstreetmap.josm.tools.Shortcut;
-
-/**
- * @author cdaller
- *
- */
-public class LiveGpsDialog extends ToggleDialog implements PropertyChangeListener {
- private static final long serialVersionUID = 6183400754671501117L;
- private JLabel statusLabel;
- private JLabel wayLabel;
- private JLabel latLabel;
- private JLabel longLabel;
- private JLabel courseLabel;
- private JLabel speedLabel;
- private JPanel panel;
-
- /**
- * @param name
- * @param iconName
- * @param tooltip
- * @param shortcut
- * @param preferredHeight
- */
- public LiveGpsDialog(final MapFrame mapFrame) {
- super(tr("Live GPS"), "livegps", tr("Show GPS data."),
- Shortcut.registerShortcut("subwindow:livegps", tr("Toggle: {0}", tr("Live GPS")),
- KeyEvent.VK_G, Shortcut.ALT_CTRL_SHIFT), 100);
- panel = new JPanel();
- panel.setLayout(new GridLayout(6,2));
- panel.add(new JLabel(tr("Status")));
- panel.add(statusLabel = new JLabel());
- panel.add(new JLabel(tr("Way Info")));
- panel.add(wayLabel = new JLabel());
- panel.add(new JLabel(tr("Latitude")));
- panel.add(latLabel = new JLabel());
- panel.add(new JLabel(tr("Longitude")));
- panel.add(longLabel = new JLabel());
- panel.add(new JLabel(tr("Speed")));
- panel.add(speedLabel = new JLabel());
- panel.add(new JLabel(tr("Course")));
- panel.add(courseLabel = new JLabel());
- createLayout(panel, true, null);
- }
-
- /* (non-Javadoc)
- * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
- */
- public void propertyChange(PropertyChangeEvent evt) {
- if (!isVisible())
- return;
- if("gpsdata".equals(evt.getPropertyName())) {
- LiveGpsData data = (LiveGpsData) evt.getNewValue();
- if(data.isFix()) {
-// fixLabel.setText("fix");
- panel.setBackground(Color.WHITE);
- latLabel.setText(data.getLatitude() + "deg");
- longLabel.setText(data.getLongitude() + "deg");
- double mySpeed = data.getSpeed() * 3.6f;
- speedLabel.setText((Math.round(mySpeed*100)/100) + "km/h"); // m(s to km/h
- courseLabel.setText(data.getCourse() + "deg");
-
- String wayString = data.getWayInfo();
- if(wayString.length() > 0) {
- wayLabel.setText(wayString);
- } else {
- wayLabel.setText(tr("unknown"));
- }
-
- } else {
-// fixLabel.setText("no fix");
- latLabel.setText("");
- longLabel.setText("");
- speedLabel.setText("");
- courseLabel.setText("");
- panel.setBackground(Color.RED);
- }
- } else if ("gpsstatus".equals(evt.getPropertyName())) {
- LiveGpsStatus status = (LiveGpsStatus) evt.getNewValue();
- statusLabel.setText(status.getStatusMessage());
- if(status.getStatus() != LiveGpsStatus.GpsStatus.CONNECTED) {
- panel.setBackground(Color.RED);
- } else {
- panel.setBackground(Color.WHITE);
- }
- }
-
- }
-}
diff --git a/livegps/src/livegps/LiveGpsLayer.java b/livegps/src/livegps/LiveGpsLayer.java
deleted file mode 100644
index 22b1e0d..0000000
--- a/livegps/src/livegps/LiveGpsLayer.java
+++ /dev/null
@@ -1,231 +0,0 @@
-package livegps;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.awt.Color;
-import java.awt.Graphics2D;
-import java.awt.Point;
-import java.awt.geom.Point2D;
-import java.awt.Rectangle;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.data.gpx.GpxData;
-import org.openstreetmap.josm.data.gpx.GpxTrack;
-import org.openstreetmap.josm.data.gpx.WayPoint;
-import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.layer.GpxLayer;
-
-public class LiveGpsLayer extends GpxLayer implements PropertyChangeListener {
- public static final String LAYER_NAME = tr("LiveGPS layer");
- public static final String C_LIVEGPS_COLOR_POSITION = "color.livegps.position";
- public static final String C_LIVEGPS_COLOR_POSITION_ESTIMATE = "color.livegps.position_estimate";
-
- private static final int DEFAULT_REFRESH_INTERVAL = 250;
- private static final int DEFAULT_CENTER_INTERVAL = 5000;
- private static final int DEFAULT_CENTER_FACTOR = 80;
- private static final String oldC_REFRESH_INTERVAL = "livegps.refreshinterval"; /* in seconds */
- private static final String C_REFRESH_INTERVAL = "livegps.refresh_interval_msec"; /* in msec */
- private static final String C_CENTER_INTERVAL = "livegps.center_interval_msec"; /* in msec */
- private static final String C_CENTER_FACTOR = "livegps.center_factor" /* in percent */;
- private static final String C_CURSOR_H = "livegps.cursor_height"; /* in pixels */
- private static final String C_CURSOR_W = "livegps.cursor_width"; /* in pixels */
- private static final String C_CURSOR_T = "livegps.cursor_thickness"; /* in pixels */
- private int refreshInterval;
- private int centerInterval;
- private double centerFactor;
- private long lastRedraw = 0;
- private long lastCenter = 0;
-
- LiveGpsData lastData;
- LatLon lastPos;
- WayPoint lastPoint;
- private final AppendableGpxTrackSegment trackSegment;
- boolean autocenter;
- private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
-
- public LiveGpsLayer(GpxData data) {
- super(data, LAYER_NAME);
- trackSegment = new AppendableGpxTrackSegment();
-
- Map<String, Object> attr = new HashMap<String, Object>();
- attr.put("desc", "josm live gps");
-
- GpxTrack trackBeingWritten = new SingleSegmentGpxTrack(trackSegment, attr);
- data.tracks.add(trackBeingWritten);
-
- initIntervals();
- }
-
- void setCurrentPosition(double lat, double lon) {
- LatLon thisPos = new LatLon(lat, lon);
- if ((lastPos != null) && (thisPos.equalsEpsilon(lastPos)))
- // no change in position
- // maybe show a "paused" cursor or some such
- return;
-
- lastPos = thisPos;
- lastPoint = new WayPoint(thisPos);
- lastPoint.attr.put("time", dateFormat.format(new Date()));
- trackSegment.addWaypoint(lastPoint);
-
- if (autocenter)
- conditionalCenter(thisPos);
- }
-
- public void center() {
- if (lastPoint != null)
- Main.map.mapView.zoomTo(lastPoint.getCoor());
- }
-
- public void conditionalCenter(LatLon Pos) {
- Point2D P = Main.map.mapView.getPoint2D(Pos);
- Rectangle rv = Main.map.mapView.getBounds(null);
- Date date = new Date();
- long current = date.getTime();
-
- rv.grow(-(int)(rv.getHeight() * centerFactor), -(int)(rv.getWidth() * centerFactor));
-
- if (!rv.contains(P) || (centerInterval > 0 && current - lastCenter >= centerInterval)) {
- Main.map.mapView.zoomTo(Pos);
- lastCenter = current;
- }
- }
-
- public void setAutoCenter(boolean ac) {
- autocenter = ac;
- }
-
- @Override
- public void paint(Graphics2D g, MapView mv, Bounds bounds) {
- super.paint(g, mv, bounds);
-
- if (lastPoint == null)
- return;
-
- Point screen = mv.getPoint(lastPoint.getCoor());
-
- int TriaHeight = Main.pref.getInteger(C_CURSOR_H, 20);
- int TriaWidth = Main.pref.getInteger(C_CURSOR_W, 10);
- int TriaThick = Main.pref.getInteger(C_CURSOR_T, 4);
-
- /*
- * Draw a bold triangle.
- * In case of deep zoom draw also a thin DOP oval.
- */
-
- g.setColor(Main.pref.getColor(C_LIVEGPS_COLOR_POSITION_ESTIMATE, Color.CYAN));
- int w, h;
- double ppm = 100 / mv.getDist100Pixel(); /* pixels per metre */
-
- w = (int )Math.round(lastData.getEpx() * ppm);
- h = (int )Math.round(lastData.getEpy() * ppm);
-
- if (w > TriaWidth || h > TriaWidth) {
- int xo, yo;
-
- yo = screen.y - Math.round(h/2);
- xo = screen.x - Math.round(w/2);
-
- g.drawOval(xo, yo, w, h);
- }
-
- int[] x = new int[4];
- int[] y = new int[4];
- float course = lastData.getCourse();
- float csin = (float )Math.sin(Math.toRadians(course));
- float ccos = (float )Math.cos(Math.toRadians(course));
- float csin120 = (float )Math.sin(Math.toRadians(course + 120));
- float ccos120 = (float )Math.cos(Math.toRadians(course + 120));
- float csin240 = (float )Math.sin(Math.toRadians(course + 240));
- float ccos240 = (float )Math.cos(Math.toRadians(course + 240));
-
- g.setColor(Main.pref.getColor(C_LIVEGPS_COLOR_POSITION, Color.RED));
-
- for (int i = 0; i < TriaThick; i++, TriaHeight--, TriaWidth--) {
-
- x[0] = screen.x + Math.round(TriaHeight * csin);
- y[0] = screen.y - Math.round(TriaHeight * ccos);
- x[1] = screen.x + Math.round(TriaWidth * csin120);
- y[1] = screen.y - Math.round(TriaWidth * ccos120);
- x[2] = screen.x;
- y[2] = screen.y;
- x[3] = screen.x + Math.round(TriaWidth * csin240);
- y[3] = screen.y - Math.round(TriaWidth * ccos240);
-
- g.drawPolygon(x, y, 4);
- }
-
- }
-
- /* (non-Javadoc)
- * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
- */
- public void propertyChange(PropertyChangeEvent evt) {
- if (!isVisible()) {
- return;
- }
- if ("gpsdata".equals(evt.getPropertyName())) {
- lastData = (LiveGpsData) evt.getNewValue();
- if (lastData.isFix()) {
- setCurrentPosition(lastData.getLatitude(), lastData.getLongitude());
- if (allowRedraw())
- Main.map.repaint();
- }
- }
- }
-
- /**
- * Check, if a redraw is currently allowed.
- *
- * @return true, if a redraw is permitted, false, if a re-draw
- * should be suppressed.
- */
- private boolean allowRedraw() {
- Date date = new Date();
- long current = date.getTime();
-
- if (current - lastRedraw >= refreshInterval) {
- lastRedraw = current;
- return true;
- } else
- return false;
- }
-
- /**
- * Retrieve the refreshInterval and centerInterval from the configuration. Be compatible
- * with old version that stored refreshInterval in seconds. If no such configuration key
- * exists, it will be initialized here.
- */
- private void initIntervals() {
- if ((refreshInterval = Main.pref.getInteger(oldC_REFRESH_INTERVAL, 0)) != 0) {
- refreshInterval *= 1000;
- Main.pref.put(oldC_REFRESH_INTERVAL, null);
- } else
- refreshInterval = Main.pref.getInteger(C_REFRESH_INTERVAL, DEFAULT_REFRESH_INTERVAL);
-
- centerInterval = Main.pref.getInteger(C_CENTER_INTERVAL, DEFAULT_CENTER_INTERVAL);
- centerFactor = Main.pref.getInteger(C_CENTER_FACTOR, DEFAULT_CENTER_FACTOR);
- if (centerFactor <= 1 || centerFactor >= 99)
- centerFactor = DEFAULT_CENTER_FACTOR;
-
- Main.pref.putInteger(C_REFRESH_INTERVAL, refreshInterval);
- Main.pref.putInteger(C_CENTER_INTERVAL, centerInterval);
- Main.pref.putInteger(C_CENTER_FACTOR, (int )centerFactor);
-
- /*
- * Do one time conversion of factor: user value means "how big is inner rectangle
- * comparing to screen in percent", machine value means "what is the shrink ratio
- * for each dimension on _both_ sides".
- */
-
- centerFactor = (100 - centerFactor) / 2 / 100;
- }
-}
diff --git a/livegps/src/livegps/LiveGpsPlugin.java b/livegps/src/livegps/LiveGpsPlugin.java
deleted file mode 100644
index c9e2373..0000000
--- a/livegps/src/livegps/LiveGpsPlugin.java
+++ /dev/null
@@ -1,234 +0,0 @@
-package livegps;
-
-import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
-import static org.openstreetmap.josm.tools.I18n.marktr;
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.KeyEvent;
-import java.beans.PropertyChangeListener;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.JosmAction;
-import org.openstreetmap.josm.data.gpx.GpxData;
-import org.openstreetmap.josm.gui.MainMenu;
-import org.openstreetmap.josm.gui.MapFrame;
-import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
-import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.plugins.Plugin;
-import org.openstreetmap.josm.plugins.PluginInformation;
-import org.openstreetmap.josm.tools.Shortcut;
-
-public class LiveGpsPlugin extends Plugin implements LayerChangeListener {
- private boolean enabled = false;
- private LiveGpsAcquirer acquirer = null;
- private Thread acquirerThread = null;
- private JMenu lgpsmenu = null;
- private JCheckBoxMenuItem lgpscapture;
- private JCheckBoxMenuItem lgpsautocenter;
- private LiveGpsDialog lgpsdialog;
- /* List of foreign (e.g. other plugins) subscribers */
- List<PropertyChangeListener> listenerQueue = new ArrayList<PropertyChangeListener>();
-
- private GpxData data = new GpxData();
- private LiveGpsLayer lgpslayer = null;
-
- public class CaptureAction extends JosmAction {
- public CaptureAction() {
- super(
- tr("Capture GPS Track"),
- "capturemenu",
- tr("Connect to gpsd server and show current position in LiveGPS layer."),
- Shortcut.registerShortcut("menu:livegps:capture", tr(
- "Menu: {0}", tr("Capture GPS Track")),
- KeyEvent.VK_R, Shortcut.CTRL), true);
- }
-
- public void actionPerformed(ActionEvent e) {
- enableTracking(lgpscapture.isSelected());
- }
- }
-
- public class CenterAction extends JosmAction {
- public CenterAction() {
- super(tr("Center Once"), "centermenu",
- tr("Center the LiveGPS layer to current position."),
- Shortcut.registerShortcut("edit:centergps", tr("Edit: {0}",
- tr("Center Once")), KeyEvent.VK_HOME,
- Shortcut.DIRECT), true);
- }
-
- public void actionPerformed(ActionEvent e) {
- if (lgpslayer != null) {
- lgpslayer.center();
- }
- }
- }
-
- public class AutoCenterAction extends JosmAction {
- public AutoCenterAction() {
- super(
- tr("Auto-Center"),
- "autocentermenu",
- tr("Continuously center the LiveGPS layer to current position."),
- Shortcut.registerShortcut("menu:livegps:autocenter", tr(
- "Menu: {0}", tr("Capture GPS Track")),
- KeyEvent.VK_HOME, Shortcut.CTRL), true);
- }
-
- public void actionPerformed(ActionEvent e) {
- if (lgpslayer != null) {
- setAutoCenter(lgpsautocenter.isSelected());
- }
- }
- }
-
- public void activeLayerChange(Layer oldLayer, Layer newLayer) {
- }
-
- public void layerAdded(Layer newLayer) {
- }
-
- public void layerRemoved(Layer oldLayer) {
- if (oldLayer != lgpslayer)
- return;
-
- enableTracking(false);
- lgpscapture.setSelected(false);
- MapView.removeLayerChangeListener(this);
- lgpslayer = null;
- }
-
- public LiveGpsPlugin(PluginInformation info) {
- super(info);
- MainMenu menu = Main.main.menu;
- lgpsmenu = menu.addMenu(marktr("LiveGPS"), KeyEvent.VK_G,
- menu.defaultMenuPos, ht("/Plugin/LiveGPS"));
-
- JosmAction captureAction = new CaptureAction();
- lgpscapture = new JCheckBoxMenuItem(captureAction);
- lgpsmenu.add(lgpscapture);
- lgpscapture.setAccelerator(captureAction.getShortcut().getKeyStroke());
-
- JosmAction centerAction = new CenterAction();
- JMenuItem centerMenu = new JMenuItem(centerAction);
- lgpsmenu.add(centerMenu);
- centerMenu.setAccelerator(centerAction.getShortcut().getKeyStroke());
-
- JosmAction autoCenterAction = new AutoCenterAction();
- lgpsautocenter = new JCheckBoxMenuItem(autoCenterAction);
- lgpsmenu.add(lgpsautocenter);
- lgpsautocenter.setAccelerator(autoCenterAction.getShortcut().getKeyStroke());
- }
-
- /**
- * Set to <code>true</code> if the current position should always be in the center of the map.
- * @param autoCenter if <code>true</code> the map is always centered.
- */
- public void setAutoCenter(boolean autoCenter) {
- lgpsautocenter.setSelected(autoCenter); // just in case this method was
- // not called from the menu
- if (lgpslayer != null) {
- lgpslayer.setAutoCenter(autoCenter);
- if (autoCenter)
- lgpslayer.center();
- }
- }
-
- /**
- * Returns <code>true</code> if autocenter is selected.
- * @return <code>true</code> if autocenter is selected.
- */
- public boolean isAutoCenter() {
- return lgpsautocenter.isSelected();
- }
-
- /**
- * Enable or disable gps tracking
- * @param enable if <code>true</code> tracking is started.
- */
- public void enableTracking(boolean enable) {
-
- if (enable && !enabled) {
- assert (acquirer == null);
- assert (acquirerThread == null);
-
- acquirer = new LiveGpsAcquirer();
- acquirerThread = new Thread(acquirer);
-
- if (lgpslayer == null) {
- lgpslayer = new LiveGpsLayer(data);
- Main.main.addLayer(lgpslayer);
- MapView.addLayerChangeListener(this);
- lgpslayer.setAutoCenter(isAutoCenter());
- }
-
- acquirer.addPropertyChangeListener(lgpslayer);
- acquirer.addPropertyChangeListener(lgpsdialog);
- for (PropertyChangeListener listener : listenerQueue)
- acquirer.addPropertyChangeListener(listener);
-
- acquirerThread.start();
-
- enabled = true;
-
- } else if (!enable && enabled) {
- assert (lgpslayer != null);
- assert (acquirer != null);
- assert (acquirerThread != null);
-
- acquirer.shutdown();
- acquirer = null;
- acquirerThread = null;
-
- enabled = false;
- }
- }
-
- /**
- * Add a listener for gps events.
- * @param listener the listener.
- */
- public void addPropertyChangeListener(PropertyChangeListener listener) {
- assert(!listenerQueue.contains(listener));
-
- listenerQueue.add(listener);
- if (acquirer != null)
- acquirer.addPropertyChangeListener(listener);
- }
-
- /**
- * Remove a listener for gps events.
- * @param listener the listener.
- */
- public void removePropertyChangeListener(PropertyChangeListener listener) {
- assert(listenerQueue.contains(listener));
-
- listenerQueue.remove(listener);
- if (acquirer != null)
- acquirer.removePropertyChangeListener(listener);
- }
-
- /* (non-Javadoc)
- * @see org.openstreetmap.josm.plugins.Plugin#mapFrameInitialized(org.openstreetmap.josm.gui.MapFrame, org.openstreetmap.josm.gui.MapFrame)
- */
- @Override
- public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
- if (newFrame != null)
- newFrame.addToggleDialog(lgpsdialog = new LiveGpsDialog(newFrame));
- }
-
- /**
- * @return the lgpsmenu
- */
- public JMenu getLgpsMenu() {
- return this.lgpsmenu;
- }
-}
diff --git a/livegps/src/livegps/LiveGpsStatus.java b/livegps/src/livegps/LiveGpsStatus.java
deleted file mode 100644
index 260298e..0000000
--- a/livegps/src/livegps/LiveGpsStatus.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- *
- */
-package livegps;
-
-/**
- * @author cdaller
- *
- */
-public class LiveGpsStatus {
- public enum GpsStatus {CONNECTING, CONNECTED, DISCONNECTED, CONNECTION_FAILED};
- private String statusMessage;
- private GpsStatus status;
-
- /**
- * @param status
- * @param statusMessage
- */
- public LiveGpsStatus(GpsStatus status, String statusMessage) {
- super();
- this.status = status;
- this.statusMessage = statusMessage;
- }
-/**
- * @return the status
- */
- public GpsStatus getStatus() {
- return this.status;
- }
- /**
- * @param status the status to set
- */
- public void setStatus(GpsStatus status) {
- this.status = status;
- }
- /**
- * @return the statusMessage
- */
- public String getStatusMessage() {
- return this.statusMessage;
- }
- /**
- * @param statusMessage the statusMessage to set
- */
- public void setStatusMessage(String statusMessage) {
- this.statusMessage = statusMessage;
- }
-
-}
diff --git a/livegps/src/livegps/SingleSegmentGpxTrack.java b/livegps/src/livegps/SingleSegmentGpxTrack.java
deleted file mode 100644
index 4df90aa..0000000
--- a/livegps/src/livegps/SingleSegmentGpxTrack.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package livegps;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-
-import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.gpx.GpxTrack;
-import org.openstreetmap.josm.data.gpx.GpxTrackSegment;
-
-public class SingleSegmentGpxTrack implements GpxTrack {
-
- private final Map<String, Object> attributes;
- private final GpxTrackSegment trackSegment;
-
- public SingleSegmentGpxTrack(GpxTrackSegment trackSegment, Map<String, Object> attributes) {
- this.attributes = Collections.unmodifiableMap(attributes);
- this.trackSegment = trackSegment;
- }
-
-
- public Map<String, Object> getAttributes() {
- return attributes;
- }
-
- public Bounds getBounds() {
- return trackSegment.getBounds();
- }
-
- public Collection<GpxTrackSegment> getSegments() {
- return Collections.singleton(trackSegment);
- }
-
- public double length() {
- return trackSegment.length();
- }
-
- @Override
- public int getUpdateCount() {
- return trackSegment.getUpdateCount();
- }
-
-}
diff --git a/livegps/src/org/json/JSONArray.java b/livegps/src/org/json/JSONArray.java
deleted file mode 100644
index c3c1351..0000000
--- a/livegps/src/org/json/JSONArray.java
+++ /dev/null
@@ -1,918 +0,0 @@
-package org.json;
-
-/*
-Copyright (c) 2002 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-import java.io.IOException;
-import java.io.Writer;
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * A JSONArray is an ordered sequence of values. Its external text form is a
- * string wrapped in square brackets with commas separating the values. The
- * internal form is an object having <code>get</code> and <code>opt</code>
- * methods for accessing the values by index, and <code>put</code> methods for
- * adding or replacing values. The values can be any of these types:
- * <code>Boolean</code>, <code>JSONArray</code>, <code>JSONObject</code>,
- * <code>Number</code>, <code>String</code>, or the
- * <code>JSONObject.NULL object</code>.
- * <p>
- * The constructor can convert a JSON text into a Java object. The
- * <code>toString</code> method converts to JSON text.
- * <p>
- * A <code>get</code> method returns a value if one can be found, and throws an
- * exception if one cannot be found. An <code>opt</code> method returns a
- * default value instead of throwing an exception, and so is useful for
- * obtaining optional values.
- * <p>
- * The generic <code>get()</code> and <code>opt()</code> methods return an
- * object which you can cast or query for type. There are also typed
- * <code>get</code> and <code>opt</code> methods that do type checking and type
- * coercion for you.
- * <p>
- * The texts produced by the <code>toString</code> methods strictly conform to
- * JSON syntax rules. The constructors are more forgiving in the texts they will
- * accept:
- * <ul>
- * <li>An extra <code>,</code> <small>(comma)</small> may appear just
- * before the closing bracket.</li>
- * <li>The <code>null</code> value will be inserted when there
- * is <code>,</code> <small>(comma)</small> elision.</li>
- * <li>Strings may be quoted with <code>'</code> <small>(single
- * quote)</small>.</li>
- * <li>Strings do not need to be quoted at all if they do not begin with a quote
- * or single quote, and if they do not contain leading or trailing spaces,
- * and if they do not contain any of these characters:
- * <code>{ } [ ] / \ : , = ; #</code> and if they do not look like numbers
- * and if they are not the reserved words <code>true</code>,
- * <code>false</code>, or <code>null</code>.</li>
- * <li>Values can be separated by <code>;</code> <small>(semicolon)</small> as
- * well as by <code>,</code> <small>(comma)</small>.</li>
- * <li>Numbers may have the
- * <code>0x-</code> <small>(hex)</small> prefix.</li>
- * </ul>
-
- * @author JSON.org
- * @version 2009-04-14
- */
-public class JSONArray {
-
-
- /**
- * The arrayList where the JSONArray's properties are kept.
- */
- private ArrayList myArrayList;
-
-
- /**
- * Construct an empty JSONArray.
- */
- public JSONArray() {
- this.myArrayList = new ArrayList();
- }
-
- /**
- * Construct a JSONArray from a JSONTokener.
- * @param x A JSONTokener
- * @throws JSONException If there is a syntax error.
- */
- public JSONArray(JSONTokener x) throws JSONException {
- this();
- char c = x.nextClean();
- char q;
- if (c == '[') {
- q = ']';
- } else if (c == '(') {
- q = ')';
- } else {
- throw x.syntaxError("A JSONArray text must start with '['");
- }
- if (x.nextClean() == ']') {
- return;
- }
- x.back();
- for (;;) {
- if (x.nextClean() == ',') {
- x.back();
- this.myArrayList.add(null);
- } else {
- x.back();
- this.myArrayList.add(x.nextValue());
- }
- c = x.nextClean();
- switch (c) {
- case ';':
- case ',':
- if (x.nextClean() == ']') {
- return;
- }
- x.back();
- break;
- case ']':
- case ')':
- if (q != c) {
- throw x.syntaxError("Expected a '" + new Character(q) + "'");
- }
- return;
- default:
- throw x.syntaxError("Expected a ',' or ']'");
- }
- }
- }
-
-
- /**
- * Construct a JSONArray from a source JSON text.
- * @param source A string that begins with
- * <code>[</code> <small>(left bracket)</small>
- * and ends with <code>]</code> <small>(right bracket)</small>.
- * @throws JSONException If there is a syntax error.
- */
- public JSONArray(String source) throws JSONException {
- this(new JSONTokener(source));
- }
-
-
- /**
- * Construct a JSONArray from a Collection.
- * @param collection A Collection.
- */
- public JSONArray(Collection collection) {
- this.myArrayList = new ArrayList();
- if (collection != null) {
- Iterator iter = collection.iterator();
- while (iter.hasNext()) {
- Object o = iter.next();
- this.myArrayList.add(JSONObject.wrap(o));
- }
- }
- }
-
-
- /**
- * Construct a JSONArray from an array
- * @throws JSONException If not an array.
- */
- public JSONArray(Object array) throws JSONException {
- this();
- if (array.getClass().isArray()) {
- int length = Array.getLength(array);
- for (int i = 0; i < length; i += 1) {
- this.put(JSONObject.wrap(Array.get(array, i)));
- }
- } else {
- throw new JSONException(
-"JSONArray initial value should be a string or collection or array.");
- }
- }
-
-
- /**
- * Get the object value associated with an index.
- * @param index
- * The index must be between 0 and length() - 1.
- * @return An object value.
- * @throws JSONException If there is no value for the index.
- */
- public Object get(int index) throws JSONException {
- Object o = opt(index);
- if (o == null) {
- throw new JSONException("JSONArray[" + index + "] not found.");
- }
- return o;
- }
-
-
- /**
- * Get the boolean value associated with an index.
- * The string values "true" and "false" are converted to boolean.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return The truth.
- * @throws JSONException If there is no value for the index or if the
- * value is not convertable to boolean.
- */
- public boolean getBoolean(int index) throws JSONException {
- Object o = get(index);
- if (o.equals(Boolean.FALSE) ||
- (o instanceof String &&
- ((String)o).equalsIgnoreCase("false"))) {
- return false;
- } else if (o.equals(Boolean.TRUE) ||
- (o instanceof String &&
- ((String)o).equalsIgnoreCase("true"))) {
- return true;
- }
- throw new JSONException("JSONArray[" + index + "] is not a Boolean.");
- }
-
-
- /**
- * Get the double value associated with an index.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return The value.
- * @throws JSONException If the key is not found or if the value cannot
- * be converted to a number.
- */
- public double getDouble(int index) throws JSONException {
- Object o = get(index);
- try {
- return o instanceof Number ?
- ((Number)o).doubleValue() :
- Double.valueOf((String)o).doubleValue();
- } catch (Exception e) {
- throw new JSONException("JSONArray[" + index +
- "] is not a number.");
- }
- }
-
-
- /**
- * Get the int value associated with an index.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return The value.
- * @throws JSONException If the key is not found or if the value cannot
- * be converted to a number.
- * if the value cannot be converted to a number.
- */
- public int getInt(int index) throws JSONException {
- Object o = get(index);
- return o instanceof Number ?
- ((Number)o).intValue() : (int)getDouble(index);
- }
-
-
- /**
- * Get the JSONArray associated with an index.
- * @param index The index must be between 0 and length() - 1.
- * @return A JSONArray value.
- * @throws JSONException If there is no value for the index. or if the
- * value is not a JSONArray
- */
- public JSONArray getJSONArray(int index) throws JSONException {
- Object o = get(index);
- if (o instanceof JSONArray) {
- return (JSONArray)o;
- }
- throw new JSONException("JSONArray[" + index +
- "] is not a JSONArray.");
- }
-
-
- /**
- * Get the JSONObject associated with an index.
- * @param index subscript
- * @return A JSONObject value.
- * @throws JSONException If there is no value for the index or if the
- * value is not a JSONObject
- */
- public JSONObject getJSONObject(int index) throws JSONException {
- Object o = get(index);
- if (o instanceof JSONObject) {
- return (JSONObject)o;
- }
- throw new JSONException("JSONArray[" + index +
- "] is not a JSONObject.");
- }
-
-
- /**
- * Get the long value associated with an index.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return The value.
- * @throws JSONException If the key is not found or if the value cannot
- * be converted to a number.
- */
- public long getLong(int index) throws JSONException {
- Object o = get(index);
- return o instanceof Number ?
- ((Number)o).longValue() : (long)getDouble(index);
- }
-
-
- /**
- * Get the string associated with an index.
- * @param index The index must be between 0 and length() - 1.
- * @return A string value.
- * @throws JSONException If there is no value for the index.
- */
- public String getString(int index) throws JSONException {
- return get(index).toString();
- }
-
-
- /**
- * Determine if the value is null.
- * @param index The index must be between 0 and length() - 1.
- * @return true if the value at the index is null, or if there is no value.
- */
- public boolean isNull(int index) {
- return JSONObject.NULL.equals(opt(index));
- }
-
-
- /**
- * Make a string from the contents of this JSONArray. The
- * <code>separator</code> string is inserted between each element.
- * Warning: This method assumes that the data structure is acyclical.
- * @param separator A string that will be inserted between the elements.
- * @return a string.
- * @throws JSONException If the array contains an invalid number.
- */
- public String join(String separator) throws JSONException {
- int len = length();
- StringBuffer sb = new StringBuffer();
-
- for (int i = 0; i < len; i += 1) {
- if (i > 0) {
- sb.append(separator);
- }
- sb.append(JSONObject.valueToString(this.myArrayList.get(i)));
- }
- return sb.toString();
- }
-
-
- /**
- * Get the number of elements in the JSONArray, included nulls.
- *
- * @return The length (or size).
- */
- public int length() {
- return this.myArrayList.size();
- }
-
-
- /**
- * Get the optional object value associated with an index.
- * @param index The index must be between 0 and length() - 1.
- * @return An object value, or null if there is no
- * object at that index.
- */
- public Object opt(int index) {
- return (index < 0 || index >= length()) ?
- null : this.myArrayList.get(index);
- }
-
-
- /**
- * Get the optional boolean value associated with an index.
- * It returns false if there is no value at that index,
- * or if the value is not Boolean.TRUE or the String "true".
- *
- * @param index The index must be between 0 and length() - 1.
- * @return The truth.
- */
- public boolean optBoolean(int index) {
- return optBoolean(index, false);
- }
-
-
- /**
- * Get the optional boolean value associated with an index.
- * It returns the defaultValue if there is no value at that index or if
- * it is not a Boolean or the String "true" or "false" (case insensitive).
- *
- * @param index The index must be between 0 and length() - 1.
- * @param defaultValue A boolean default.
- * @return The truth.
- */
- public boolean optBoolean(int index, boolean defaultValue) {
- try {
- return getBoolean(index);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
-
- /**
- * Get the optional double value associated with an index.
- * NaN is returned if there is no value for the index,
- * or if the value is not a number and cannot be converted to a number.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return The value.
- */
- public double optDouble(int index) {
- return optDouble(index, Double.NaN);
- }
-
-
- /**
- * Get the optional double value associated with an index.
- * The defaultValue is returned if there is no value for the index,
- * or if the value is not a number and cannot be converted to a number.
- *
- * @param index subscript
- * @param defaultValue The default value.
- * @return The value.
- */
- public double optDouble(int index, double defaultValue) {
- try {
- return getDouble(index);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
-
- /**
- * Get the optional int value associated with an index.
- * Zero is returned if there is no value for the index,
- * or if the value is not a number and cannot be converted to a number.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return The value.
- */
- public int optInt(int index) {
- return optInt(index, 0);
- }
-
-
- /**
- * Get the optional int value associated with an index.
- * The defaultValue is returned if there is no value for the index,
- * or if the value is not a number and cannot be converted to a number.
- * @param index The index must be between 0 and length() - 1.
- * @param defaultValue The default value.
- * @return The value.
- */
- public int optInt(int index, int defaultValue) {
- try {
- return getInt(index);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
-
- /**
- * Get the optional JSONArray associated with an index.
- * @param index subscript
- * @return A JSONArray value, or null if the index has no value,
- * or if the value is not a JSONArray.
- */
- public JSONArray optJSONArray(int index) {
- Object o = opt(index);
- return o instanceof JSONArray ? (JSONArray)o : null;
- }
-
-
- /**
- * Get the optional JSONObject associated with an index.
- * Null is returned if the key is not found, or null if the index has
- * no value, or if the value is not a JSONObject.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return A JSONObject value.
- */
- public JSONObject optJSONObject(int index) {
- Object o = opt(index);
- return o instanceof JSONObject ? (JSONObject)o : null;
- }
-
-
- /**
- * Get the optional long value associated with an index.
- * Zero is returned if there is no value for the index,
- * or if the value is not a number and cannot be converted to a number.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return The value.
- */
- public long optLong(int index) {
- return optLong(index, 0);
- }
-
-
- /**
- * Get the optional long value associated with an index.
- * The defaultValue is returned if there is no value for the index,
- * or if the value is not a number and cannot be converted to a number.
- * @param index The index must be between 0 and length() - 1.
- * @param defaultValue The default value.
- * @return The value.
- */
- public long optLong(int index, long defaultValue) {
- try {
- return getLong(index);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
-
- /**
- * Get the optional string value associated with an index. It returns an
- * empty string if there is no value at that index. If the value
- * is not a string and is not null, then it is coverted to a string.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return A String value.
- */
- public String optString(int index) {
- return optString(index, "");
- }
-
-
- /**
- * Get the optional string associated with an index.
- * The defaultValue is returned if the key is not found.
- *
- * @param index The index must be between 0 and length() - 1.
- * @param defaultValue The default value.
- * @return A String value.
- */
- public String optString(int index, String defaultValue) {
- Object o = opt(index);
- return o != null ? o.toString() : defaultValue;
- }
-
-
- /**
- * Append a boolean value. This increases the array's length by one.
- *
- * @param value A boolean value.
- * @return this.
- */
- public JSONArray put(boolean value) {
- put(value ? Boolean.TRUE : Boolean.FALSE);
- return this;
- }
-
-
- /**
- * Put a value in the JSONArray, where the value will be a
- * JSONArray which is produced from a Collection.
- * @param value A Collection value.
- * @return this.
- */
- public JSONArray put(Collection value) {
- put(new JSONArray(value));
- return this;
- }
-
-
- /**
- * Append a double value. This increases the array's length by one.
- *
- * @param value A double value.
- * @throws JSONException if the value is not finite.
- * @return this.
- */
- public JSONArray put(double value) throws JSONException {
- Double d = new Double(value);
- JSONObject.testValidity(d);
- put(d);
- return this;
- }
-
-
- /**
- * Append an int value. This increases the array's length by one.
- *
- * @param value An int value.
- * @return this.
- */
- public JSONArray put(int value) {
- put(new Integer(value));
- return this;
- }
-
-
- /**
- * Append an long value. This increases the array's length by one.
- *
- * @param value A long value.
- * @return this.
- */
- public JSONArray put(long value) {
- put(new Long(value));
- return this;
- }
-
-
- /**
- * Put a value in the JSONArray, where the value will be a
- * JSONObject which is produced from a Map.
- * @param value A Map value.
- * @return this.
- */
- public JSONArray put(Map value) {
- put(new JSONObject(value));
- return this;
- }
-
-
- /**
- * Append an object value. This increases the array's length by one.
- * @param value An object value. The value should be a
- * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the
- * JSONObject.NULL object.
- * @return this.
- */
- public JSONArray put(Object value) {
- this.myArrayList.add(value);
- return this;
- }
-
-
- /**
- * Put or replace a boolean value in the JSONArray. If the index is greater
- * than the length of the JSONArray, then null elements will be added as
- * necessary to pad it out.
- * @param index The subscript.
- * @param value A boolean value.
- * @return this.
- * @throws JSONException If the index is negative.
- */
- public JSONArray put(int index, boolean value) throws JSONException {
- put(index, value ? Boolean.TRUE : Boolean.FALSE);
- return this;
- }
-
-
- /**
- * Put a value in the JSONArray, where the value will be a
- * JSONArray which is produced from a Collection.
- * @param index The subscript.
- * @param value A Collection value.
- * @return this.
- * @throws JSONException If the index is negative or if the value is
- * not finite.
- */
- public JSONArray put(int index, Collection value) throws JSONException {
- put(index, new JSONArray(value));
- return this;
- }
-
-
- /**
- * Put or replace a double value. If the index is greater than the length of
- * the JSONArray, then null elements will be added as necessary to pad
- * it out.
- * @param index The subscript.
- * @param value A double value.
- * @return this.
- * @throws JSONException If the index is negative or if the value is
- * not finite.
- */
- public JSONArray put(int index, double value) throws JSONException {
- put(index, new Double(value));
- return this;
- }
-
-
- /**
- * Put or replace an int value. If the index is greater than the length of
- * the JSONArray, then null elements will be added as necessary to pad
- * it out.
- * @param index The subscript.
- * @param value An int value.
- * @return this.
- * @throws JSONException If the index is negative.
- */
- public JSONArray put(int index, int value) throws JSONException {
- put(index, new Integer(value));
- return this;
- }
-
-
- /**
- * Put or replace a long value. If the index is greater than the length of
- * the JSONArray, then null elements will be added as necessary to pad
- * it out.
- * @param index The subscript.
- * @param value A long value.
- * @return this.
- * @throws JSONException If the index is negative.
- */
- public JSONArray put(int index, long value) throws JSONException {
- put(index, new Long(value));
- return this;
- }
-
-
- /**
- * Put a value in the JSONArray, where the value will be a
- * JSONObject which is produced from a Map.
- * @param index The subscript.
- * @param value The Map value.
- * @return this.
- * @throws JSONException If the index is negative or if the value is
- * an invalid number.
- */
- public JSONArray put(int index, Map value) throws JSONException {
- put(index, new JSONObject(value));
- return this;
- }
-
-
- /**
- * Put or replace an object value in the JSONArray. If the index is greater
- * than the length of the JSONArray, then null elements will be added as
- * necessary to pad it out.
- * @param index The subscript.
- * @param value The value to put into the array. The value should be a
- * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the
- * JSONObject.NULL object.
- * @return this.
- * @throws JSONException If the index is negative or if the value is
- * an invalid number.
- */
- public JSONArray put(int index, Object value) throws JSONException {
- JSONObject.testValidity(value);
- if (index < 0) {
- throw new JSONException("JSONArray[" + index + "] not found.");
- }
- if (index < length()) {
- this.myArrayList.set(index, value);
- } else {
- while (index != length()) {
- put(JSONObject.NULL);
- }
- put(value);
- }
- return this;
- }
-
-
- /**
- * Remove an index and close the hole.
- * @param index The index of the element to be removed.
- * @return The value that was associated with the index,
- * or null if there was no value.
- */
- public Object remove(int index) {
- Object o = opt(index);
- this.myArrayList.remove(index);
- return o;
- }
-
-
- /**
- * Produce a JSONObject by combining a JSONArray of names with the values
- * of this JSONArray.
- * @param names A JSONArray containing a list of key strings. These will be
- * paired with the values.
- * @return A JSONObject, or null if there are no names or if this JSONArray
- * has no values.
- * @throws JSONException If any of the names are null.
- */
- public JSONObject toJSONObject(JSONArray names) throws JSONException {
- if (names == null || names.length() == 0 || length() == 0) {
- return null;
- }
- JSONObject jo = new JSONObject();
- for (int i = 0; i < names.length(); i += 1) {
- jo.put(names.getString(i), this.opt(i));
- }
- return jo;
- }
-
-
- /**
- * Make a JSON text of this JSONArray. For compactness, no
- * unnecessary whitespace is added. If it is not possible to produce a
- * syntactically correct JSON text then null will be returned instead. This
- * could occur if the array contains an invalid number.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- *
- * @return a printable, displayable, transmittable
- * representation of the array.
- */
- public String toString() {
- try {
- return '[' + join(",") + ']';
- } catch (Exception e) {
- return null;
- }
- }
-
-
- /**
- * Make a prettyprinted JSON text of this JSONArray.
- * Warning: This method assumes that the data structure is acyclical.
- * @param indentFactor The number of spaces to add to each level of
- * indentation.
- * @return a printable, displayable, transmittable
- * representation of the object, beginning
- * with <code>[</code> <small>(left bracket)</small> and ending
- * with <code>]</code> <small>(right bracket)</small>.
- * @throws JSONException
- */
- public String toString(int indentFactor) throws JSONException {
- return toString(indentFactor, 0);
- }
-
-
- /**
- * Make a prettyprinted JSON text of this JSONArray.
- * Warning: This method assumes that the data structure is acyclical.
- * @param indentFactor The number of spaces to add to each level of
- * indentation.
- * @param indent The indention of the top level.
- * @return a printable, displayable, transmittable
- * representation of the array.
- * @throws JSONException
- */
- String toString(int indentFactor, int indent) throws JSONException {
- int len = length();
- if (len == 0) {
- return "[]";
- }
- int i;
- StringBuffer sb = new StringBuffer("[");
- if (len == 1) {
- sb.append(JSONObject.valueToString(this.myArrayList.get(0),
- indentFactor, indent));
- } else {
- int newindent = indent + indentFactor;
- sb.append('\n');
- for (i = 0; i < len; i += 1) {
- if (i > 0) {
- sb.append(",\n");
- }
- for (int j = 0; j < newindent; j += 1) {
- sb.append(' ');
- }
- sb.append(JSONObject.valueToString(this.myArrayList.get(i),
- indentFactor, newindent));
- }
- sb.append('\n');
- for (i = 0; i < indent; i += 1) {
- sb.append(' ');
- }
- }
- sb.append(']');
- return sb.toString();
- }
-
-
- /**
- * Write the contents of the JSONArray as JSON text to a writer.
- * For compactness, no whitespace is added.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- *
- * @return The writer.
- * @throws JSONException
- */
- public Writer write(Writer writer) throws JSONException {
- try {
- boolean b = false;
- int len = length();
-
- writer.write('[');
-
- for (int i = 0; i < len; i += 1) {
- if (b) {
- writer.write(',');
- }
- Object v = this.myArrayList.get(i);
- if (v instanceof JSONObject) {
- ((JSONObject)v).write(writer);
- } else if (v instanceof JSONArray) {
- ((JSONArray)v).write(writer);
- } else {
- writer.write(JSONObject.valueToString(v));
- }
- b = true;
- }
- writer.write(']');
- return writer;
- } catch (IOException e) {
- throw new JSONException(e);
- }
- }
-}
\ No newline at end of file
diff --git a/livegps/src/org/json/JSONException.java b/livegps/src/org/json/JSONException.java
deleted file mode 100644
index 0c0c207..0000000
--- a/livegps/src/org/json/JSONException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.json;
-
-/**
- * The JSONException is thrown by the JSON.org classes when things are amiss.
- * @author JSON.org
- * @version 2008-09-18
- */
-public class JSONException extends Exception {
- /**
- *
- */
- private static final long serialVersionUID = 0;
- private Throwable cause;
-
- /**
- * Constructs a JSONException with an explanatory message.
- * @param message Detail about the reason for the exception.
- */
- public JSONException(String message) {
- super(message);
- }
-
- public JSONException(Throwable t) {
- super(t.getMessage());
- this.cause = t;
- }
-
- public Throwable getCause() {
- return this.cause;
- }
-}
diff --git a/livegps/src/org/json/JSONObject.java b/livegps/src/org/json/JSONObject.java
deleted file mode 100644
index e1194be..0000000
--- a/livegps/src/org/json/JSONObject.java
+++ /dev/null
@@ -1,1584 +0,0 @@
-package org.json;
-
-/*
-Copyright (c) 2002 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-import java.io.IOException;
-import java.io.Writer;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.TreeSet;
-
-/**
- * A JSONObject is an unordered collection of name/value pairs. Its
- * external form is a string wrapped in curly braces with colons between the
- * names and values, and commas between the values and names. The internal form
- * is an object having <code>get</code> and <code>opt</code> methods for
- * accessing the values by name, and <code>put</code> methods for adding or
- * replacing values by name. The values can be any of these types:
- * <code>Boolean</code>, <code>JSONArray</code>, <code>JSONObject</code>,
- * <code>Number</code>, <code>String</code>, or the <code>JSONObject.NULL</code>
- * object. A JSONObject constructor can be used to convert an external form
- * JSON text into an internal form whose values can be retrieved with the
- * <code>get</code> and <code>opt</code> methods, or to convert values into a
- * JSON text using the <code>put</code> and <code>toString</code> methods.
- * A <code>get</code> method returns a value if one can be found, and throws an
- * exception if one cannot be found. An <code>opt</code> method returns a
- * default value instead of throwing an exception, and so is useful for
- * obtaining optional values.
- * <p>
- * The generic <code>get()</code> and <code>opt()</code> methods return an
- * object, which you can cast or query for type. There are also typed
- * <code>get</code> and <code>opt</code> methods that do type checking and type
- * coercion for you.
- * <p>
- * The <code>put</code> methods adds values to an object. For example, <pre>
- * myString = new JSONObject().put("JSON", "Hello, World!").toString();</pre>
- * produces the string <code>{"JSON": "Hello, World"}</code>.
- * <p>
- * The texts produced by the <code>toString</code> methods strictly conform to
- * the JSON syntax rules.
- * The constructors are more forgiving in the texts they will accept:
- * <ul>
- * <li>An extra <code>,</code> <small>(comma)</small> may appear just
- * before the closing brace.</li>
- * <li>Strings may be quoted with <code>'</code> <small>(single
- * quote)</small>.</li>
- * <li>Strings do not need to be quoted at all if they do not begin with a quote
- * or single quote, and if they do not contain leading or trailing spaces,
- * and if they do not contain any of these characters:
- * <code>{ } [ ] / \ : , = ; #</code> and if they do not look like numbers
- * and if they are not the reserved words <code>true</code>,
- * <code>false</code>, or <code>null</code>.</li>
- * <li>Keys can be followed by <code>=</code> or <code>=></code> as well as
- * by <code>:</code>.</li>
- * <li>Values can be followed by <code>;</code> <small>(semicolon)</small> as
- * well as by <code>,</code> <small>(comma)</small>.</li>
- * <li>Numbers may have the <code>0x-</code> <small>(hex)</small> prefix.</li>
- * </ul>
- * @author JSON.org
- * @version 2010-05-17
- */
-public class JSONObject {
-
- /**
- * JSONObject.NULL is equivalent to the value that JavaScript calls null,
- * whilst Java's null is equivalent to the value that JavaScript calls
- * undefined.
- */
- private static final class Null {
-
- /**
- * There is only intended to be a single instance of the NULL object,
- * so the clone method returns itself.
- * @return NULL.
- */
- protected final Object clone() {
- return this;
- }
-
-
- /**
- * A Null object is equal to the null value and to itself.
- * @param object An object to test for nullness.
- * @return true if the object parameter is the JSONObject.NULL object
- * or null.
- */
- public boolean equals(Object object) {
- return object == null || object == this;
- }
-
-
- /**
- * Get the "null" string value.
- * @return The string "null".
- */
- public String toString() {
- return "null";
- }
- }
-
-
- /**
- * The map where the JSONObject's properties are kept.
- */
- private Map map;
-
-
- /**
- * It is sometimes more convenient and less ambiguous to have a
- * <code>NULL</code> object than to use Java's <code>null</code> value.
- * <code>JSONObject.NULL.equals(null)</code> returns <code>true</code>.
- * <code>JSONObject.NULL.toString()</code> returns <code>"null"</code>.
- */
- public static final Object NULL = new Null();
-
-
- /**
- * Construct an empty JSONObject.
- */
- public JSONObject() {
- this.map = new HashMap();
- }
-
-
- /**
- * Construct a JSONObject from a subset of another JSONObject.
- * An array of strings is used to identify the keys that should be copied.
- * Missing keys are ignored.
- * @param jo A JSONObject.
- * @param names An array of strings.
- * @throws JSONException
- * @exception JSONException If a value is a non-finite number or if a name is duplicated.
- */
- public JSONObject(JSONObject jo, String[] names) {
- this();
- for (int i = 0; i < names.length; i += 1) {
- try {
- putOnce(names[i], jo.opt(names[i]));
- } catch (Exception ignore) {
- }
- }
- }
-
-
- /**
- * Construct a JSONObject from a JSONTokener.
- * @param x A JSONTokener object containing the source string.
- * @throws JSONException If there is a syntax error in the source string
- * or a duplicated key.
- */
- public JSONObject(JSONTokener x) throws JSONException {
- this();
- char c;
- String key;
-
- if (x.nextClean() != '{') {
- throw x.syntaxError("A JSONObject text must begin with '{'");
- }
- for (;;) {
- c = x.nextClean();
- switch (c) {
- case 0:
- throw x.syntaxError("A JSONObject text must end with '}'");
- case '}':
- return;
- default:
- x.back();
- key = x.nextValue().toString();
- }
-
- /*
- * The key is followed by ':'. We will also tolerate '=' or '=>'.
- */
-
- c = x.nextClean();
- if (c == '=') {
- if (x.next() != '>') {
- x.back();
- }
- } else if (c != ':') {
- throw x.syntaxError("Expected a ':' after a key");
- }
- putOnce(key, x.nextValue());
-
- /*
- * Pairs are separated by ','. We will also tolerate ';'.
- */
-
- switch (x.nextClean()) {
- case ';':
- case ',':
- if (x.nextClean() == '}') {
- return;
- }
- x.back();
- break;
- case '}':
- return;
- default:
- throw x.syntaxError("Expected a ',' or '}'");
- }
- }
- }
-
-
- /**
- * Construct a JSONObject from a Map.
- *
- * @param map A map object that can be used to initialize the contents of
- * the JSONObject.
- * @throws JSONException
- */
- public JSONObject(Map map) {
- this.map = new HashMap();
- if (map != null) {
- Iterator i = map.entrySet().iterator();
- while (i.hasNext()) {
- Map.Entry e = (Map.Entry)i.next();
- this.map.put(e.getKey(), wrap(e.getValue()));
- }
- }
- }
-
-
- /**
- * Construct a JSONObject from an Object using bean getters.
- * It reflects on all of the public methods of the object.
- * For each of the methods with no parameters and a name starting
- * with <code>"get"</code> or <code>"is"</code> followed by an uppercase letter,
- * the method is invoked, and a key and the value returned from the getter method
- * are put into the new JSONObject.
- *
- * The key is formed by removing the <code>"get"</code> or <code>"is"</code> prefix.
- * If the second remaining character is not upper case, then the first
- * character is converted to lower case.
- *
- * For example, if an object has a method named <code>"getName"</code>, and
- * if the result of calling <code>object.getName()</code> is <code>"Larry Fine"</code>,
- * then the JSONObject will contain <code>"name": "Larry Fine"</code>.
- *
- * @param bean An object that has getter methods that should be used
- * to make a JSONObject.
- */
- public JSONObject(Object bean) {
- this();
- populateMap(bean);
- }
-
-
- /**
- * Construct a JSONObject from an Object, using reflection to find the
- * public members. The resulting JSONObject's keys will be the strings
- * from the names array, and the values will be the field values associated
- * with those keys in the object. If a key is not found or not visible,
- * then it will not be copied into the new JSONObject.
- * @param object An object that has fields that should be used to make a
- * JSONObject.
- * @param names An array of strings, the names of the fields to be obtained
- * from the object.
- */
- public JSONObject(Object object, String names[]) {
- this();
- Class c = object.getClass();
- for (int i = 0; i < names.length; i += 1) {
- String name = names[i];
- try {
- putOpt(name, c.getField(name).get(object));
- } catch (Exception ignore) {
- }
- }
- }
-
-
- /**
- * Construct a JSONObject from a source JSON text string.
- * This is the most commonly used JSONObject constructor.
- * @param source A string beginning
- * with <code>{</code> <small>(left brace)</small> and ending
- * with <code>}</code> <small>(right brace)</small>.
- * @exception JSONException If there is a syntax error in the source
- * string or a duplicated key.
- */
- public JSONObject(String source) throws JSONException {
- this(new JSONTokener(source));
- }
-
-
- /**
- * Accumulate values under a key. It is similar to the put method except
- * that if there is already an object stored under the key then a
- * JSONArray is stored under the key to hold all of the accumulated values.
- * If there is already a JSONArray, then the new value is appended to it.
- * In contrast, the put method replaces the previous value.
- * @param key A key string.
- * @param value An object to be accumulated under the key.
- * @return this.
- * @throws JSONException If the value is an invalid number
- * or if the key is null.
- */
- public JSONObject accumulate(String key, Object value)
- throws JSONException {
- testValidity(value);
- Object o = opt(key);
- if (o == null) {
- put(key, value instanceof JSONArray ?
- new JSONArray().put(value) :
- value);
- } else if (o instanceof JSONArray) {
- ((JSONArray)o).put(value);
- } else {
- put(key, new JSONArray().put(o).put(value));
- }
- return this;
- }
-
-
- /**
- * Append values to the array under a key. If the key does not exist in the
- * JSONObject, then the key is put in the JSONObject with its value being a
- * JSONArray containing the value parameter. If the key was already
- * associated with a JSONArray, then the value parameter is appended to it.
- * @param key A key string.
- * @param value An object to be accumulated under the key.
- * @return this.
- * @throws JSONException If the key is null or if the current value
- * associated with the key is not a JSONArray.
- */
- public JSONObject append(String key, Object value) throws JSONException {
- testValidity(value);
- Object o = opt(key);
- if (o == null) {
- put(key, new JSONArray().put(value));
- } else if (o instanceof JSONArray) {
- put(key, ((JSONArray)o).put(value));
- } else {
- throw new JSONException("JSONObject[" + key +
- "] is not a JSONArray.");
- }
- return this;
- }
-
-
- /**
- * Produce a string from a double. The string "null" will be returned if
- * the number is not finite.
- * @param d A double.
- * @return A String.
- */
- static public String doubleToString(double d) {
- if (Double.isInfinite(d) || Double.isNaN(d)) {
- return "null";
- }
-
-// Shave off trailing zeros and decimal point, if possible.
-
- String s = Double.toString(d);
- if (s.indexOf('.') > 0 && s.indexOf('e') < 0 && s.indexOf('E') < 0) {
- while (s.endsWith("0")) {
- s = s.substring(0, s.length() - 1);
- }
- if (s.endsWith(".")) {
- s = s.substring(0, s.length() - 1);
- }
- }
- return s;
- }
-
-
- /**
- * Get the value object associated with a key.
- *
- * @param key A key string.
- * @return The object associated with the key.
- * @throws JSONException if the key is not found.
- */
- public Object get(String key) throws JSONException {
- Object o = opt(key);
- if (o == null) {
- throw new JSONException("JSONObject[" + quote(key) +
- "] not found.");
- }
- return o;
- }
-
-
- /**
- * Get the boolean value associated with a key.
- *
- * @param key A key string.
- * @return The truth.
- * @throws JSONException
- * if the value is not a Boolean or the String "true" or "false".
- */
- public boolean getBoolean(String key) throws JSONException {
- Object o = get(key);
- if (o.equals(Boolean.FALSE) ||
- (o instanceof String &&
- ((String)o).equalsIgnoreCase("false"))) {
- return false;
- } else if (o.equals(Boolean.TRUE) ||
- (o instanceof String &&
- ((String)o).equalsIgnoreCase("true"))) {
- return true;
- }
- throw new JSONException("JSONObject[" + quote(key) +
- "] is not a Boolean.");
- }
-
-
- /**
- * Get the double value associated with a key.
- * @param key A key string.
- * @return The numeric value.
- * @throws JSONException if the key is not found or
- * if the value is not a Number object and cannot be converted to a number.
- */
- public double getDouble(String key) throws JSONException {
- Object o = get(key);
- try {
- return o instanceof Number ?
- ((Number)o).doubleValue() :
- Double.valueOf((String)o).doubleValue();
- } catch (Exception e) {
- throw new JSONException("JSONObject[" + quote(key) +
- "] is not a number.");
- }
- }
-
-
- /**
- * Get the int value associated with a key.
- *
- * @param key A key string.
- * @return The integer value.
- * @throws JSONException if the key is not found or if the value cannot
- * be converted to an integer.
- */
- public int getInt(String key) throws JSONException {
- Object o = get(key);
- try {
- return o instanceof Number ?
- ((Number)o).intValue() :
- Integer.parseInt((String)o);
- } catch (Exception e) {
- throw new JSONException("JSONObject[" + quote(key) +
- "] is not an int.");
- }
- }
-
-
- /**
- * Get the JSONArray value associated with a key.
- *
- * @param key A key string.
- * @return A JSONArray which is the value.
- * @throws JSONException if the key is not found or
- * if the value is not a JSONArray.
- */
- public JSONArray getJSONArray(String key) throws JSONException {
- Object o = get(key);
- if (o instanceof JSONArray) {
- return (JSONArray)o;
- }
- throw new JSONException("JSONObject[" + quote(key) +
- "] is not a JSONArray.");
- }
-
-
- /**
- * Get the JSONObject value associated with a key.
- *
- * @param key A key string.
- * @return A JSONObject which is the value.
- * @throws JSONException if the key is not found or
- * if the value is not a JSONObject.
- */
- public JSONObject getJSONObject(String key) throws JSONException {
- Object o = get(key);
- if (o instanceof JSONObject) {
- return (JSONObject)o;
- }
- throw new JSONException("JSONObject[" + quote(key) +
- "] is not a JSONObject.");
- }
-
-
- /**
- * Get the long value associated with a key.
- *
- * @param key A key string.
- * @return The long value.
- * @throws JSONException if the key is not found or if the value cannot
- * be converted to a long.
- */
- public long getLong(String key) throws JSONException {
- Object o = get(key);
- try {
- return o instanceof Number ?
- ((Number)o).longValue() :
- Long.parseLong((String)o);
- } catch (Exception e) {
- throw new JSONException("JSONObject[" + quote(key) +
- "] is not a long.");
- }
- }
-
-
- /**
- * Get an array of field names from a JSONObject.
- *
- * @return An array of field names, or null if there are no names.
- */
- public static String[] getNames(JSONObject jo) {
- int length = jo.length();
- if (length == 0) {
- return null;
- }
- Iterator i = jo.keys();
- String[] names = new String[length];
- int j = 0;
- while (i.hasNext()) {
- names[j] = (String)i.next();
- j += 1;
- }
- return names;
- }
-
-
- /**
- * Get an array of field names from an Object.
- *
- * @return An array of field names, or null if there are no names.
- */
- public static String[] getNames(Object object) {
- if (object == null) {
- return null;
- }
- Class klass = object.getClass();
- Field[] fields = klass.getFields();
- int length = fields.length;
- if (length == 0) {
- return null;
- }
- String[] names = new String[length];
- for (int i = 0; i < length; i += 1) {
- names[i] = fields[i].getName();
- }
- return names;
- }
-
-
- /**
- * Get the string associated with a key.
- *
- * @param key A key string.
- * @return A string which is the value.
- * @throws JSONException if the key is not found.
- */
- public String getString(String key) throws JSONException {
- return get(key).toString();
- }
-
-
- /**
- * Determine if the JSONObject contains a specific key.
- * @param key A key string.
- * @return true if the key exists in the JSONObject.
- */
- public boolean has(String key) {
- return this.map.containsKey(key);
- }
-
-
- /**
- * Increment a property of a JSONObject. If there is no such property,
- * create one with a value of 1. If there is such a property, and if
- * it is an Integer, Long, Double, or Float, then add one to it.
- * @param key A key string.
- * @return this.
- * @throws JSONException If there is already a property with this name
- * that is not an Integer, Long, Double, or Float.
- */
- public JSONObject increment(String key) throws JSONException {
- Object value = opt(key);
- if (value == null) {
- put(key, 1);
- } else {
- if (value instanceof Integer) {
- put(key, ((Integer)value).intValue() + 1);
- } else if (value instanceof Long) {
- put(key, ((Long)value).longValue() + 1);
- } else if (value instanceof Double) {
- put(key, ((Double)value).doubleValue() + 1);
- } else if (value instanceof Float) {
- put(key, ((Float)value).floatValue() + 1);
- } else {
- throw new JSONException("Unable to increment [" + key + "].");
- }
- }
- return this;
- }
-
-
- /**
- * Determine if the value associated with the key is null or if there is
- * no value.
- * @param key A key string.
- * @return true if there is no value associated with the key or if
- * the value is the JSONObject.NULL object.
- */
- public boolean isNull(String key) {
- return JSONObject.NULL.equals(opt(key));
- }
-
-
- /**
- * Get an enumeration of the keys of the JSONObject.
- *
- * @return An iterator of the keys.
- */
- public Iterator keys() {
- return this.map.keySet().iterator();
- }
-
-
- /**
- * Get the number of keys stored in the JSONObject.
- *
- * @return The number of keys in the JSONObject.
- */
- public int length() {
- return this.map.size();
- }
-
-
- /**
- * Produce a JSONArray containing the names of the elements of this
- * JSONObject.
- * @return A JSONArray containing the key strings, or null if the JSONObject
- * is empty.
- */
- public JSONArray names() {
- JSONArray ja = new JSONArray();
- Iterator keys = keys();
- while (keys.hasNext()) {
- ja.put(keys.next());
- }
- return ja.length() == 0 ? null : ja;
- }
-
- /**
- * Produce a string from a Number.
- * @param n A Number
- * @return A String.
- * @throws JSONException If n is a non-finite number.
- */
- static public String numberToString(Number n)
- throws JSONException {
- if (n == null) {
- throw new JSONException("Null pointer");
- }
- testValidity(n);
-
-// Shave off trailing zeros and decimal point, if possible.
-
- String s = n.toString();
- if (s.indexOf('.') > 0 && s.indexOf('e') < 0 && s.indexOf('E') < 0) {
- while (s.endsWith("0")) {
- s = s.substring(0, s.length() - 1);
- }
- if (s.endsWith(".")) {
- s = s.substring(0, s.length() - 1);
- }
- }
- return s;
- }
-
-
- /**
- * Get an optional value associated with a key.
- * @param key A key string.
- * @return An object which is the value, or null if there is no value.
- */
- public Object opt(String key) {
- return key == null ? null : this.map.get(key);
- }
-
-
- /**
- * Get an optional boolean associated with a key.
- * It returns false if there is no such key, or if the value is not
- * Boolean.TRUE or the String "true".
- *
- * @param key A key string.
- * @return The truth.
- */
- public boolean optBoolean(String key) {
- return optBoolean(key, false);
- }
-
-
- /**
- * Get an optional boolean associated with a key.
- * It returns the defaultValue if there is no such key, or if it is not
- * a Boolean or the String "true" or "false" (case insensitive).
- *
- * @param key A key string.
- * @param defaultValue The default.
- * @return The truth.
- */
- public boolean optBoolean(String key, boolean defaultValue) {
- try {
- return getBoolean(key);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
-
- /**
- * Get an optional double associated with a key,
- * or NaN if there is no such key or if its value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
- *
- * @param key A string which is the key.
- * @return An object which is the value.
- */
- public double optDouble(String key) {
- return optDouble(key, Double.NaN);
- }
-
-
- /**
- * Get an optional double associated with a key, or the
- * defaultValue if there is no such key or if its value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
- *
- * @param key A key string.
- * @param defaultValue The default.
- * @return An object which is the value.
- */
- public double optDouble(String key, double defaultValue) {
- try {
- Object o = opt(key);
- return o instanceof Number ? ((Number)o).doubleValue() :
- new Double((String)o).doubleValue();
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
-
- /**
- * Get an optional int value associated with a key,
- * or zero if there is no such key or if the value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
- *
- * @param key A key string.
- * @return An object which is the value.
- */
- public int optInt(String key) {
- return optInt(key, 0);
- }
-
-
- /**
- * Get an optional int value associated with a key,
- * or the default if there is no such key or if the value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
- *
- * @param key A key string.
- * @param defaultValue The default.
- * @return An object which is the value.
- */
- public int optInt(String key, int defaultValue) {
- try {
- return getInt(key);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
-
- /**
- * Get an optional JSONArray associated with a key.
- * It returns null if there is no such key, or if its value is not a
- * JSONArray.
- *
- * @param key A key string.
- * @return A JSONArray which is the value.
- */
- public JSONArray optJSONArray(String key) {
- Object o = opt(key);
- return o instanceof JSONArray ? (JSONArray)o : null;
- }
-
-
- /**
- * Get an optional JSONObject associated with a key.
- * It returns null if there is no such key, or if its value is not a
- * JSONObject.
- *
- * @param key A key string.
- * @return A JSONObject which is the value.
- */
- public JSONObject optJSONObject(String key) {
- Object o = opt(key);
- return o instanceof JSONObject ? (JSONObject)o : null;
- }
-
-
- /**
- * Get an optional long value associated with a key,
- * or zero if there is no such key or if the value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
- *
- * @param key A key string.
- * @return An object which is the value.
- */
- public long optLong(String key) {
- return optLong(key, 0);
- }
-
-
- /**
- * Get an optional long value associated with a key,
- * or the default if there is no such key or if the value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
- *
- * @param key A key string.
- * @param defaultValue The default.
- * @return An object which is the value.
- */
- public long optLong(String key, long defaultValue) {
- try {
- return getLong(key);
- } catch (Exception e) {
- return defaultValue;
- }
- }
-
-
- /**
- * Get an optional string associated with a key.
- * It returns an empty string if there is no such key. If the value is not
- * a string and is not null, then it is coverted to a string.
- *
- * @param key A key string.
- * @return A string which is the value.
- */
- public String optString(String key) {
- return optString(key, "");
- }
-
-
- /**
- * Get an optional string associated with a key.
- * It returns the defaultValue if there is no such key.
- *
- * @param key A key string.
- * @param defaultValue The default.
- * @return A string which is the value.
- */
- public String optString(String key, String defaultValue) {
- Object o = opt(key);
- return o != null ? o.toString() : defaultValue;
- }
-
-
- private void populateMap(Object bean) {
- Class klass = bean.getClass();
-
-// If klass is a System class then set includeSuperClass to false.
-
- boolean includeSuperClass = klass.getClassLoader() != null;
-
- Method[] methods = (includeSuperClass) ?
- klass.getMethods() : klass.getDeclaredMethods();
- for (int i = 0; i < methods.length; i += 1) {
- try {
- Method method = methods[i];
- if (Modifier.isPublic(method.getModifiers())) {
- String name = method.getName();
- String key = "";
- if (name.startsWith("get")) {
- if (name.equals("getClass") ||
- name.equals("getDeclaringClass")) {
- key = "";
- } else {
- key = name.substring(3);
- }
- } else if (name.startsWith("is")) {
- key = name.substring(2);
- }
- if (key.length() > 0 &&
- Character.isUpperCase(key.charAt(0)) &&
- method.getParameterTypes().length == 0) {
- if (key.length() == 1) {
- key = key.toLowerCase();
- } else if (!Character.isUpperCase(key.charAt(1))) {
- key = key.substring(0, 1).toLowerCase() +
- key.substring(1);
- }
-
- Object result = method.invoke(bean, (Object[])null);
-
- map.put(key, wrap(result));
- }
- }
- } catch (Exception ignore) {
- }
- }
- }
-
-
- /**
- * Put a key/boolean pair in the JSONObject.
- *
- * @param key A key string.
- * @param value A boolean which is the value.
- * @return this.
- * @throws JSONException If the key is null.
- */
- public JSONObject put(String key, boolean value) throws JSONException {
- put(key, value ? Boolean.TRUE : Boolean.FALSE);
- return this;
- }
-
-
- /**
- * Put a key/value pair in the JSONObject, where the value will be a
- * JSONArray which is produced from a Collection.
- * @param key A key string.
- * @param value A Collection value.
- * @return this.
- * @throws JSONException
- */
- public JSONObject put(String key, Collection value) throws JSONException {
- put(key, new JSONArray(value));
- return this;
- }
-
-
- /**
- * Put a key/double pair in the JSONObject.
- *
- * @param key A key string.
- * @param value A double which is the value.
- * @return this.
- * @throws JSONException If the key is null or if the number is invalid.
- */
- public JSONObject put(String key, double value) throws JSONException {
- put(key, new Double(value));
- return this;
- }
-
-
- /**
- * Put a key/int pair in the JSONObject.
- *
- * @param key A key string.
- * @param value An int which is the value.
- * @return this.
- * @throws JSONException If the key is null.
- */
- public JSONObject put(String key, int value) throws JSONException {
- put(key, new Integer(value));
- return this;
- }
-
-
- /**
- * Put a key/long pair in the JSONObject.
- *
- * @param key A key string.
- * @param value A long which is the value.
- * @return this.
- * @throws JSONException If the key is null.
- */
- public JSONObject put(String key, long value) throws JSONException {
- put(key, new Long(value));
- return this;
- }
-
-
- /**
- * Put a key/value pair in the JSONObject, where the value will be a
- * JSONObject which is produced from a Map.
- * @param key A key string.
- * @param value A Map value.
- * @return this.
- * @throws JSONException
- */
- public JSONObject put(String key, Map value) throws JSONException {
- put(key, new JSONObject(value));
- return this;
- }
-
-
- /**
- * Put a key/value pair in the JSONObject. If the value is null,
- * then the key will be removed from the JSONObject if it is present.
- * @param key A key string.
- * @param value An object which is the value. It should be of one of these
- * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, String,
- * or the JSONObject.NULL object.
- * @return this.
- * @throws JSONException If the value is non-finite number
- * or if the key is null.
- */
- public JSONObject put(String key, Object value) throws JSONException {
- if (key == null) {
- throw new JSONException("Null key.");
- }
- if (value != null) {
- testValidity(value);
- this.map.put(key, value);
- } else {
- remove(key);
- }
- return this;
- }
-
-
- /**
- * Put a key/value pair in the JSONObject, but only if the key and the
- * value are both non-null, and only if there is not already a member
- * with that name.
- * @param key
- * @param value
- * @return his.
- * @throws JSONException if the key is a duplicate
- */
- public JSONObject putOnce(String key, Object value) throws JSONException {
- if (key != null && value != null) {
- if (opt(key) != null) {
- throw new JSONException("Duplicate key \"" + key + "\"");
- }
- put(key, value);
- }
- return this;
- }
-
-
- /**
- * Put a key/value pair in the JSONObject, but only if the
- * key and the value are both non-null.
- * @param key A key string.
- * @param value An object which is the value. It should be of one of these
- * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, String,
- * or the JSONObject.NULL object.
- * @return this.
- * @throws JSONException If the value is a non-finite number.
- */
- public JSONObject putOpt(String key, Object value) throws JSONException {
- if (key != null && value != null) {
- put(key, value);
- }
- return this;
- }
-
-
- /**
- * Produce a string in double quotes with backslash sequences in all the
- * right places. A backslash will be inserted within </, allowing JSON
- * text to be delivered in HTML. In JSON text, a string cannot contain a
- * control character or an unescaped quote or backslash.
- * @param string A String
- * @return A String correctly formatted for insertion in a JSON text.
- */
- public static String quote(String string) {
- if (string == null || string.length() == 0) {
- return "\"\"";
- }
-
- char b;
- char c = 0;
- int i;
- int len = string.length();
- StringBuffer sb = new StringBuffer(len + 4);
- String t;
-
- sb.append('"');
- for (i = 0; i < len; i += 1) {
- b = c;
- c = string.charAt(i);
- switch (c) {
- case '\\':
- case '"':
- sb.append('\\');
- sb.append(c);
- break;
- case '/':
- if (b == '<') {
- sb.append('\\');
- }
- sb.append(c);
- break;
- case '\b':
- sb.append("\\b");
- break;
- case '\t':
- sb.append("\\t");
- break;
- case '\n':
- sb.append("\\n");
- break;
- case '\f':
- sb.append("\\f");
- break;
- case '\r':
- sb.append("\\r");
- break;
- default:
- if (c < ' ' || (c >= '\u0080' && c < '\u00a0') ||
- (c >= '\u2000' && c < '\u2100')) {
- t = "000" + Integer.toHexString(c);
- sb.append("\\u" + t.substring(t.length() - 4));
- } else {
- sb.append(c);
- }
- }
- }
- sb.append('"');
- return sb.toString();
- }
-
- /**
- * Remove a name and its value, if present.
- * @param key The name to be removed.
- * @return The value that was associated with the name,
- * or null if there was no value.
- */
- public Object remove(String key) {
- return this.map.remove(key);
- }
-
- /**
- * Get an enumeration of the keys of the JSONObject.
- * The keys will be sorted alphabetically.
- *
- * @return An iterator of the keys.
- */
- public Iterator sortedKeys() {
- return new TreeSet(this.map.keySet()).iterator();
- }
-
- /**
- * Try to convert a string into a number, boolean, or null. If the string
- * can't be converted, return the string.
- * @param s A String.
- * @return A simple JSON value.
- */
- static public Object stringToValue(String s) {
- if (s.equals("")) {
- return s;
- }
- if (s.equalsIgnoreCase("true")) {
- return Boolean.TRUE;
- }
- if (s.equalsIgnoreCase("false")) {
- return Boolean.FALSE;
- }
- if (s.equalsIgnoreCase("null")) {
- return JSONObject.NULL;
- }
-
- /*
- * If it might be a number, try converting it.
- * We support the non-standard 0x- convention.
- * If a number cannot be produced, then the value will just
- * be a string. Note that the 0x-, plus, and implied string
- * conventions are non-standard. A JSON parser may accept
- * non-JSON forms as long as it accepts all correct JSON forms.
- */
-
- char b = s.charAt(0);
- if ((b >= '0' && b <= '9') || b == '.' || b == '-' || b == '+') {
- if (b == '0' && s.length() > 2 &&
- (s.charAt(1) == 'x' || s.charAt(1) == 'X')) {
- try {
- return new Integer(Integer.parseInt(s.substring(2), 16));
- } catch (Exception ignore) {
- }
- }
- try {
- if (s.indexOf('.') > -1 ||
- s.indexOf('e') > -1 || s.indexOf('E') > -1) {
- return Double.valueOf(s);
- } else {
- Long myLong = new Long(s);
- if (myLong.longValue() == myLong.intValue()) {
- return new Integer(myLong.intValue());
- } else {
- return myLong;
- }
- }
- } catch (Exception ignore) {
- }
- }
- return s;
- }
-
-
- /**
- * Throw an exception if the object is an NaN or infinite number.
- * @param o The object to test.
- * @throws JSONException If o is a non-finite number.
- */
- static void testValidity(Object o) throws JSONException {
- if (o != null) {
- if (o instanceof Double) {
- if (((Double)o).isInfinite() || ((Double)o).isNaN()) {
- throw new JSONException(
- "JSON does not allow non-finite numbers.");
- }
- } else if (o instanceof Float) {
- if (((Float)o).isInfinite() || ((Float)o).isNaN()) {
- throw new JSONException(
- "JSON does not allow non-finite numbers.");
- }
- }
- }
- }
-
-
- /**
- * Produce a JSONArray containing the values of the members of this
- * JSONObject.
- * @param names A JSONArray containing a list of key strings. This
- * determines the sequence of the values in the result.
- * @return A JSONArray of values.
- * @throws JSONException If any of the values are non-finite numbers.
- */
- public JSONArray toJSONArray(JSONArray names) throws JSONException {
- if (names == null || names.length() == 0) {
- return null;
- }
- JSONArray ja = new JSONArray();
- for (int i = 0; i < names.length(); i += 1) {
- ja.put(this.opt(names.getString(i)));
- }
- return ja;
- }
-
- /**
- * Make a JSON text of this JSONObject. For compactness, no whitespace
- * is added. If this would not result in a syntactically correct JSON text,
- * then null will be returned instead.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- *
- * @return a printable, displayable, portable, transmittable
- * representation of the object, beginning
- * with <code>{</code> <small>(left brace)</small> and ending
- * with <code>}</code> <small>(right brace)</small>.
- */
- public String toString() {
- try {
- Iterator keys = keys();
- StringBuffer sb = new StringBuffer("{");
-
- while (keys.hasNext()) {
- if (sb.length() > 1) {
- sb.append(',');
- }
- Object o = keys.next();
- sb.append(quote(o.toString()));
- sb.append(':');
- sb.append(valueToString(this.map.get(o)));
- }
- sb.append('}');
- return sb.toString();
- } catch (Exception e) {
- return null;
- }
- }
-
-
- /**
- * Make a prettyprinted JSON text of this JSONObject.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- * @param indentFactor The number of spaces to add to each level of
- * indentation.
- * @return a printable, displayable, portable, transmittable
- * representation of the object, beginning
- * with <code>{</code> <small>(left brace)</small> and ending
- * with <code>}</code> <small>(right brace)</small>.
- * @throws JSONException If the object contains an invalid number.
- */
- public String toString(int indentFactor) throws JSONException {
- return toString(indentFactor, 0);
- }
-
-
- /**
- * Make a prettyprinted JSON text of this JSONObject.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- * @param indentFactor The number of spaces to add to each level of
- * indentation.
- * @param indent The indentation of the top level.
- * @return a printable, displayable, transmittable
- * representation of the object, beginning
- * with <code>{</code> <small>(left brace)</small> and ending
- * with <code>}</code> <small>(right brace)</small>.
- * @throws JSONException If the object contains an invalid number.
- */
- String toString(int indentFactor, int indent) throws JSONException {
- int j;
- int n = length();
- if (n == 0) {
- return "{}";
- }
- Iterator keys = sortedKeys();
- StringBuffer sb = new StringBuffer("{");
- int newindent = indent + indentFactor;
- Object o;
- if (n == 1) {
- o = keys.next();
- sb.append(quote(o.toString()));
- sb.append(": ");
- sb.append(valueToString(this.map.get(o), indentFactor,
- indent));
- } else {
- while (keys.hasNext()) {
- o = keys.next();
- if (sb.length() > 1) {
- sb.append(",\n");
- } else {
- sb.append('\n');
- }
- for (j = 0; j < newindent; j += 1) {
- sb.append(' ');
- }
- sb.append(quote(o.toString()));
- sb.append(": ");
- sb.append(valueToString(this.map.get(o), indentFactor,
- newindent));
- }
- if (sb.length() > 1) {
- sb.append('\n');
- for (j = 0; j < indent; j += 1) {
- sb.append(' ');
- }
- }
- }
- sb.append('}');
- return sb.toString();
- }
-
-
- /**
- * Make a JSON text of an Object value. If the object has an
- * value.toJSONString() method, then that method will be used to produce
- * the JSON text. The method is required to produce a strictly
- * conforming text. If the object does not contain a toJSONString
- * method (which is the most common case), then a text will be
- * produced by other means. If the value is an array or Collection,
- * then a JSONArray will be made from it and its toJSONString method
- * will be called. If the value is a MAP, then a JSONObject will be made
- * from it and its toJSONString method will be called. Otherwise, the
- * value's toString method will be called, and the result will be quoted.
- *
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- * @param value The value to be serialized.
- * @return a printable, displayable, transmittable
- * representation of the object, beginning
- * with <code>{</code> <small>(left brace)</small> and ending
- * with <code>}</code> <small>(right brace)</small>.
- * @throws JSONException If the value is or contains an invalid number.
- */
- static String valueToString(Object value) throws JSONException {
- if (value == null || value.equals(null)) {
- return "null";
- }
- if (value instanceof JSONString) {
- Object o;
- try {
- o = ((JSONString)value).toJSONString();
- } catch (Exception e) {
- throw new JSONException(e);
- }
- if (o instanceof String) {
- return (String)o;
- }
- throw new JSONException("Bad value from toJSONString: " + o);
- }
- if (value instanceof Number) {
- return numberToString((Number) value);
- }
- if (value instanceof Boolean || value instanceof JSONObject ||
- value instanceof JSONArray) {
- return value.toString();
- }
- if (value instanceof Map) {
- return new JSONObject((Map)value).toString();
- }
- if (value instanceof Collection) {
- return new JSONArray((Collection)value).toString();
- }
- if (value.getClass().isArray()) {
- return new JSONArray(value).toString();
- }
- return quote(value.toString());
- }
-
-
- /**
- * Make a prettyprinted JSON text of an object value.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- * @param value The value to be serialized.
- * @param indentFactor The number of spaces to add to each level of
- * indentation.
- * @param indent The indentation of the top level.
- * @return a printable, displayable, transmittable
- * representation of the object, beginning
- * with <code>{</code> <small>(left brace)</small> and ending
- * with <code>}</code> <small>(right brace)</small>.
- * @throws JSONException If the object contains an invalid number.
- */
- static String valueToString(Object value, int indentFactor, int indent)
- throws JSONException {
- if (value == null || value.equals(null)) {
- return "null";
- }
- try {
- if (value instanceof JSONString) {
- Object o = ((JSONString)value).toJSONString();
- if (o instanceof String) {
- return (String)o;
- }
- }
- } catch (Exception ignore) {
- }
- if (value instanceof Number) {
- return numberToString((Number) value);
- }
- if (value instanceof Boolean) {
- return value.toString();
- }
- if (value instanceof JSONObject) {
- return ((JSONObject)value).toString(indentFactor, indent);
- }
- if (value instanceof JSONArray) {
- return ((JSONArray)value).toString(indentFactor, indent);
- }
- if (value instanceof Map) {
- return new JSONObject((Map)value).toString(indentFactor, indent);
- }
- if (value instanceof Collection) {
- return new JSONArray((Collection)value).toString(indentFactor, indent);
- }
- if (value.getClass().isArray()) {
- return new JSONArray(value).toString(indentFactor, indent);
- }
- return quote(value.toString());
- }
-
-
- /**
- * Wrap an object, if necessary. If the object is null, return the NULL
- * object. If it is an array or collection, wrap it in a JSONArray. If
- * it is a map, wrap it in a JSONObject. If it is a standard property
- * (Double, String, et al) then it is already wrapped. Otherwise, if it
- * comes from one of the java packages, turn it into a string. And if
- * it doesn't, try to wrap it in a JSONObject. If the wrapping fails,
- * then null is returned.
- *
- * @param object The object to wrap
- * @return The wrapped value
- */
- static Object wrap(Object object) {
- try {
- if (object == null) {
- return NULL;
- }
- if (object instanceof JSONObject || object instanceof JSONArray ||
- NULL.equals(object) || object instanceof JSONString ||
- object instanceof Byte || object instanceof Character ||
- object instanceof Short || object instanceof Integer ||
- object instanceof Long || object instanceof Boolean ||
- object instanceof Float || object instanceof Double ||
- object instanceof String) {
- return object;
- }
-
- if (object instanceof Collection) {
- return new JSONArray((Collection)object);
- }
- if (object.getClass().isArray()) {
- return new JSONArray(object);
- }
- if (object instanceof Map) {
- return new JSONObject((Map)object);
- }
- Package objectPackage = object.getClass().getPackage();
- String objectPackageName = ( objectPackage != null ? objectPackage.getName() : "" );
- if (objectPackageName.startsWith("java.") ||
- objectPackageName.startsWith("javax.") ||
- object.getClass().getClassLoader() == null) {
- return object.toString();
- }
- return new JSONObject(object);
- } catch(Exception exception) {
- return null;
- }
- }
-
-
- /**
- * Write the contents of the JSONObject as JSON text to a writer.
- * For compactness, no whitespace is added.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- *
- * @return The writer.
- * @throws JSONException
- */
- public Writer write(Writer writer) throws JSONException {
- try {
- boolean b = false;
- Iterator keys = keys();
- writer.write('{');
-
- while (keys.hasNext()) {
- if (b) {
- writer.write(',');
- }
- Object k = keys.next();
- writer.write(quote(k.toString()));
- writer.write(':');
- Object v = this.map.get(k);
- if (v instanceof JSONObject) {
- ((JSONObject)v).write(writer);
- } else if (v instanceof JSONArray) {
- ((JSONArray)v).write(writer);
- } else {
- writer.write(valueToString(v));
- }
- b = true;
- }
- writer.write('}');
- return writer;
- } catch (IOException exception) {
- throw new JSONException(exception);
- }
- }
-}
\ No newline at end of file
diff --git a/livegps/src/org/json/JSONString.java b/livegps/src/org/json/JSONString.java
deleted file mode 100644
index 41726b1..0000000
--- a/livegps/src/org/json/JSONString.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.json;
-/**
- * The <code>JSONString</code> interface allows a <code>toJSONString()</code>
- * method so that a class can change the behavior of
- * <code>JSONObject.toString()</code>, <code>JSONArray.toString()</code>,
- * and <code>JSONWriter.value(</code>Object<code>)</code>. The
- * <code>toJSONString</code> method will be used instead of the default behavior
- * of using the Object's <code>toString()</code> method and quoting the result.
- */
-public interface JSONString {
- /**
- * The <code>toJSONString</code> method allows a class to produce its own JSON
- * serialization.
- *
- * @return A strictly syntactically correct JSON text.
- */
- public String toJSONString();
-}
diff --git a/livegps/src/org/json/JSONTokener.java b/livegps/src/org/json/JSONTokener.java
deleted file mode 100644
index 13d8936..0000000
--- a/livegps/src/org/json/JSONTokener.java
+++ /dev/null
@@ -1,435 +0,0 @@
-package org.json;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-
-/*
-Copyright (c) 2002 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-/**
- * A JSONTokener takes a source string and extracts characters and tokens from
- * it. It is used by the JSONObject and JSONArray constructors to parse
- * JSON source strings.
- * @author JSON.org
- * @version 2010-02-02
- */
-public class JSONTokener {
-
- private int character;
- private boolean eof;
- private int index;
- private int line;
- private char previous;
- private Reader reader;
- private boolean usePrevious;
-
-
- /**
- * Construct a JSONTokener from a reader.
- *
- * @param reader A reader.
- */
- public JSONTokener(Reader reader) {
- this.reader = reader.markSupported() ?
- reader : new BufferedReader(reader);
- this.eof = false;
- this.usePrevious = false;
- this.previous = 0;
- this.index = 0;
- this.character = 1;
- this.line = 1;
- }
-
-
- /**
- * Construct a JSONTokener from a string.
- *
- * @param s A source string.
- */
- public JSONTokener(String s) {
- this(new StringReader(s));
- }
-
-
- /**
- * Back up one character. This provides a sort of lookahead capability,
- * so that you can test for a digit or letter before attempting to parse
- * the next number or identifier.
- */
- public void back() throws JSONException {
- if (usePrevious || index <= 0) {
- throw new JSONException("Stepping back two steps is not supported");
- }
- this.index -= 1;
- this.character -= 1;
- this.usePrevious = true;
- this.eof = false;
- }
-
-
- /**
- * Get the hex value of a character (base16).
- * @param c A character between '0' and '9' or between 'A' and 'F' or
- * between 'a' and 'f'.
- * @return An int between 0 and 15, or -1 if c was not a hex digit.
- */
- public static int dehexchar(char c) {
- if (c >= '0' && c <= '9') {
- return c - '0';
- }
- if (c >= 'A' && c <= 'F') {
- return c - ('A' - 10);
- }
- if (c >= 'a' && c <= 'f') {
- return c - ('a' - 10);
- }
- return -1;
- }
-
- public boolean end() {
- return eof && !usePrevious;
- }
-
-
- /**
- * Determine if the source string still contains characters that next()
- * can consume.
- * @return true if not yet at the end of the source.
- */
- public boolean more() throws JSONException {
- next();
- if (end()) {
- return false;
- }
- back();
- return true;
- }
-
-
- /**
- * Get the next character in the source string.
- *
- * @return The next character, or 0 if past the end of the source string.
- */
- public char next() throws JSONException {
- int c;
- if (this.usePrevious) {
- this.usePrevious = false;
- c = this.previous;
- } else {
- try {
- c = this.reader.read();
- } catch (IOException exception) {
- throw new JSONException(exception);
- }
-
- if (c <= 0) { // End of stream
- this.eof = true;
- c = 0;
- }
- }
- this.index += 1;
- if (this.previous == '\r') {
- this.line += 1;
- this.character = c == '\n' ? 0 : 1;
- } else if (c == '\n') {
- this.line += 1;
- this.character = 0;
- } else {
- this.character += 1;
- }
- this.previous = (char) c;
- return this.previous;
- }
-
-
- /**
- * Consume the next character, and check that it matches a specified
- * character.
- * @param c The character to match.
- * @return The character.
- * @throws JSONException if the character does not match.
- */
- public char next(char c) throws JSONException {
- char n = next();
- if (n != c) {
- throw syntaxError("Expected '" + c + "' and instead saw '" +
- n + "'");
- }
- return n;
- }
-
-
- /**
- * Get the next n characters.
- *
- * @param n The number of characters to take.
- * @return A string of n characters.
- * @throws JSONException
- * Substring bounds error if there are not
- * n characters remaining in the source string.
- */
- public String next(int n) throws JSONException {
- if (n == 0) {
- return "";
- }
-
- char[] buffer = new char[n];
- int pos = 0;
-
- while (pos < n) {
- buffer[pos] = next();
- if (end()) {
- throw syntaxError("Substring bounds error");
- }
- pos += 1;
- }
- return new String(buffer);
- }
-
-
- /**
- * Get the next char in the string, skipping whitespace.
- * @throws JSONException
- * @return A character, or 0 if there are no more characters.
- */
- public char nextClean() throws JSONException {
- for (;;) {
- char c = next();
- if (c == 0 || c > ' ') {
- return c;
- }
- }
- }
-
-
- /**
- * Return the characters up to the next close quote character.
- * Backslash processing is done. The formal JSON format does not
- * allow strings in single quotes, but an implementation is allowed to
- * accept them.
- * @param quote The quoting character, either
- * <code>"</code> <small>(double quote)</small> or
- * <code>'</code> <small>(single quote)</small>.
- * @return A String.
- * @throws JSONException Unterminated string.
- */
- public String nextString(char quote) throws JSONException {
- char c;
- StringBuffer sb = new StringBuffer();
- for (;;) {
- c = next();
- switch (c) {
- case 0:
- case '\n':
- case '\r':
- throw syntaxError("Unterminated string");
- case '\\':
- c = next();
- switch (c) {
- case 'b':
- sb.append('\b');
- break;
- case 't':
- sb.append('\t');
- break;
- case 'n':
- sb.append('\n');
- break;
- case 'f':
- sb.append('\f');
- break;
- case 'r':
- sb.append('\r');
- break;
- case 'u':
- sb.append((char)Integer.parseInt(next(4), 16));
- break;
- case '"':
- case '\'':
- case '\\':
- case '/':
- sb.append(c);
- break;
- default:
- throw syntaxError("Illegal escape.");
- }
- break;
- default:
- if (c == quote) {
- return sb.toString();
- }
- sb.append(c);
- }
- }
- }
-
-
- /**
- * Get the text up but not including the specified character or the
- * end of line, whichever comes first.
- * @param d A delimiter character.
- * @return A string.
- */
- public String nextTo(char d) throws JSONException {
- StringBuffer sb = new StringBuffer();
- for (;;) {
- char c = next();
- if (c == d || c == 0 || c == '\n' || c == '\r') {
- if (c != 0) {
- back();
- }
- return sb.toString().trim();
- }
- sb.append(c);
- }
- }
-
-
- /**
- * Get the text up but not including one of the specified delimiter
- * characters or the end of line, whichever comes first.
- * @param delimiters A set of delimiter characters.
- * @return A string, trimmed.
- */
- public String nextTo(String delimiters) throws JSONException {
- char c;
- StringBuffer sb = new StringBuffer();
- for (;;) {
- c = next();
- if (delimiters.indexOf(c) >= 0 || c == 0 ||
- c == '\n' || c == '\r') {
- if (c != 0) {
- back();
- }
- return sb.toString().trim();
- }
- sb.append(c);
- }
- }
-
-
- /**
- * Get the next value. The value can be a Boolean, Double, Integer,
- * JSONArray, JSONObject, Long, or String, or the JSONObject.NULL object.
- * @throws JSONException If syntax error.
- *
- * @return An object.
- */
- public Object nextValue() throws JSONException {
- char c = nextClean();
- String s;
-
- switch (c) {
- case '"':
- case '\'':
- return nextString(c);
- case '{':
- back();
- return new JSONObject(this);
- case '[':
- case '(':
- back();
- return new JSONArray(this);
- }
-
- /*
- * Handle unquoted text. This could be the values true, false, or
- * null, or it can be a number. An implementation (such as this one)
- * is allowed to also accept non-standard forms.
- *
- * Accumulate characters until we reach the end of the text or a
- * formatting character.
- */
-
- StringBuffer sb = new StringBuffer();
- while (c >= ' ' && ",:]}/\\\"[{;=#".indexOf(c) < 0) {
- sb.append(c);
- c = next();
- }
- back();
-
- s = sb.toString().trim();
- if (s.equals("")) {
- throw syntaxError("Missing value");
- }
- return JSONObject.stringToValue(s);
- }
-
-
- /**
- * Skip characters until the next character is the requested character.
- * If the requested character is not found, no characters are skipped.
- * @param to A character to skip to.
- * @return The requested character, or zero if the requested character
- * is not found.
- */
- public char skipTo(char to) throws JSONException {
- char c;
- try {
- int startIndex = this.index;
- int startCharacter = this.character;
- int startLine = this.line;
- reader.mark(Integer.MAX_VALUE);
- do {
- c = next();
- if (c == 0) {
- reader.reset();
- this.index = startIndex;
- this.character = startCharacter;
- this.line = startLine;
- return c;
- }
- } while (c != to);
- } catch (IOException exc) {
- throw new JSONException(exc);
- }
-
- back();
- return c;
- }
-
-
- /**
- * Make a JSONException to signal a syntax error.
- *
- * @param message The error message.
- * @return A JSONException object, suitable for throwing
- */
- public JSONException syntaxError(String message) {
- return new JSONException(message + toString());
- }
-
-
- /**
- * Make a printable string of this JSONTokener.
- *
- * @return " at {index} [character {character} line {line}]"
- */
- public String toString() {
- return " at " + index + " [character " + this.character + " line " + this.line + "]";
- }
-}
\ No newline at end of file
diff --git a/svn-info.xml b/svn-info.xml
index df53156..13427f2 100644
--- a/svn-info.xml
+++ b/svn-info.xml
@@ -1,8 +1,8 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
<info>
<entry
path="plugins"
- revision="28431"
+ revision="28913"
kind="dir">
<url>http://svn.openstreetmap.org/applications/editors/josm/plugins</url>
<repository>
@@ -10,9 +10,9 @@
<uuid>b9d5c4c9-76e1-0310-9c85-f3177eceb1e4</uuid>
</repository>
<commit
- revision="28420">
-<author>stoecker</author>
-<date>2012-06-01T08:18:19.345882Z</date>
+ revision="28912">
+<author>roland</author>
+<date>2012-11-09T17:38:59.505638Z</date>
</commit>
</entry>
</info>
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/josm-plugins.git
More information about the Pkg-grass-devel
mailing list