Ignore:
Timestamp:
2009-10-25T15:13:08+01:00 (17 years ago)
Author:
Gubaer
Message:

applied #3663: patch by singularita: Function to automatically download all missing relations members in all relations
Slightly updated and completed with context sensitive help, see also help

File:
1 edited

Legend:

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

    r2301 r2317  
    12031203            if (!isEnabled())
    12041204                return;
    1205             Main.worker.submit(new DownloadTask(GenericRelationEditor.this));
     1205            Main.worker.submit(new DownloadTask(
     1206                    Collections.singletonList(getRelation()),
     1207                    getLayer(),
     1208                    memberTableModel,
     1209                    GenericRelationEditor.this)
     1210            );
    12061211        }
    12071212
     
    13691374     *
    13701375     */
    1371     class DownloadTask extends PleaseWaitRunnable {
     1376    public static class DownloadTask extends PleaseWaitRunnable {
    13721377        private boolean cancelled;
    13731378        private int conflictsCount;
    13741379        private Exception lastException;
    1375 
    1376         public DownloadTask(Dialog parent) {
     1380        private List<Relation> relations;
     1381        private OsmDataLayer curLayer;
     1382        private MemberTableModel memberTableModel;
     1383
     1384        public DownloadTask(List<Relation> relations, OsmDataLayer curLayer, MemberTableModel memberTableModel, Dialog parent) {
    13771385            super(tr("Download relation members"), new PleaseWaitProgressMonitor(parent), false /*
    13781386             * don't
     
    13801388             * exception
    13811389             */);
     1390            this.relations = relations;
     1391            this.curLayer = curLayer;
     1392            this.memberTableModel = memberTableModel;
     1393        }
     1394
     1395        public DownloadTask(List<Relation> relations, OsmDataLayer curLayer, MemberTableModel memberTableModel) {
     1396            super(tr("Download relation members"), new PleaseWaitProgressMonitor(), false /*
     1397             * don't
     1398             * ignore
     1399             * exception
     1400             */);
     1401            this.relations = relations;
     1402            this.curLayer = curLayer;
     1403            this.memberTableModel = memberTableModel;
    13821404        }
    13831405
     
    13901412        @Override
    13911413        protected void finish() {
     1414            Main.map.repaint();
    13921415            if (cancelled)
    13931416                return;
    1394             memberTableModel.updateMemberReferences(getLayer().data);
     1417            if (memberTableModel != null) {
     1418                memberTableModel.fireTableDataChanged();
     1419            }
    13951420            if (lastException != null) {
    13961421                ExceptionDialogUtil.explainException(lastException);
     
    14101435        protected void realRun() throws SAXException, IOException, OsmTransferException {
    14111436            try {
    1412                 progressMonitor.indeterminateSubTask("");
    1413                 OsmServerObjectReader reader = new OsmServerObjectReader(getRelation().getId(), OsmPrimitiveType.RELATION,
    1414                         true);
    1415                 DataSet dataSet = reader.parseOsm(progressMonitor
    1416                         .createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
    1417                 if (dataSet != null) {
    1418                     final MergeVisitor visitor = new MergeVisitor(getLayer().data, dataSet);
    1419                     visitor.merge();
    1420 
    1421                     // copy the merged layer's data source info
    1422                     for (DataSource src : dataSet.dataSources) {
    1423                         getLayer().data.dataSources.add(src);
     1437                boolean changed = false;
     1438                for (Relation relation : relations) {
     1439                    progressMonitor.indeterminateSubTask("");
     1440                    OsmServerObjectReader reader = new OsmServerObjectReader(relation.getId(), OsmPrimitiveType.RELATION,
     1441                            true);
     1442                    DataSet dataSet = reader.parseOsm(progressMonitor
     1443                            .createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
     1444                    if (dataSet != null) {
     1445                        changed = true;
     1446                        final MergeVisitor visitor = new MergeVisitor(curLayer.data, dataSet);
     1447                        visitor.merge();
     1448
     1449                        // copy the merged layer's data source info
     1450                        for (DataSource src : dataSet.dataSources) {
     1451                            curLayer.data.dataSources.add(src);
     1452                        }
     1453                        if (!visitor.getConflicts().isEmpty()) {
     1454                            curLayer.getConflicts().add(visitor.getConflicts());
     1455                            conflictsCount = visitor.getConflicts().size();
     1456                        }
    14241457                    }
    1425                     // FIXME: this is necessary because there are dialogs listening
    1426                     // for DataChangeEvents which manipulate Swing components on this
    1427                     // thread.
    1428                     //
     1458                }
     1459                // FIXME: this is necessary because there are dialogs listening
     1460                // for DataChangeEvents which manipulate Swing components on this
     1461                // thread.
     1462                //
     1463                if (changed) {
    14291464                    SwingUtilities.invokeLater(new Runnable() {
    14301465                        public void run() {
    1431                             getLayer().fireDataChange();
     1466                            curLayer.fireDataChange();
    14321467                        }
    14331468                    });
    1434                     if (!visitor.getConflicts().isEmpty()) {
    1435                         getLayer().getConflicts().add(visitor.getConflicts());
    1436                         conflictsCount = visitor.getConflicts().size();
    1437                     }
    14381469                }
    14391470            } catch (Exception e) {
Note: See TracChangeset for help on using the changeset viewer.