001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.dialogs.properties;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.awt.event.ActionEvent;
007import java.util.Objects;
008import java.util.function.IntFunction;
009
010import javax.swing.JTable;
011
012import org.openstreetmap.josm.data.osm.IRelation;
013import org.openstreetmap.josm.gui.MainApplication;
014
015/**
016 * Launch browser with wiki help for selected membership.
017 * @since 15581
018 */
019public class HelpMembershipAction extends HelpAction {
020    private final JTable membershipTable;
021    private final IntFunction<IRelation<?>> memberValueSupplier;
022
023    /**
024     * Constructs a new {@code HelpAction}.
025     * @param membershipTable The membership table. Can be null
026     * @param memberValueSupplier Finds the parent relation from given row of membership table. Can be null
027     */
028    public HelpMembershipAction(JTable membershipTable, IntFunction<IRelation<?>> memberValueSupplier) {
029        this.membershipTable = Objects.requireNonNull(membershipTable);
030        this.memberValueSupplier = Objects.requireNonNull(memberValueSupplier);
031        putValue(NAME, tr("Go to OSM wiki for relation help"));
032    }
033
034    @Override
035    public void actionPerformed(ActionEvent e) {
036        if (membershipTable.getSelectedRowCount() == 1) {
037            int row = membershipTable.getSelectedRow();
038            final IRelation<?> relation = memberValueSupplier.apply(row);
039            MainApplication.worker.execute(() -> displayRelationHelp(relation));
040        } else {
041            super.actionPerformed(e);
042        }
043    }
044}