Changeset 35 in josm


Ignore:
Timestamp:
Dec 28, 2005 1:29:01 AM (7 years ago)
Author:
imi
Message:
  • fixed bug in UTM
  • upload of nodes and segments
  • fixed bugs in display the selection
Location:
src/org/openstreetmap/josm
Files:
1 added
1 deleted
19 edited

Legend:

Unmodified
Added
Removed
  • src/org/openstreetmap/josm/actions/DownloadAction.java

    r34 r35  
    77import java.awt.event.InputEvent; 
    88import java.awt.event.KeyEvent; 
     9import java.io.FileNotFoundException; 
    910import java.io.IOException; 
    1011 
     
    169170                        x.printStackTrace(); 
    170171                        JOptionPane.showMessageDialog(Main.main, x.getMessage()); 
     172                } catch (FileNotFoundException x) { 
     173                        x.printStackTrace(); 
     174                        JOptionPane.showMessageDialog(Main.main, "URL nicht gefunden: "+x.getMessage()); 
    171175                } catch (IOException x) { 
    172176                        x.printStackTrace(); 
  • src/org/openstreetmap/josm/actions/UploadAction.java

    r34 r35  
    1818import org.openstreetmap.josm.Main; 
    1919import org.openstreetmap.josm.data.osm.OsmPrimitive; 
     20import org.openstreetmap.josm.data.osm.Track; 
    2021import org.openstreetmap.josm.gui.GBC; 
    2122import org.openstreetmap.josm.gui.OsmPrimitivRenderer; 
     
    4142                Collection<OsmPrimitive> update = new LinkedList<OsmPrimitive>(); 
    4243                Collection<OsmPrimitive> delete = new LinkedList<OsmPrimitive>(); 
    43                 for (OsmPrimitive osm : Main.main.ds.nodes) 
    44                         if (osm.id == 0) 
     44                for (OsmPrimitive osm : Main.main.ds.allPrimitives()) { 
     45                        if (osm instanceof Track) { 
     46                                int answer = JOptionPane.showConfirmDialog(Main.main,  
     47                                                "The server currently does not understand the concept of Tracks.\n" + 
     48                                                "All tracks will be ignored on upload. Continue anyway?", 
     49                                                "No Track support", JOptionPane.YES_NO_OPTION); 
     50                                if (answer != JOptionPane.YES_OPTION) 
     51                                        return; 
     52                        } 
     53                        if (osm.id == 0 && !osm.isDeleted()) 
    4554                                add.add(osm); 
    46                         else if (osm.modified) 
     55                        else if ((osm.modified || osm.modifiedProperties) && !osm.isDeleted()) 
    4756                                update.add(osm); 
    48                 for (OsmPrimitive osm : Main.main.ds.lineSegments) 
    49                         if (osm.id == 0) 
    50                                 add.add(osm); 
    51                         else if (osm.modified) 
    52                                 update.add(osm); 
    53                 for (OsmPrimitive osm : Main.main.ds.tracks) 
    54                         if (osm.id == 0) 
    55                                 add.add(osm); 
    56                         else if (osm.modified) 
    57                                 update.add(osm); 
    58                 for (OsmPrimitive osm : Main.main.ds.deleted) 
    59                         if (osm.id != 0) 
     57                        else if (osm.isDeleted() && osm.id != 0) 
    6058                                delete.add(osm); 
     59                } 
    6160 
    6261                if (!displayUploadScreen(add, update, delete)) 
    6362                        return; 
    64                  
     63 
    6564                OsmServerWriter server = new OsmServerWriter(); 
    6665                try { 
     
    7069                        all.addAll(delete); 
    7170                        server.uploadOsm(all); 
     71                        // finished without errors -> clean dataset 
     72                        Main.main.getMapFrame().mapView.editLayer().cleanData(); 
    7273                } catch (JDOMException x) { 
    7374                        x.printStackTrace(); 
     
    8788                        return false; 
    8889                } 
    89                  
     90 
    9091                JPanel p = new JPanel(new GridBagLayout()); 
    9192 
  • src/org/openstreetmap/josm/command/AddCommand.java

    r31 r35  
    66import org.openstreetmap.josm.data.osm.OsmPrimitive; 
    77import org.openstreetmap.josm.data.osm.visitor.AddVisitor; 
    8 import org.openstreetmap.josm.data.osm.visitor.DeleteVisitor; 
    98 
    109/** 
     
    3938 
    4039        public void undoCommand() { 
    41                 osm.visit(new DeleteVisitor(ds)); 
     40                osm.setDeleted(true); 
    4241        } 
    4342 
  • src/org/openstreetmap/josm/command/ChangeKeyValueCommand.java

    r33 r35  
    5555                for (OsmPrimitive osm : objects) { 
    5656                        oldProperties.add(osm.keys == null ? null : new HashMap<Key, String>(osm.keys)); 
    57                         oldModified.add(osm.modified); 
    58                         osm.modified = true; 
     57                        oldModified.add(osm.modifiedProperties); 
     58                        osm.modifiedProperties = true; 
    5959                } 
    6060 
     
    8181                for (OsmPrimitive osm : objects) { 
    8282                        osm.keys = it.next(); 
    83                         osm.modified = itMod.next(); 
     83                        osm.modifiedProperties = itMod.next(); 
    8484                } 
    8585        } 
  • src/org/openstreetmap/josm/command/DeleteCommand.java

    r31 r35  
    88import org.openstreetmap.josm.data.osm.visitor.AddVisitor; 
    99import org.openstreetmap.josm.data.osm.visitor.CollectBackReferencesVisitor; 
    10 import org.openstreetmap.josm.data.osm.visitor.DeleteVisitor; 
    1110import org.openstreetmap.josm.data.osm.visitor.Visitor; 
    1211 
     
    3534         
    3635        public void executeCommand() { 
    37                 Visitor v = new DeleteVisitor(ds); 
    3836                for (OsmPrimitive osm : data) 
    39                         osm.visit(v); 
     37                        osm.setDeleted(true); 
    4038        } 
    4139 
  • src/org/openstreetmap/josm/data/osm/DataSet.java

    r32 r35  
    22 
    33import java.util.Collection; 
    4 import java.util.HashMap; 
    54import java.util.HashSet; 
    65import java.util.LinkedList; 
    7 import java.util.Map; 
    86 
    97import org.openstreetmap.josm.data.Bounds; 
     
    4442 
    4543        /** 
    46          * All deleted objects goes here. 
     44         * @return A collection containing all primitives (except keys) of the 
     45         * dataset. 
    4746         */ 
    48         public Collection<OsmPrimitive> deleted = new LinkedList<OsmPrimitive>(); 
    49  
     47        public Collection<OsmPrimitive> allPrimitives() { 
     48                Collection<OsmPrimitive> o = new LinkedList<OsmPrimitive>(); 
     49                o.addAll(nodes); 
     50                o.addAll(lineSegments); 
     51                o.addAll(tracks); 
     52                return o; 
     53        } 
     54         
    5055        /** 
    5156         * Return the bounds of this DataSet, depending on X/Y values. 
     
    133138 
    134139        /** 
    135          * Import the given dataset by merging all data with this dataset. 
    136          * The objects imported are not cloned, so from now on, these data belong 
    137          * to both datasets. So use mergeFrom only if you are about to abandon the 
    138          * other dataset. 
    139          * 
    140          * Elements are tried to merged.  
    141          * Nodes are merged first, if their lat/lon are equal. 
    142          * Line segments are merged, if they have the same nodes. 
    143          * Tracks are merged, if they consist of the same line segments. 
    144          * 
    145          * TODO Additional to that, every two objects with the same id are merged. 
    146          * 
    147          * @param ds    The DataSet to merge into this one. 
    148          */ 
    149         public void mergeFrom(DataSet ds) { 
    150                 // merge nodes 
    151                  
    152                 Map<Node, Node> nodeMap = new HashMap<Node, Node>(); 
    153  
    154                 // find mergable 
    155                 for (Node otherNode : ds.nodes) 
    156                         for (Node myNode : nodes) 
    157                                 if (otherNode.coor.equalsLatLon(myNode.coor)) 
    158                                         nodeMap.put(otherNode, myNode); 
    159                 // add 
    160                 for (Node n : ds.nodes) 
    161                         if (!nodeMap.containsKey(n)) 
    162                                 nodes.add(n); 
    163                 // reassign 
    164                 for (LineSegment ls : ds.lineSegments) { 
    165                         Node n = nodeMap.get(ls.start); 
    166                         if (n != null) 
    167                                 ls.start = n; 
    168                         n = nodeMap.get(ls.end); 
    169                         if (n != null) 
    170                                 ls.end = n; 
    171                 } 
    172  
    173  
    174                 // merge line segments 
    175  
    176                 Map<LineSegment, LineSegment> lsMap = new HashMap<LineSegment, LineSegment>(); 
    177                 // find mergable 
    178                 for (LineSegment otherLS : ds.lineSegments) 
    179                         for (LineSegment myLS : lineSegments) 
    180                                 if (otherLS.start == myLS.start && otherLS.end == myLS.end) 
    181                                         lsMap.put(otherLS, myLS); 
    182                 // add ls 
    183                 for (LineSegment ls : ds.lineSegments) 
    184                         if (!lsMap.containsKey(ls)) 
    185                                 lineSegments.add(ls); 
    186                 // reassign 
    187                 for (Track t : ds.tracks) { 
    188                         for (int i = 0; i < t.segments.size(); ++i) { 
    189                                 LineSegment newLS = lsMap.get(t.segments.get(i)); 
    190                                 if (newLS != null) 
    191                                         t.segments.set(i, newLS); 
    192                         } 
    193                 } 
    194  
    195  
    196                 // merge tracks 
    197                  
    198                 LinkedList<Track> trackToAdd = new LinkedList<Track>(); 
    199                 for (Track otherTrack : ds.tracks) { 
    200                         boolean found = false; 
    201                         for (Track myTrack : tracks) { 
    202                                 if (myTrack.segments.equals(otherTrack.segments)) { 
    203                                         found = true; 
    204                                         break; 
    205                                 } 
    206                         } 
    207                         if (!found) 
    208                                 trackToAdd.add(otherTrack); 
    209                 } 
    210                 tracks.addAll(trackToAdd); 
    211         } 
    212  
    213         /** 
    214140         * Remove the selection from every value in the collection. 
    215141         * @param list The collection to remove the selection from. 
     
    234160                        return sel; 
    235161                for (OsmPrimitive osm : list) { 
    236                         if (osm.isSelected()) 
     162                        if (osm.isSelected() && !osm.isDeleted()) 
    237163                                sel.add(osm); 
    238164                        if (osm.keys != null) 
  • src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r33 r35  
    1515abstract public class OsmPrimitive { 
    1616 
     17 
    1718        /** 
    1819         * The key/value list for this primitive. 
     
    2829 
    2930        /** 
    30          * <code>true</code>, if the object has been modified since it was loaded from 
    31          * the server. In this case, on next upload, this object will be updated. Deleted 
    32          * objects are deleted from the server, even if they are modified. If the objects 
    33          * are added (id=0), the modified is ignored and the object is added to the server.  
     31         * <code>true</code>, if the objects content (not the properties) has been  
     32         * modified since it was loaded from the server. In this case, on next upload, 
     33         * this object will be updated. Deleted objects are deleted from the server. 
     34         * If the objects are added (id=0), the modified is ignored and the object is 
     35         * added to the server.  
    3436         */ 
    3537        public boolean modified = false; 
     38 
     39        /** 
     40         * <code>true</code>, if the object's keys has been changed by JOSM since 
     41         * last update. 
     42         */ 
     43        public boolean modifiedProperties = false; 
    3644         
     45        /** 
     46         * <code>true</code>, if the object has been deleted. 
     47         */ 
     48        private boolean deleted = false; 
     49 
    3750        /** 
    3851         * If set to true, this object is currently selected. 
     
    89102 
    90103 
     104        public void setDeleted(boolean deleted) { 
     105                this.deleted = deleted; 
     106                setSelected(false); 
     107        } 
     108 
     109        public boolean isDeleted() { 
     110                return deleted; 
     111        } 
     112 
    91113        /** 
    92          * Equal, if the id is equal. If both ids are 0, use the super classes equal 
    93          * instead. 
     114         * Equal, if the id (and class) is equal. If both ids are 0, use the super classes 
     115         * equal instead. 
    94116         */ 
    95117        @Override 
    96118        public boolean equals(Object obj) { 
    97                 if (!(obj instanceof OsmPrimitive)) 
    98                         return false; 
    99                 OsmPrimitive osm = (OsmPrimitive)obj; 
    100                 if (id == 0 && osm.id == 0) 
     119                if (getClass() != obj.getClass() || id == 0 || obj == null || ((OsmPrimitive)obj).id == 0) 
    101120                        return super.equals(obj); 
    102                 return id == osm.id; 
     121                return id == ((OsmPrimitive)obj).id; 
    103122        } 
    104123 
  • src/org/openstreetmap/josm/data/osm/visitor/AddVisitor.java

    r32 r35  
    2626        public void visit(Node n) { 
    2727                ds.nodes.add(n); 
    28                 ds.deleted.remove(n); // remove if there. 
     28                n.setDeleted(false); 
    2929        } 
    3030        public void visit(LineSegment ls) { 
    3131                ds.lineSegments.add(ls); 
    32                 ds.deleted.remove(ls); // remove if there. 
     32                ls.setDeleted(false); 
    3333        } 
    3434        public void visit(Track t) { 
    3535                ds.tracks.add(t); 
    36                 ds.deleted.remove(t); // remove if there. 
     36                t.setDeleted(false); 
    3737        } 
    3838        public void visit(Key k) {} 
  • src/org/openstreetmap/josm/data/osm/visitor/BoundingVisitor.java

    r23 r35  
    2121         * Calculate regarding lat/lon or x/y? 
    2222         */ 
    23         public static enum Type {LATLON, XY}; 
     23        public static enum Type {LATLON, XY} 
    2424        private Type type; 
    25          
    26          
     25 
     26 
    2727        public BoundingVisitor(Type type) { 
    2828                this.type = type; 
  • src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java

    r30 r35  
    3030         */ 
    3131        private final MapView mv; 
    32         /** 
    33          * Can be set to non-<code>null</code> and then replace every other color. 
    34          */ 
    35         private final Color forceColor; 
    3632         
    3733        /** 
     
    3935         * @param g   The graphics to draw to. 
    4036         * @param mv  The view to get screen coordinates from. 
    41          * @param forceColor If non-<code>null</code>, always draw with this color. 
    4237         */ 
    43         public SimplePaintVisitor(Graphics g, MapView mv, Color forceColor) { 
     38        public SimplePaintVisitor(Graphics g, MapView mv) { 
    4439                this.g = g; 
    4540                this.mv = mv; 
    46                 this.forceColor = forceColor; 
    4741        } 
    4842         
     
    7064         */ 
    7165        public void visit(Track t) { 
     66                // only to overwrite with blue 
    7267                for (LineSegment ls : t.segments) 
    73                         drawLineSegment(ls, darkblue); 
     68                        if (!ls.isSelected()) // selected already in good color 
     69                                drawLineSegment(ls, t.isSelected() ? Color.WHITE : darkblue); 
    7470        } 
    7571 
     
    8884        private void drawNode(Node n, Color color) { 
    8985                Point p = mv.getScreenPoint(n.coor); 
    90                 g.setColor(forceColor != null ? forceColor : color); 
     86                g.setColor(color); 
    9187                g.drawRect(p.x-1, p.y-1, 2, 2); 
    9288        } 
     
    9692         */ 
    9793        private void drawLineSegment(LineSegment ls, Color col) { 
    98                 if (forceColor != null) 
    99                         col = forceColor; 
    100                 else if (ls.isSelected()) 
     94                if (ls.isSelected()) 
    10195                        col = Color.WHITE; 
    10296                g.setColor(col); 
  • src/org/openstreetmap/josm/data/projection/UTM.java

    r23 r35  
    3939        public final static double RAD_TO_DEG = 180 / Math.PI; 
    4040 
     41        public final static double k0 = 0.9996012717; 
     42         
    4143        /** 
    4244         * A reference ellipsoid used in Projections 
     
    116118                // Written by Chuck Gantz- chuck.gantz@globalstar.com 
    117119                // ported to Ruby by Ben Gimpert- ben@somethingmodern.com 
    118                 double k0 = 0.9996012717; 
    119                  
    120120                double lat_rad = p.lat * DEG_TO_RAD; 
    121121                double long_temp = (p.lon + 180) - (Math.floor((p.lon + 180) / 360) * 360) - 180; 
     
    150150                // Written by Chuck Gantz- chuck.gantz@globalstar.com 
    151151                // ported to Ruby by Ben Gimpert- ben@somethingmodern.com 
    152                 double k0 = 0.9996; 
    153152                double e1 = (1-Math.sqrt(1-ellipsoid.ecc_squared))/(1+Math.sqrt(1-ellipsoid.ecc_squared)); 
    154153                double x = p.x - 500000.0; 
  • src/org/openstreetmap/josm/gui/MapView.java

    r30 r35  
    253253                        return minPrimitive; 
    254254                 
    255                 // pending line segments 
     255                // for whole tracks, try the tracks first 
     256                minDistanceSq = Double.MAX_VALUE; 
     257                if (wholeTrack) { 
     258                        for (Track t : Main.main.ds.tracks) { 
     259                                for (LineSegment ls : t.segments) { 
     260                                        Point A = getScreenPoint(ls.start.coor); 
     261                                        Point B = getScreenPoint(ls.end.coor); 
     262                                        double c = A.distanceSq(B); 
     263                                        double a = p.distanceSq(B); 
     264                                        double b = p.distanceSq(A); 
     265                                        double perDist = a-(a-b+c)*(a-b+c)/4/c; // perpendicular distance squared 
     266                                        if (perDist < 100 && minDistanceSq > perDist && a < c+100 && b < c+100) { 
     267                                                minDistanceSq = perDist; 
     268                                                minPrimitive = t; 
     269                                        } 
     270                                }                        
     271                        } 
     272                        if (minPrimitive != null) 
     273                                return minPrimitive; 
     274                } 
     275                 
     276                minDistanceSq = Double.MAX_VALUE; 
     277                // line segments 
    256278                for (LineSegment ls : Main.main.ds.lineSegments) { 
    257279                        Point A = getScreenPoint(ls.start.coor); 
     
    267289                } 
    268290 
    269                 // tracks & line segments 
    270                 minDistanceSq = Double.MAX_VALUE; 
    271                 for (Track t : Main.main.ds.tracks) { 
    272                         for (LineSegment ls : t.segments) { 
    273                                 Point A = getScreenPoint(ls.start.coor); 
    274                                 Point B = getScreenPoint(ls.end.coor); 
    275                                 double c = A.distanceSq(B); 
    276                                 double a = p.distanceSq(B); 
    277                                 double b = p.distanceSq(A); 
    278                                 double perDist = a-(a-b+c)*(a-b+c)/4/c; // perpendicular distance squared 
    279                                 if (perDist < 100 && minDistanceSq > perDist && a < c+100 && b < c+100) { 
    280                                         minDistanceSq = perDist; 
    281                                         minPrimitive = wholeTrack ? t : ls; 
    282                                 } 
    283                         }                        
    284                 } 
    285                 if (minPrimitive != null) 
    286                         return minPrimitive; 
    287                  
    288                 // TODO areas 
    289                  
    290                 return null; // nothing found 
     291                return minPrimitive; 
    291292        } 
    292293 
  • src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java

    r32 r35  
    22 
    33import java.awt.Graphics; 
     4import java.util.Iterator; 
    45import java.util.LinkedList; 
    56import java.util.Stack; 
     
    1314import org.openstreetmap.josm.data.osm.LineSegment; 
    1415import org.openstreetmap.josm.data.osm.Node; 
     16import org.openstreetmap.josm.data.osm.OsmPrimitive; 
    1517import org.openstreetmap.josm.data.osm.Track; 
    1618import org.openstreetmap.josm.data.osm.visitor.BoundingVisitor; 
     19import org.openstreetmap.josm.data.osm.visitor.MergeVisitor; 
    1720import org.openstreetmap.josm.data.osm.visitor.SimplePaintVisitor; 
    1821import org.openstreetmap.josm.data.projection.Projection; 
     
    7073        @Override 
    7174        public void paint(Graphics g, MapView mv) { 
    72                 SimplePaintVisitor visitor = new SimplePaintVisitor(g, mv, null); 
    73  
    74                 for (LineSegment ls : data.lineSegments) 
    75                         visitor.visit(ls); 
    76                 for (Track t : data.tracks) 
    77                         visitor.visit(t); 
    78                 for (Node n : data.nodes) 
    79                         visitor.visit(n); 
     75                SimplePaintVisitor visitor = new SimplePaintVisitor(g, mv); 
     76                for (OsmPrimitive osm : data.lineSegments) 
     77                        if (!osm.isDeleted()) 
     78                                osm.visit(visitor); 
     79                for (OsmPrimitive osm : data.tracks) 
     80                        if (!osm.isDeleted()) 
     81                                osm.visit(visitor); 
     82                for (OsmPrimitive osm : data.nodes) 
     83                        if (!osm.isDeleted()) 
     84                                osm.visit(visitor); 
    8085        } 
    8186 
     
    8792        @Override 
    8893        public void mergeFrom(Layer from) { 
    89                 data.mergeFrom(((OsmDataLayer)from).data); 
     94                MergeVisitor visitor = new MergeVisitor(data); 
     95                for (OsmPrimitive osm : ((OsmDataLayer)from).data.allPrimitives()) 
     96                        osm.visit(visitor); 
    9097        } 
    9198 
     
    163170                Main.main.redoAction.setEnabled(!redoCommands.isEmpty()); 
    164171        } 
     172 
     173        /** 
     174         * Clean out the data behind the layer. This means clearing the redo/undo lists, 
     175         * really deleting all deleted objects and reset the modified flags. This is done 
     176         * after a successfull upload. 
     177         */ 
     178        public void cleanData() { 
     179                redoCommands.clear(); 
     180                commands.clear(); 
     181                for (Iterator<Node> it = data.nodes.iterator(); it.hasNext();) 
     182                        cleanIterator(it); 
     183                for (Iterator<LineSegment> it = data.lineSegments.iterator(); it.hasNext();) 
     184                        cleanIterator(it); 
     185                for (Iterator<Track> it = data.tracks.iterator(); it.hasNext();) 
     186                        cleanIterator(it); 
     187        } 
     188 
     189        private void cleanIterator(Iterator<? extends OsmPrimitive> it) { 
     190                OsmPrimitive osm = it.next(); 
     191                osm.modified = false; 
     192                osm.modifiedProperties = false; 
     193                if (osm.isDeleted()) 
     194                        it.remove(); 
     195        } 
    165196} 
  • src/org/openstreetmap/josm/io/GpxReader.java

    r33 r35  
    190190                                osm.id = Long.parseLong(idElement.getText()); 
    191191                        osm.modified = e.getChild("modified", JOSM) != null; 
     192                        osm.modifiedProperties = e.getChild("modifiedProperties", JOSM) != null; 
    192193                } 
    193194        } 
  • src/org/openstreetmap/josm/io/GpxWriter.java

    r33 r35  
    242242        @SuppressWarnings("unchecked") 
    243243        private void addPropertyExtensions(Element e, Map<Key, String> keys, OsmPrimitive osm) { 
    244                 if ((keys == null || keys.isEmpty()) && osm.id == 0 && !osm.modified) 
     244                if ((keys == null || keys.isEmpty()) && osm.id == 0 && !osm.modified && !osm.modifiedProperties) 
    245245                        return; 
    246246                Element extensions = e.getChild("extensions", GPX); 
     
    255255                        } 
    256256                } 
    257                 // id 
    258257                if (osm.id != 0) { 
    259258                        Element propElement = new Element("uid", JOSM); 
     
    261260                        extensions.getChildren().add(propElement); 
    262261                } 
    263                 // modified 
    264262                if (osm.modified) { 
    265263                        Element modElement = new Element("modified", JOSM); 
    266264                        extensions.getChildren().add(modElement); 
    267265                } 
     266                if (osm.modifiedProperties) { 
     267                        Element modElement = new Element("modifiedProperties", JOSM); 
     268                        extensions.getChildren().add(modElement); 
     269                } 
    268270        } 
    269271} 
  • src/org/openstreetmap/josm/io/OsmReader.java

    r33 r35  
    104104                for (Object o : e.getChildren()) { 
    105105                        Element child = (Element)o; 
    106                         if (child.getName().equals("deleted")) 
    107                                 for (Object delObj : child.getChildren()) 
    108                                         data.deleted.add(parseObject((Element)delObj, data)); 
    109                         else { 
     106                        if (child.getName().equals("deleted")) { 
     107                                for (Object delObj : child.getChildren()) { 
     108                                        OsmPrimitive osm = parseObject((Element)delObj, data); 
     109                                        if (osm != null) { 
     110                                                osm.visit(visitor); 
     111                                                osm.setDeleted(true); 
     112                                        } 
     113                                } 
     114                        } else { 
    110115                                OsmPrimitive osm = parseObject(child, data); 
    111116                                if (osm != null) 
     
    200205                OsmPrimitive osm = findObject(data, id); 
    201206                Key key = Key.get(e.getAttributeValue("key")); 
    202                 String value =e.getAttributeValue("value"); 
     207                String value = e.getAttributeValue("value"); 
    203208                if (value != null) { 
    204209                        if (osm.keys == null) 
     
    221226                        if (osm.id == id) 
    222227                                return osm; 
    223                 for (OsmPrimitive osm : data.deleted) 
    224                         if (osm.id == id) 
    225                                 return osm; 
    226228                throw new JDOMException("Unknown object reference: "+id); 
    227229        } 
  • src/org/openstreetmap/josm/io/OsmServerReader.java

    r34 r35  
    9393        private Reader getReader(String urlStr) throws IOException { 
    9494                initAuthentication(); 
    95                 System.out.println(urlStr); 
    9695                URL url = new URL(urlStr); 
    9796                HttpURLConnection con = (HttpURLConnection)url.openConnection(); 
  • src/org/openstreetmap/josm/io/OsmServerWriter.java

    r34 r35  
    2727 * Class that uploades all changes to the osm server. 
    2828 *  
    29  * This is done like this: 
    30  * - All objects with id = 0 are uploaded as new, except those in deleted,  
    31  *   which are ignored 
    32  * - All objects in deleted list are deleted. 
    33  * - All remaining objects with modified flag set are updated. 
     29 * This is done like this: - All objects with id = 0 are uploaded as new, except 
     30 * those in deleted, which are ignored - All objects in deleted list are 
     31 * deleted. - All remaining objects with modified flag set are updated. 
    3432 *  
    35  * This class implements visitor and will perform the correct upload action 
    36  * on the visited element.  
     33 * This class implements visitor and will perform the correct upload action on 
     34 * the visited element. 
    3735 *  
    3836 * @author imi 
     
    4139 
    4240        /** 
    43          * Send the dataset to the server. Ask the user first and does nothing if 
    44          * he does not want to send the data. 
     41         * Send the dataset to the server. Ask the user first and does nothing if he 
     42         * does not want to send the data. 
    4543         */ 
    4644        public void uploadOsm(Collection<OsmPrimitive> list) throws JDOMException { 
     
    4846 
    4947                try { 
    50 //                      for (OsmPrimitive osm : list) 
    51 //                              osm.visit(this); 
     48                        for (OsmPrimitive osm : list) 
     49                                osm.visit(this); 
    5250                } catch (RuntimeException e) { 
    5351                        throw new JDOMException("An error occoured: ", e); 
     
    6058        @SuppressWarnings("unchecked") 
    6159        public void visit(Node n) { 
    62                 if (n.id == 0) { 
    63                         sendRequest("PUT", "newnode", n); 
    64                 } else if (Main.main.ds.deleted.contains(n)) { 
    65                         sendRequest("DELETE", "node/"+n.id, n); 
     60                if (n.id == 0 && !n.isDeleted()) { 
     61                        sendRequest("PUT", "newnode", n, true); 
     62                } else if (n.isDeleted()) { 
     63                        sendRequest("DELETE", "node/" + n.id, n, false); 
    6664                } else { 
    67                         sendRequest("PUT", "node/"+n.id, n); 
     65                        sendRequest("PUT", "node/" + n.id, n, true); 
    6866                } 
    6967        } 
    7068 
    7169        public void visit(LineSegment ls) { 
     70                if (ls.id == 0 && !ls.isDeleted()) { 
     71                        sendRequest("PUT", "newsegment", ls, true); 
     72                } else if (ls.isDeleted()) { 
     73                        sendRequest("DELETE", "segment/" + ls.id, ls, false); 
     74                } else { 
     75                        sendRequest("PUT", "segment/" + ls.id, ls, true); 
     76                } 
    7277        } 
    7378 
    7479        public void visit(Track t) { 
     80                // not implemented in server 
    7581        } 
    7682 
    7783        public void visit(Key k) { 
     84                // not implemented in server 
    7885        } 
    7986 
     
    8289         */ 
    8390        private long readId(InputStream inputStream) throws IOException { 
    84                 BufferedReader in = new BufferedReader(new InputStreamReader(inputStream)); 
     91                BufferedReader in = new BufferedReader(new InputStreamReader( 
     92                                inputStream)); 
    8593                String s = in.readLine(); 
    8694                if (s == null) 
     
    92100                } 
    93101        } 
    94          
     102 
    95103        @SuppressWarnings("unchecked") 
    96         private void sendRequest(String requestMethod, String urlSuffix, OsmPrimitive osm) { 
     104        private void sendRequest(String requestMethod, String urlSuffix, 
     105                        OsmPrimitive osm, boolean addBody) { 
    97106                try { 
    98107                        URL url = new URL(Main.pref.osmDataServer + "/" + urlSuffix); 
    99                         HttpURLConnection con = (HttpURLConnection)url.openConnection(); 
     108                        HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
    100109                        con.setConnectTimeout(20000); 
    101110                        con.setRequestMethod(requestMethod); 
    102                         con.setDoOutput(true); 
     111                        if (addBody) 
     112                                con.setDoOutput(true); 
    103113                        con.connect(); 
    104114 
    105                         OsmXmlVisitor visitor = new OsmXmlVisitor(false); 
    106                         osm.visit(visitor); 
    107                         Element root = new Element("osm"); 
    108                         root.setAttribute("version", "0.2"); 
    109                         root.getChildren().add(visitor.element); 
    110                         XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat()); 
    111                         OutputStream out = con.getOutputStream(); 
    112                         Document doc = new Document(root); 
    113                         xmlOut.output(doc, out); 
    114                         xmlOut.output(doc, System.out); 
    115                         out.close(); 
    116                          
     115                        if (addBody) { 
     116                                OsmXmlVisitor visitor = new OsmXmlVisitor(false); 
     117                                osm.visit(visitor); 
     118                                Element root = new Element("osm"); 
     119                                root.setAttribute("version", "0.2"); 
     120                                root.getChildren().add(visitor.element); 
     121                                XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat()); 
     122                                OutputStream out = con.getOutputStream(); 
     123                                Document doc = new Document(root); 
     124                                xmlOut.output(doc, out); 
     125                                xmlOut.output(doc, System.out); 
     126                                out.close(); 
     127                        } 
     128 
    117129                        int retCode = con.getResponseCode(); 
    118                         System.out.println(retCode+" "+con.getResponseMessage()); 
    119130                        if (retCode == 200 && osm.id == 0) 
    120131                                osm.id = readId(con.getInputStream()); 
  • src/org/openstreetmap/josm/io/OsmWriter.java

    r33 r35  
    6363                List<Element> list = root.getChildren(); 
    6464                properties = new LinkedList<Element>(); 
    65                 for (Node n : ds.nodes) { 
    66                         visit(n); 
    67                         list.add(element); 
    68                 } 
    69                 for (LineSegment ls : ds.lineSegments) { 
    70                         visit(ls); 
    71                         list.add(element); 
    72                 } 
    73                 for (Track t : ds.tracks) { 
    74                         visit(t); 
    75                         list.add(element); 
     65                for (OsmPrimitive osm : ds.allPrimitives()) { 
     66                        if (!osm.isDeleted()) { 
     67                                osm.visit(this); 
     68                                list.add(element); 
     69                        } 
    7670                } 
    7771                list.addAll(properties); 
     
    7973                Element deleted = new Element("deleted"); 
    8074                Collection<Element> allDeleted = deleted.getChildren(); 
    81                 for (OsmPrimitive osm : ds.deleted) { 
    82                         osm.visit(this); 
    83                         allDeleted.add(element); 
     75                for (OsmPrimitive osm : ds.allPrimitives()) { 
     76                        if (osm.isDeleted()) { 
     77                                osm.visit(this); 
     78                                allDeleted.add(element); 
     79                        } 
    8480                } 
    8581                allDeleted.addAll(properties); 
Note: See TracChangeset for help on using the changeset viewer.