source: josm/trunk/src/org/openstreetmap/josm/io/OsmServerChangesetReader.java@ 3966

Last change on this file since 3966 was 3083, checked in by bastiK, 14 years ago

added svn:eol-style=native to source files

  • Property svn:eol-style set to native
File size: 7.9 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5import static org.openstreetmap.josm.tools.I18n.trn;
6
7import java.io.InputStream;
8import java.io.UnsupportedEncodingException;
9import java.text.MessageFormat;
10import java.util.ArrayList;
11import java.util.Collection;
12import java.util.Collections;
13import java.util.Iterator;
14import java.util.List;
15
16import org.openstreetmap.josm.data.osm.Changeset;
17import org.openstreetmap.josm.data.osm.ChangesetDataSet;
18import org.openstreetmap.josm.data.osm.DataSet;
19import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
20import org.openstreetmap.josm.gui.progress.ProgressMonitor;
21import org.openstreetmap.josm.tools.CheckParameterUtil;
22
23/**
24 * Reads the history of an {@see OsmPrimitive} from the OSM API server.
25 *
26 */
27public class OsmServerChangesetReader extends OsmServerReader {
28
29 /**
30 * constructor
31 *
32 */
33 public OsmServerChangesetReader(){
34 setDoAuthenticate(false);
35 }
36
37 /**
38 * don't use - not implemented!
39 *
40 */
41 @Override
42 public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException {
43 return null;
44 }
45
46 /**
47 * Queries a list
48 * @param query the query specification. Must not be null.
49 * @param monitor a progress monitor. Set to {@see NullProgressMonitor#INSTANCE} if null
50 * @return the list of changesets read from the server
51 * @throws IllegalArgumentException thrown if query is null
52 * @throws OsmTransferException thrown if something goes wrong w
53 */
54 public List<Changeset> queryChangesets(ChangesetQuery query, ProgressMonitor monitor) throws OsmTransferException {
55 CheckParameterUtil.ensureParameterNotNull(query, "query");
56 if (monitor == null) {
57 monitor = NullProgressMonitor.INSTANCE;
58 }
59 try {
60 monitor.beginTask(tr("Reading changesets..."));
61 StringBuffer sb = new StringBuffer();
62 sb.append("changesets?").append(query.getQueryString());
63 InputStream in = getInputStream(sb.toString(), monitor.createSubTaskMonitor(1, true));
64 if (in == null)
65 return null;
66 monitor.indeterminateSubTask(tr("Downloading changesets ..."));
67 List<Changeset> changesets = OsmChangesetParser.parse(in, monitor.createSubTaskMonitor(1, true));
68 return changesets;
69 } catch(OsmTransferException e) {
70 throw e;
71 } catch(IllegalDataException e) {
72 throw new OsmTransferException(e);
73 } finally {
74 monitor.finishTask();
75 }
76 }
77
78 /**
79 * Reads the changeset with id <code>id</code> from the server
80 *
81 * @param id the changeset id. id > 0 required.
82 * @param monitor the progress monitor. Set to {@see NullProgressMonitor#INSTANCE} if null
83 * @return the changeset read
84 * @throws OsmTransferException thrown if something goes wrong
85 * @throws IllegalArgumentException if id <= 0
86 */
87 public Changeset readChangeset(long id, ProgressMonitor monitor) throws OsmTransferException {
88 if (id <= 0)
89 throw new IllegalArgumentException(MessageFormat.format("Parameter ''{0}'' > 0 expected. Got ''{1}''.", "id", id));
90 if (monitor == null) {
91 monitor = NullProgressMonitor.INSTANCE;
92 }
93 try {
94 monitor.beginTask(tr("Reading changeset {0} ...",id));
95 StringBuffer sb = new StringBuffer();
96 sb.append("changeset/").append(id);
97 InputStream in = getInputStream(sb.toString(), monitor.createSubTaskMonitor(1, true));
98 if (in == null)
99 return null;
100 monitor.indeterminateSubTask(tr("Downloading changeset {0} ...", id));
101 List<Changeset> changesets = OsmChangesetParser.parse(in, monitor.createSubTaskMonitor(1, true));
102 if (changesets == null || changesets.isEmpty())
103 return null;
104 return changesets.get(0);
105 } catch(OsmTransferException e) {
106 throw e;
107 } catch(IllegalDataException e) {
108 throw new OsmTransferException(e);
109 } finally {
110 monitor.finishTask();
111 }
112 }
113
114 /**
115 * Reads the changeset with id <code>id</code> from the server
116 *
117 * @param ids the list of ids. Ignored if null. Only load changesets for ids > 0.
118 * @param monitor the progress monitor. Set to {@see NullProgressMonitor#INSTANCE} if null
119 * @return the changeset read
120 * @throws OsmTransferException thrown if something goes wrong
121 * @throws IllegalArgumentException if id <= 0
122 */
123 public List<Changeset> readChangesets(Collection<Integer> ids, ProgressMonitor monitor) throws OsmTransferException {
124 if (ids == null)
125 return Collections.emptyList();
126 if (monitor == null) {
127 monitor = NullProgressMonitor.INSTANCE;
128 }
129 try {
130 monitor.beginTask(trn("Downloading {0} changeset ...", "Downloading {0} changesets ...",ids.size(),ids.size()));
131 monitor.setTicksCount(ids.size());
132 List<Changeset> ret = new ArrayList<Changeset>();
133 int i=0;
134 for (Iterator<Integer> it = ids.iterator(); it.hasNext(); ) {
135 int id = it.next();
136 if (id <= 0) {
137 continue;
138 }
139 i++;
140 StringBuffer sb = new StringBuffer();
141 sb.append("changeset/").append(id);
142 InputStream in = getInputStream(sb.toString(), monitor.createSubTaskMonitor(1, true));
143 if (in == null)
144 return null;
145 monitor.indeterminateSubTask(tr("({0}/{1}) Downloading changeset {2} ...", i,ids.size(), id));
146 List<Changeset> changesets = OsmChangesetParser.parse(in, monitor.createSubTaskMonitor(1, true));
147 if (changesets == null || changesets.isEmpty()) {
148 continue;
149 }
150 ret.addAll(changesets);
151 monitor.worked(1);
152 }
153 return ret;
154 } catch(OsmTransferException e) {
155 throw e;
156 } catch(IllegalDataException e) {
157 throw new OsmTransferException(e);
158 } finally {
159 monitor.finishTask();
160 }
161 }
162
163 /**
164 * Downloads the content of a changeset
165 *
166 * @param id the changeset id. >0 required.
167 * @param monitor the progress monitor. {@see NullProgressMonitor#INSTANCE} assumed if null.
168 * @return the changeset content
169 * @throws IllegalArgumentException thrown if id <= 0
170 * @throws OsmTransferException thrown if something went wrong
171 */
172 public ChangesetDataSet downloadChangeset(int id, ProgressMonitor monitor) throws IllegalArgumentException, OsmTransferException {
173 if (id <= 0)
174 throw new IllegalArgumentException(MessageFormat.format("Expected value of type integer > 0 for parameter ''{0}'', got {1}", "id", id));
175 if (monitor == null) {
176 monitor = NullProgressMonitor.INSTANCE;
177 }
178 try {
179 monitor.beginTask(tr("Downloading changeset content"));
180 StringBuffer sb = new StringBuffer();
181 sb.append("changeset/").append(id).append("/download");
182 InputStream in = getInputStream(sb.toString(), monitor.createSubTaskMonitor(1, true));
183 if (in == null)
184 return null;
185 monitor.setCustomText(tr("Downloading content for changeset {0} ...", id));
186 OsmChangesetContentParser parser = new OsmChangesetContentParser(in);
187 ChangesetDataSet ds = parser.parse(monitor.createSubTaskMonitor(1, true));
188 return ds;
189 } catch(UnsupportedEncodingException e) {
190 throw new OsmTransferException(e);
191 } catch(OsmDataParsingException e) {
192 throw new OsmTransferException(e);
193 } finally {
194 monitor.finishTask();
195 }
196 }
197}
Note: See TracBrowser for help on using the repository browser.