blob: 79333f18160bf194839e663ca0a878455ac1293f [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2004 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.gmf.runtime.common.ui.util;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.ui.actions.ActionGroup;
/**
* Cache for holding the ActionGroups created for part descriptors. This allows
* them to be properly disposed of when nolonger needed.
*
* There are not a lot of ActionGroups so try to be most efficient when none
*
* @author hfraser
*/
public class ActionGroupCache {
// map between part descriptors and the actiongroups defined for it.
private Map partDescriptorActionGroups;
/**
* disposes all the action groups associated with the partDescriptor
* supplied.
*
* @param partDescriptor -
* part whose action groups are to be disposed.
*/
public void dispose(IWorkbenchPartDescriptor partDescriptor) {
if (partDescriptorActionGroups != null) {
Map actionGroupRegistry = (Map) partDescriptorActionGroups
.get(partDescriptor);
if (actionGroupRegistry != null) {
for (Iterator actionGroups = actionGroupRegistry.values()
.iterator(); actionGroups.hasNext();) {
ActionGroup actionGroup = (ActionGroup) actionGroups.next();
actionGroup.dispose();
}
}
partDescriptorActionGroups.remove(partDescriptor);
}
}
/**
* Identifies if there are any action groups associated with the part
* descriptor supplied.
*
* @param partDescriptor
* part to check if it has any action groups.
* @return true if there are action groups associated, false otherwise
*/
public boolean contains(IWorkbenchPartDescriptor partDescriptor) {
return (partDescriptorActionGroups != null && partDescriptorActionGroups
.containsKey(partDescriptor));
}
/**
* Get the cached ActionGroup for the part descriptor with the id supplied
*
* @param actionGroupId
* id of the action group to retrieve
* @param partDescriptor
* part whose action group is to be retrieved
* @return the ActionGroup previously created for the part, otherwise null
*/
public ActionGroup getActionGroup(String actionGroupId,
IWorkbenchPartDescriptor partDescriptor) {
ActionGroup actionGroup = null;
if (partDescriptorActionGroups != null) {
Map registry = (Map) partDescriptorActionGroups.get(partDescriptor);
if (registry != null) {
actionGroup = (ActionGroup) registry.get(actionGroupId);
}
}
return actionGroup;
}
/**
* Add the action group just created with the id to the cache for the part
* supplied
*
* @param actionGroupId
* id of the action group to be cached
* @param actionGroup
* action group to cache
* @param partDescriptor
* part group was created for
*/
public void addActionGroup(String actionGroupId, ActionGroup actionGroup,
IWorkbenchPartDescriptor partDescriptor) {
Map registry = null;
if (partDescriptorActionGroups == null) {
partDescriptorActionGroups = new HashMap();
} else {
registry = (Map) partDescriptorActionGroups.get(partDescriptor);
}
if (registry == null) {
registry = new HashMap(3);
partDescriptorActionGroups.put(partDescriptor, registry);
}
registry.put(actionGroupId, actionGroup);
}
}