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