Changeset 1809 in josm for trunk


Ignore:
Timestamp:
2009-07-19T10:39:10+02:00 (15 years ago)
Author:
Gubaer
Message:

fixed #2975: Error message while trying to split way with relation without role

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java

    r1706 r1809  
    5353    public SplitWayAction() {
    5454        super(tr("Split Way"), "splitway", tr("Split a way at the selected node."),
    55         Shortcut.registerShortcut("tools:splitway", tr("Tool: {0}", tr("Split Way")), KeyEvent.VK_P, Shortcut.GROUP_EDIT), true);
     55                Shortcut.registerShortcut("tools:splitway", tr("Tool: {0}", tr("Split Way")), KeyEvent.VK_P, Shortcut.GROUP_EDIT), true);
    5656        DataSet.selListeners.add(this);
    5757    }
     
    7777        Visitor splitVisitor = new AbstractVisitor() {
    7878            public void visit(Node n) {
    79                 if (selectedNodes == null)
     79                if (selectedNodes == null) {
    8080                    selectedNodes = new LinkedList<Node>();
     81                }
    8182                selectedNodes.add(n);
    8283            }
     
    8990        };
    9091
    91         for (OsmPrimitive p : selection)
     92        for (OsmPrimitive p : selection) {
    9293            p.visit(splitVisitor);
     94        }
    9395
    9496        // If only nodes are selected, try to guess which way to split. This works if there
     
    98100            for (Node n : selectedNodes) {
    99101                for (Way w : Main.ds.ways) {
    100                     if (w.deleted || w.incomplete) continue;
     102                    if (w.deleted || w.incomplete) {
     103                        continue;
     104                    }
    101105                    int last = w.nodes.size()-1;
    102                     if(last <= 0) continue; // zero or one node ways
     106                    if(last <= 0) {
     107                        continue; // zero or one node ways
     108                    }
    103109                    Boolean circular = w.nodes.get(0).equals(w.nodes.get(last));
    104110                    int i = 0;
     
    115121            if (wayOccurenceCounter.isEmpty()) {
    116122                JOptionPane.showMessageDialog(Main.parent,
    117                 trn("The selected node is not in the middle of any way.",
    118                 "The selected nodes are not in the middle of any way.",
    119                 selectedNodes.size()));
     123                        trn("The selected node is not in the middle of any way.",
     124                                "The selected nodes are not in the middle of any way.",
     125                                selectedNodes.size()));
    120126                return;
    121127            }
     
    125131                    if (selectedWay != null) {
    126132                        JOptionPane.showMessageDialog(Main.parent,
    127                         trn("There is more than one way using the node you selected. Please select the way also.",
    128                         "There is more than one way using the nodes you selected. Please select the way also.",
    129                         selectedNodes.size()));
     133                                trn("There is more than one way using the node you selected. Please select the way also.",
     134                                        "There is more than one way using the nodes you selected. Please select the way also.",
     135                                        selectedNodes.size()));
    130136                        return;
    131137                    }
     
    136142            if (selectedWay == null) {
    137143                JOptionPane.showMessageDialog(Main.parent,
    138                 tr("The selected nodes do not share the same way."));
     144                        tr("The selected nodes do not share the same way."));
    139145                return;
    140146            }
    141147
    142         // If a way and nodes are selected, verify that the nodes are part of the way.
     148            // If a way and nodes are selected, verify that the nodes are part of the way.
    143149        } else if (selectedWay != null && selectedNodes != null) {
    144150
     
    149155            if (!nds.isEmpty()) {
    150156                JOptionPane.showMessageDialog(Main.parent,
    151                 trn("The selected way does not contain the selected node.",
    152                 "The selected way does not contain all the selected nodes.",
    153                 selectedNodes.size()));
     157                        trn("The selected way does not contain the selected node.",
     158                                "The selected way does not contain all the selected nodes.",
     159                                selectedNodes.size()));
    154160                return;
    155161            }
     
    175181            } else if (p instanceof Node) {
    176182                node = true;
    177             } else {
     183            } else
    178184                return false;
    179         }
    180185        }
    181186        return node;
     
    227232
    228233        if (wayChunks.size() < 2) {
    229             if(wayChunks.get(0).get(0) == wayChunks.get(0).get(wayChunks.get(0).size()-1))
     234            if(wayChunks.get(0).get(0) == wayChunks.get(0).get(wayChunks.get(0).size()-1)) {
    230235                JOptionPane.showMessageDialog(Main.parent, tr("You must select two or more nodes to split a circular way."));
    231             else
     236            } else {
    232237                JOptionPane.showMessageDialog(Main.parent, tr("The way cannot be split at the selected nodes. (Hint: Select nodes in the middle of the way.)"));
     238            }
    233239            return;
    234240        }
     
    267273        // now copy all relations to new way also
    268274        for (Relation r : Main.ds.relations) {
    269             if (r.deleted || r.incomplete) continue;
     275            if (r.deleted || r.incomplete) {
     276                continue;
     277            }
    270278            Relation c = null;
    271279            String type = "";
    272280            int i = 0;
    273281
    274             if(r.keys != null)
     282            if(r.keys != null) {
    275283                type = r.keys.get("type");
     284            }
    276285
    277286            for (RelationMember rm : r.members) {
     
    279288                    if (rm.member == selectedWay)
    280289                    {
    281                         if(!("route".equals(type)) && !("multipolygon".equals(type)))
     290                        if(!("route".equals(type)) && !("multipolygon".equals(type))) {
    282291                            warnme = true;
    283                         if (c == null)
     292                        }
     293                        if (c == null) {
    284294                            c = new Relation(r);
     295                        }
    285296
    286297                        int j = i;
    287                         boolean backwards = rm.role.equals("backward");
     298                        boolean backwards = "backward".equals(rm.role);
    288299                        for(Way wayToAdd : newWays)
    289300                        {
     
    291302                            em.member = wayToAdd;
    292303                            em.role = rm.role;
    293                             if(em.role.length() > 0 && !("multipolygon".equals(type)))
     304                            if(em.role != null && em.role.length() > 0 && !("multipolygon".equals(type))) {
    294305                                warnmerole = true;
     306                            }
    295307
    296308                            j++;
    297                             if (backwards)
     309                            if (backwards) {
    298310                                c.members.add(i, em);
    299                             else
     311                            } else {
    300312                                c.members.add(j, em);
     313                            }
    301314                        }
    302315                        i = j;
     
    306319            }
    307320
    308             if (c != null)
     321            if (c != null) {
    309322                commandList.add(new ChangeCommand(r, c));
    310         }
    311         if(warnmerole)
     323            }
     324        }
     325        if(warnmerole) {
    312326            JOptionPane.showMessageDialog(Main.parent, tr("A role based relation membership was copied to all new ways.\nYou should verify this and correct it when necessary."));
    313         else if(warnme)
     327        } else if(warnme) {
    314328            JOptionPane.showMessageDialog(Main.parent, tr("A relation membership was copied to all new ways.\nYou should verify this and correct it when necessary."));
     329        }
    315330
    316331        NameVisitor v = new NameVisitor();
    317332        v.visit(selectedWay);
    318333        Main.main.undoRedo.add(
    319             new SequenceCommand(tr("Split way {0} into {1} parts",
    320                 v.name, wayChunks.size()),
    321             commandList));
     334                new SequenceCommand(tr("Split way {0} into {1} parts",
     335                        v.name, wayChunks.size()),
     336                        commandList));
    322337        Main.ds.setSelected(newSelection);
    323338    }
Note: See TracChangeset for help on using the changeset viewer.