Changeset 2077 in josm for trunk/src/org/openstreetmap
- Timestamp:
- 2009-09-07T23:06:19+02:00 (15 years ago)
- Location:
- trunk/src/org/openstreetmap/josm
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
r2025 r2077 16 16 import org.openstreetmap.josm.data.osm.Node; 17 17 import org.openstreetmap.josm.data.osm.OsmPrimitive; 18 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 18 19 import org.openstreetmap.josm.data.osm.Relation; 19 20 import org.openstreetmap.josm.data.osm.Way; … … 39 40 * @param id the primitive id 40 41 */ 41 protected void handlePrimitiveGoneException(long id ) {42 protected void handlePrimitiveGoneException(long id, OsmPrimitiveType type) { 42 43 MultiFetchServerObjectReader reader = new MultiFetchServerObjectReader(); 43 reader.append(getCurrentDataSet(),id );44 reader.append(getCurrentDataSet(),id, type); 44 45 DataSet ds = null; 45 46 try { … … 73 74 * 74 75 */ 75 public void updatePrimitive( long id) throws IllegalStateException{76 public void updatePrimitive(OsmPrimitiveType type, long id) throws IllegalStateException{ 76 77 if (getEditLayer() == null) 77 78 throw new IllegalStateException(tr("No current dataset found")); 78 OsmPrimitive primitive = getEditLayer().data.getPrimitiveById(id );79 OsmPrimitive primitive = getEditLayer().data.getPrimitiveById(id, type); 79 80 if (primitive == null) 80 81 throw new IllegalStateException(tr("Didn't find a primitive with id {0} in the current dataset", id)); -
trunk/src/org/openstreetmap/josm/actions/UploadAction.java
r2074 r2077 41 41 import org.openstreetmap.josm.data.osm.DataSet; 42 42 import org.openstreetmap.josm.data.osm.OsmPrimitive; 43 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 43 44 import org.openstreetmap.josm.gui.ExceptionDialogUtil; 44 45 import org.openstreetmap.josm.gui.ExtendedDialog; … … 191 192 * @param id the primitive ID 192 193 */ 193 protected void synchronizePrimitive(final String id) {194 Main.worker.execute(new UpdatePrimitiveTask( Long.parseLong(id)));194 protected void synchronizePrimitive(final OsmPrimitiveType type, final long id) { 195 Main.worker.execute(new UpdatePrimitiveTask(type, id)); 195 196 } 196 197 … … 217 218 * @param myVersion the version of the primitive in the local dataset 218 219 */ 219 protected void handleUploadConflictForKnownConflict( String primitiveType, String id, String serverVersion, String myVersion) {220 protected void handleUploadConflictForKnownConflict(OsmPrimitiveType primitiveType, long id, String serverVersion, String myVersion) { 220 221 Object[] options = new Object[] { 221 tr("Synchronize {0} {1} only", tr(primitiveType ), id),222 tr("Synchronize {0} {1} only", tr(primitiveType.getAPIName()), id), 222 223 tr("Synchronize entire dataset"), 223 224 tr("Cancel") … … 232 233 + "Click <strong>{5}</strong> to synchronize the entire local dataset with the server.<br>" 233 234 + "Click <strong>{6}</strong> to abort and continue editing.<br></html>", 234 tr(primitiveType ), id, serverVersion, myVersion,235 tr(primitiveType.getAPIName()), id, serverVersion, myVersion, 235 236 options[0], options[1], options[2] 236 237 ); … … 247 248 ); 248 249 switch(ret) { 249 250 251 case 0: synchronizePrimitive(id); break;252 253 254 255 250 case JOptionPane.CLOSED_OPTION: return; 251 case JOptionPane.CANCEL_OPTION: return; 252 case 0: synchronizePrimitive(primitiveType, id); break; 253 case 1: synchronizeDataSet(); break; 254 default: 255 // should not happen 256 throw new IllegalStateException(tr("unexpected return value. Got {0}", ret)); 256 257 } 257 258 } … … 287 288 ); 288 289 switch(ret) { 289 290 291 292 293 294 290 case JOptionPane.CLOSED_OPTION: return; 291 case 1: return; 292 case 0: synchronizeDataSet(); break; 293 default: 294 // should not happen 295 throw new IllegalStateException(tr("unexpected return value. Got {0}", ret)); 295 296 } 296 297 } … … 306 307 Matcher m = p.matcher(e.getErrorHeader()); 307 308 if (m.matches()) { 308 handleUploadConflictForKnownConflict( m.group(3), m.group(4), m.group(2),m.group(1));309 handleUploadConflictForKnownConflict(OsmPrimitiveType.from(m.group(3)), Long.parseLong(m.group(4)), m.group(2),m.group(1)); 309 310 } else { 310 311 logger.warning(tr("Warning: error header \"{0}\" did not match expected pattern \"{1}\"", e.getErrorHeader(),pattern)); … … 326 327 * @see UpdateSelectionAction#handlePrimitiveGoneException(long) 327 328 */ 328 protected void handleGoneForKnownPrimitive( StringprimitiveType, String id) {329 protected void handleGoneForKnownPrimitive(OsmPrimitiveType primitiveType, String id) { 329 330 UpdateSelectionAction act = new UpdateSelectionAction(); 330 act.handlePrimitiveGoneException(Long.parseLong(id) );331 act.handlePrimitiveGoneException(Long.parseLong(id),primitiveType); 331 332 } 332 333 … … 344 345 Matcher m = p.matcher(e.getErrorHeader()); 345 346 if (m.matches()) { 346 handleGoneForKnownPrimitive( m.group(1), m.group(2));347 handleGoneForKnownPrimitive(OsmPrimitiveType.from(m.group(1)), m.group(2)); 347 348 } else { 348 349 logger.warning(tr("Error header \"{0}\" does not match expected pattern \"{1}\"",e.getErrorHeader(), pattern)); … … 424 425 private Exception lastException = null; 425 426 private long id; 426 427 public UpdatePrimitiveTask(long id) { 427 private OsmPrimitiveType type; 428 429 public UpdatePrimitiveTask(OsmPrimitiveType type, long id) { 428 430 super(tr("Updating primitive"),false /* don't ignore exceptions */); 429 431 this.id = id; 432 this.type = type; 430 433 } 431 434 … … 433 436 try { 434 437 UpdateSelectionAction act = new UpdateSelectionAction(); 435 act.updatePrimitive( id);438 act.updatePrimitive(type, id); 436 439 } catch (Exception sxe) { 437 440 if (uploadCancelled) { -
trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskList.java
r2017 r2077 125 125 final OsmDataLayer editLayer = Main.map.mapView.getEditLayer(); 126 126 if (editLayer != null) { 127 Set<Long> myPrimitiveIds = editLayer.data.getCompletePrimitiveIds(); 128 Set<Long> downloadedIds = getDownloadedIds(); 129 myPrimitiveIds.removeAll(downloadedIds); 130 myPrimitiveIds.remove(new Long(0)); // ignore new primitives 131 if (! myPrimitiveIds.isEmpty()) { 132 handlePotentiallyDeletedPrimitives(myPrimitiveIds); 133 } 134 } 127 Set<OsmPrimitive> myPrimitives = getCompletePrimitives(editLayer.data); 128 for (DownloadTask task : osmTasks) { 129 if(task instanceof DownloadOsmTask) { 130 DataSet ds = ((DownloadOsmTask)task).getDownloadedData(); 131 if (ds != null) { 132 myPrimitives.removeAll(ds.nodes); 133 myPrimitives.removeAll(ds.ways); 134 myPrimitives.removeAll(ds.relations); 135 } 136 } 137 } 138 if (! myPrimitives.isEmpty()) { 139 handlePotentiallyDeletedPrimitives(myPrimitives); 140 } 141 } 142 } 143 144 145 /** 146 * Replies the set of ids of all complete primitives (i.e. those with 147 * ! primitive.incomplete) 148 * 149 * @return the set of ids of all complete primitives 150 */ 151 protected Set<OsmPrimitive> getCompletePrimitives(DataSet ds) { 152 HashSet<OsmPrimitive> ret = new HashSet<OsmPrimitive>(); 153 for (OsmPrimitive primitive : ds.nodes) { 154 if (!primitive.incomplete && primitive.getId() == 0) { 155 ret.add(primitive); 156 } 157 } 158 for (OsmPrimitive primitive : ds.ways) { 159 if (! primitive.incomplete && primitive.getId() == 0) { 160 ret.add(primitive); 161 } 162 } 163 for (OsmPrimitive primitive : ds.relations) { 164 if (! primitive.incomplete && primitive.getId() == 0) { 165 ret.add(primitive);; 166 } 167 } 168 return ret; 135 169 } 136 170 … … 141 175 * @param potentiallyDeleted a set of ids to check update from the server 142 176 */ 143 protected void updatePotentiallyDeletedPrimitives(Set<Long> potentiallyDeleted) { 144 DataSet ds = Main.map.mapView.getEditLayer().data; 177 protected void updatePotentiallyDeletedPrimitives(Set<OsmPrimitive> potentiallyDeleted) { 145 178 final ArrayList<OsmPrimitive> toSelect = new ArrayList<OsmPrimitive>(); 146 for (Long id : potentiallyDeleted) { 147 OsmPrimitive primitive = ds.getPrimitiveById(id); 179 for (OsmPrimitive primitive : potentiallyDeleted) { 148 180 if (primitive != null) { 149 181 toSelect.add(primitive); … … 167 199 * @param potentiallyDeleted a set of primitives (given by their ids) 168 200 */ 169 protected void handlePotentiallyDeletedPrimitives(Set< Long> potentiallyDeleted) {201 protected void handlePotentiallyDeletedPrimitives(Set<OsmPrimitive> potentiallyDeleted) { 170 202 String [] options = { 171 203 "Check on the server", … … 197 229 ); 198 230 switch(ret) { 199 case JOptionPane.CLOSED_OPTION: return; 200 case JOptionPane.NO_OPTION: return; 201 case JOptionPane.YES_OPTION: updatePotentiallyDeletedPrimitives(potentiallyDeleted); break; 202 } 203 } 204 205 /** 206 * replies true, if the primitive with id <code>id</code> was downloaded into the 207 * dataset <code>ds</code> 208 * 209 * @param id the id 210 * @param ds the dataset 211 * @return true, if the primitive with id <code>id</code> was downloaded into the 212 * dataset <code>ds</code>; false otherwise 213 */ 214 protected boolean wasDownloaded(long id, DataSet ds) { 215 OsmPrimitive primitive = ds.getPrimitiveById(id); 216 return primitive != null; 217 } 218 219 /** 220 * replies true, if the primitive with id <code>id</code> was downloaded into the 221 * dataset of one of the download tasks 222 * 223 * @param id the id 224 * @return true, if the primitive with id <code>id</code> was downloaded into the 225 * dataset of one of the download tasks 226 * 227 */ 228 public boolean wasDownloaded(long id) { 229 for (DownloadTask task : osmTasks) { 230 if(task instanceof DownloadOsmTask) { 231 DataSet ds = ((DownloadOsmTask)task).getDownloadedData(); 232 if(wasDownloaded(id,ds)) return true; 233 } 234 } 235 return false; 231 case JOptionPane.CLOSED_OPTION: return; 232 case JOptionPane.NO_OPTION: return; 233 case JOptionPane.YES_OPTION: updatePotentiallyDeletedPrimitives(potentiallyDeleted); break; 234 } 236 235 } 237 236 … … 241 240 * @return the set of primitive ids which have been downloaded by this task list 242 241 */ 243 public Set< Long> getDownloadedIds() {244 HashSet< Long> ret = new HashSet<Long>();242 public Set<OsmPrimitive> getDownloadedPrimitives() { 243 HashSet<OsmPrimitive> ret = new HashSet<OsmPrimitive>(); 245 244 for (DownloadTask task : osmTasks) { 246 245 if(task instanceof DownloadOsmTask) { 247 246 DataSet ds = ((DownloadOsmTask)task).getDownloadedData(); 248 247 if (ds != null) { 249 ret.addAll(ds.getPrimitiveIds()); 248 ret.addAll(ds.nodes); 249 ret.addAll(ds.ways); 250 ret.addAll(ds.relations); 250 251 } 251 252 } -
trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
r2070 r2077 313 313 * 314 314 * @param id the id, > 0 required 315 * @param type the type of the primitive. Must not be null. 315 316 * @return the primitive 316 317 * @exception IllegalArgumentException thrown, if id <= 0 317 */ 318 public OsmPrimitive getPrimitiveById(long id) { 318 * @exception IllegalArgumentException thrown, if type is null 319 * @exception IllegalArgumentException thrown, if type is neither NODE, or WAY or RELATION 320 */ 321 public OsmPrimitive getPrimitiveById(long id, OsmPrimitiveType type) { 319 322 if (id <= 0) 320 323 throw new IllegalArgumentException(tr("parameter {0} > 0 required. Got {1}.", "id", id)); 321 for (OsmPrimitive primitive : nodes) { 322 if (primitive.getId() == id) return primitive; 323 } 324 for (OsmPrimitive primitive : ways) { 325 if (primitive.getId() == id) return primitive; 326 } 327 for (OsmPrimitive primitive : relations) { 324 if (id <= 0) 325 throw new IllegalArgumentException(tr("paramete''{0}'' must not be null", "type")); 326 Collection<? extends OsmPrimitive> primitives = null; 327 switch(type) { 328 case NODE: primitives = nodes; break; 329 case WAY: primitives = ways; break; 330 case RELATION: primitives = relations; break; 331 case CHANGESET: throw new IllegalArgumentException(tr("unsupported value ''{0}'' or parameter ''{1}''", type, "type")); 332 } 333 for (OsmPrimitive primitive : primitives) { 328 334 if (primitive.getId() == id) return primitive; 329 335 } … … 341 347 for (OsmPrimitive primitive : relations) { 342 348 ret.add(primitive.getId()); 343 }344 return ret;345 }346 347 /**348 * Replies the set of ids of all complete primitives (i.e. those with349 * ! primitive.incomplete)350 *351 * @return the set of ids of all complete primitives352 */353 public Set<Long> getCompletePrimitiveIds() {354 HashSet<Long> ret = new HashSet<Long>();355 for (OsmPrimitive primitive : nodes) {356 if (!primitive.incomplete) {357 ret.add(primitive.getId());358 }359 }360 for (OsmPrimitive primitive : ways) {361 if (! primitive.incomplete) {362 ret.add(primitive.getId());363 }364 }365 for (OsmPrimitive primitive : relations) {366 if (! primitive.incomplete) {367 ret.add(primitive.getId());368 }369 349 } 370 350 return ret; -
trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitiveType.java
r1989 r2077 39 39 } 40 40 41 public static OsmPrimitiveType from(String value) { 42 if (value == null) return null; 43 for (OsmPrimitiveType type: values()){ 44 if (type.getAPIName().equalsIgnoreCase(value)) 45 return type; 46 } 47 return null; 48 } 49 41 50 } -
trunk/src/org/openstreetmap/josm/data/osm/Relation.java
r2070 r2077 112 112 */ 113 113 public Relation() { 114 114 super(0); 115 115 } 116 116 -
trunk/src/org/openstreetmap/josm/data/osm/Way.java
r2070 r2077 3 3 4 4 import java.util.ArrayList; 5 5 6 import java.util.Arrays; 6 7 import java.util.Collection; … … 10 11 import org.openstreetmap.josm.tools.CopyList; 11 12 import org.openstreetmap.josm.tools.Pair; 13 import static org.openstreetmap.josm.tools.I18n.tr; 12 14 13 15 /** … … 123 125 */ 124 126 public Way(){ 127 super(0); 125 128 } 126 129 … … 197 200 } 198 201 199 public void addNode(Node n) { 202 /** 203 * Adds a node to the end of the list of nodes. Ignored, if n is null. 204 * 205 * @param n the node. Ignored, if null. 206 * @throws IllegalStateException thrown, if this way is marked as incomplete. We can't add a node 207 * to an incomplete way 208 */ 209 public void addNode(Node n) throws IllegalStateException { 210 if (n==null) return; 211 if (incomplete) 212 throw new IllegalStateException(tr("can't add node {0} to incomplete way {1}", n.getId(), getId())); 200 213 if (incomplete) return; 201 214 clearCached(); … … 203 216 } 204 217 205 public void addNode(int offs, Node n) { 206 if (incomplete) return; 218 /** 219 * Adds a node at position offs. 220 * 221 * @param int offs the offset 222 * @param n the node. Ignored, if null. 223 * @throws IllegalStateException thrown, if this way is marked as incomplete. We can't add a node 224 * to an incomplete way 225 * @throws IndexOutOfBoundsException thrown if offs is out of bounds 226 */ 227 public void addNode(int offs, Node n) throws IllegalStateException, IndexOutOfBoundsException { 228 if (n==null) return; 229 if (incomplete) 230 throw new IllegalStateException(tr("can't add node {0} to incomplete way {1}", n.getId(), getId())); 207 231 clearCached(); 208 232 nodes.add(offs, n); -
trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
r2070 r2077 21 21 import org.openstreetmap.josm.data.osm.Node; 22 22 import org.openstreetmap.josm.data.osm.OsmPrimitive; 23 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 23 24 import org.openstreetmap.josm.data.osm.Relation; 24 25 import org.openstreetmap.josm.data.osm.RelationMember; … … 86 87 public Object getValueAt(int rowIndex, int columnIndex) { 87 88 switch (columnIndex) { 88 89 90 91 92 93 89 case 0: 90 return members.get(rowIndex).getRole(); 91 case 1: 92 return members.get(rowIndex).getMember(); 93 case 2: 94 return linked(rowIndex); 94 95 } 95 96 // should not happen … … 201 202 continue; 202 203 } 203 OsmPrimitive primitive = ds.getPrimitiveById(member.getMember().getId() );204 OsmPrimitive primitive = ds.getPrimitiveById(member.getMember().getId(), OsmPrimitiveType.from(member.getMember())); 204 205 if (primitive != null) { 205 206 member.member = primitive; -
trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java
r2070 r2077 14 14 import org.openstreetmap.josm.data.osm.DataSet; 15 15 import org.openstreetmap.josm.data.osm.DataSource; 16 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 16 17 import org.openstreetmap.josm.data.osm.Relation; 17 18 import org.openstreetmap.josm.data.osm.visitor.MergeVisitor; … … 150 151 parents.clear(); 151 152 for (Relation parent : referrers.relations) { 152 parents.add((Relation)getLayer().data.getPrimitiveById(parent.getId() ));153 parents.add((Relation)getLayer().data.getPrimitiveById(parent.getId(),OsmPrimitiveType.RELATION)); 153 154 } 154 155 if (continuation != null) { -
trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
r2070 r2077 110 110 * id=<code>id</code> 111 111 */ 112 protected void remember(DataSet ds, long id ) throws IllegalArgumentException, NoSuchElementException{112 protected void remember(DataSet ds, long id, OsmPrimitiveType type) throws IllegalArgumentException, NoSuchElementException{ 113 113 if (ds == null) 114 114 throw new IllegalArgumentException(tr("parameter ''{0}'' must not be null", "ds")); 115 115 if (id <= 0) return; 116 OsmPrimitive primitive = ds.getPrimitiveById(id );116 OsmPrimitive primitive = ds.getPrimitiveById(id, type); 117 117 if (primitive == null) 118 118 throw new NoSuchElementException(tr("no primitive with id {0} in local dataset. Can't infer primitive type", id)); … … 122 122 123 123 /** 124 * appends a list of ids to the list of ids which will be fetched from the server. ds must 125 * include an {@see OsmPrimitive} for each id in ids. 126 * 127 * id is ignored if id <= 0. 128 * 129 * @param ds the dataset 130 * @param ids the list of ids 124 * appends a {@see Node}s id to the list of ids which will be fetched from the server. 125 * 126 * @param node the node (ignored, if null) 131 127 * @return this 132 128 * 133 129 */ 134 public MultiFetchServerObjectReader append(DataSet ds, long ... ids) { 135 if (ids == null) return this; 136 for (int i=0; i < ids.length; i++) { 137 remember(ds, ids[i]); 138 } 139 return this; 140 } 141 142 /** 143 * appends a collection of ids to the list of ids which will be fetched from the server. ds must 144 * include an {@see OsmPrimitive} for each id in ids. 145 * 146 * id is ignored if id <= 0. 147 * 148 * @param ds the dataset 149 * @param ids the collection of ids 150 * @return this 151 * 152 */ 153 public MultiFetchServerObjectReader append(DataSet ds, Collection<Long> ids) { 154 if (ids == null) return null; 155 for (long id: ids) { 156 append(ds,id); 130 public MultiFetchServerObjectReader append(DataSet ds, long id, OsmPrimitiveType type) { 131 switch(type) { 132 case NODE: 133 Node n = (Node)ds.getPrimitiveById(id,type); 134 append(n); 135 break; 136 case WAY: 137 Way w= (Way)ds.getPrimitiveById(id,type); 138 append(w); 139 break; 140 case RELATION: 141 Relation r = (Relation)ds.getPrimitiveById(id,type); 142 append(r); 143 break; 157 144 } 158 145 return this; … … 376 363 String msg = ""; 377 364 switch(type) { 378 379 380 365 case NODE: msg = tr("Fetching node with id {0} from ''{1}''", id, OsmApi.getOsmApi().getBaseUrl()); break; 366 case WAY: msg = tr("Fetching way with id {0} from ''{1}''", id, OsmApi.getOsmApi().getBaseUrl()); break; 367 case RELATION: msg = tr("Fetching relation with id {0} from ''{1}''", id, OsmApi.getOsmApi().getBaseUrl()); break; 381 368 } 382 369 progressMonitor.setCustomText(msg); … … 414 401 String msg = ""; 415 402 switch(type) { 416 417 418 403 case NODE: msg = tr("Fetching a package of nodes from ''{0}''", OsmApi.getOsmApi().getBaseUrl()); break; 404 case WAY: msg = tr("Fetching a package of ways from ''{0}''", OsmApi.getOsmApi().getBaseUrl()); break; 405 case RELATION: msg = tr("Fetching a package of relations from ''{0}''", OsmApi.getOsmApi().getBaseUrl()); break; 419 406 } 420 407 progressMonitor.setCustomText(msg);
Note:
See TracChangeset
for help on using the changeset viewer.