blob: 56aefcba86bfa44561bdaf98313f47a60ef5c927 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2010 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.gef.ui.actions;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.action.IAction;
import org.eclipse.gef.Disposable;
/**
* A container for editor actions. You must register the actions before they
* will be available to the editor.
*/
public class ActionRegistry {
/*
* A hashmap that contains the actions.
*/
private Map map = new HashMap(15);
/**
* Calls dispose on all actions which implement the {@link Disposable}
* interface so they can perform their own clean-up.
*/
public void dispose() {
Iterator actions = getActions();
while (actions.hasNext()) {
IAction action = (IAction) actions.next();
if (action instanceof Disposable)
((Disposable) action).dispose();
}
}
/**
* Returns <code>null</code> or the <code>IAction</code> with the given key.
*
* @param key
* the ID of the action being requested
* @return <code>null</code> or the action with the corresponding ID
*/
public IAction getAction(Object key) {
return (IAction) map.get(key);
}
/**
* Returns an {@link Iterator} over all the actions.
*
* @return an iterator over all actions
*/
public Iterator getActions() {
return map.values().iterator();
}
/**
* Register an action with this registry. The action must have an ID.
*
* @param action
* the action being registered.
*/
public void registerAction(IAction action) {
Assert.isNotNull(action.getId(), "action must have an ID in " + //$NON-NLS-1$
getClass().getName() + " :registerAction(IAction)");//$NON-NLS-1$
registerAction(action.getId(), action);
}
/**
* Register an action with this registry using the given id.
*/
private void registerAction(String id, IAction action) {
map.put(id, action);
}
/**
* Removes an action from this registry. The action must have an ID.
*
* @param action
* the action to remove
*/
public void removeAction(IAction action) {
map.remove(action.getId());
}
}