source: osm/applications/editors/josm/plugins/routing/src/com/innovant/josm/plugin/routing/gui/RoutingMenu.java

Last change on this file was 36085, checked in by taylor.smock, 12 months ago

Fix #22968: ClassCastException in RoutingGraph#applyAlgorithm

The problem pretty much comes down to the active layer not being the routing
layer.

This additionally fixes many SonarLint issues and drops a dependency on log4j.

File size: 6.0 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package com.innovant.josm.plugin.routing.gui;
3
4import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
5import static org.openstreetmap.josm.tools.I18n.tr;
6
7import java.awt.event.ItemEvent;
8import java.awt.event.KeyEvent;
9
10import javax.swing.ButtonGroup;
11import javax.swing.JCheckBoxMenuItem;
12import javax.swing.JMenu;
13import javax.swing.JMenuItem;
14import javax.swing.JRadioButtonMenuItem;
15
16import com.innovant.josm.jrt.core.RoutingGraph.RouteType;
17import com.innovant.josm.plugin.routing.RoutingLayer;
18import com.innovant.josm.plugin.routing.RoutingModel;
19import com.innovant.josm.plugin.routing.RoutingPlugin;
20import org.openstreetmap.josm.gui.MainApplication;
21import org.openstreetmap.josm.gui.MainMenu;
22
23/**
24 * The menu bar from this plugin
25 * @author jvidal
26 *
27 */
28public class RoutingMenu extends JMenu {
29
30 /**
31 * Default serial version UID
32 */
33 private static final long serialVersionUID = 3559922048225708480L;
34
35 private final JMenuItem startMI;
36 private final JMenuItem reverseMI;
37 private final JMenuItem clearMI;
38 private final JMenuItem regraphMI;
39 private final JMenu criteriaM;
40 private final JMenu menu;
41
42 /**
43 */
44 public RoutingMenu() {
45 MainMenu mm = MainApplication.getMenu();
46 menu = mm.addMenu("Routing", tr("Routing"), KeyEvent.VK_O, mm.getDefaultMenuPos(), ht("/Plugin/Routing"));
47
48 startMI = new JMenuItem(tr("Add routing layer"));
49 startMI.addActionListener(e -> RoutingPlugin.getInstance().addLayer());
50 menu.add(startMI);
51
52 menu.addSeparator();
53 ButtonGroup group = new ButtonGroup();
54
55 criteriaM = new JMenu(tr("Criteria"));
56
57 JRadioButtonMenuItem rshorter = new JRadioButtonMenuItem(tr("Shortest"));
58 rshorter.setSelected(true);
59 rshorter.addItemListener(e -> {
60 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) {
61 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer();
62 RoutingModel routingModel = layer.getRoutingModel();
63 if (e.getStateChange() == ItemEvent.SELECTED) {
64 routingModel.routingGraph.setTypeRoute(RouteType.SHORTEST);
65 } else {
66 routingModel.routingGraph.setTypeRoute(RouteType.FASTEST);
67 }
68 // routingModel.routingGraph.resetGraph();
69 // routingModel.routingGraph.createGraph();
70 //TODO: Change this way
71 //FIXME: do not change node but recalculate routing.
72 routingModel.setNodesChanged();
73 MainApplication.getMap().repaint();
74 }
75 });
76
77 JRadioButtonMenuItem rfaster = new JRadioButtonMenuItem(tr("Fastest"));
78 group.add(rshorter);
79 group.add(rfaster);
80 criteriaM.add(rshorter);
81 criteriaM.add(rfaster);
82
83 criteriaM.addSeparator();
84 JCheckBoxMenuItem cbmi = new JCheckBoxMenuItem(tr("Ignore oneways"));
85 cbmi.addItemListener(e -> {
86 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) {
87 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer();
88 RoutingModel routingModel = layer.getRoutingModel();
89 routingModel.routingGraph.getRoutingProfile().setOnewayUse(e.getStateChange() != ItemEvent.SELECTED);
90 routingModel.setNodesChanged();
91 routingModel.setOnewayChanged();
92 MainApplication.getMap().repaint();
93 }
94 });
95 criteriaM.add(cbmi);
96 menu.add(criteriaM);
97
98 menu.addSeparator();
99 reverseMI = new JMenuItem(tr("Reverse route"));
100 reverseMI.addActionListener(e -> {
101 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) {
102 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer();
103 RoutingModel routingModel = layer.getRoutingModel();
104 routingModel.reverseNodes();
105 MainApplication.getMap().repaint();
106 }
107 });
108 menu.add(reverseMI);
109
110 clearMI = new JMenuItem(tr("Clear route"));
111 clearMI.addActionListener(e -> {
112 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) {
113 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer();
114 RoutingModel routingModel = layer.getRoutingModel();
115 // Reset routing nodes and paths
116 routingModel.reset();
117 RoutingPlugin.getInstance().getRoutingDialog().clearNodes();
118 MainApplication.getMap().repaint();
119 }
120 });
121 menu.add(clearMI);
122
123 regraphMI = new JMenuItem(tr("Reconstruct Graph"));
124 regraphMI.addActionListener(e -> {
125 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) {
126 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer();
127 RoutingModel routingModel = layer.getRoutingModel();
128 routingModel.routingGraph.resetGraph();
129 routingModel.routingGraph.createGraph();
130 }
131 });
132 menu.add(regraphMI);
133
134 // Initially disabled
135 disableAllItems();
136 }
137
138 public void disableAllItems() {
139 startMI.setEnabled(false);
140 reverseMI.setEnabled(false);
141 clearMI.setEnabled(false);
142 criteriaM.setEnabled(false);
143 regraphMI.setEnabled(false);
144 }
145
146 public void enableStartItem() {
147 startMI.setEnabled(true);
148 }
149
150 public void enableRestOfItems() {
151 reverseMI.setEnabled(true);
152 clearMI.setEnabled(true);
153 criteriaM.setEnabled(true);
154 regraphMI.setEnabled(true);
155 }
156
157 public void disableRestOfItems() {
158 reverseMI.setEnabled(false);
159 clearMI.setEnabled(false);
160 criteriaM.setEnabled(false);
161 regraphMI.setEnabled(false);
162 }
163}
Note: See TracBrowser for help on using the repository browser.