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

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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) {
Note: See TracChangeset for help on using the changeset viewer.