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    }