Changeset 2494 in josm for trunk/src


Ignore:
Timestamp:
2009-11-21T20:13:15+01:00 (12 years ago)
Author:
Gubaer
Message:

Code related to #3999. Uncommented for the time being.

Location:
trunk/src/org/openstreetmap/josm/gui/dialogs/relation
Files:
2 edited

Legend:

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

    r2484 r2494  
    7676import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionCache;
    7777import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
    78 import org.openstreetmap.josm.io.OsmApi;
     78import org.openstreetmap.josm.io.OsmServerBackreferenceReader;
    7979import org.openstreetmap.josm.io.OsmServerObjectReader;
    8080import org.openstreetmap.josm.io.OsmTransferException;
     
    8787 *
    8888 */
    89 public class GenericRelationEditor extends RelationEditor {
     89public class GenericRelationEditor extends RelationEditor  {
    9090
    9191    static private final Logger logger = Logger.getLogger(GenericRelationEditor.class.getName());
     
    13811381        private OsmDataLayer curLayer;
    13821382        private MemberTableModel memberTableModel;
     1383        private OsmServerObjectReader objectReader;
     1384        private OsmServerBackreferenceReader parentReader;
    13831385
    13841386        public DownloadTask(List<Relation> relations, OsmDataLayer curLayer, MemberTableModel memberTableModel, Dialog parent) {
     
    13991401        protected void cancel() {
    14001402            cancelled = true;
    1401             OsmApi.getOsmApi().cancel();
     1403            synchronized(this) {
     1404                if (objectReader != null) {
     1405                    objectReader.cancel();
     1406                } else if (parentReader != null) {
     1407                    parentReader.cancel();
     1408                }
     1409            }
    14021410        }
    14031411
     
    14191427            try {
    14201428                for (Relation relation : relations) {
    1421                     progressMonitor.indeterminateSubTask("");
    1422                     OsmServerObjectReader reader = new OsmServerObjectReader(relation.getId(), OsmPrimitiveType.RELATION,
    1423                             true);
    1424                     final DataSet dataSet = reader.parseOsm(progressMonitor
     1429                    // download the relation
     1430                    //
     1431                    progressMonitor.indeterminateSubTask(tr("Downloading relation ''{0}''", relation.getDisplayName(DefaultNameFormatter.getInstance())));
     1432                    synchronized(this) {
     1433                        if (cancelled) return;
     1434                        objectReader = new OsmServerObjectReader(relation.getId(), OsmPrimitiveType.RELATION, true /* full download */);
     1435                    }
     1436                    final DataSet dataSet = objectReader.parseOsm(progressMonitor
    14251437                            .createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
    14261438                    if (dataSet == null)
    14271439                        return;
     1440                    synchronized (this) {
     1441                        if (cancelled) return;
     1442                        objectReader = null;
     1443                    }
     1444
     1445                    // download referring objects of the downloaded member objects
     1446                    //
     1447                    // asked for in #3999, but uncommented for the time being. Could be used
     1448                    // later, perhaps if user explicity requests so (for instance by checking
     1449                    // a checkbox)
     1450                    //                    for (OsmPrimitive p: relation.getMemberPrimitives()) {
     1451                    //                        synchronized(this) {
     1452                    //                            if (cancelled) return;
     1453                    //                            parentReader = new OsmServerBackreferenceReader(p);
     1454                    //                        }
     1455                    //                        DataSet parents = parentReader.parseOsm(progressMonitor.createSubTaskMonitor(1, false));
     1456                    //                        synchronized(this) {
     1457                    //                            if (cancelled) return;
     1458                    //                            parentReader = null;
     1459                    //                        }
     1460                    //                        DataSetMerger merger = new DataSetMerger(dataSet, parents);
     1461                    //                        merger.merge();
     1462                    //                    }
     1463                    //                    if (cancelled) return;
     1464
    14281465                    // has to run on the EDT because mergeFrom may trigger events
    14291466                    // which update the UI
     
    14381475                            }
    14391476                    );
    1440 
    14411477                }
    14421478            } catch (Exception e) {
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java

    r2421 r2494  
    11// License: GPL. For details, see LICENSE file.
    22package org.openstreetmap.josm.gui.dialogs.relation;
     3
     4import static org.openstreetmap.josm.gui.dialogs.relation.WayConnectionType.Direction.BACKWARD;
     5import static org.openstreetmap.josm.gui.dialogs.relation.WayConnectionType.Direction.FORWARD;
     6import static org.openstreetmap.josm.gui.dialogs.relation.WayConnectionType.Direction.NONE;
     7import static org.openstreetmap.josm.gui.dialogs.relation.WayConnectionType.Direction.ROUNDABOUT_LEFT;
     8import static org.openstreetmap.josm.gui.dialogs.relation.WayConnectionType.Direction.ROUNDABOUT_RIGHT;
    39
    410import java.util.ArrayList;
     
    1117import java.util.List;
    1218import java.util.Set;
    13 import java.util.Vector;
    1419import java.util.concurrent.CopyOnWriteArrayList;
    1520
    1621import javax.swing.DefaultListSelectionModel;
    1722import javax.swing.ListSelectionModel;
     23import javax.swing.event.TableModelEvent;
     24import javax.swing.event.TableModelListener;
    1825import javax.swing.table.AbstractTableModel;
    19 import javax.swing.event.TableModelListener;
    20 import javax.swing.event.TableModelEvent;
    2126
    2227import org.openstreetmap.josm.Main;
     
    3035import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    3136
    32 import static org.openstreetmap.josm.gui.dialogs.relation.WayConnectionType.Direction.*;
    33 
    3437public class MemberTableModel extends AbstractTableModel implements TableModelListener {
    3538
     
    3942    private ArrayList<RelationMember> members;
    4043    private ArrayList<WayConnectionType> connectionType = null;
    41    
     44
    4245    private DefaultListSelectionModel listSelectionModel;
    4346    private CopyOnWriteArrayList<IMemberModelListener> listeners;
     
    98101    public Object getValueAt(int rowIndex, int columnIndex) {
    99102        switch (columnIndex) {
    100             case 0:
    101                 return members.get(rowIndex).getRole();
    102             case 1:
    103                 return members.get(rowIndex).getMember();
    104             case 2:
    105                 return wayConnection(rowIndex);
     103        case 0:
     104            return members.get(rowIndex).getRole();
     105        case 1:
     106            return members.get(rowIndex).getMember();
     107        case 2:
     108            return wayConnection(rowIndex);
    106109        }
    107110        // should not happen
     
    582585        // current group of members that are linked among each other
    583586        // Two successive members are always linked i.e. have a common node.
    584         // 
     587        //
    585588        LinkedList<Integer> group;
    586589
     
    619622
    620623        if (members.size() != newMembers.size()) throw new AssertionError();
    621        
     624
    622625        members.clear();
    623626        members.addAll(newMembers);
     
    638641     **/
    639642    private Direction determineDirection(int ref_i,Direction ref_direction, int k) {
    640         if (ref_i < 0 || k < 0 || ref_i >= members.size() || k >= members.size()) {
     643        if (ref_i < 0 || k < 0 || ref_i >= members.size() || k >= members.size())
    641644            return NONE;
    642         }
    643         if (ref_direction == NONE) {
     645        if (ref_direction == NONE)
    644646            return NONE;
    645         }
    646        
     647
    647648        RelationMember m_ref = members.get(ref_i);
    648649        RelationMember m = members.get(k);
     
    656657            way = m.getWay();
    657658        }
    658        
    659         if (way_ref == null || way == null) {
     659
     660        if (way_ref == null || way == null)
    660661            return NONE;
    661         }
    662662
    663663        /** the list of nodes the way k can dock to */
     
    665665
    666666        switch (ref_direction) {
    667             case FORWARD:
    668                 refNodes.add(way_ref.lastNode());
    669                 break;
    670             case BACKWARD:
    671                 refNodes.add(way_ref.firstNode());
    672                 break;
    673             case ROUNDABOUT_LEFT:
    674             case ROUNDABOUT_RIGHT:
    675                 refNodes = way_ref.getNodes();
    676                 break;
    677         }
    678                    
    679         if (refNodes == null) {
     667        case FORWARD:
     668            refNodes.add(way_ref.lastNode());
     669            break;
     670        case BACKWARD:
     671            refNodes.add(way_ref.firstNode());
     672            break;
     673        case ROUNDABOUT_LEFT:
     674        case ROUNDABOUT_RIGHT:
     675            refNodes = way_ref.getNodes();
     676            break;
     677        }
     678
     679        if (refNodes == null)
    680680            return NONE;
    681         }
    682681
    683682        for (Node n : refNodes) {
    684             if (n == null) continue;
     683            if (n == null) {
     684                continue;
     685            }
    685686            if (roundaboutType(k) != NONE) {
    686687                for (Node nn : way.getNodes()) {
    687                     if (n == nn) {
     688                    if (n == nn)
    688689                        return roundaboutType(k);
    689                     }
    690690                }
    691691            } else {
    692                 if (n == way.firstNode()) {
     692                if (n == way.firstNode())
    693693                    return FORWARD;
    694                 }
    695                 if (n == way.lastNode()) {
     694                if (n == way.lastNode())
    696695                    return BACKWARD;
    697                 }
    698696            }
    699697        }
     
    749747        ArrayList<WayConnectionType> con = new ArrayList<WayConnectionType>();
    750748
    751         for (int i=0; i<members.size(); ++i) con.add(null);
     749        for (int i=0; i<members.size(); ++i) {
     750            con.add(null);
     751        }
    752752
    753753        int firstGroupIdx=0;
     
    796796                    }
    797797                }
    798                    
     798
    799799            }
    800800
     
    817817        }
    818818        connectionType = con;
    819 //        for (int i=0; i<con.size(); ++i) {
    820 //            System.err.println(con.get(i));
    821 //        }
     819        //        for (int i=0; i<con.size(); ++i) {
     820        //            System.err.println(con.get(i));
     821        //        }
    822822    }
    823823}
Note: See TracChangeset for help on using the changeset viewer.