Ignore:
Timestamp:
2009-06-15T20:22:46+02:00 (15 years ago)
Author:
Gubaer
Message:

fixed: bug in OsmApi.getOsmApi()
cleanup: exception handling in interfacing with OSM API
new: new action for updating individual elements with the their current state on the server (including new menu item in the file menu)
new: improved user feedback in case of conflicts
new: handles 410 Gone conflicts when uploading a changeset
new: undoable command for "purging" a primitive from the current dataset (necessary if the primitive is already deleted on the server and the user wants to remove it from its local dataset)
new: undoable command for "undeleting" an already deleted primitive on the server (kind of "cloning")
new: after a full upload, checks whether there are primitives in the local dataset which might be deleted on the server.
new: data structures for history data
new: history download support in io package

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java

    r1624 r1670  
    3636import org.openstreetmap.josm.data.osm.Node;
    3737import org.openstreetmap.josm.data.osm.OsmPrimitive;
     38import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    3839import org.openstreetmap.josm.data.osm.Relation;
    3940import org.openstreetmap.josm.data.osm.RelationMember;
     
    4445import org.openstreetmap.josm.gui.dialogs.ConflictDialog;
    4546import org.openstreetmap.josm.io.OsmServerObjectReader;
     47import org.openstreetmap.josm.io.OsmTransferException;
    4648import org.openstreetmap.josm.tools.GBC;
    4749import org.openstreetmap.josm.tools.Shortcut;
     
    145147                            String key = propertyData.getValueAt(i, 0).toString();
    146148                            String value = propertyData.getValueAt(i, 1).toString();
    147                             if (key.length() > 0 && value.length() > 0) clone.put(key, value);
     149                            if (key.length() > 0 && value.length() > 0) {
     150                                clone.put(key, value);
     151                            }
    148152                        }
    149153                        refreshTables();
     
    175179                {
    176180                    sel = new ArrayList<OsmPrimitive>(cnt);
    177                     for (int i : memberTable.getSelectedRows())
     181                    for (int i : memberTable.getSelectedRows()) {
    178182                        sel.add((OsmPrimitive)memberTable.getValueAt(i, 1));
     183                    }
    179184                }
    180185                else
     
    182187                    cnt = memberTable.getRowCount();
    183188                    sel = new ArrayList<OsmPrimitive>(cnt);
    184                     for (int i = 0; i < cnt; ++i)
     189                    for (int i = 0; i < cnt; ++i) {
    185190                        sel.add((OsmPrimitive)memberTable.getValueAt(i, 1));
     191                    }
    186192                }
    187193                Main.ds.setSelected(sel);
     
    239245
    240246        buttonPanel.add(createButton(marktr("Add Selected"),"addselected",
    241         tr("Add all currently selected objects as members"), KeyEvent.VK_D, new ActionListener() {
     247                tr("Add all currently selected objects as members"), KeyEvent.VK_D, new ActionListener() {
    242248            public void actionPerformed(ActionEvent e) {
    243249                addSelected();
     
    246252
    247253        buttonPanel.add(createButton(marktr("Remove Selected"),"removeselected",
    248         tr("Remove all currently selected objects from relation"), KeyEvent.VK_S, new ActionListener() {
     254                tr("Remove all currently selected objects from relation"), KeyEvent.VK_S, new ActionListener() {
    249255            public void actionPerformed(ActionEvent e) {
    250256                deleteSelected();
     
    259265
    260266        buttonPanel.add(createButton(marktr("Remove"),"remove",
    261         tr("Remove the member in the current table row from this relation"), KeyEvent.VK_M, new ActionListener() {
     267                tr("Remove the member in the current table row from this relation"), KeyEvent.VK_M, new ActionListener() {
    262268            public void actionPerformed(ActionEvent e) {
    263269                int[] rows = memberTable.getSelectedRows();
     
    273279
    274280        buttonPanel.add(createButton(marktr("Download Members"),"downloadincomplete",
    275         tr("Download all incomplete ways and nodes in relation"), KeyEvent.VK_K, new ActionListener() {
     281                tr("Download all incomplete ways and nodes in relation"), KeyEvent.VK_K, new ActionListener() {
    276282            public void actionPerformed(ActionEvent e) {
    277283                downloadRelationMembers();
     
    303309    protected void buttonAction(ActionEvent evt) {
    304310        String a = evt.getActionCommand();
    305         if(applyChangesText.equals(a))
     311        if(applyChangesText.equals(a)) {
    306312            applyChanges();
     313        }
    307314
    308315        setVisible(false);
     
    348355                    break;
    349356                } else if (m.member instanceof Relation) {
    350                     if (m.member == this.relation)
     357                    if (m.member == this.relation) {
    351358                        break;
     359                    }
    352360                    m = ((Relation)m.member).lastMember();
    353361                    depth++;
     
    366374                            break;
    367375                        } else if (m.member instanceof Relation) {
    368                             if (m.member == this.relation)
     376                            if (m.member == this.relation) {
    369377                                break;
     378                            }
    370379                            m = ((Relation)(m.member)).firstMember();
    371380                            depth++;
     
    374383                        }
    375384                    }
    376                     if (way2 != null)
     385                    if (way2 != null) {
    377386                        break;
     387                    }
    378388                }
    379389            }
     
    404414                }
    405415
    406                 // end of section to determine linkedness. 
     416                // end of section to determine linkedness.
    407417
    408418                memberData.addRow(new Object[]{em.role, em.member, linked ? tr("yes") : tr("no")});
     
    416426    private SideButton createButton(String name, String iconName, String tooltip, int mnemonic, ActionListener actionListener) {
    417427        return
    418             new SideButton(name, iconName, "relationEditor",
     428        new SideButton(name, iconName, "relationEditor",
    419429                tooltip,
    420430                Shortcut.registerShortcut("relationeditor:"+iconName,
     
    422432                        mnemonic,
    423433                        Shortcut.GROUP_MNEMONIC),
    424                 actionListener
    425             );
     434                        actionListener
     435        );
    426436    }
    427437
     
    483493        for (RelationMember rm : clone.members) {
    484494            if (rm != null) {
    485                 while (m[i] != null) i++;
     495                while (m[i] != null) {
     496                    i++;
     497                }
    486498                m[i++] = rm;
    487499            }
     
    509521        }
    510522        if (download) {
    511             OsmServerObjectReader reader = new OsmServerObjectReader(clone.id, OsmServerObjectReader.TYPE_REL, true);
     523            OsmServerObjectReader reader = new OsmServerObjectReader(clone.id, OsmPrimitiveType.RELATION, true);
    512524            try {
    513525                DataSet dataSet = reader.parseOsm();
     
    515527                    final MergeVisitor visitor = new MergeVisitor(Main.main
    516528                            .editLayer().data, dataSet);
    517                     for (final OsmPrimitive osm : dataSet.allPrimitives())
     529                    for (final OsmPrimitive osm : dataSet.allPrimitives()) {
    518530                        osm.visit(visitor);
     531                    }
    519532                    visitor.fixReferences();
    520533
    521534                    // copy the merged layer's data source info
    522                     for (DataSource src : dataSet.dataSources)
     535                    for (DataSource src : dataSet.dataSources) {
    523536                        Main.main.editLayer().data.dataSources.add(src);
     537                    }
    524538                    Main.main.editLayer().fireDataChange();
    525539
     
    530544                    JOptionPane.showMessageDialog(Main.parent,
    531545                            tr("There were conflicts during import."));
    532                     if (!dlg.isVisible())
     546                    if (!dlg.isVisible()) {
    533547                        dlg.action
    534                                 .actionPerformed(new ActionEvent(this, 0, ""));
    535                 }
    536 
    537             } catch (SAXException e) {
     548                        .actionPerformed(new ActionEvent(this, 0, ""));
     549                    }
     550                }
     551            } catch(OsmTransferException e) {
    538552                e.printStackTrace();
    539                 JOptionPane.showMessageDialog(this,tr("Error parsing server response.")+": "+e.getMessage(),
    540                 tr("Error"), JOptionPane.ERROR_MESSAGE);
    541             } catch (IOException e) {
    542                 e.printStackTrace();
    543                 JOptionPane.showMessageDialog(this,tr("Cannot connect to server.")+": "+e.getMessage(),
    544                 tr("Error"), JOptionPane.ERROR_MESSAGE);
     553                if (e.getCause() != null) {
     554                    if (e.getCause() instanceof SAXException) {
     555                        JOptionPane.showMessageDialog(this,tr("Error parsing server response.")+": "+e.getCause().getMessage(),
     556                                tr("Error"), JOptionPane.ERROR_MESSAGE);
     557                    } else if(e.getCause() instanceof IOException) {
     558                        JOptionPane.showMessageDialog(this,tr("Cannot connect to server.")+": "+e.getCause().getMessage(),
     559                                tr("Error"), JOptionPane.ERROR_MESSAGE);
     560                    }
     561                } else {
     562                    JOptionPane.showMessageDialog(this,tr("Error when communicating with server.")+": "+e.getMessage(),
     563                            tr("Error"), JOptionPane.ERROR_MESSAGE);
     564                }
    545565            }
    546566        }
Note: See TracChangeset for help on using the changeset viewer.