package org.openstreetmap.josm.plugins.directdownload;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.data.gpx.GpxData;
import org.openstreetmap.josm.io.GpxReader;
import org.openstreetmap.josm.io.OsmApi;
import org.openstreetmap.josm.io.OsmConnection;
import org.openstreetmap.josm.io.OsmTransferException;
import org.openstreetmap.josm.tools.HttpClient;
import org.xml.sax.SAXException;
import javax.swing.*;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import static org.openstreetmap.josm.tools.I18n.tr;
public class GpxServerReader extends OsmConnection {
public GpxData loadGpx(final long id) {
final String urlString = OsmApi.getOsmApi().getBaseUrl() + "gpx/" + id + "/data";
try {
final HttpClient client = HttpClient.create(new URL(urlString));
addAuth(client);
try (final InputStream in = client.connect().uncompressAccordingToContentDisposition(true).getContent()) {
final GpxReader r = new GpxReader(in);
boolean parsedProperly = r.parse(true);
if (!parsedProperly) {
JOptionPane.showMessageDialog(Main.parent,
tr("Error occurred while parsing gpx file {0}. Only a part of the file will be available.", urlString));
}
return r.getGpxData();
}
} catch (IOException | OsmTransferException e) {
Main.warn(e);
JOptionPane.showMessageDialog(Main.parent, tr("Error fetching URL {0}", urlString));
return null;
} catch (SAXException e) {
Main.warn(e);
JOptionPane.showMessageDialog(Main.parent, tr("Error parsing data from URL {0}", urlString));
return null;
}
}
}