Ignore:
Timestamp:
2011-08-27T20:01:19+02:00 (13 years 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.