Changeset 4357 in josm


Ignore:
Timestamp:
Aug 27, 2011 8:01:19 PM (21 months ago)
Author:
bastiK
Message:

show conflicts in InspectPrimitiveDialog

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

Legend:

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

    r4310 r4357  
    1010import java.util.ArrayList; 
    1111import java.util.Collection; 
     12import java.util.Collections; 
    1213import java.util.List; 
    1314import java.util.Map.Entry; 
     
    2223 
    2324import org.openstreetmap.josm.Main; 
     25import org.openstreetmap.josm.data.conflict.Conflict; 
     26import org.openstreetmap.josm.data.conflict.ConflictCollection; 
    2427import org.openstreetmap.josm.data.osm.DataSet; 
    2528import org.openstreetmap.josm.data.osm.Node; 
    2629import org.openstreetmap.josm.data.osm.OsmPrimitive; 
     30import org.openstreetmap.josm.data.osm.OsmPrimitiveComparator; 
    2731import org.openstreetmap.josm.data.osm.Relation; 
    2832import org.openstreetmap.josm.data.osm.RelationMember; 
    2933import org.openstreetmap.josm.data.osm.User; 
    3034import org.openstreetmap.josm.data.osm.Way; 
     35import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor; 
    3136import org.openstreetmap.josm.gui.DefaultNameFormatter; 
    3237import org.openstreetmap.josm.gui.ExtendedDialog; 
    3338import org.openstreetmap.josm.gui.NavigatableComponent; 
     39import org.openstreetmap.josm.gui.layer.OsmDataLayer; 
    3440import org.openstreetmap.josm.gui.mappaint.Cascade; 
    3541import org.openstreetmap.josm.gui.mappaint.ElemStyle; 
     
    5359 * Might be useful for power users to give more detailed bug reports and 
    5460 * to better understand the JOSM data representation. 
    55  * 
    56  * TODO: show conflicts 
    5761 */ 
    5862public class InspectPrimitiveDialog extends ExtendedDialog { 
    59     protected Collection<OsmPrimitive> primitives; 
     63    protected List<OsmPrimitive> primitives; 
     64    protected OsmDataLayer layer; 
    6065    private JTextArea txtData; 
    6166    private JTextArea txtMappaint; 
    6267    boolean mappaintTabLoaded; 
    6368 
    64     public InspectPrimitiveDialog(Collection<OsmPrimitive> primitives) { 
     69    public InspectPrimitiveDialog(Collection<OsmPrimitive> primitives, OsmDataLayer layer) { 
    6570        super(Main.parent, tr("Advanced object info"), new String[] {tr("Close")}); 
    66         this.primitives = primitives; 
     71        this.primitives = new ArrayList<OsmPrimitive>(primitives); 
     72        this.layer = layer; 
    6773        setRememberWindowGeometry(getClass().getName() + ".geometry", 
    6874                WindowGeometry.centerInWindow(Main.parent, new Dimension(750, 550))); 
     
    103109    protected String buildDataText() { 
    104110        StringBuilder s = new StringBuilder(); 
    105         for (Node n : new SubclassFilteredCollection<OsmPrimitive, Node>(primitives, OsmPrimitive.nodePredicate)) { 
     111 
     112        Collections.sort(primitives, new OsmPrimitiveComparator()); 
     113 
     114        String sep = ""; 
     115        for (OsmPrimitive o : primitives) { 
     116            s.append(sep); 
     117            sep = "\n"; 
     118            addInfo(s, o); 
     119        } 
     120 
     121        return s.toString(); 
     122    } 
     123 
     124    protected void addInfo(StringBuilder s, OsmPrimitive o) { 
     125        o.visit(new AddPrimitiveInfoVisitor(s)); 
     126        addConflicts(s, o); 
     127    } 
     128 
     129    protected void addConflicts(StringBuilder s, OsmPrimitive o) { 
     130        ConflictCollection conflicts = layer.getConflicts(); 
     131        Conflict<?> c = conflicts.getConflictForMy(o); 
     132        if (c != null) { 
     133            s.append(tr("In conflict with:\n")); 
     134            c.getTheir().visit(new AddPrimitiveInfoVisitor(s)); 
     135        } 
     136    } 
     137 
     138    protected class AddPrimitiveInfoVisitor extends AbstractVisitor { 
     139        StringBuilder s; 
     140 
     141        public AddPrimitiveInfoVisitor(StringBuilder s) { 
     142            this.s = s; 
     143        } 
     144 
     145        public void visit(Node n) { 
    106146            s.append(tr("Node id={0}", n.getUniqueId())); 
    107147            if (!checkDataSet(n)) { 
    108148                s.append(tr(" not in data set")); 
    109                 continue; 
     149                return; 
    110150            } 
    111151            if (n.isIncomplete()) { 
     
    113153                addWayReferrer(s, n); 
    114154                addRelationReferrer(s, n); 
    115                 continue; 
     155                return; 
    116156            } 
    117157            s.append(tr(" lat={0} lon={1} (projected: x={2}, y={3}); ", 
     
    122162            addWayReferrer(s, n); 
    123163            addRelationReferrer(s, n); 
    124             s.append('\n'); 
    125         } 
    126  
    127         for (Way w : new SubclassFilteredCollection<OsmPrimitive, Way>(primitives, OsmPrimitive.wayPredicate)) { 
     164        } 
     165 
     166        public void visit(Way w) { 
    128167            s.append(tr("Way id={0}", w.getUniqueId())); 
    129168            if (!checkDataSet(w)) { 
    130169                s.append(tr(" not in data set")); 
    131                 continue; 
     170                return; 
    132171            } 
    133172            if (w.isIncomplete()) { 
    134173                s.append(tr(" incomplete\n")); 
    135174                addRelationReferrer(s, w); 
    136                 continue; 
     175                return; 
    137176            } 
    138177            s.append(trn(" {0} node; ", " {0} nodes; ", w.getNodes().size(), w.getNodes().size())); 
     
    145184                s.append(String.format("    %d\n", n.getUniqueId())); 
    146185            } 
    147             s.append('\n'); 
    148         } 
    149  
    150         for (Relation r : new SubclassFilteredCollection<OsmPrimitive, Relation>(primitives, OsmPrimitive.relationPredicate)) { 
     186        } 
     187 
     188        public void visit(Relation r) { 
    151189            s.append(tr("Relation id={0}",r.getUniqueId())); 
    152190            if (!checkDataSet(r)) { 
    153191                s.append(tr(" not in data set")); 
    154                 continue; 
     192                return; 
    155193            } 
    156194            if (r.isIncomplete()) { 
    157195                s.append(tr(" incomplete\n")); 
    158196                addRelationReferrer(s, r); 
    159                 continue; 
     197                return; 
    160198            } 
    161199            s.append(trn(" {0} member; ", " {0} members; ", r.getMembersCount(), r.getMembersCount())); 
     
    168206                s.append(String.format("    %s%d '%s'\n", m.getMember().getType().getAPIName().substring(0,1), m.getMember().getUniqueId(), m.getRole())); 
    169207            } 
    170             s.append('\n'); 
    171         } 
    172  
    173         return s.toString().trim(); 
     208        } 
    174209    } 
    175210 
  • trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java

    r4354 r4357  
    861861            Collection<OsmPrimitive> sel = model.getSelected(); 
    862862            if (sel.isEmpty()) return; 
    863             InspectPrimitiveDialog inspectDialog = new InspectPrimitiveDialog(sel); 
     863            InspectPrimitiveDialog inspectDialog = new InspectPrimitiveDialog(sel, Main.map.mapView.getEditLayer()); 
    864864            inspectDialog.showDialog(); 
    865865        } 
Note: See TracChangeset for help on using the changeset viewer.