source: josm/trunk/src/org/openstreetmap/josm/io/OsmChangeReader.java@ 5266

Last change on this file since 5266 was 5266, checked in by bastiK, 12 years ago

fixed majority of javadoc warnings by replacing "{@see" by "{@link"

File size: 3.8 KB
Line 
1package org.openstreetmap.josm.io;
2
3import static org.openstreetmap.josm.tools.I18n.tr;
4
5import java.io.InputStream;
6
7import javax.xml.stream.XMLStreamConstants;
8import javax.xml.stream.XMLStreamException;
9
10import org.openstreetmap.josm.data.osm.DataSet;
11import org.openstreetmap.josm.data.osm.OsmPrimitive;
12import org.openstreetmap.josm.gui.progress.ProgressMonitor;
13
14public class OsmChangeReader extends OsmReader {
15
16 /**
17 * constructor (for private and subclasses use only)
18 *
19 * @see #parseDataSet(InputStream, DataSet, ProgressMonitor)
20 */
21 protected OsmChangeReader() {
22 }
23
24 /* (non-Javadoc)
25 * @see org.openstreetmap.josm.io.OsmReader#parseRoot()
26 */
27 @Override
28 protected void parseRoot() throws XMLStreamException {
29 if (parser.getLocalName().equals("osmChange")) {
30 parseOsmChange();
31 } else {
32 parseUnknown();
33 }
34 }
35
36 private void parseOsmChange() throws XMLStreamException {
37 String v = parser.getAttributeValue(null, "version");
38 if (v == null) {
39 throwException(tr("Missing mandatory attribute ''{0}''.", "version"));
40 }
41 if (!v.equals("0.6")) {
42 throwException(tr("Unsupported version: {0}", v));
43 }
44 ds.setVersion(v);
45 while (parser.hasNext()) {
46 int event = parser.next();
47 if (event == XMLStreamConstants.START_ELEMENT) {
48 if (parser.getLocalName().equals("create")) {
49 parseCreate();
50 } else if (parser.getLocalName().equals("modify")) {
51 parseModify();
52 } else if (parser.getLocalName().equals("delete")) {
53 parseDelete();
54 } else {
55 parseUnknown();
56 }
57 } else if (event == XMLStreamConstants.END_ELEMENT) {
58 return;
59 }
60 }
61 }
62
63 private void parseDelete() throws XMLStreamException {
64 parseCommon(true);
65 }
66
67 private void parseModify() throws XMLStreamException {
68 parseCommon(false);
69 }
70
71 private void parseCreate() throws XMLStreamException {
72 parseCommon(false);
73 }
74
75 private void parseCommon(boolean deletePrimitive) throws XMLStreamException {
76 while (parser.hasNext()) {
77 int event = parser.next();
78 if (event == XMLStreamConstants.START_ELEMENT) {
79 OsmPrimitive p = null;
80 if (parser.getLocalName().equals("node")) {
81 p = parseNode();
82 } else if (parser.getLocalName().equals("way")) {
83 p = parseWay();
84 } else if (parser.getLocalName().equals("relation")) {
85 p = parseRelation();
86 } else {
87 parseUnknown();
88 }
89 if (p != null && deletePrimitive) {
90 p.setDeleted(true);
91 }
92 } else if (event == XMLStreamConstants.END_ELEMENT) {
93 return;
94 }
95 }
96 }
97
98 /**
99 * Parse the given input source and return the dataset.
100 *
101 * @param source the source input stream. Must not be null.
102 * @param progressMonitor the progress monitor. If null, {@link NullProgressMonitor#INSTANCE} is assumed
103 *
104 * @return the dataset with the parsed data
105 * @throws IllegalDataException thrown if the an error was found while parsing the data from the source
106 * @throws IllegalArgumentException thrown if source is null
107 */
108 public static DataSet parseDataSet(InputStream source, ProgressMonitor progressMonitor) throws IllegalDataException {
109 return new OsmChangeReader().doParseDataSet(source, progressMonitor);
110 }
111}
Note: See TracBrowser for help on using the repository browser.