source: josm/trunk/src/org/openstreetmap/josm/data/osm/visitor/CreateOsmChangeVisitor.java@ 1169

Last change on this file since 1169 was 1169, checked in by stoecker, 15 years ago

removed usage of tab stops

File size: 3.7 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.osm.visitor;
3
4import java.io.PrintWriter;
5import java.io.StringWriter;
6import java.util.Map;
7
8import org.openstreetmap.josm.Main;
9import org.openstreetmap.josm.data.osm.Changeset;
10import org.openstreetmap.josm.data.osm.Node;
11import org.openstreetmap.josm.data.osm.OsmPrimitive;
12import org.openstreetmap.josm.data.osm.Relation;
13import org.openstreetmap.josm.data.osm.Way;
14import org.openstreetmap.josm.io.OsmWriter;
15
16/**
17 * Creates an OsmChange document from JOSM edits.
18 * See http://wiki.openstreetmap.org/index.php/OsmChange for a documentation of the
19 * OsmChange format.
20 *
21 * @author fred
22 *
23 */
24public class CreateOsmChangeVisitor implements Visitor {
25
26 StringBuffer document;
27 String currentMode;
28 Changeset changeset;
29 PrintWriter writer;
30 StringWriter swriter;
31 OsmWriter osmwriter;
32
33 public CreateOsmChangeVisitor(Changeset changeset) {
34 writer = new PrintWriter(swriter = new StringWriter());
35 writer.write("<osmChange version=\"");
36 writer.write(Main.pref.get("osm-server.version", "0.6"));
37 writer.write("\" generator=\"JOSM\">\n");
38 this.changeset = changeset;
39 osmwriter = new OsmWriter(writer, false, changeset);
40 }
41
42 public void visit(Node n) {
43 if (n.deleted) {
44 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");
52 } else {
53 switchMode((n.id == 0) ? "create" : "modify");
54 n.visit(osmwriter);
55 }
56 }
57
58 public void visit(Way w) {
59 if (w.deleted) {
60 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");
68 } else {
69 switchMode((w.id == 0) ? "create" : "modify");
70 w.visit(osmwriter);
71 }
72 }
73
74 public void visit(Relation r) {
75 if (r.deleted) {
76 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");
84 } else {
85 switchMode((r.id == 0) ? "create" : "modify");
86 r.visit(osmwriter);
87 }
88 }
89
90 private void switchMode(String newMode) {
91 if ((newMode != null && !newMode.equals(currentMode))||(newMode == null && currentMode != null)) {
92 if (currentMode != null) {
93 writer.write("</");
94 writer.write(currentMode);
95 writer.write(">\n");
96 }
97 if (newMode != null) {
98 writer.write("<");
99 writer.write(newMode);
100 writer.write(" version=\"");
101 writer.write(Main.pref.get("osm-server.version", "0.6"));
102 writer.write("\" generator=\"JOSM\">\n");
103 }
104 currentMode = newMode;
105 }
106 }
107
108 public String getDocument() {
109 switchMode(null);
110 return swriter.toString() + "</osmChange>\n";
111 }
112
113 public Map<OsmPrimitive,Long> getNewIdMap() {
114 return osmwriter.usedNewIds;
115 }
116}
Note: See TracBrowser for help on using the repository browser.