// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.turnrestrictions.qa;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.event.ActionEvent;
import java.util.Collections;
import javax.swing.AbstractAction;
import org.openstreetmap.josm.data.osm.Node;
import org.openstreetmap.josm.data.osm.OsmPrimitive;
import org.openstreetmap.josm.data.osm.Way;
import org.openstreetmap.josm.gui.DefaultNameFormatter;
import org.openstreetmap.josm.plugins.turnrestrictions.editor.NavigationControler.BasicEditorFokusTargets;
/**
* Issue when 'from' and 'to' intersect at node n and n isn't a via.
*
*/
public class IntersectionMissingAsViaError extends Issue {
private Way from;
private Way to;
private Node intersect;
public IntersectionMissingAsViaError(IssuesModel parent, Way from, Way to, Node intersect) {
super(parent, Severity.ERROR);
this.from = from;
this.to = to;
this.intersect = intersect;
actions.add(new SetVia());
actions.add(new FixInEditorAction());
}
@Override
public String getText() {
// CHECKSTYLE.OFF: LineLength
return tr("The <strong>from</strong>-way <span class=\"object-name\">{0}</span> and the <strong>to</strong>-way <span class=\"object-name\">{1}</span> "
+ "intersect at node <span class=\"object-name\">{2}</span> but this node isn''t a <strong>via</strong>-object.<br> "
+ "It is recommended to set it as unique <strong>via</strong>-object.",
this.from.getDisplayName(DefaultNameFormatter.getInstance()),
this.to.getDisplayName(DefaultNameFormatter.getInstance()),
this.intersect.getDisplayName(DefaultNameFormatter.getInstance())
);
// CHECKSTYLE.ON: LineLength
}
class SetVia extends AbstractAction {
SetVia() {
putValue(NAME, tr("Set via-Object"));
putValue(SHORT_DESCRIPTION, tr("Replaces the currently configured via-objects with the node at the intersection"));
}
@Override
public void actionPerformed(ActionEvent e) {
getIssuesModel().getEditorModel().setVias(Collections.<OsmPrimitive>singletonList(intersect));
}
}
class FixInEditorAction extends AbstractAction {
FixInEditorAction() {
putValue(NAME, tr("Fix in editor"));
putValue(SHORT_DESCRIPTION, tr("Go to Basic Editor and manually fix the list of via-objects"));
}
@Override
public void actionPerformed(ActionEvent e) {
getIssuesModel().getNavigationControler().gotoBasicEditor(BasicEditorFokusTargets.VIA);
}
}
}