// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.layer.markerlayer; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.event.ActionEvent; import java.io.File; import java.net.URL; import java.util.Collections; import javax.swing.JOptionPane; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.data.coor.LatLon; import org.openstreetmap.josm.data.gpx.GpxConstants; import org.openstreetmap.josm.data.gpx.GpxLink; import org.openstreetmap.josm.data.gpx.WayPoint; import org.openstreetmap.josm.gui.Notification; import org.openstreetmap.josm.tools.CheckParameterUtil; import org.openstreetmap.josm.tools.OpenBrowser; /** * Marker class with Web URL activation. * * @author Frederik Ramm * @since 200 */ public class WebMarker extends ButtonMarker { private final URL webUrl; public WebMarker(LatLon ll, URL webUrl, MarkerLayer parentLayer, double time, double offset) { super(ll, "web", parentLayer, time, offset); CheckParameterUtil.ensureParameterNotNull(webUrl, "webUrl"); this.webUrl = webUrl; } @Override public void actionPerformed(ActionEvent ev) { String error = OpenBrowser.displayUrl(webUrl.toString()); if (error != null) { setErroneous(true); new Notification( "<b>" + tr("There was an error while trying to display the URL for this marker") + "</b><br>" + tr("(URL was: ") + webUrl + ')' + "<br>" + error) .setIcon(JOptionPane.ERROR_MESSAGE) .setDuration(Notification.TIME_LONG) .show(); } else { updateErroneous(); } } @Override public WayPoint convertToWayPoint() { WayPoint wpt = super.convertToWayPoint(); GpxLink link = new GpxLink(webUrl.toString()); link.type = "web"; wpt.put(GpxConstants.META_LINKS, Collections.singleton(link)); return wpt; } private void updateErroneous() { if ("file".equals(webUrl.getProtocol())) { String path = webUrl.getPath(); try { setErroneous(path.isEmpty() || !new File(path).exists()); } catch (SecurityException e) { Main.warn(e); setErroneous(true); } } else { setErroneous(false); } } }