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

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

fix #4493, fix #7750 - conflict manager: select and zoom primitives with id:0

  • Property svn:eol-style set to native
File size: 3.1 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,
31 model.getMyTableModel(),
32 model.getMySelectionModel()
33 );
34 return embeddInScrollPane(myEntriesTable);
35 }
36
37 @Override
38 protected JScrollPane buildMergedElementsTable() {
39 mergedEntriesTable = new NodeListTable(
40 "table.mergednodes",
41 model,
42 model.getMergedTableModel(),
43 model.getMergedSelectionModel()
44 );
45 return embeddInScrollPane(mergedEntriesTable);
46 }
47
48 @Override
49 protected JScrollPane buildTheirElementsTable() {
50 theirEntriesTable = new NodeListTable(
51 "table.theirnodes",
52 model,
53 model.getTheirTableModel(),
54 model.getTheirSelectionModel()
55 );
56 return embeddInScrollPane(theirEntriesTable);
57 }
58
59 public void populate(Conflict<? extends OsmPrimitive> conflict) {
60 Way myWay = (Way)conflict.getMy();
61 Way theirWay = (Way)conflict.getTheir();
62 ((NodeListMergeModel)model).populate(myWay, theirWay, conflict.getMergedMap());
63 myEntriesTable.setLayer(findLayerFor(myWay));
64 theirEntriesTable.setLayer(findLayerFor(theirWay));
65 }
66
67 protected OsmDataLayer findLayerFor(Way w) {
68 List<OsmDataLayer> layers = Main.map.mapView.getLayersOfType(OsmDataLayer.class);
69 // Find layer with same dataset
70 for (OsmDataLayer layer : layers) {
71 if (layer.data == w.getDataSet()) {
72 return layer;
73 }
74 }
75 // Conflict after merging layers: a dataset could be no more in any layer, try to find another layer with same primitive
76 for (OsmDataLayer layer : layers) {
77 for (Way way : layer.data.getWays()) {
78 if (way.getPrimitiveId().equals(w.getPrimitiveId())) {
79 return layer;
80 }
81 }
82 }
83 return null;
84 }
85
86 public void deletePrimitive(boolean deleted) {
87 if (deleted) {
88 model.setFrozen(true);
89 model.clearMerged();
90 } else {
91 model.setFrozen(false);
92 }
93 }
94}
Note: See TracBrowser for help on using the repository browser.