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.DownloadRelationAction;
012import org.openstreetmap.josm.actions.relation.DownloadSelectedIncompleteMembersAction;
013import org.openstreetmap.josm.actions.relation.DuplicateRelationAction;
014import org.openstreetmap.josm.actions.relation.EditRelationAction;
015import org.openstreetmap.josm.actions.relation.SelectInRelationListAction;
016import org.openstreetmap.josm.actions.relation.SelectMembersAction;
017import org.openstreetmap.josm.actions.relation.SelectRelationAction;
018import org.openstreetmap.josm.gui.PopupMenuHandler;
019
020/**
021 * Utility class to setup a {@link PopupMenuHandler} with a consistent set of relation actions.
022 * @since 14685
023 */
024public final class RelationPopupMenus {
025    private RelationPopupMenus() {
026        // Hide default constructor for utils classes
027    }
028
029    /**
030     * Adds relation actions to the given {@link PopupMenuHandler}
031     * @param menu handler to add actions to
032     * @param excludeActions 0 or more action classes to exclude, i.e., not add
033     * @return {@code menu}
034     */
035    @SafeVarargs
036    public static PopupMenuHandler setupHandler(PopupMenuHandler menu, Class<? extends Action>... excludeActions) {
037        final Collection<Class<? extends Action>> exclude = Arrays.asList(excludeActions);
038        if (!exclude.contains(EditRelationAction.class)) {
039            menu.addAction(new EditRelationAction());
040        }
041
042        if (!exclude.contains(DuplicateRelationAction.class)) {
043            menu.addAction(new DuplicateRelationAction());
044        }
045
046        if (!exclude.contains(DeleteRelationsAction.class)) {
047            menu.addAction(new DeleteRelationsAction());
048            menu.addSeparator();
049        }
050
051        if (!exclude.contains(SelectInRelationListAction.class)) {
052            menu.addAction(new SelectInRelationListAction());
053        }
054
055        menu.addAction(new SelectRelationAction(false));
056        menu.addAction(new SelectRelationAction(true));
057        menu.addAction(new SelectMembersAction(false));
058        menu.addAction(new SelectMembersAction(true));
059        menu.addSeparator();
060
061        menu.addAction(new DownloadRelationAction());
062        menu.addAction(new DownloadMembersAction());
063        menu.addAction(new DownloadSelectedIncompleteMembersAction());
064
065        return menu;
066    }
067}