Changeset 653 in josm for trunk


Ignore:
Timestamp:
2008-06-13T00:44:36+02:00 (16 years ago)
Author:
framm
Message:
  • add a "download members" button to relation editor, patch by Christian Malolepszy <c.malolepszy@…>
Location:
trunk/src/org/openstreetmap/josm
Files:
1 added
1 edited

Legend:

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

    r627 r653  
    1313import java.beans.PropertyChangeEvent;
    1414import java.beans.PropertyChangeListener;
     15import java.io.IOException;
    1516import java.util.ArrayList;
    1617import java.util.Map.Entry;
    1718
    1819import javax.swing.JButton;
     20import javax.swing.JDialog;
    1921import javax.swing.JFrame;
    2022import javax.swing.JLabel;
     
    3234import org.openstreetmap.josm.command.AddCommand;
    3335import org.openstreetmap.josm.command.ChangeCommand;
     36import org.openstreetmap.josm.data.osm.DataSet;
     37import org.openstreetmap.josm.data.osm.DataSource;
    3438import org.openstreetmap.josm.data.osm.OsmPrimitive;
    3539import org.openstreetmap.josm.data.osm.Relation;
    3640import org.openstreetmap.josm.data.osm.RelationMember;
     41import org.openstreetmap.josm.data.osm.visitor.MergeVisitor;
    3742import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
     43import org.openstreetmap.josm.io.OsmServerObjectReader;
    3844import org.openstreetmap.josm.tools.GBC;
    3945import org.openstreetmap.josm.tools.ImageProvider;
     46import org.xml.sax.SAXException;
    4047
    4148/**
     
    238245                        }
    239246                }));
     247        buttonPanel.add(createButton(marktr("Download Members"),"down", tr("Download all incomplete ways and nodes in relation"), KeyEvent.VK_L, new ActionListener() {
     248            public void actionPerformed(ActionEvent e) {
     249                downloadRelationMembers();               
     250                refreshTables();
     251            }           
     252        }));
     253       
     254       
    240255                bothTables.add(buttonPanel, GBC.eop().fill(GBC.HORIZONTAL));
    241256
     
    285300                refreshTables();
    286301        }
     302    private void downloadRelationMembers()  {
     303
     304        boolean download = false;
     305        for (RelationMember member : clone.members) {
     306            if (member.member.incomplete) {
     307                download = true;
     308                break;
     309            }
     310        }
     311        if (download) {
     312            OsmServerObjectReader reader = new OsmServerObjectReader();
     313            try {
     314                DataSet dataSet = reader.parseOsm(clone.id,
     315                        OsmServerObjectReader.TYPE_REL, true);
     316                if (dataSet != null) {
     317                    final MergeVisitor visitor = new MergeVisitor(Main.main
     318                            .editLayer().data, dataSet);
     319                    for (final OsmPrimitive osm : dataSet.allPrimitives())
     320                        osm.visit(visitor);
     321                    visitor.fixReferences();
     322
     323                    // copy the merged layer's data source info
     324                    for (DataSource src : dataSet.dataSources)
     325                        Main.main.editLayer().data.dataSources.add(src);
     326                    Main.main.editLayer().fireDataChange();
     327
     328                    if (visitor.conflicts.isEmpty())
     329                        return;
     330                    final ConflictDialog dlg = Main.map.conflictDialog;
     331                    dlg.add(visitor.conflicts);
     332                    JOptionPane.showMessageDialog(Main.parent,
     333                            tr("There were conflicts during import."));
     334                    if (!dlg.isVisible())
     335                        dlg.action
     336                                .actionPerformed(new ActionEvent(this, 0, ""));
     337                }
     338
     339            } catch (SAXException e) {
     340                e.printStackTrace();
     341                JOptionPane.showMessageDialog(this,tr("Error parsing server response.")+": "+e.getMessage(), tr("Error"), JOptionPane.ERROR_MESSAGE);       
     342            } catch (IOException e) {
     343                e.printStackTrace();               
     344                JOptionPane.showMessageDialog(this,tr("Cannot connect to server.")+": "+e.getMessage(), tr("Error"), JOptionPane.ERROR_MESSAGE);
     345            }
     346        }
     347
     348    }
    287349}
Note: See TracChangeset for help on using the changeset viewer.