org.eclipse.ui.texteditor.ResourceAction.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.ui.texteditor.ResourceAction.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 2005 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.ui.texteditor;

import java.util.MissingResourceException;
import java.util.ResourceBundle;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.resource.ImageDescriptor;

import org.eclipse.ui.PlatformUI;

/**
 * An action which configures its label, image, tooltip, and description from
 * a resource bundle using known keys.
 * <p>
 * Clients may subclass this abstract class to define new kinds of actions. As
 * with <code>Action</code>, subclasses must implement the
 * <code>IAction.run</code> method to carry out the action's semantics.
 * </p>
 */
public abstract class ResourceAction extends Action {

    /**
     * Retrieves and returns the value with the given key from the given resource
     * bundle, or returns the given default value if there is no such resource.
     * Convenience method for dealing gracefully with missing resources.
     *
     * @param bundle the resource bundle
     * @param key the resource key
     * @param defaultValue the default value, or <code>null</code>
     * @return the resource value, or the given default value (which may be
     *   <code>null</code>)
     */
    protected static String getString(ResourceBundle bundle, String key, String defaultValue) {

        String value = defaultValue;
        try {
            value = bundle.getString(key);
        } catch (MissingResourceException x) {
        }

        return value;
    }

    /**
     * Creates a new action that configures itself from the given resource
     * bundle.
     * <p>
     * The following keys, prepended by the given option prefix,
     * are used for retrieving resources from the given bundle:
     * <ul>
     *   <li><code>"label"</code> - <code>setText</code></li>
     *   <li><code>"tooltip"</code> - <code>setToolTipText</code></li>
     *   <li><code>"image"</code> - <code>setImageDescriptor</code></li>
     *   <li><code>"description"</code> - <code>setDescription</code></li>
     * </ul>
     * </p>
     *
     * @param bundle the resource bundle
     * @param prefix a prefix to be prepended to the various resource keys, or
     *   <code>null</code> if none
      * @param   style one of <code>IAction.AS_PUSH_BUTTON</code>, <code>IAction.AS_CHECK_BOX</code>,
      *         and <code>IAction.AS_RADIO_BUTTON</code>.
     *
     * @see ResourceAction#ResourceAction(ResourceBundle, String)
     * @see org.eclipse.jface.action.IAction#AS_CHECK_BOX
     * @see org.eclipse.jface.action.IAction#AS_DROP_DOWN_MENU
     * @see org.eclipse.jface.action.IAction#AS_PUSH_BUTTON
     * @see org.eclipse.jface.action.IAction#AS_RADIO_BUTTON
     * @since 2.1
     */
    public ResourceAction(ResourceBundle bundle, String prefix, int style) {
        super(null, style);
        initialize(bundle, prefix);
    }

    /**
     * Creates a new action that configures itself from the given resource
     * bundle.
     * <p>
     * The following keys, prepended by the given option prefix,
     * are used for retrieving resources from the given bundle:
     * <ul>
     *   <li><code>"label"</code> - <code>setText</code></li>
     *   <li><code>"tooltip"</code> - <code>setToolTipText</code></li>
     *   <li><code>"image"</code> - <code>setImageDescriptor</code></li>
     *   <li><code>"description"</code> - <code>setDescription</code></li>
     * </ul>
     * </p>
     *
     * @param bundle the resource bundle
     * @param prefix a prefix to be prepended to the various resource keys, or
     *   <code>null</code> if none
     */
    public ResourceAction(ResourceBundle bundle, String prefix) {
        super();
        initialize(bundle, prefix);
    }

    /**
     * Sets the action's help context id.
     *
     * @param contextId the help context id
     */
    public final void setHelpContextId(String contextId) {
        PlatformUI.getWorkbench().getHelpSystem().setHelp(this, contextId);
    }

    /**
     * Initializes this action using the given bundle and prefix.
     *
     * @param bundle the resource bundle
     * @param prefix a prefix to be prepended to the various resource keys, or <code>null</code> if none
     * @since 2.1
     */
    protected void initialize(ResourceBundle bundle, String prefix) {
        String labelKey = "label"; //$NON-NLS-1$
        String tooltipKey = "tooltip"; //$NON-NLS-1$
        String imageKey = "image"; //$NON-NLS-1$
        String descriptionKey = "description"; //$NON-NLS-1$

        if (prefix != null && prefix.length() > 0) {
            labelKey = prefix + labelKey;
            tooltipKey = prefix + tooltipKey;
            imageKey = prefix + imageKey;
            descriptionKey = prefix + descriptionKey;
        }

        setText(getString(bundle, labelKey, labelKey));
        setToolTipText(getString(bundle, tooltipKey, null));
        setDescription(getString(bundle, descriptionKey, null));

        String file = getString(bundle, imageKey, null);
        if (file != null && file.trim().length() > 0)
            setImageDescriptor(ImageDescriptor.createFromFile(getClass(), file));
    }
}