001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.gui.conflict.pair.nodes;
003
004 import javax.swing.JScrollPane;
005
006 import org.openstreetmap.josm.data.conflict.Conflict;
007 import org.openstreetmap.josm.data.osm.Node;
008 import org.openstreetmap.josm.data.osm.OsmPrimitive;
009 import org.openstreetmap.josm.data.osm.Way;
010 import org.openstreetmap.josm.gui.conflict.pair.IConflictResolver;
011 import org.openstreetmap.josm.gui.conflict.pair.ListMerger;
012
013 /**
014 * A UI component for resolving conflicts in the node lists of two {@link Way}s.
015 *
016 */
017 public class NodeListMerger extends ListMerger<Node> implements IConflictResolver {
018 public NodeListMerger() {
019 super(new NodeListMergeModel());
020 }
021
022 @Override
023 protected JScrollPane buildMyElementsTable() {
024 myEntriesTable = new NodeListTable(
025 "table.mynodes",
026 model,
027 model.getMyTableModel(),
028 model.getMySelectionModel()
029 );
030 return embeddInScrollPane(myEntriesTable);
031 }
032
033 @Override
034 protected JScrollPane buildMergedElementsTable() {
035 mergedEntriesTable = new NodeListTable(
036 "table.mergednodes",
037 model,
038 model.getMergedTableModel(),
039 model.getMergedSelectionModel()
040 );
041 return embeddInScrollPane(mergedEntriesTable);
042 }
043
044 @Override
045 protected JScrollPane buildTheirElementsTable() {
046 theirEntriesTable = new NodeListTable(
047 "table.theirnodes",
048 model,
049 model.getTheirTableModel(),
050 model.getTheirSelectionModel()
051 );
052 return embeddInScrollPane(theirEntriesTable);
053 }
054
055 public void populate(Conflict<? extends OsmPrimitive> conflict) {
056 Way myWay = (Way)conflict.getMy();
057 Way theirWay = (Way)conflict.getTheir();
058 ((NodeListMergeModel)model).populate(myWay, theirWay, conflict.getMergedMap());
059 myEntriesTable.setLayer(findLayerFor(myWay));
060 theirEntriesTable.setLayer(findLayerFor(theirWay));
061 }
062
063 public void deletePrimitive(boolean deleted) {
064 if (deleted) {
065 model.setFrozen(true);
066 model.clearMerged();
067 } else {
068 model.setFrozen(false);
069 }
070 }
071 }