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.IConflictResolver;
011import org.openstreetmap.josm.gui.conflict.pair.ListMerger;
012
013/**
014 * A UI component for resolving conflicts in the member lists of two {@link Relation}
015 */
016public class RelationMemberMerger extends ListMerger<RelationMember> implements IConflictResolver {
017    @Override
018    protected JScrollPane buildMyElementsTable() {
019        myEntriesTable  = new RelationMemberTable(
020                "table.mymembers",
021                model,
022                model.getMyTableModel(),
023                model.getMySelectionModel()
024        );
025        return embeddInScrollPane(myEntriesTable);
026    }
027
028    @Override
029    protected JScrollPane buildMergedElementsTable() {
030        mergedEntriesTable  = new RelationMemberTable(
031                "table.mergedmembers",
032                model,
033                model.getMergedTableModel(),
034                model.getMergedSelectionModel()
035        );
036        mergedEntriesTable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
037        return embeddInScrollPane(mergedEntriesTable);
038    }
039
040    @Override
041    protected JScrollPane buildTheirElementsTable() {
042        theirEntriesTable  = new RelationMemberTable(
043                "table.theirmembers",
044                model,
045                model.getTheirTableModel(),
046                model.getTheirSelectionModel()
047        );
048        return embeddInScrollPane(theirEntriesTable);
049    }
050
051    @Override
052    public void populate(Conflict<? extends OsmPrimitive> conflict) {
053        Relation myRel = (Relation)conflict.getMy();
054        Relation theirRel = (Relation)conflict.getTheir();
055        ((RelationMemberListMergeModel)model).populate(myRel, theirRel, conflict.getMergedMap());
056        myEntriesTable.setLayer(findLayerFor(myRel));
057        theirEntriesTable.setLayer(findLayerFor(theirRel));
058    }
059
060    public RelationMemberMerger() {
061        super(new RelationMemberListMergeModel());
062    }
063
064    @Override
065    public void deletePrimitive(boolean deleted) {
066        if (deleted) {
067            model.clearMerged();
068            model.setFrozen(true);
069        } else {
070            model.setFrozen(false);
071        }
072    }
073}