com.aptana.ui.preferences.TroubleshootingPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for com.aptana.ui.preferences.TroubleshootingPreferencePage.java

Source

/**
 * Aptana Studio
 * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
 * Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions).
 * Please see the license.html included with this distribution for details.
 * Any modifications to this file must keep this entire header intact.
 */
package com.aptana.ui.preferences;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.preferences.ScopedPreferenceStore;

import com.aptana.core.CorePlugin;
import com.aptana.core.ICorePreferenceConstants;
import com.aptana.core.logging.IdeLog.StatusLevel;
import com.aptana.core.util.ArrayUtil;
import com.aptana.core.util.EclipseUtil;
import com.aptana.core.util.StringUtil;
import com.aptana.ui.util.SWTUtils;

/**
 * The form for configuring the general top-level preferences for this plugin
 */

public class TroubleshootingPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

    private Combo debugCombo;
    private BooleanFieldEditor toggleComponents;
    private CheckboxTableViewer categoryViewer;

    /**
     * GeneralPreferencePage
     */
    public TroubleshootingPreferencePage() {
        super(GRID);

        IPreferenceStore preferenceStore = new ScopedPreferenceStore(EclipseUtil.instanceScope(),
                CorePlugin.getDefault().getBundle().getSymbolicName());
        setPreferenceStore(preferenceStore);
        setDescription(Messages.TroubleshootingPreferencePage_TroubleshootingPageHeader);
    }

    /**
     * Creates the field editors. Field editors are abstractions of the common GUI blocks needed to manipulate various
     * types of preferences. Each field editor knows how to save and restore itself.
     */
    public void createFieldEditors() {
        Composite appearanceComposite = getFieldEditorParent();

        Composite group = AptanaPreferencePage.createGroup(appearanceComposite,
                Messages.TroubleshootingPreferencePage_LBL_DebuggingOutputLevel);

        Composite debugComp = new Composite(group, SWT.NONE);
        debugComp.setLayout(GridLayoutFactory.fillDefaults().margins(0, 5).numColumns(2).create());
        debugComp.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());

        Label levelLabel = new Label(debugComp, SWT.NONE);
        levelLabel.setText(Messages.TroubleshootingPreferencePage_LBL_DebugLevel);
        levelLabel.setLayoutData(GridDataFactory.swtDefaults().create());

        debugCombo = new Combo(debugComp, SWT.READ_ONLY);
        debugCombo.setItems(new String[] { Messages.TroubleshootingPreferencePage_Level_Errors,
                Messages.TroubleshootingPreferencePage_Level_Warnings,
                Messages.TroubleshootingPreferencePage_Level_All });
        debugCombo.select(StatusLevel
                .valueOf(getPreferenceStore().getString(ICorePreferenceConstants.PREF_DEBUG_LEVEL)).ordinal());

        final Label currentValue = new Label(debugComp, SWT.LEFT);
        currentValue.setText(getValueLabel(debugCombo.getSelectionIndex()));
        currentValue.setFont(SWTUtils.getDefaultSmallFont());
        currentValue.setLayoutData(GridDataFactory.fillDefaults().span(2, 0).grab(true, true).create());

        debugCombo.addSelectionListener(new SelectionListener() {

            public void widgetDefaultSelected(SelectionEvent e) {
                widgetSelected(e);
            }

            public void widgetSelected(SelectionEvent e) {
                currentValue.setText(getValueLabel(debugCombo.getSelectionIndex()));
            }
        });

        BooleanFieldEditor showHiddenProcesses = new BooleanFieldEditor(
                ICorePreferenceConstants.PREF_SHOW_SYSTEM_JOBS,
                Messages.TroubleshootingPreferencePage_ShowHiddenProcesses, SWT.DEFAULT, group);
        addField(showHiddenProcesses);

        toggleComponents = new BooleanFieldEditor(ICorePreferenceConstants.PREF_ENABLE_COMPONENT_DEBUGGING,
                Messages.TroubleshootingPreferencePage_DebugSpecificComponents, SWT.DEFAULT, group);
        addField(toggleComponents);

        Composite composite = new Composite(group, SWT.NONE);
        composite.setLayout(GridLayoutFactory.fillDefaults().margins(0, 5).create());
        composite.setLayoutData(GridDataFactory.fillDefaults().span(2, 0).hint(400, 300).grab(true, true).create());

        Table table = new Table(composite, SWT.CHECK | SWT.BORDER | SWT.SINGLE);
        table.setFont(group.getFont());

        categoryViewer = new CheckboxTableViewer(table);
        categoryViewer.getControl().setFont(group.getFont());
        categoryViewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
        categoryViewer.setContentProvider(ArrayContentProvider.getInstance());
        categoryViewer.setLabelProvider(new ColumnLabelProvider());
        categoryViewer.setComparator(new ViewerComparator());

        Map<String, String> tItems = EclipseUtil.getTraceableItems();
        Set<String> keys = tItems.keySet();
        String[] items = keys.toArray(new String[keys.size()]);
        Arrays.sort(items);

        categoryViewer.setInput(items);
        categoryViewer.setCheckedElements(EclipseUtil.getCurrentDebuggableComponents());
        categoryViewer.getTable().setEnabled(false);

        if (getPreferenceStore().getBoolean(ICorePreferenceConstants.PREF_ENABLE_COMPONENT_DEBUGGING)) {
            categoryViewer.getTable().setEnabled(true);
        }

        Composite buttonComp = new Composite(composite, SWT.NONE);
        buttonComp.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).create());
        buttonComp.setLayoutData(GridDataFactory.fillDefaults().create());

        Button selectAllButton = new Button(buttonComp, SWT.BORDER);
        selectAllButton.setText(Messages.TroubleshootingPreferencePage_SelectAll);
        selectAllButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                categoryViewer.setAllChecked(true);
            }
        });

        Button selectNoneButton = new Button(buttonComp, SWT.BORDER);
        selectNoneButton.setText(Messages.TroubleshootingPreferencePage_SelectNone);
        selectNoneButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                categoryViewer.setAllChecked(false);
            }
        });
    }

    /**
     * The field editor preference page implementation of this <code>IPreferencePage</code> (and
     * <code>IPropertyChangeListener</code>) method intercepts <code>IS_VALID</code> events but passes other events on
     * to its superclass.
     */
    public void propertyChange(PropertyChangeEvent event) {
        if (event.getSource().equals(toggleComponents)) {
            categoryViewer.getTable().setEnabled(Boolean.parseBoolean(event.getNewValue().toString()));
        }
    }

    /**
     * Returns the logging value names
     * 
     * @param selection
     * @return
     */
    private String getValueLabel(int selection) {
        switch (selection) {
        case 0:
            return Messages.TroubleshootingPreferencePage_LBL_OnlyError;
        case 1:
            return Messages.TroubleshootingPreferencePage_LBL_ErrorsAndImportant;
        case 2:
            return Messages.TroubleshootingPreferencePage_LBL_AllDebuggingInformation;
        default:
            return Messages.TroubleshootingPreferencePage_LBL_UnknownLoggingLevel;
        }
    }

    /**
     * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
     */
    public void init(IWorkbench workbench) {
    }

    /**
     * @see org.eclipse.jface.preference.FieldEditorPreferencePage#performDefaults()
     */
    protected void performDefaults() {
        debugCombo.select(getPreferenceStore().getDefaultInt(ICorePreferenceConstants.PREF_DEBUG_LEVEL));
        categoryViewer.setCheckedElements(ArrayUtil.NO_OBJECTS);
        super.performDefaults();
    }

    /**
     * Method declared on IPreferencePage. Subclasses should override
     * 
     * @return boolean
     */
    public boolean performOk() {
        IPreferenceStore store = getPreferenceStore();
        store.setValue(ICorePreferenceConstants.PREF_DEBUG_LEVEL,
                StatusLevel.values()[debugCombo.getSelectionIndex()].toString());

        String[] currentOptions = EclipseUtil.getCurrentDebuggableComponents();
        EclipseUtil.setBundleDebugOptions(currentOptions, false);

        List<String> al = new ArrayList<String>();
        Object[] elements = categoryViewer.getCheckedElements();
        for (Object i : elements) {
            al.add((String) i);
        }

        String[] newOptions = al.toArray(new String[al.size()]);

        store.setValue(ICorePreferenceConstants.PREF_DEBUG_COMPONENT_LIST, StringUtil.join(",", newOptions)); //$NON-NLS-1$

        EclipseUtil.setBundleDebugOptions(currentOptions, true);
        EclipseUtil.setPlatformDebugging(toggleComponents.getBooleanValue());

        return super.performOk();
    }
}