Ignore:
Timestamp:
2014-01-27T00:58:04+01:00 (11 years ago)
Author:
donvip
Message:

[josm_geochat, josm_livegps] update to JOSM 6756

Location:
applications/editors/josm/plugins/livegps
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/livegps/build.xml

    r30131 r30234  
    22<project name="livegps" default="dist" basedir=".">
    33    <property name="commit.message" value="Changed the constructor signature of the plugin main class"/>
    4     <property name="plugin.main.version" value="6484"/>
     4    <property name="plugin.main.version" value="6756"/>
    55       
    66    <!-- Configure these properties (replace "..." accordingly).
  • applications/editors/josm/plugins/livegps/src/livegps/LiveGpsAcquirer.java

    r29769 r30234  
    22
    33import static org.openstreetmap.josm.tools.I18n.tr;
    4 
    54
    65import java.beans.PropertyChangeEvent;
     
    98import java.io.IOException;
    109import java.io.InputStreamReader;
     10import java.io.StringReader;
    1111import java.net.InetAddress;
    1212import java.net.Socket;
     
    1414import java.util.List;
    1515
     16import javax.json.Json;
     17import javax.json.JsonException;
     18import javax.json.JsonNumber;
     19import javax.json.JsonObject;
     20
    1621import org.openstreetmap.josm.Main;
    17 
    18 import org.json.JSONObject;
    19 import org.json.JSONException;
    2022
    2123public class LiveGpsAcquirer implements Runnable {
     
    4143     */
    4244    public LiveGpsAcquirer() {
    43         super();
    4445
    4546        gpsdHost = Main.pref.get(C_HOST, DEFAULT_HOST);
     
    7778     * @param statusMessage the status message.
    7879     */
    79     public void fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus status,
    80             String statusMessage) {
     80    public void fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus status, String statusMessage) {
    8181        PropertyChangeEvent event = new PropertyChangeEvent(this, "gpsstatus",
    8282                null, new LiveGpsStatus(status, statusMessage));
     
    9797     */
    9898    public void fireGpsDataChangeEvent(LiveGpsData oldData, LiveGpsData newData) {
    99         PropertyChangeEvent event = new PropertyChangeEvent(this, "gpsdata",
    100                 oldData, newData);
     99        PropertyChangeEvent event = new PropertyChangeEvent(this, "gpsdata", oldData, newData);
    101100
    102101        if (!event.equals(lastDataEvent)) {
     
    124123        while (!shutdownFlag) {
    125124
    126             while (!connected) {
    127                 try {
     125            while (!connected) {
     126                try {
    128127                    connect();
    129                 } catch (IOException iox) {
    130                     fireGpsStatusChangeEvent( LiveGpsStatus.GpsStatus.CONNECTION_FAILED, tr("Connection Failed"));
    131                     try {
    132                         Thread.sleep(1000);
    133                     } catch (InterruptedException ignore) {}
    134                 }
    135             }
    136 
    137             assert (connected);
    138 
    139             try {
    140                     String line;
    141 
    142                     // <FIXXME date="23.06.2007" author="cdaller">
    143                     // TODO this read is blocking if gps is connected but has no
    144                     // fix, so gpsd does not send positions
    145                     line = gpsdReader.readLine();
    146                     // </FIXXME>
    147                     if (line == null)
    148                         throw new IOException();
    149 
    150                     if (JSONProtocol == true)
    151                         gpsData = ParseJSON(line);
    152                     else
    153                         gpsData = ParseOld(line);
    154 
    155                     if (gpsData == null)
    156                         continue;
    157 
    158                     fireGpsDataChangeEvent(oldGpsData, gpsData);
    159                     oldGpsData = gpsData;
     128                } catch (IOException iox) {
     129                    fireGpsStatusChangeEvent( LiveGpsStatus.GpsStatus.CONNECTION_FAILED, tr("Connection Failed"));
     130                        try {
     131                            Thread.sleep(1000);
     132                        } catch (InterruptedException ignore) {
     133                               
     134                        }
     135                    }
     136            }
     137
     138            assert (connected);
     139
     140            try {
     141                String line;
     142
     143                // <FIXXME date="23.06.2007" author="cdaller">
     144                // TODO this read is blocking if gps is connected but has no
     145                // fix, so gpsd does not send positions
     146                line = gpsdReader.readLine();
     147                // </FIXXME>
     148                if (line == null)
     149                    throw new IOException();
     150
     151                if (JSONProtocol == true)
     152                    gpsData = ParseJSON(line);
     153                else
     154                    gpsData = ParseOld(line);
     155
     156                if (gpsData == null)
     157                    continue;
     158
     159                fireGpsDataChangeEvent(oldGpsData, gpsData);
     160                oldGpsData = gpsData;
    160161            } catch (IOException iox) {
    161                 System.out.println("LiveGps: lost connection to gpsd");
     162                Main.warn("LiveGps: lost connection to gpsd");
    162163                fireGpsStatusChangeEvent(
    163164                        LiveGpsStatus.GpsStatus.CONNECTION_FAILED,
    164165                        tr("Connection Failed"));
    165                 disconnect();
     166                disconnect();
    166167                try {
    167168                    Thread.sleep(1000);
     
    171172        }
    172173
    173         System.out.println("LiveGps: Disconnected from gpsd");
     174        Main.info("LiveGps: Disconnected from gpsd");
    174175        fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus.DISCONNECTED,
    175176                tr("Not connected"));
    176         disconnect();
     177        disconnect();
    177178    }
    178179
     
    182183
    183184    private void connect() throws IOException {
    184         JSONObject greeting;
     185        JsonObject greeting;
    185186        String line, type, release;
    186187
    187         System.out.println("LiveGps: trying to connect to gpsd at " + gpsdHost + ":" + gpsdPort);
     188        Main.info("LiveGps: trying to connect to gpsd at " + gpsdHost + ":" + gpsdPort);
    188189        fireGpsStatusChangeEvent( LiveGpsStatus.GpsStatus.CONNECTING, tr("Connecting"));
    189190
     
    194195                break;
    195196            } catch (IOException e) {
    196                 System.out.println("LiveGps: Could not open connection to gpsd: " + e);
     197                Main.warn("LiveGps: Could not open connection to gpsd: " + e);
    197198                gpsdSocket = null;
    198199            }
     
    213214
    214215        try {
    215             greeting = new JSONObject(line);
     216            greeting = Json.createReader(new StringReader(line)).readObject();
    216217            type = greeting.getString("class");
    217218            if (type.equals("VERSION")) {
    218219                release = greeting.getString("release");
    219                 System.out.println("LiveGps: Connected to gpsd " + release);
     220                Main.info("LiveGps: Connected to gpsd " + release);
    220221            } else
    221                 System.out.println("LiveGps: Unexpected JSON in gpsd greeting: " + line);
    222         } catch (JSONException jex) {
     222                Main.info("LiveGps: Unexpected JSON in gpsd greeting: " + line);
     223        } catch (JsonException jex) {
    223224            if (line.startsWith("GPSD,")) {
    224225                connected = true;
    225226                JSONProtocol = false;
    226                 System.out.println("LiveGps: Connected to old gpsd protocol version.");
     227                Main.info("LiveGps: Connected to old gpsd protocol version.");
    227228                fireGpsStatusChangeEvent(LiveGpsStatus.GpsStatus.CONNECTED, tr("Connected"));
    228229            }
     
    230231
    231232        if (JSONProtocol == true) {
    232             JSONObject Watch = new JSONObject();
    233             try {
    234                 Watch.put("enable", true);
    235                 Watch.put("json", true);
    236             } catch (JSONException je) {}
     233                JsonObject Watch = Json.createObjectBuilder()
     234                                .add("enable", true)
     235                                .add("json", true)
     236                                .build();
    237237
    238238            String Request = "?WATCH=" + Watch.toString() + ";\n";
     
    245245
    246246    private void disconnect() {
    247         assert(gpsdSocket != null);
    248 
    249         connected = false;
     247        assert(gpsdSocket != null);
     248
     249        connected = false;
    250250
    251251        try {
    252                 gpsdSocket.close();
    253                 gpsdSocket = null;
    254         } catch (Exception e) {
    255                 System.out.println("LiveGps: Unable to close socket; reconnection may not be possible");
    256         }
     252            gpsdSocket.close();
     253            gpsdSocket = null;
     254        } catch (Exception e) {
     255                Main.warn("LiveGps: Unable to close socket; reconnection may not be possible");
     256        }
    257257    }
    258258
    259259    private LiveGpsData ParseJSON(String line) {
    260         JSONObject report;
     260        JsonObject report;
    261261        String type;
    262262        double lat = 0;
     
    268268
    269269        try {
    270             report = new JSONObject(line);
     270            report = Json.createReader(new StringReader(line)).readObject();
    271271            type = report.getString("class");
    272         } catch (JSONException jex) {
    273             System.out.println("LiveGps: line read from gpsd is not a JSON object:" + line);
     272        } catch (JsonException jex) {
     273                Main.warn("LiveGps: line read from gpsd is not a JSON object:" + line);
    274274            return null;
    275275        }
     
    278278
    279279        try {
    280             lat = report.getDouble("lat");
    281             lon = report.getDouble("lon");
    282             speed = (new Float(report.getDouble("speed"))).floatValue();
    283             course = (new Float(report.getDouble("track"))).floatValue();
    284             if (report.has("epx"))
    285                 epx = (new Float(report.getDouble("epx"))).floatValue();
    286             if (report.has("epy"))
    287                 epy = (new Float(report.getDouble("epy"))).floatValue();
     280            lat = report.getJsonNumber("lat").doubleValue();
     281            lon = report.getJsonNumber("lon").doubleValue();
     282            speed = (new Float(report.getJsonNumber("speed").doubleValue())).floatValue();
     283            course = (new Float(report.getJsonNumber("track").doubleValue())).floatValue();
     284            JsonNumber epxJson = report.getJsonNumber("epx");
     285            if (epxJson != null)
     286                epx = (new Float(epxJson.doubleValue())).floatValue();
     287            JsonNumber epyJson = report.getJsonNumber("epy");
     288            if (epyJson != null)
     289                epy = (new Float(epyJson.doubleValue())).floatValue();
    288290
    289291            return new LiveGpsData(lat, lon, course, speed, epx, epy);
    290         } catch (JSONException je) {}
     292        } catch (JsonException je) {
     293                Main.debug(je.getMessage());
     294        }
    291295
    292296        return null;
Note: See TracChangeset for help on using the changeset viewer.