// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.io; import static org.openstreetmap.josm.tools.I18n.tr; import java.util.Collection; import java.util.Collections; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.Relation; import org.openstreetmap.josm.data.osm.Way; import org.openstreetmap.josm.gui.layer.OsmDataLayer; import org.openstreetmap.josm.io.MultiFetchServerObjectReader; /** * The asynchronous task for updating a collection of objects using multi fetch. * @since 2599 */ public class UpdatePrimitivesTask extends AbstractPrimitiveTask { private final Collection<? extends OsmPrimitive> toUpdate; /** * Constructs a new {@code UpdatePrimitivesTask}. * * @param layer the layer in which primitives are updated. Must not be null. * @param toUpdate a collection of primitives to update from the server. Set to * the empty collection if null. * @throws IllegalArgumentException if layer is null. */ public UpdatePrimitivesTask(OsmDataLayer layer, Collection<? extends OsmPrimitive> toUpdate) { super(tr("Update objects"), layer); this.toUpdate = toUpdate != null ? toUpdate : Collections.<OsmPrimitive>emptyList(); } protected void initMultiFetchReaderWithNodes(MultiFetchServerObjectReader reader) { getProgressMonitor().indeterminateSubTask(tr("Initializing nodes to update ...")); for (OsmPrimitive primitive : toUpdate) { if (primitive instanceof Node && !primitive.isNew()) { reader.append(primitive); } } } protected void initMultiFetchReaderWithWays(MultiFetchServerObjectReader reader) { getProgressMonitor().indeterminateSubTask(tr("Initializing ways to update ...")); for (OsmPrimitive primitive : toUpdate) { if (primitive instanceof Way && !primitive.isNew()) { // this also adds way nodes reader.append(primitive); } } } protected void initMultiFetchReaderWithRelations(MultiFetchServerObjectReader reader) { getProgressMonitor().indeterminateSubTask(tr("Initializing relations to update ...")); for (OsmPrimitive primitive : toUpdate) { if (primitive instanceof Relation && !primitive.isNew()) { // this also adds relation members reader.append(primitive); } } } @Override protected void initMultiFetchReader(MultiFetchServerObjectReader reader) { initMultiFetchReaderWithNodes(reader); initMultiFetchReaderWithWays(reader); initMultiFetchReaderWithRelations(reader); } }