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