org.eclipse.dltk.internal.debug.ui.handlers.AbstractOpenPreferencePageStatusHandler.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.dltk.internal.debug.ui.handlers.AbstractOpenPreferencePageStatusHandler.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 2007 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
 *
     
 *******************************************************************************/

package org.eclipse.dltk.internal.debug.ui.handlers;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.debug.core.IStatusHandler;
import org.eclipse.dltk.debug.ui.DLTKDebugUIPlugin;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.ui.dialogs.PreferencesUtil;

/**
 * 
 * @author kds
 * 
 */
public abstract class AbstractOpenPreferencePageStatusHandler implements IStatusHandler {
    protected void showPreferencePage(String pageId) {
        final PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(null, pageId, null, null);
        dialog.open();
    }

    public Object handleStatus(final IStatus status, Object source) throws CoreException {

        final String pageId = getPreferencePageId(source);

        final boolean[] result = new boolean[1];

        DLTKDebugUIPlugin.getStandardDisplay().syncExec(new Runnable() {
            public void run() {
                final String title = getTitle();
                if (pageId == null) {
                    MessageDialog.openError(DLTKDebugUIPlugin.getActiveWorkbenchShell(), title,
                            status.getMessage());
                } else {
                    final String message = status.getMessage() + " " //$NON-NLS-1$
                            + getQuestion();
                    result[0] = (MessageDialog.openQuestion(DLTKDebugUIPlugin.getActiveWorkbenchShell(), title,
                            message));
                    if (result[0]) {
                        showPreferencePage(pageId);
                    }
                }
            }
        });

        return Boolean.valueOf(result[0]);
    }

    /**
     * returns the dialog's title, or <code>null</code> if there is no title
     */
    protected abstract String getTitle();

    /**
     * returns the dialog message
     */
    protected abstract String getQuestion();

    /**
     * returns the id of the preference page that will be openned if the user
     * clicks the 'OK' button on the message dialog box.
     */
    protected abstract String getPreferencePageId(Object source);
}