Changeset 1523 in josm for trunk/src/org/openstreetmap/josm/data/osm
- Timestamp:
- 2009-04-06T20:18:48+02:00 (16 years ago)
- Location:
- trunk/src/org/openstreetmap/josm/data/osm
- Files:
-
- 1 added
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/osm/Changeset.java
r1169 r1523 2 2 package org.openstreetmap.josm.data.osm; 3 3 4 import org.openstreetmap.josm.Main; 5 import org.openstreetmap.josm.io.XmlWriter; 6 import org.openstreetmap.josm.io.XmlWriter.OsmWriterInterface; 7 import java.io.PrintWriter; 8 import java.util.Map; 9 import java.util.Map.Entry; 10 import java.util.HashMap; 11 import java.util.Collections; 12 import java.util.Collection; 4 import org.openstreetmap.josm.data.osm.visitor.Visitor; 5 13 6 14 7 … … 19 12 * 20 13 */ 21 public final class Changeset /*extends OsmPrimitive*/ implements OsmWriterInterface { 22 /** 23 * The key/value list for this primitive. 24 */ 25 public Map<String, String> keys; 26 27 public long id = 0; 28 29 /** 30 * User that created this changeset, as specified by the server. 31 * Never changed by JOSM. 32 */ 33 public User user = null; 34 14 public final class Changeset extends OsmPrimitive { 35 15 /** 36 16 * Time of last modification to this object. This is not set by JOSM but … … 45 25 public String start_timestamp = null; 46 26 47 private void addTags(PrintWriter out) { 48 if (this.keys != null) { 49 for (Entry<String, String> e : this.keys.entrySet()) 50 out.println(" <tag k='"+ XmlWriter.encode(e.getKey()) + 51 "' v='"+XmlWriter.encode(e.getValue())+ "' />"); 52 } 53 } 54 55 public final void header(PrintWriter out) { 56 out.print("<osm version='"); 57 out.print(Main.pref.get("osm-server.version", "0.6")); 58 out.println("' generator='JOSM'>"); 59 } 60 public final void write(PrintWriter out) { 61 out.print(" <changeset"); 62 if (id != 0) 63 out.print(" id="+id); 64 if (this.user != null) { 65 out.print(" user='"+XmlWriter.encode(this.user.name)+"'"); 66 } 67 out.println(">\n"); 68 addTags( out ); 69 out.println(" </changeset>"); 70 } 71 public final void footer(PrintWriter out) { 72 out.println("</osm>"); 27 public void visit(Visitor v) { 28 v.visit(this); 73 29 } 74 30 75 /****************************************************** 76 * This tag stuff is copied from OsmPrimitive. Perhaps a changeset 77 * really is a primitive, but it's not right now. Perhaps it should 78 * be... 79 ******************************************************/ 80 81 /** 82 * Set the given value to the given key 83 * @param key The key, for which the value is to be set. 84 * @param value The value for the key. 85 */ 86 public final void put(String key, String value) { 87 if (value == null) 88 remove(key); 89 else { 90 if (keys == null) 91 keys = new HashMap<String, String>(); 92 keys.put(key, value); 93 } 31 public int compareTo(OsmPrimitive arg0) { 32 if (arg0 instanceof Changeset) return Long.valueOf(id).compareTo(arg0.id); 33 return 1; 94 34 } 95 /** 96 * Remove the given key from the list. 97 */ 98 public final void remove(String key) { 99 if (keys != null) { 100 keys.remove(key); 101 if (keys.isEmpty()) 102 keys = null; 103 } 104 } 105 106 public final String get(String key) { 107 return keys == null ? null : keys.get(key); 108 } 109 110 public final Collection<Entry<String, String>> entrySet() { 111 if (keys == null) 112 return Collections.emptyList(); 113 return keys.entrySet(); 114 } 115 116 public final Collection<String> keySet() { 117 if (keys == null) 118 return Collections.emptyList(); 119 return keys.keySet(); 120 } 35 36 121 37 } -
trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
r1415 r1523 24 24 public class DataSet implements Cloneable { 25 25 26 /** 27 * The API version that created this data set, if any. 28 */ 29 public String version; 30 26 31 /** 27 32 * All nodes goes here, even when included in other data (ways etc). This enables the instant … … 209 214 for (DataSource source : dataSources) 210 215 ds.dataSources.add(new DataSource(source.bounds, source.origin)); 216 ds.version = version; 211 217 return ds; 212 218 } -
trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
r1499 r1523 211 211 final int[] ret = new int[1]; 212 212 Visitor v = new Visitor(){ 213 public void visit(Node n) { ret[0] = 1; } 214 public void visit(Way w) { ret[0] = 2; } 215 public void visit(Relation e) { ret[0] = 3; } 213 public void visit(Node n) { ret[0] = 0; } 214 public void visit(Way w) { ret[0] = 1; } 215 public void visit(Relation e) { ret[0] = 2; } 216 public void visit(Changeset cs) { ret[0] = 3; } 216 217 }; 217 218 visit(v); -
trunk/src/org/openstreetmap/josm/data/osm/visitor/AddVisitor.java
r1169 r1523 14 14 * @author imi 15 15 */ 16 public class AddVisitor implementsVisitor {16 public class AddVisitor extends AbstractVisitor { 17 17 18 18 protected final DataSet ds; -
trunk/src/org/openstreetmap/josm/data/osm/visitor/AllNodesVisitor.java
r1169 r1523 16 16 * @author imi 17 17 */ 18 public class AllNodesVisitor implementsVisitor {18 public class AllNodesVisitor extends AbstractVisitor { 19 19 20 20 /** -
trunk/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java
r1415 r1523 17 17 * @author imi 18 18 */ 19 public class BoundingXYVisitor implementsVisitor {19 public class BoundingXYVisitor extends AbstractVisitor { 20 20 21 21 public EastNorth min, max; -
trunk/src/org/openstreetmap/josm/data/osm/visitor/CollectBackReferencesVisitor.java
r1169 r1523 19 19 * @author imi 20 20 */ 21 public class CollectBackReferencesVisitor implementsVisitor {21 public class CollectBackReferencesVisitor extends AbstractVisitor { 22 22 23 23 private final DataSet ds; -
trunk/src/org/openstreetmap/josm/data/osm/visitor/CreateOsmChangeVisitor.java
r1169 r1523 6 6 import java.util.Map; 7 7 8 import org.openstreetmap.josm.Main;9 8 import org.openstreetmap.josm.data.osm.Changeset; 10 9 import org.openstreetmap.josm.data.osm.Node; … … 12 11 import org.openstreetmap.josm.data.osm.Relation; 13 12 import org.openstreetmap.josm.data.osm.Way; 13 import org.openstreetmap.josm.io.OsmApi; 14 14 import org.openstreetmap.josm.io.OsmWriter; 15 15 … … 22 22 * 23 23 */ 24 public class CreateOsmChangeVisitor implementsVisitor {24 public class CreateOsmChangeVisitor extends AbstractVisitor { 25 25 26 StringBuffer document; 27 String currentMode; 28 Changeset changeset; 29 PrintWriter writer; 30 StringWriter swriter; 31 OsmWriter osmwriter; 26 private String currentMode; 27 private PrintWriter writer; 28 private StringWriter swriter; 29 private OsmWriter osmwriter; 30 private OsmApi api; 32 31 33 public CreateOsmChangeVisitor(Changeset changeset) { 32 public CreateOsmChangeVisitor(Changeset changeset, OsmApi api) { 34 33 writer = new PrintWriter(swriter = new StringWriter()); 35 34 writer.write("<osmChange version=\""); 36 writer.write( Main.pref.get("osm-server.version", "0.6"));35 writer.write(api.getVersion()); 37 36 writer.write("\" generator=\"JOSM\">\n"); 38 this.changeset = changeset; 39 osmwriter = new OsmWriter(writer, false, changeset); 37 this.api = api; 38 // need to set osmConform = false here so that negative IDs get transmitted. 39 // this also enables unnecessary and (if the API were more strict) potentially 40 // harmful action="..." attributes. 41 osmwriter = new OsmWriter(writer, false, api.getVersion()); 42 osmwriter.setChangeset(changeset); 40 43 } 41 44 45 // FIXME: This should really NOT use a visitor pattern, it looks 46 // stupid. Just have one method named "write" instead of three "visit"s. 47 42 48 public void visit(Node n) { 43 49 if (n.deleted) { 44 50 switchMode("delete"); 45 writer.write("<node id=\""); 46 writer.write(Long.toString(n.id)); 47 writer.write("\" version=\""); 48 writer.write(Long.toString(n.version)); 49 writer.write("\" changeset=\""); 50 writer.write(Long.toString(changeset.id)); 51 writer.write("\" />\n"); 51 osmwriter.setWithBody(false); 52 osmwriter.visit(n); 52 53 } else { 53 54 switchMode((n.id == 0) ? "create" : "modify"); 54 n.visit(osmwriter); 55 osmwriter.setWithBody(true); 56 osmwriter.visit(n); 55 57 } 56 58 } 57 58 59 public void visit(Way w) { 59 60 if (w.deleted) { 60 61 switchMode("delete"); 61 writer.write("<way id=\""); 62 writer.write(Long.toString(w.id)); 63 writer.write("\" version=\""); 64 writer.write(Long.toString(w.version)); 65 writer.write("\" changeset=\""); 66 writer.write(Long.toString(changeset.id)); 67 writer.write("\" />\n"); 62 osmwriter.setWithBody(false); 63 osmwriter.visit(w); 68 64 } else { 69 65 switchMode((w.id == 0) ? "create" : "modify"); 70 w.visit(osmwriter); 66 osmwriter.setWithBody(true); 67 osmwriter.visit(w); 71 68 } 72 69 } 73 74 70 public void visit(Relation r) { 75 71 if (r.deleted) { 76 72 switchMode("delete"); 77 writer.write("<relation id=\""); 78 writer.write(Long.toString(r.id)); 79 writer.write("\" version=\""); 80 writer.write(Long.toString(r.version)); 81 writer.write("\" changeset=\""); 82 writer.write(Long.toString(changeset.id)); 83 writer.write("\" />\n"); 73 osmwriter.setWithBody(false); 74 osmwriter.visit(r); 84 75 } else { 85 76 switchMode((r.id == 0) ? "create" : "modify"); 86 r.visit(osmwriter); 77 osmwriter.setWithBody(true); 78 osmwriter.visit(r); 87 79 } 88 80 } 89 81 90 82 private void switchMode(String newMode) { 91 83 if ((newMode != null && !newMode.equals(currentMode))||(newMode == null && currentMode != null)) { … … 99 91 writer.write(newMode); 100 92 writer.write(" version=\""); 101 writer.write( Main.pref.get("osm-server.version", "0.6"));93 writer.write(api.getVersion()); 102 94 writer.write("\" generator=\"JOSM\">\n"); 103 95 } -
trunk/src/org/openstreetmap/josm/data/osm/visitor/DeleteVisitor.java
r1169 r1523 14 14 * @author imi 15 15 */ 16 public class DeleteVisitor implementsVisitor {16 public class DeleteVisitor extends AbstractVisitor { 17 17 18 18 private final DataSet ds; -
trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
r1501 r1523 16 16 import java.awt.Stroke; 17 17 import java.awt.geom.GeneralPath; 18 import java.util.ArrayList; 18 19 import java.util.Arrays; 19 import java.util.ArrayList;20 20 import java.util.Collection; 21 import java.util.Iterator; 21 22 import java.util.LinkedList; 22 import java.util.Locale;23 import java.util.Iterator;24 23 25 24 import javax.swing.ImageIcon; 26 25 27 26 import org.openstreetmap.josm.Main; 27 import org.openstreetmap.josm.data.coor.EastNorth; 28 import org.openstreetmap.josm.data.coor.LatLon; 28 29 import org.openstreetmap.josm.data.osm.DataSet; 29 30 import org.openstreetmap.josm.data.osm.Node; … … 32 33 import org.openstreetmap.josm.data.osm.RelationMember; 33 34 import org.openstreetmap.josm.data.osm.Way; 34 import org.openstreetmap.josm.data.osm.visitor.SimplePaintVisitor;35 import org.openstreetmap.josm.data.coor.LatLon;36 import org.openstreetmap.josm.data.coor.EastNorth;37 35 import org.openstreetmap.josm.gui.mappaint.AreaElemStyle; 38 36 import org.openstreetmap.josm.gui.mappaint.ElemStyle; -
trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java
r1499 r1523 22 22 * @author imi 23 23 */ 24 public class MergeVisitor implementsVisitor {24 public class MergeVisitor extends AbstractVisitor { 25 25 26 26 /** -
trunk/src/org/openstreetmap/josm/data/osm/visitor/NameVisitor.java
r1169 r1523 20 20 * @author imi 21 21 */ 22 public class NameVisitor implementsVisitor {22 public class NameVisitor extends AbstractVisitor { 23 23 24 24 /** -
trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
r1499 r1523 33 33 * @author imi 34 34 */ 35 public class SimplePaintVisitor implementsVisitor {35 public class SimplePaintVisitor extends AbstractVisitor { 36 36 37 37 public final static Color darkerblue = new Color(0,0,96); -
trunk/src/org/openstreetmap/josm/data/osm/visitor/Visitor.java
r1169 r1523 2 2 package org.openstreetmap.josm.data.osm.visitor; 3 3 4 import org.openstreetmap.josm.data.osm.Changeset; 4 5 import org.openstreetmap.josm.data.osm.Relation; 5 6 import org.openstreetmap.josm.data.osm.Node; … … 16 17 void visit(Way w); 17 18 void visit(Relation e); 19 void visit(Changeset cs); 18 20 }
Note:
See TracChangeset
for help on using the changeset viewer.