/****************************************************************************** * 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); } }