source: josm/trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMerger.java@ 5297

Last change on this file since 5297 was 5297, checked in by Don-vip, 12 years ago

fix #4493, fix #7750: conflict dialog, nodes and members tab: allow selection via double-click, allow zoom via contexual menu, plus various fix in EDT violations

  • Property svn:eol-style set to native
File size: 3.0 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.conflict.pair.nodes;
3
4import java.util.List;
5
6import javax.swing.JScrollPane;
7
8import org.openstreetmap.josm.Main;
9import org.openstreetmap.josm.data.conflict.Conflict;
10import org.openstreetmap.josm.data.osm.Node;
11import org.openstreetmap.josm.data.osm.OsmPrimitive;
12import org.openstreetmap.josm.data.osm.Way;
13import org.openstreetmap.josm.gui.conflict.pair.IConflictResolver;
14import org.openstreetmap.josm.gui.conflict.pair.ListMerger;
15import org.openstreetmap.josm.gui.layer.OsmDataLayer;
16
17/**
18 * A UI component for resolving conflicts in the node lists of two {@link Way}s.
19 *
20 */
21public class NodeListMerger extends ListMerger<Node> implements IConflictResolver {
22 public NodeListMerger() {
23 super(new NodeListMergeModel());
24 }
25
26 @Override
27 protected JScrollPane buildMyElementsTable() {
28 myEntriesTable = new NodeListTable(
29 "table.mynodes",
30 model.getMyTableModel(),
31 model.getMySelectionModel()
32 );
33 return embeddInScrollPane(myEntriesTable);
34 }
35
36 @Override
37 protected JScrollPane buildMergedElementsTable() {
38 mergedEntriesTable = new NodeListTable(
39 "table.mergednodes",
40 model.getMergedTableModel(),
41 model.getMergedSelectionModel()
42 );
43 return embeddInScrollPane(mergedEntriesTable);
44 }
45
46 @Override
47 protected JScrollPane buildTheirElementsTable() {
48 theirEntriesTable = new NodeListTable(
49 "table.theirnodes",
50 model.getTheirTableModel(),
51 model.getTheirSelectionModel()
52 );
53 return embeddInScrollPane(theirEntriesTable);
54 }
55
56 public void populate(Conflict<? extends OsmPrimitive> conflict) {
57 Way myWay = (Way)conflict.getMy();
58 Way theirWay = (Way)conflict.getTheir();
59 ((NodeListMergeModel)model).populate(myWay, theirWay);
60 myEntriesTable.setLayer(findLayerFor(myWay));
61 theirEntriesTable.setLayer(findLayerFor(theirWay));
62 }
63
64 protected OsmDataLayer findLayerFor(Way w) {
65 List<OsmDataLayer> layers = Main.map.mapView.getLayersOfType(OsmDataLayer.class);
66 // Find layer with same dataset
67 for (OsmDataLayer layer : layers) {
68 if (layer.data == w.getDataSet()) {
69 return layer;
70 }
71 }
72 // Conflict after merging layers: a dataset could be no more in any layer, try to find another layer with same primitive
73 for (OsmDataLayer layer : layers) {
74 for (Way way : layer.data.getWays()) {
75 if (way.getPrimitiveId().equals(w.getPrimitiveId())) {
76 return layer;
77 }
78 }
79 }
80 return null;
81 }
82
83 public void deletePrimitive(boolean deleted) {
84 if (deleted) {
85 model.setFrozen(true);
86 model.clearMerged();
87 } else {
88 model.setFrozen(false);
89 }
90 }
91}
Note: See TracBrowser for help on using the repository browser.