Changeset 2484 in josm


Ignore:
Timestamp:
Nov 19, 2009 6:09:12 PM (4 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.