// 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 javax.swing.AbstractAction; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.gui.DefaultNameFormatter; import org.openstreetmap.josm.plugins.turnrestrictions.editor.NavigationControler; import org.openstreetmap.josm.plugins.turnrestrictions.editor.NavigationControler.BasicEditorFokusTargets; import org.openstreetmap.josm.plugins.turnrestrictions.editor.RelationMemberEditorModel; import org.openstreetmap.josm.plugins.turnrestrictions.editor.TurnRestrictionLegRole; /** * Issue if the type of a turn restriction leg is either an OSM node or an OSM relation. * */ public class WrongTurnRestrictionLegTypeError extends Issue { private TurnRestrictionLegRole role; private OsmPrimitive leg; /** * Create the issue * * @param parent the parent model * @param role the role of the turn restriction leg * @param leg the leg */ public WrongTurnRestrictionLegTypeError(IssuesModel parent, TurnRestrictionLegRole role, OsmPrimitive leg) { super(parent, Severity.ERROR); this.role = role; this.leg = leg; actions.add(new DeleteAction()); actions.add(new FixInEditorAction()); } @Override public String getText() { String msg = null; switch(leg.getType()) { case NODE: msg = tr( "This turn restriction uses the node <span class=\"object-name\">{0}</span> as member with role <tt>{1}</tt>.", leg.getDisplayName(DefaultNameFormatter.getInstance()), role.toString() ); break; case RELATION: msg = tr("This turn restriction uses the relation <span class=\"object-name\">{0}</span> as member with role <tt>{1}</tt>.", leg.getDisplayName(DefaultNameFormatter.getInstance()), role.toString() ); break; default: throw new AssertionError("Unexpected type for leg: "+leg.getType()); } return msg + " " + tr("A way is required instead."); } class DeleteAction extends AbstractAction { DeleteAction() { putValue(NAME, tr("Delete")); putValue(SHORT_DESCRIPTION, tr("Delete the member from the turn restriction")); } @Override public void actionPerformed(ActionEvent e) { RelationMemberEditorModel model = getIssuesModel().getEditorModel().getRelationMemberEditorModel(); switch(role) { case FROM: model.setFromPrimitive(null); break; case TO: model.setToPrimitive(null); break; } } } class FixInEditorAction extends AbstractAction { FixInEditorAction() { putValue(NAME, tr("Fix in editor")); putValue(SHORT_DESCRIPTION, tr("Change to the Basic Editor and select a way")); } @Override public void actionPerformed(ActionEvent e) { NavigationControler controler = getIssuesModel().getNavigationControler(); switch(role) { case FROM: controler.gotoBasicEditor(BasicEditorFokusTargets.FROM); break; case TO: controler.gotoBasicEditor(BasicEditorFokusTargets.TO); break; } } } }