// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.actions.downloadtasks;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.util.Collections;
import java.util.concurrent.Future;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
import org.openstreetmap.josm.data.osm.PrimitiveId;
import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
import org.openstreetmap.josm.gui.io.DownloadPrimitivesWithReferrersTask;
import org.openstreetmap.josm.gui.progress.ProgressMonitor;
public class DownloadOsmIdTask extends DownloadOsmTask {
private static final String URL_ID_PATTERN = "https?://www\\.(osm|openstreetmap)\\.org/(node|way|relation)/(\\p{Digit}+).*";
@Override
public String[] getPatterns() {
return new String[]{URL_ID_PATTERN};
}
@Override
public Future<?> loadUrl(boolean newLayer, String url, ProgressMonitor progressMonitor) {
final Matcher matcher = Pattern.compile(URL_ID_PATTERN).matcher(url);
if (matcher.matches()) {
final OsmPrimitiveType type = OsmPrimitiveType.from(matcher.group(2));
final long id = Long.parseLong(matcher.group(3));
final PrimitiveId primitiveId = new SimplePrimitiveId(id, type);
final DownloadPrimitivesWithReferrersTask downloadTask = new DownloadPrimitivesWithReferrersTask(
newLayer, Collections.singletonList(primitiveId), true, true, null, null);
return Main.worker.submit(downloadTask);
} else {
throw new IllegalStateException("Failed to parse id from " + url);
}
}
@Override
public String getTitle() {
return tr("Download OSM object by ID");
}
}