001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.conflict.pair.relation;
003
004import javax.swing.JScrollPane;
005
006import org.openstreetmap.josm.data.conflict.Conflict;
007import org.openstreetmap.josm.data.osm.OsmPrimitive;
008import org.openstreetmap.josm.data.osm.Relation;
009import org.openstreetmap.josm.data.osm.RelationMember;
010import org.openstreetmap.josm.gui.conflict.pair.ListMerger;
011
012/**
013 * A UI component for resolving conflicts in the member lists of two {@link Relation}s.
014 * @since 1631
015 */
016public class RelationMemberMerger extends ListMerger<RelationMember> {
017
018    /**
019     * Constructs a new {@code RelationMemberMerger}.
020     */
021    public RelationMemberMerger() {
022        super(new RelationMemberListMergeModel());
023    }
024
025    @Override
026    protected JScrollPane buildMyElementsTable() {
027        myEntriesTable  = new RelationMemberTable(
028                "table.mymembers",
029                model,
030                model.getMyTableModel(),
031                model.getMySelectionModel()
032        );
033        return embeddInScrollPane(myEntriesTable);
034    }
035
036    @Override
037    protected JScrollPane buildMergedElementsTable() {
038        mergedEntriesTable  = new RelationMemberTable(
039                "table.mergedmembers",
040                model,
041                model.getMergedTableModel(),
042                model.getMergedSelectionModel()
043        );
044        mergedEntriesTable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
045        return embeddInScrollPane(mergedEntriesTable);
046    }
047
048    @Override
049    protected JScrollPane buildTheirElementsTable() {
050        theirEntriesTable  = new RelationMemberTable(
051                "table.theirmembers",
052                model,
053                model.getTheirTableModel(),
054                model.getTheirSelectionModel()
055        );
056        return embeddInScrollPane(theirEntriesTable);
057    }
058
059    @Override
060    public void populate(Conflict<? extends OsmPrimitive> conflict) {
061        Relation myRel = (Relation) conflict.getMy();
062        Relation theirRel = (Relation) conflict.getTheir();
063        ((RelationMemberListMergeModel) model).populate(myRel, theirRel, conflict.getMergedMap());
064        myEntriesTable.setLayer(findLayerFor(myRel));
065        theirEntriesTable.setLayer(findLayerFor(theirRel));
066    }
067
068    @Override
069    public void deletePrimitive(boolean deleted) {
070        if (deleted) {
071            model.clearMerged();
072            model.setFrozen(true);
073        } else {
074            model.setFrozen(false);
075        }
076    }
077}