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}