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}