Ignore:
Timestamp:
15.06.2009 20:22:46 (3 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.