source: josm/trunk/src/org/openstreetmap/josm/gui/io/UpdatePrimitivesTask.java@ 11457

Last change on this file since 11457 was 10129, checked in by Don-vip, 8 years ago

refactor duplicated code

  • Property svn:eol-style set to native
File size: 2.7 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.io;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.util.Collection;
7import java.util.Collections;
8
9import org.openstreetmap.josm.data.osm.Node;
10import org.openstreetmap.josm.data.osm.OsmPrimitive;
11import org.openstreetmap.josm.data.osm.Relation;
12import org.openstreetmap.josm.data.osm.Way;
13import org.openstreetmap.josm.gui.layer.OsmDataLayer;
14import org.openstreetmap.josm.io.MultiFetchServerObjectReader;
15
16/**
17 * The asynchronous task for updating a collection of objects using multi fetch.
18 * @since 2599
19 */
20public class UpdatePrimitivesTask extends AbstractPrimitiveTask {
21
22 private final Collection<? extends OsmPrimitive> toUpdate;
23
24 /**
25 * Constructs a new {@code UpdatePrimitivesTask}.
26 *
27 * @param layer the layer in which primitives are updated. Must not be null.
28 * @param toUpdate a collection of primitives to update from the server. Set to
29 * the empty collection if null.
30 * @throws IllegalArgumentException if layer is null.
31 */
32 public UpdatePrimitivesTask(OsmDataLayer layer, Collection<? extends OsmPrimitive> toUpdate) {
33 super(tr("Update objects"), layer);
34 this.toUpdate = toUpdate != null ? toUpdate : Collections.<OsmPrimitive>emptyList();
35 }
36
37 protected void initMultiFetchReaderWithNodes(MultiFetchServerObjectReader reader) {
38 getProgressMonitor().indeterminateSubTask(tr("Initializing nodes to update ..."));
39 for (OsmPrimitive primitive : toUpdate) {
40 if (primitive instanceof Node && !primitive.isNew()) {
41 reader.append(primitive);
42 }
43 }
44 }
45
46 protected void initMultiFetchReaderWithWays(MultiFetchServerObjectReader reader) {
47 getProgressMonitor().indeterminateSubTask(tr("Initializing ways to update ..."));
48 for (OsmPrimitive primitive : toUpdate) {
49 if (primitive instanceof Way && !primitive.isNew()) {
50 // this also adds way nodes
51 reader.append(primitive);
52 }
53 }
54 }
55
56 protected void initMultiFetchReaderWithRelations(MultiFetchServerObjectReader reader) {
57 getProgressMonitor().indeterminateSubTask(tr("Initializing relations to update ..."));
58 for (OsmPrimitive primitive : toUpdate) {
59 if (primitive instanceof Relation && !primitive.isNew()) {
60 // this also adds relation members
61 reader.append(primitive);
62 }
63 }
64 }
65
66 @Override
67 protected void initMultiFetchReader(MultiFetchServerObjectReader reader) {
68 initMultiFetchReaderWithNodes(reader);
69 initMultiFetchReaderWithWays(reader);
70 initMultiFetchReaderWithRelations(reader);
71 }
72}
Note: See TracBrowser for help on using the repository browser.