Changeset 2484 in josm for trunk/src/org/openstreetmap/josm


Ignore:
Timestamp:
2009-11-19T18:09:12+01:00 (15 years ago)
Author:
Gubaer
Message:

fixed #3925: Download relation members takes a long time to return

Location:
trunk/src/org/openstreetmap/josm
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java

    r2471 r2484  
    3939     */
    4040    private Set<Long> childrenToMerge;
    41 
    4241    private Set<OsmPrimitive> deletedObjectsToUnlink;
    4342
  • trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java

    r2474 r2484  
    602602        }
    603603
     604        public void addRelations(Collection<? extends OsmPrimitive> addedPrimitives) {
     605            if (addedPrimitives == null || addedPrimitives.isEmpty()) return;
     606            boolean added = false;
     607            for (OsmPrimitive p: addedPrimitives) {
     608                if (! (p instanceof Relation)) {
     609                    continue;
     610                }
     611                if (relations.contains(p)) {
     612                    continue;
     613                }
     614                relations.add((Relation)p);
     615                added = true;
     616            }
     617            if (added) {
     618                fireIntervalAdded(this, 0, getSize());
     619            }
     620        }
     621
    604622        public Object getElementAt(int index) {
    605623            if (relations == null) return null;
     
    681699
    682700    public void primtivesAdded(Collection<? extends OsmPrimitive> added) {
    683         updateList();
     701        model.addRelations(added);
    684702    }
    685703
     
    689707
    690708    public void relationMembersChanged(Relation r) {
    691         updateList();
     709        // trigger a repaint of the relation list
     710        displaylist.repaint();
    692711    }
    693712
    694713    public void tagsChanged(OsmPrimitive prim) {
    695714        if (prim instanceof Relation) {
    696             updateList();
     715            // trigger a repaint of the relation list
     716            displaylist.repaint();
    697717        }
    698718    }
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java

    r2434 r2484  
    5656import org.openstreetmap.josm.data.conflict.Conflict;
    5757import org.openstreetmap.josm.data.osm.DataSet;
    58 import org.openstreetmap.josm.data.osm.DataSetMerger;
    59 import org.openstreetmap.josm.data.osm.DataSource;
    6058import org.openstreetmap.josm.data.osm.OsmPrimitive;
    6159import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     
    13791377    public static class DownloadTask extends PleaseWaitRunnable {
    13801378        private boolean cancelled;
    1381         private int conflictsCount;
    13821379        private Exception lastException;
    13831380        private List<Relation> relations;
     
    13861383
    13871384        public DownloadTask(List<Relation> relations, OsmDataLayer curLayer, MemberTableModel memberTableModel, Dialog parent) {
    1388             super(tr("Download relation members"), new PleaseWaitProgressMonitor(parent), false /*
    1389              * don't
    1390              * ignore
    1391              * exception
    1392              */);
     1385            super(tr("Download relation members"), new PleaseWaitProgressMonitor(parent), false /* don't ignore exception */);
    13931386            this.relations = relations;
    13941387            this.curLayer = curLayer;
     
    13971390
    13981391        public DownloadTask(List<Relation> relations, OsmDataLayer curLayer, MemberTableModel memberTableModel) {
    1399             super(tr("Download relation members"), new PleaseWaitProgressMonitor(), false /*
    1400              * don't
    1401              * ignore
    1402              * exception
    1403              */);
     1392            super(tr("Download relation members"), new PleaseWaitProgressMonitor(), false /* don't ignore exception */);
    14041393            this.relations = relations;
    14051394            this.curLayer = curLayer;
     
    14241413                ExceptionDialogUtil.explainException(lastException);
    14251414            }
    1426 
    1427             if (conflictsCount > 0) {
    1428                 JOptionPane.showMessageDialog(
    1429                         Main.parent,
    1430                         tr("There were {0} conflicts during import.", conflictsCount),
    1431                         tr("Warning"),
    1432                         JOptionPane.WARNING_MESSAGE
    1433                 );
    1434             }
    14351415        }
    14361416
     
    14381418        protected void realRun() throws SAXException, IOException, OsmTransferException {
    14391419            try {
    1440                 boolean changed = false;
    14411420                for (Relation relation : relations) {
    14421421                    progressMonitor.indeterminateSubTask("");
    14431422                    OsmServerObjectReader reader = new OsmServerObjectReader(relation.getId(), OsmPrimitiveType.RELATION,
    14441423                            true);
    1445                     DataSet dataSet = reader.parseOsm(progressMonitor
     1424                    final DataSet dataSet = reader.parseOsm(progressMonitor
    14461425                            .createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
    1447                     if (dataSet != null) {
    1448                         changed = true;
    1449                         final DataSetMerger visitor = new DataSetMerger(curLayer.data, dataSet);
    1450                         visitor.merge();
    1451 
    1452                         // copy the merged layer's data source info
    1453                         for (DataSource src : dataSet.dataSources) {
    1454                             curLayer.data.dataSources.add(src);
    1455                         }
    1456                         if (!visitor.getConflicts().isEmpty()) {
    1457                             curLayer.getConflicts().add(visitor.getConflicts());
    1458                             conflictsCount = visitor.getConflicts().size();
    1459                         }
    1460                     }
    1461                 }
    1462                 // FIXME: this is necessary because there are dialogs listening
    1463                 // for DataChangeEvents which manipulate Swing components on this
    1464                 // thread.
    1465                 //
    1466                 if (changed) {
    1467                     SwingUtilities.invokeLater(new Runnable() {
    1468                         public void run() {
    1469                             curLayer.fireDataChange();
    1470                             curLayer.onPostDownloadFromServer();
    1471                         }
    1472                     });
     1426                    if (dataSet == null)
     1427                        return;
     1428                    // has to run on the EDT because mergeFrom may trigger events
     1429                    // which update the UI
     1430                    //
     1431                    SwingUtilities.invokeAndWait(
     1432                            new Runnable() {
     1433                                public void run() {
     1434                                    curLayer.mergeFrom(dataSet);
     1435                                    curLayer.fireDataChange();
     1436                                    curLayer.onPostDownloadFromServer();
     1437                                }
     1438                            }
     1439                    );
     1440
    14731441                }
    14741442            } catch (Exception e) {
  • trunk/src/org/openstreetmap/josm/io/OsmServerObjectReader.java

    r2070 r2484  
    3434        InputStream in = null;
    3535        try {
    36             progressMonitor.subTask(tr("Downloading OSM data..."));
     36            progressMonitor.indeterminateSubTask(tr("Downloading OSM data..."));
    3737            StringBuffer sb = new StringBuffer();
    3838            sb.append(type.getAPIName());
Note: See TracChangeset for help on using the changeset viewer.