Ignore:
Timestamp:
2023-05-26T16:46:48+02:00 (2 years ago)
Author:
taylor.smock
Message:

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.

Location:
applications/editors/josm/plugins/routing/src/com/innovant/josm/plugin/routing/gui
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/routing/src/com/innovant/josm/plugin/routing/gui/RoutingDialog.java

    r33794 r36085  
    1818import com.innovant.josm.plugin.routing.RoutingLayer;
    1919import com.innovant.josm.plugin.routing.RoutingModel;
    20 
    2120
    2221/**
  • applications/editors/josm/plugins/routing/src/com/innovant/josm/plugin/routing/gui/RoutingMenu.java

    r33794 r36085  
    55import static org.openstreetmap.josm.tools.I18n.tr;
    66
    7 import java.awt.event.ActionEvent;
    8 import java.awt.event.ActionListener;
    97import java.awt.event.ItemEvent;
    10 import java.awt.event.ItemListener;
    118import java.awt.event.KeyEvent;
    129
     
    1714import javax.swing.JRadioButtonMenuItem;
    1815
    19 import org.openstreetmap.josm.gui.MainApplication;
    20 import org.openstreetmap.josm.gui.MainMenu;
    21 
    2216import com.innovant.josm.jrt.core.RoutingGraph.RouteType;
    2317import com.innovant.josm.plugin.routing.RoutingLayer;
    2418import com.innovant.josm.plugin.routing.RoutingModel;
    2519import com.innovant.josm.plugin.routing.RoutingPlugin;
     20import org.openstreetmap.josm.gui.MainApplication;
     21import org.openstreetmap.josm.gui.MainMenu;
    2622
    2723/**
     
    5147
    5248        startMI = new JMenuItem(tr("Add routing layer"));
    53         startMI.addActionListener(new ActionListener() {
    54             @Override
    55             public void actionPerformed(ActionEvent e) {
    56                 RoutingPlugin.getInstance().addLayer();
    57             }
    58         });
     49        startMI.addActionListener(e -> RoutingPlugin.getInstance().addLayer());
    5950        menu.add(startMI);
    6051
     
    6657        JRadioButtonMenuItem rshorter = new JRadioButtonMenuItem(tr("Shortest"));
    6758        rshorter.setSelected(true);
    68         rshorter.addItemListener(new ItemListener() {
    69             @Override
    70             public void itemStateChanged(ItemEvent e) {
    71                 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) {
    72                     RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer();
    73                     RoutingModel routingModel = layer.getRoutingModel();
    74                     if (e.getStateChange() == ItemEvent.SELECTED) {
    75                         routingModel.routingGraph.setTypeRoute(RouteType.SHORTEST);
    76                     } else {
    77                         routingModel.routingGraph.setTypeRoute(RouteType.FASTEST);
    78                     }
    79                     //  routingModel.routingGraph.resetGraph();
    80                     //  routingModel.routingGraph.createGraph();
    81                     //TODO: Change this way
    82                     //FIXME: do not change node but recalculate routing.
    83                     routingModel.setNodesChanged();
    84                     MainApplication.getMap().repaint();
     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);
    8567                }
     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();
    8674            }
    87 
    8875        });
    8976
     
    9683        criteriaM.addSeparator();
    9784        JCheckBoxMenuItem cbmi = new JCheckBoxMenuItem(tr("Ignore oneways"));
    98         cbmi.addItemListener(new ItemListener() {
    99             @Override
    100             public void itemStateChanged(ItemEvent e) {
    101                 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) {
    102                     RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer();
    103                     RoutingModel routingModel = layer.getRoutingModel();
    104                     if (e.getStateChange() == ItemEvent.SELECTED)
    105                         routingModel.routingGraph.getRoutingProfile().setOnewayUse(false);
    106                     else
    107                         routingModel.routingGraph.getRoutingProfile().setOnewayUse(true);
    108                     routingModel.setNodesChanged();
    109                     routingModel.setOnewayChanged();
    110                     MainApplication.getMap().repaint();
    111                 }
     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();
    11293            }
    11394        });
     
    11798        menu.addSeparator();
    11899        reverseMI = new JMenuItem(tr("Reverse route"));
    119         reverseMI.addActionListener(new ActionListener() {
    120             @Override
    121             public void actionPerformed(ActionEvent e) {
    122                 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) {
    123                     RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer();
    124                     RoutingModel routingModel = layer.getRoutingModel();
    125                     routingModel.reverseNodes();
    126                     MainApplication.getMap().repaint();
    127                 }
     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();
    128106            }
    129107        });
     
    131109
    132110        clearMI = new JMenuItem(tr("Clear route"));
    133         clearMI.addActionListener(new ActionListener() {
    134             @Override
    135             public void actionPerformed(ActionEvent e) {
    136                 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) {
    137                     RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer();
    138                     RoutingModel routingModel = layer.getRoutingModel();
    139                     // Reset routing nodes and paths
    140                     routingModel.reset();
    141                     RoutingPlugin.getInstance().getRoutingDialog().clearNodes();
    142                     MainApplication.getMap().repaint();
    143                 }
     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();
    144119            }
    145120        });
     
    147122
    148123        regraphMI = new JMenuItem(tr("Reconstruct Graph"));
    149         regraphMI.addActionListener(new ActionListener() {
    150             @Override
    151             public void actionPerformed(ActionEvent e) {
    152                 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) {
    153                     RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer();
    154                     RoutingModel routingModel = layer.getRoutingModel();
    155                     routingModel.routingGraph.resetGraph();
    156                     routingModel.routingGraph.createGraph();
    157                 }
     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();
    158130            }
    159131        });
  • applications/editors/josm/plugins/routing/src/com/innovant/josm/plugin/routing/gui/RoutingPreferenceDialog.java

    r34554 r36085  
    77import java.awt.Dimension;
    88import java.awt.GridBagLayout;
    9 import java.awt.event.ActionEvent;
    10 import java.awt.event.ActionListener;
    119import java.awt.event.MouseAdapter;
    1210import java.awt.event.MouseEvent;
     
    2624import javax.swing.table.DefaultTableModel;
    2725
    28 import org.apache.log4j.Logger;
     26import com.innovant.josm.jrt.osm.OsmWayTypes;
    2927import org.openstreetmap.josm.data.Preferences;
    3028import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
     
    3230import org.openstreetmap.josm.spi.preferences.Config;
    3331import org.openstreetmap.josm.tools.GBC;
    34 
    35 import com.innovant.josm.jrt.osm.OsmWayTypes;
     32import org.openstreetmap.josm.tools.Logging;
    3633
    3734public class RoutingPreferenceDialog extends DefaultTabPreferenceSetting {
    3835
    39     /**
    40      * Logger
    41      */
    42     static Logger logger = Logger.getLogger(RoutingPreferenceDialog.class);
    4336
    4437    private Map<String, String> orig;
     
    8174        p.add(Box.createHorizontalGlue(), GBC.std().fill(GBC.HORIZONTAL));
    8275        p.add(add, GBC.std().insets(0, 5, 0, 0));
    83         add.addActionListener(new ActionListener() {
    84             @Override
    85             public void actionPerformed(ActionEvent e) {
    86                 JPanel p = new JPanel(new GridBagLayout());
    87                 p.add(new JLabel(tr("Weight")), GBC.std().insets(0, 0, 5, 0));
    88                 JComboBox<String> key = new JComboBox<>();
    89                 for (OsmWayTypes pk : OsmWayTypes.values()) {
    90                     key.addItem(pk.getTag());
    91                 }
    92                 JTextField value = new JTextField(10);
    93                 p.add(key, GBC.eop().insets(5, 0, 0, 0).fill(GBC.HORIZONTAL));
    94                 p.add(new JLabel(tr("Value")), GBC.std().insets(0, 0, 5, 0));
    95                 p.add(value, GBC.eol().insets(5, 0, 0, 0).fill(GBC.HORIZONTAL));
    96                 int answer = JOptionPane.showConfirmDialog(gui, p,
    97                         tr("Enter weight values"),
    98                         JOptionPane.OK_CANCEL_OPTION);
    99                 if (answer == JOptionPane.OK_OPTION) {
    100                     model
    101                     .addRow(new String[] {
    102                             key.getSelectedItem().toString(),
    103                             value.getText() });
    104                 }
     76        add.addActionListener(e -> {
     77            JPanel p1 = new JPanel(new GridBagLayout());
     78            p1.add(new JLabel(tr("Weight")), GBC.std().insets(0, 0, 5, 0));
     79            JComboBox<String> key = new JComboBox<>();
     80            for (OsmWayTypes pk : OsmWayTypes.values()) {
     81                key.addItem(pk.getTag());
     82            }
     83            JTextField value = new JTextField(10);
     84            p1.add(key, GBC.eop().insets(5, 0, 0, 0).fill(GBC.HORIZONTAL));
     85            p1.add(new JLabel(tr("Value")), GBC.std().insets(0, 0, 5, 0));
     86            p1.add(value, GBC.eol().insets(5, 0, 0, 0).fill(GBC.HORIZONTAL));
     87            int answer = JOptionPane.showConfirmDialog(gui, p1,
     88                    tr("Enter weight values"),
     89                    JOptionPane.OK_CANCEL_OPTION);
     90            if (answer == JOptionPane.OK_OPTION) {
     91                model
     92                .addRow(new String[] {
     93                        key.getSelectedItem().toString(),
     94                        value.getText() });
    10595            }
    10696        });
     
    10898        JButton delete = new JButton(tr("Delete"));
    10999        p.add(delete, GBC.std().insets(0, 5, 0, 0));
    110         delete.addActionListener(new ActionListener() {
    111             @Override
    112             public void actionPerformed(ActionEvent e) {
    113                 if (list.getSelectedRow() == -1)
    114                     JOptionPane.showMessageDialog(gui,
    115                             tr("Please select the row to delete."));
    116                 else {
    117                     Integer i;
    118                     while ((i = list.getSelectedRow()) != -1) {
    119                         model.removeRow(i);
    120                     }
     100        delete.addActionListener(e -> {
     101            if (list.getSelectedRow() == -1)
     102                JOptionPane.showMessageDialog(gui,
     103                        tr("Please select the row to delete."));
     104            else {
     105                int i;
     106                while ((i = list.getSelectedRow()) != -1) {
     107                    model.removeRow(i);
    121108                }
    122109            }
     
    125112        JButton edit = new JButton(tr("Edit"));
    126113        p.add(edit, GBC.std().insets(5, 5, 5, 0));
    127         edit.addActionListener(new ActionListener() {
    128             @Override
    129             public void actionPerformed(ActionEvent e) {
    130                 edit(gui, list);
    131             }
    132         });
     114        edit.addActionListener(e -> edit(gui, list));
    133115
    134         JTabbedPane Opciones = new JTabbedPane();
    135         Opciones.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
     116        JTabbedPane options = new JTabbedPane();
     117        options.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
    136118
    137         Opciones.addTab("Profile", null, p, null);
    138         //      Opciones.addTab("Preferences", new JPanel());
     119        options.addTab("Profile", null, p, null);
     120        //      options.addTab("Preferences", new JPanel());
    139121
    140122        list.addMouseListener(new MouseAdapter() {
     
    145127        });
    146128
    147         principal.add(Opciones, GBC.eol().fill(GBC.BOTH));
     129        principal.add(options, GBC.eol().fill(GBC.BOTH));
    148130
    149131    }
     
    184166        readPreferences();
    185167        // Put these values in the model
    186         for (String tag : orig.keySet()) {
    187             model.addRow(new String[] {tag, orig.get(tag)});
     168        for (Map.Entry<String, String> entry : orig.entrySet()) {
     169            model.addRow(new String[] {entry.getKey(), entry.getValue()});
    188170        }
    189171    }
     
    192174        orig = Preferences.main().getAllPrefix("routing.profile.default.speed");
    193175        if (orig.size() == 0) { // defaults
    194             logger.debug("Loading Default Preferences.");
     176            Logging.trace("Loading Default Preferences.");
    195177            for (OsmWayTypes owt : OsmWayTypes.values()) {
    196178                Config.getPref().putInt("routing.profile.default.speed."
     
    198180            }
    199181            orig = Preferences.main().getAllPrefix("routing.profile.default.speed");
    200         } else logger.debug("Default preferences already exist.");
     182        } else Logging.trace("Default preferences already exist.");
    201183    }
    202184    /*
Note: See TracChangeset for help on using the changeset viewer.