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}