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.IConflictResolver; 011import 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 */ 017public 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 @Override 056 public void populate(Conflict<? extends OsmPrimitive> conflict) { 057 Way myWay = (Way)conflict.getMy(); 058 Way theirWay = (Way)conflict.getTheir(); 059 ((NodeListMergeModel)model).populate(myWay, theirWay, conflict.getMergedMap()); 060 myEntriesTable.setLayer(findLayerFor(myWay)); 061 theirEntriesTable.setLayer(findLayerFor(theirWay)); 062 } 063 064 @Override 065 public void deletePrimitive(boolean deleted) { 066 if (deleted) { 067 model.setFrozen(true); 068 model.clearMerged(); 069 } else { 070 model.setFrozen(false); 071 } 072 } 073}