org.jboss.tools.common.text.xml.xpl.ToggleOccurencesMarkUpAction.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.common.text.xml.xpl.ToggleOccurencesMarkUpAction.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
 *     Exadel, Inc.
 *     Red Hat, Inc.
 *******************************************************************************/
package org.jboss.tools.common.text.xml.xpl;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ResourceBundle;

import org.eclipse.core.runtime.FileLocator;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.ui.texteditor.TextEditorAction;
import org.eclipse.wst.sse.ui.StructuredTextEditor;
import org.jboss.tools.common.text.xml.IOccurrencePreferenceProvider;
import org.jboss.tools.common.text.xml.XmlEditorPlugin;
import org.jboss.tools.jst.jsp.preferences.xpl.Messages;
import org.jboss.tools.jst.jsp.preferences.xpl.OccurrencePreferenceConstants;
import org.jboss.tools.jst.jsp.preferences.xpl.PreferenceKeyGenerator;

/**
 * A toolbar action which toggles the presentation model of the
 * connected text editor. The editor shows either the highlight range
 * only or always the whole document.
 */
public class ToggleOccurencesMarkUpAction extends TextEditorAction implements IPropertyChangeListener {
    IPreferenceStore fPreferenceStore;
    IOccurrencePreferenceProvider fOccurrencePreferenceProvider;
    String fEditorId;
    String fKey;

    /**
     * Constructs and updates the action.
     */
    public ToggleOccurencesMarkUpAction() {
        super(Messages.getResourceBundle(), "ToggleOccurencesMarkUpAction.", null); //$NON-NLS-1$
    }

    /**
     * Retargets this action to the given editor.
     *
     * @param editor the new editor, or <code>null</code> if none
     */
    public void setEditor(ITextEditor editor) {
        super.setEditor(editor);
        if (editor == null) {
            dispose();
            return;
        }
        fOccurrencePreferenceProvider = null;
        StructuredTextEditor sse = getStructuredTextEditor(getTextEditor());
        if (sse instanceof IOccurrencePreferenceProvider) {
            fOccurrencePreferenceProvider = (IOccurrencePreferenceProvider) sse;
            if (fOccurrencePreferenceProvider != null
                    && fOccurrencePreferenceProvider.getOccurrencePreferenceProvider() != null) {
                fEditorId = fOccurrencePreferenceProvider.getOccurrencePreferenceProvider().getEditorId();
                fKey = PreferenceKeyGenerator.generateKey(OccurrencePreferenceConstants.EDITOR_MARK_OCCURRENCES,
                        fEditorId);
            }
        }
        update();
    }

    private StructuredTextEditor getStructuredTextEditor(ITextEditor editor) {
        if (editor == null)
            return null;
        if (editor instanceof StructuredTextEditor)
            return (StructuredTextEditor) editor;
        return (StructuredTextEditor) editor.getAdapter(StructuredTextEditor.class);
    }

    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 disabledImageKey = "disabledImage"; //$NON-NLS-1$
        String descriptionKey = "description"; //$NON-NLS-1$

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

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

        String relPath = getString(bundle, imageKey, null);
        ImageDescriptor id = ImageDescriptor.createFromFile(ToggleOccurencesMarkUpAction.class, relPath); //$NON-NLS-1$
        if (id != null) {
            setImageDescriptor(id);
        }

        relPath = getString(bundle, disabledImageKey, null);
        id = ImageDescriptor.createFromFile(ToggleOccurencesMarkUpAction.class, relPath); //$NON-NLS-1$
        if (id != null) {
            setDisabledImageDescriptor(id);
        }
    }

    public int getStyle() {
        return AS_RADIO_BUTTON;
    }

    public void run() {
        boolean markOccurences = false;
        // determine if action should be enabled or not
        markOccurences = fPreferenceStore.getBoolean(fKey);
        fPreferenceStore.setValue(fKey, !markOccurences);
    }

    static int listenerCount = 0;

    /**
     * Enables and initialzies the action, or disables.
     * @see org.eclipse.ui.texteditor.TextEditorAction#update()
     */
    public void update() {
        IPreferenceStore newStore = null;
        super.update();
        newStore = ((fOccurrencePreferenceProvider == null
                || fOccurrencePreferenceProvider.getOccurrencePreferenceProvider() == null) ? null
                        : fOccurrencePreferenceProvider.getOccurrencePreferenceProvider().getPreferenceStore());
        if (newStore != fPreferenceStore) {
            if (fPreferenceStore != null) {
                fPreferenceStore.removePropertyChangeListener(this);
            }
            fPreferenceStore = newStore;
            if (fPreferenceStore != null) {
                fPreferenceStore.addPropertyChangeListener(this);
            }
        }

        boolean markOccurences = false;
        boolean enabled = false;
        // determine if action should be enabled or not
        if (fPreferenceStore != null) {
            markOccurences = fPreferenceStore.getBoolean(fKey);
        }
        enabled = (getTextEditor() != null);

        setChecked(markOccurences);
        setEnabled(enabled);
    }

    /*
     * @see IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
     */
    public void propertyChange(PropertyChangeEvent event) {
        update();
    }

    private static URL makeIconFileURL(String prefix, String name) throws MalformedURLException {
        URL base = null;
        try {
            base = FileLocator.resolve(XmlEditorPlugin.getDefault().getBundle().getEntry("/")); //$NON-NLS-1$
        } catch (IOException e) {
            XmlEditorPlugin.getPluginLog().logError(e);
            return null;
        }
        StringBuffer buffer = new StringBuffer(prefix);
        buffer.append('/');
        buffer.append(name);
        return new URL(base, buffer.toString());
    }

    public void dispose() {
        if (fPreferenceStore != null) {
            fPreferenceStore.removePropertyChangeListener(this);
            fPreferenceStore = null;
        }
        fOccurrencePreferenceProvider = null;
    }

}