Changeset 58 in josm


Ignore:
Timestamp:
2006-03-14T01:47:55+01:00 (14 years ago)
Author:
imi
Message:
  • implemented 0.3 API
  • enabled upload of ways
  • switched to MinML (GPX still uses JDOM)
  • changed assumed server precision to 10-12 (was 10-13)
Files:
2 added
2 deleted
12 edited
1 moved

Legend:

Unmodified
Added
Removed
  • .classpath

    r49 r58  
    55        <classpathentry including="images/" excluding="*" kind="src" path=""/>
    66        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    7         <classpathentry sourcepath="/home/imi/src/jdom-1.0/src" kind="lib" path="lib/jdom.jar"/>
     7        <classpathentry kind="lib" path="lib/jdom.jar"/>
    88        <classpathentry sourcepath="JUNIT_SRC_HOME/junitsrc.zip" kind="var" path="JUNIT_HOME/junit.jar"/>
     9        <classpathentry sourcepath="C:/projects/MinML2.release" kind="lib" path="lib/MinML2.jar"/>
    910        <classpathentry kind="output" path="bin"/>
    1011</classpath>
  • src/org/openstreetmap/josm/actions/DownloadAction.java

    r55 r58  
    4343import org.openstreetmap.josm.gui.layer.RawGpsDataLayer;
    4444import org.openstreetmap.josm.io.OsmServerReader;
     45import org.xml.sax.SAXException;
    4546
    4647/**
     
    254255                                        else
    255256                                                Main.main.getMapFrame().mapView.addLayer(layer);
     257                                } catch (SAXException x) {
     258                                        closeDialog();
     259                                        x.printStackTrace();
     260                                        JOptionPane.showMessageDialog(Main.main, x.getMessage());
    256261                                } catch (JDOMException x) {
    257262                                        closeDialog();
  • src/org/openstreetmap/josm/actions/OpenAction.java

    r54 r58  
    2424import org.openstreetmap.josm.io.GpxReader;
    2525import org.openstreetmap.josm.io.OsmReader;
     26import org.openstreetmap.josm.io.OsmReaderOld;
    2627import org.openstreetmap.josm.io.RawCsvReader;
    2728import org.openstreetmap.josm.io.RawGpsReader;
     29import org.xml.sax.SAXException;
    2830
    2931/**
     
    7577                                if (ExtensionFileFilter.filters[ExtensionFileFilter.GPX].acceptName(fn))
    7678                                        dataSet = new GpxReader(new FileReader(filename)).parse();
    77                                 else if (ExtensionFileFilter.filters[ExtensionFileFilter.OSM].acceptName(fn))
    78                                         dataSet = new OsmReader(new FileReader(filename)).parse();
    79                                 else if (ExtensionFileFilter.filters[ExtensionFileFilter.CSV].acceptName(fn)) {
     79                                else if (ExtensionFileFilter.filters[ExtensionFileFilter.OSM].acceptName(fn)) {
     80                                        try {
     81                                                // temporary allow loading of old xml format.
     82                                                dataSet = OsmReader.parseDataSet(new FileReader(filename));
     83                                        } catch (SAXException x) {
     84                                                if (x.getMessage().equals("Unknown version: null")) {
     85                                                        int answer = JOptionPane.showConfirmDialog(Main.main,
     86                                                                        "This seems to be an old 0.2 API XML file.\n" +
     87                                                                        "JOSM can try to open it with the old parser. This option\n" +
     88                                                                        "will not be available in future JOSM version. You should\n" +
     89                                                                        "immediatly save the file, if successfull imported.",
     90                                                                        "Load as 0.2 API file?",
     91                                                                        JOptionPane.YES_NO_OPTION);
     92                                                        if (answer != JOptionPane.YES_OPTION)
     93                                                                return;
     94                                                        dataSet = new OsmReaderOld(new FileReader(filename)).parse();
     95                                                } else
     96                                                        throw x;
     97                                        }                                       
     98                                } else if (ExtensionFileFilter.filters[ExtensionFileFilter.CSV].acceptName(fn)) {
    8099                                        JOptionPane.showMessageDialog(Main.main, "CSV Data import for non-GPS data is not implemented yet.");
    81100                                        return;
     
    92111                                Main.main.getMapFrame().mapView.addLayer(layer);
    93112
     113                } catch (SAXException x) {
     114                        x.printStackTrace();
     115                        JOptionPane.showMessageDialog(Main.main, x.getMessage());
    94116                } catch (JDOMException x) {
    95117                        x.printStackTrace();
  • src/org/openstreetmap/josm/actions/SaveAction.java

    r54 r58  
    6868                                new GpxWriter(fileWriter = new FileWriter(file), Main.main.ds).output();
    6969                        else if (ExtensionFileFilter.filters[ExtensionFileFilter.OSM].acceptName(fn))
    70                                 new OsmWriter(fileWriter = new FileWriter(file), Main.main.ds).output();
     70                                OsmWriter.output(fileWriter = new FileWriter(file), Main.main.ds, false);
    7171                        else if (ExtensionFileFilter.filters[ExtensionFileFilter.CSV].acceptName(fn)) {
    7272                                JOptionPane.showMessageDialog(Main.main, "CSV output not supported yet.");
  • src/org/openstreetmap/josm/actions/UploadAction.java

    r52 r58  
    1717import org.jdom.JDOMException;
    1818import org.openstreetmap.josm.Main;
     19import org.openstreetmap.josm.data.Preferences.PreferencesException;
    1920import org.openstreetmap.josm.data.osm.OsmPrimitive;
    20 import org.openstreetmap.josm.data.osm.Track;
    2121import org.openstreetmap.josm.gui.GBC;
    2222import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
     
    3939
    4040        public void actionPerformed(ActionEvent e) {
     41               
     42                //TODO: Remove this in later versions (temporary only)
     43                if (Main.pref.osmDataServer.endsWith("/0.2") || Main.pref.osmDataServer.endsWith("/0.2/")) {
     44                        int answer = JOptionPane.showConfirmDialog(Main.main,
     45                                        "You seem to have an outdated server entry in your preferences.\n" +
     46                                        "\n" +
     47                                        "As of JOSM Release 1.2, you must no longer specify the API version in\n" +
     48                                        "the osm url. For the OSM standard server, use http://www.openstreetmap.org/api" +
     49                                        "\n" +
     50                                        "Fix settings and continue?", "Outdated server url detected.", JOptionPane.YES_NO_OPTION);
     51                        if (answer != JOptionPane.YES_OPTION)
     52                                return;
     53                        int cutPos = Main.pref.osmDataServer.endsWith("/0.2") ? 4 : 5;
     54                        Main.pref.osmDataServer = Main.pref.osmDataServer.substring(0, Main.pref.osmDataServer.length()-cutPos);
     55                        try {
     56                                Main.pref.save();
     57                        } catch (PreferencesException x) {
     58                                x.printStackTrace();
     59                                JOptionPane.showMessageDialog(Main.main, "Could not save the preferences chane:\n" +
     60                                                x.getMessage());
     61                        }
     62                }
     63
    4164                final Collection<OsmPrimitive> add = new LinkedList<OsmPrimitive>();
    4265                final Collection<OsmPrimitive> update = new LinkedList<OsmPrimitive>();
    4366                final Collection<OsmPrimitive> delete = new LinkedList<OsmPrimitive>();
    44                 boolean acceptedTracks = false;
    4567                for (OsmPrimitive osm : Main.main.ds.allPrimitives()) {
    46                         boolean doSomething = true;
    4768                        if (osm.id == 0 && !osm.isDeleted())
    4869                                add.add(osm);
     
    5172                        else if (osm.isDeleted() && osm.id != 0)
    5273                                delete.add(osm);
    53                         else
    54                                 doSomething = false;
    55 
    56                         if (osm instanceof Track && doSomething && !acceptedTracks) {
    57                                 int answer = JOptionPane.showConfirmDialog(Main.main,
    58                                                 "The server currently does not understand the concept of Tracks.\n" +
    59                                                 "All tracks will be ignored on upload. Continue anyway?",
    60                                                 "No Track support", JOptionPane.YES_NO_OPTION);
    61                                 if (answer != JOptionPane.YES_OPTION)
    62                                         return;
    63                                 acceptedTracks = true;
    64                         }
    6574                }
    6675
     
    8897                }).start();
    8998        }
    90        
     99
    91100        /**
    92101         * Displays a screen where the actions that would be taken are displayed and
  • src/org/openstreetmap/josm/actions/mapmode/AddTrackAction.java

    r31 r58  
    4646         */
    4747        public AddTrackAction(MapFrame mapFrame) {
    48                 super("Add Track", "addtrack", "Combine line segments to a new track.", KeyEvent.VK_T, mapFrame);
     48                super("Add Way", "addtrack", "Combine line segments to a new way.", KeyEvent.VK_W, mapFrame);
    4949                this.selectionManager = new SelectionManager(this, false, mv);
    5050        }
  • src/org/openstreetmap/josm/data/Preferences.java

    r43 r58  
    5454         * Base URL to the osm data server
    5555         */
    56         public String osmDataServer = "http://www.openstreetmap.org/api/0.2";
     56        public String osmDataServer = "http://www.openstreetmap.org/api";
    5757        /**
    5858         * The username to the osm server
  • src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r35 r58  
    11package org.openstreetmap.josm.data.osm;
    22
     3import java.util.HashMap;
    34import java.util.Map;
    45
     
    1011 * An OSM primitive can be associated with a key/value pair. It can be created, deleted
    1112 * and updated within the OSM-Server.
    12  *
     13 *
     14 * Although OsmPrimitive is designed as a base class, it is not to be meant to subclass
     15 * it by any other than from the package org.openstreetmap.josm.data.osm (thus the
     16 * visibility of the constructor). The available primitives are a fixed set that are given
     17 * by the server environment and not an extendible data stuff.
     18 *
    1319 * @author imi
    1420 */
    1521abstract public class OsmPrimitive {
    16 
    1722
    1823        /**
     
    129134                return id == 0 ? super.hashCode() : (int)id;
    130135        }
     136
     137        /**
     138         * Set the given value to the given key
     139         * @param key The key, for which the value is to be set.
     140         * @param value The value for the key.
     141         */
     142        public void put(Key key, String value) {
     143                if (keys == null)
     144                        keys = new HashMap<Key, String>();
     145                keys.put(key, value);
     146        }
    131147}
  • src/org/openstreetmap/josm/data/projection/Projection.java

    r51 r58  
    1313        public static double MAX_LAT = 85;
    1414        public static double MAX_LON = 180;
    15         public static final double MAX_SERVER_PRECISION = 1e13;
     15        public static final double MAX_SERVER_PRECISION = 1e12;
    1616       
    1717        /**
  • src/org/openstreetmap/josm/io/OsmReaderOld.java

    r57 r58  
    2020
    2121/**
    22  * Reads an osm xml stream and construct a DataSet out of it.
     22 * Reads the old osm 0.2 format.
    2323 *
    2424 * @author imi
    2525 */
    26 public class OsmReader {
     26public class OsmReaderOld {
    2727
    2828        /**
     
    3535         * @param source The data source, as example a FileReader to read from a file.
    3636         */
    37         public OsmReader(Reader source) {
     37        public OsmReaderOld(Reader source) {
    3838                this.source = source;
    3939        }
    40         static int i;
     40
    4141        /**
    4242         * Read the input stream and return a DataSet from the stream.
  • src/org/openstreetmap/josm/io/OsmServerReader.java

    r47 r58  
    1313import org.openstreetmap.josm.data.GeoPoint;
    1414import org.openstreetmap.josm.data.osm.DataSet;
     15import org.xml.sax.SAXException;
    1516
    1617/**
     
    4748         */
    4849        public Collection<Collection<GeoPoint>> parseRawGps() throws IOException, JDOMException {
    49                 String url = Main.pref.osmDataServer+"/trackpoints?bbox="+lon1+","+lat1+","+lon2+","+lat2+"&page=";
     50                String url = Main.pref.osmDataServer+"/0.3/trackpoints?bbox="+lon1+","+lat1+","+lon2+","+lat2+"&page=";
    5051                Collection<Collection<GeoPoint>> data = new LinkedList<Collection<GeoPoint>>();
    5152                Collection<GeoPoint> list = new LinkedList<GeoPoint>();
     
    7879         * @return A data set containing all data retrieved from that url
    7980         */
    80         public DataSet parseOsm() throws JDOMException, IOException {
    81                 Reader r = getReader(Main.pref.osmDataServer+"/map?bbox="+lon1+","+lat1+","+lon2+","+lat2);
     81        public DataSet parseOsm() throws SAXException, IOException {
     82                Reader r = getReader(Main.pref.osmDataServer+"/0.3/map?bbox="+lon1+","+lat1+","+lon2+","+lat2);
    8283                if (r == null)
    8384                        return null;
    84                 DataSet data = new OsmReader(r).parse();
     85                DataSet data = OsmReader.parseDataSet(r);
    8586                r.close();
    8687                return data;
     
    9596         */
    9697        private Reader getReader(String urlStr) throws IOException {
     98                System.out.println("download: "+urlStr);
    9799                initAuthentication();
    98100                URL url = new URL(urlStr);
  • src/org/openstreetmap/josm/io/OsmServerWriter.java

    r52 r58  
    55import java.io.InputStream;
    66import java.io.InputStreamReader;
    7 import java.io.OutputStream;
     7import java.io.OutputStreamWriter;
     8import java.io.Writer;
    89import java.net.HttpURLConnection;
    910import java.net.URL;
     
    1314import java.util.LinkedList;
    1415
    15 import org.jdom.Document;
    16 import org.jdom.Element;
    1716import org.jdom.JDOMException;
    18 import org.jdom.output.Format;
    19 import org.jdom.output.XMLOutputter;
    2017import org.openstreetmap.josm.Main;
    2118import org.openstreetmap.josm.data.osm.Key;
     
    2421import org.openstreetmap.josm.data.osm.OsmPrimitive;
    2522import org.openstreetmap.josm.data.osm.Track;
    26 import org.openstreetmap.josm.data.osm.visitor.OsmXmlVisitor;
    2723import org.openstreetmap.josm.data.osm.visitor.Visitor;
    2824
     
    7268                if (n.id == 0 && !n.isDeleted()) {
    7369                        setCredits(n);
    74                         sendRequest("PUT", "newnode", n, true);
     70                        sendRequest("PUT", "node", n, true);
    7571                } else if (n.isDeleted()) {
    76                         sendRequest("DELETE", "node/" + n.id, n, false);
     72                        sendRequest("DELETE", "node", n, false);
    7773                } else {
    78                         sendRequest("PUT", "node/" + n.id, n, true);
     74                        sendRequest("PUT", "node", n, true);
    7975                }
    8076                processed.add(n);
     
    8783                if (ls.id == 0 && !ls.isDeleted()) {
    8884                        setCredits(ls);
    89                         sendRequest("PUT", "newsegment", ls, true);
     85                        sendRequest("PUT", "segment", ls, true);
    9086                } else if (ls.isDeleted()) {
    91                         sendRequest("DELETE", "segment/" + ls.id, ls, false);
     87                        sendRequest("DELETE", "segment", ls, false);
    9288                } else {
    93                         sendRequest("PUT", "segment/" + ls.id, ls, true);
     89                        sendRequest("PUT", "segment", ls, true);
    9490                }
    9591                processed.add(ls);
     92        }
     93
     94        /**
     95         * Upload a whole way with the complete line segment id list.
     96         */
     97        public void visit(Track w) {
     98                if (w.id == 0 && !w.isDeleted()) {
     99                        setCredits(w);
     100                        sendRequest("PUT", "way", w, true);
     101                } else if (w.isDeleted()) {
     102                        sendRequest("DELETE", "way", w, false);
     103                } else {
     104                        sendRequest("PUT", "way", w, true);
     105                }
     106                processed.add(w);
    96107        }
    97108
     
    107118        }
    108119
    109         public void visit(Track t) {
    110                 // not implemented in server
    111         }
    112120
    113121        public void visit(Key k) {
     
    145153                        OsmPrimitive osm, boolean addBody) {
    146154                try {
    147                         URL url = new URL(Main.pref.osmDataServer + "/" + urlSuffix);
     155                        URL url = new URL(Main.pref.osmDataServer + "/0.3/" + urlSuffix + "/" + osm.id);
     156                        System.out.println("upload to: "+url);
    148157                        HttpURLConnection con = (HttpURLConnection) url.openConnection();
    149158                        con.setConnectTimeout(20000);
     
    154163
    155164                        if (addBody) {
    156                                 OsmXmlVisitor visitor = new OsmXmlVisitor(false);
    157                                 osm.visit(visitor);
    158                                 Element root = new Element("osm");
    159                                 root.setAttribute("version", "0.2");
    160                                 root.getChildren().add(visitor.element);
    161                                 XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());
    162                                 OutputStream out = con.getOutputStream();
    163                                 Document doc = new Document(root);
    164                                 xmlOut.output(doc, out);
     165                                Writer out = new OutputStreamWriter(con.getOutputStream());
     166                                OsmWriter.outputSingle(out, osm, true);
    165167                                out.close();
    166168                        }
     
    169171                        if (retCode == 200 && osm.id == 0)
    170172                                osm.id = readId(con.getInputStream());
     173                        System.out.println("got return: "+retCode+" with id "+osm.id);
    171174                        con.disconnect();
    172175                } catch (UnknownHostException e) {
    173176                        throw new RuntimeException("Unknown host: "+e.getMessage(), e);
    174177                } catch (Exception e) {
     178                        if (e instanceof RuntimeException)
     179                                throw (RuntimeException)e;
    175180                        throw new RuntimeException(e.getMessage(), e);
    176181                }
  • test/org/openstreetmap/josm/test/framework/DataSetTestCaseHelper.java

    r53 r58  
    3535                LineSegment ls2 = createLineSegment(ds, n2, n3);
    3636                createLineSegment(ds, n4, n5);
    37                 createTrack(ds, ls1, ls2);
     37                createWay(ds, ls1, ls2);
    3838                return ds;
    3939        }
    4040
    41         public static Track createTrack(DataSet ds, LineSegment... lineSegments) {
     41        public static Track createWay(DataSet ds, LineSegment... lineSegments) {
    4242                Track t = new Track();
    4343                t.segments.addAll(Arrays.asList(lineSegments));
Note: See TracChangeset for help on using the changeset viewer.