001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.dialogs.relation;
003
004import java.util.Arrays;
005import java.util.Collection;
006
007import javax.swing.Action;
008
009import org.openstreetmap.josm.actions.relation.DeleteRelationsAction;
010import org.openstreetmap.josm.actions.relation.DownloadMembersAction;
011import org.openstreetmap.josm.actions.relation.DownloadSelectedIncompleteMembersAction;
012import org.openstreetmap.josm.actions.relation.EditRelationAction;
013import org.openstreetmap.josm.actions.relation.SelectInRelationListAction;
014import org.openstreetmap.josm.actions.relation.SelectMembersAction;
015import org.openstreetmap.josm.actions.relation.SelectRelationAction;
016import org.openstreetmap.josm.gui.PopupMenuHandler;
017
018/**
019 * Utility class to setup a {@link PopupMenuHandler} with a consistent set of relation actions.
020 * @since 14685
021 */
022public final class RelationPopupMenus {
023    private RelationPopupMenus() {
024        // Hide default constructor for utils classes
025    }
026
027    /**
028     * Adds relation actions to the given {@link PopupMenuHandler}
029     * @param menu handler to add actions to
030     * @param excludeActions 0 or more action classes to exclude, i.e., not add
031     * @return {@code menu}
032     */
033    @SafeVarargs
034    public static PopupMenuHandler setupHandler(PopupMenuHandler menu, Class<? extends Action>... excludeActions) {
035        final Collection<Class<? extends Action>> exclude = Arrays.asList(excludeActions);
036        if (!exclude.contains(EditRelationAction.class)) {
037            menu.addAction(new EditRelationAction());
038        }
039
040        if (!exclude.contains(DeleteRelationsAction.class)) {
041            menu.addAction(new DeleteRelationsAction());
042            menu.addSeparator();
043        }
044
045        if (!exclude.contains(SelectInRelationListAction.class)) {
046            menu.addAction(new SelectInRelationListAction());
047        }
048
049        menu.addAction(new SelectRelationAction(false));
050        menu.addAction(new SelectRelationAction(true));
051        menu.addAction(new SelectMembersAction(false));
052        menu.addAction(new SelectMembersAction(true));
053        menu.addSeparator();
054
055        menu.addAction(new DownloadMembersAction());
056        menu.addAction(new DownloadSelectedIncompleteMembersAction());
057
058        return menu;
059    }
060}