/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.api.action;
import org.eclipse.che.api.promises.client.Promise;
import org.eclipse.che.ide.api.extension.SDK;
import org.eclipse.che.ide.util.Pair;
import java.util.List;
import java.util.Map;
/**
* A manager for actions. Used to register and unregister actions, also
* contains utility methods to easily fetch action by id and id by action.
*
* @author Evgen Vidolob
* @see Action
*/
@SDK(title = "ide.api.ui.action")
public interface ActionManager {
/**
* Returns action associated with the specified actionId.
*
* @param actionId
* Id of the registered action
* @return Action associated with the specified actionId, <code>null</code> if
* there is no actions associated with the specified actionId
* @throws java.lang.IllegalArgumentException
* if <code>actionId</code> is <code>null</code>
*/
Action getAction(String actionId);
/**
* Returns actionId associated with the specified action.
*
* @return id associated with the specified action, <code>null</code> if action
* is not registered
* @throws java.lang.IllegalArgumentException
* if <code>action</code> is <code>null</code>
*/
String getId(Action action);
/**
* Registers the specified action with the specified id. Note that IDE keymaps
* processing deals only with registered actions.
*
* @param actionId
* Id to associate with the action
* @param action
* Action to register
*/
void registerAction(String actionId, Action action);
/**
* Registers the specified action with the specified id.
*
* @param actionId
* Id to associate with the action
* @param action
* Action to register
* @param extensionId
* Identifier of the extension owning the action. Used to show the actions in the
* correct place under the "Plugins" node in the "Keymap" settings pane and similar dialogs.
*/
void registerAction(String actionId, Action action, String extensionId);
/**
* Unregisters the action with the specified actionId.
*
* @param actionId
* Id of the action to be unregistered
*/
void unregisterAction(String actionId);
/**
* Returns the list of all registered action IDs with the specified prefix.
*
* @return all action <code>id</code>s which have the specified prefix.
*/
String[] getActionIds(String idPrefix);
/**
* Checks if the specified action ID represents an action group and not an individual action.
* Calling this method does not cause instantiation of a specific action class corresponding
* to the action ID.
*
* @param actionId
* the ID to check.
* @return true if the ID represents an action group, false otherwise.
*/
boolean isGroup(String actionId);
/**
* Performs the given actions and returns {@link Promise}.
* The purpose of the returned {@link Promise} is to allow for interested
* parties to be notified when performing given {@code actions} has completed or rejected.
*
* @param actions
* sequence of actions to perform. May contains {@link PromisableAction}.
* @param breakOnFail
* if {@code true} - returned promise will be rejected when first {@link PromisableAction}
* (from the given {@code actions}) is rejected;<br>
* if {@code false} - all the given actions will try to perform in despite of rejecting any {@link PromisableAction}
* @return {@link Promise} that will be fulfilled immediately after all the given {@code actions} are performed.
* If any {@link PromisableAction} in the given {@code actions} is rejected the returned promise is rejected as well.
* @see PromisableAction
*/
Promise<Void> performActions(List<Pair<Action, ActionEvent>> actions, boolean breakOnFail);
/**
* Performs registered action by given id.
*
* Note that if either action is not registered or actionId is null then nothing will be done
*
* @param actionId
* the id of action that will be performed
* @param parameters
* the parameters which are used for the action invocation
*/
void performAction(String actionId, Map<String, String> parameters);
}