com.nokia.carbide.search.system.internal.ui.SearchPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.carbide.search.system.internal.ui.SearchPreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 2008 IBM Corporation, Nokia 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 com.nokia.carbide.search.system.internal.ui;

import com.ibm.icu.text.Collator;

import java.util.Arrays;
import java.util.Comparator;

import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Composite;

import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.ColorFieldEditor;
import org.eclipse.jface.preference.ComboFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.jface.util.PropertyChangeEvent;

import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IPerspectiveRegistry;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;

import com.nokia.carbide.search.system.internal.core.text.TextSearchEngineRegistry;

/*
 * The page for setting the Search preferences.
 */
public class SearchPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

    public static final String PAGE_ID = "com.nokia.carbide.search.system.preferences.SearchPreferencePage"; //$NON-NLS-1$

    public static final String IGNORE_POTENTIAL_MATCHES = "com.nokia.carbide.search.system.potentialMatch.ignore"; //$NON-NLS-1$
    public static final String EMPHASIZE_POTENTIAL_MATCHES = "com.nokia.carbide.search.system.potentialMatch.emphasize"; //$NON-NLS-1$
    public static final String POTENTIAL_MATCH_FG_COLOR = "com.nokia.carbide.search.system.potentialMatch.fgColor"; //$NON-NLS-1$
    public static final String REUSE_EDITOR = "com.nokia.carbide.search.system.reuseEditor"; //$NON-NLS-1$
    public static final String DEFAULT_PERSPECTIVE = "com.nokia.carbide.search.system.defaultPerspective"; //$NON-NLS-1$
    private static final String NO_DEFAULT_PERSPECTIVE = "com.nokia.carbide.search.system.defaultPerspective.none"; //$NON-NLS-1$
    public static final String TEXT_SEARCH_ENGINE = "com.nokia.carbide.search.system.textSearchEngine"; //$NON-NLS-1$
    public static final String TEXT_SEARCH_QUERY_PROVIDER = "com.nokia.carbide.search.system.textSearchQueryProvider"; //$NON-NLS-1$
    public static final String LIMIT_HISTORY = "com.nokia.carbide.search.system.limitHistory"; //$NON-NLS-1$

    private ColorFieldEditor fColorEditor;
    private BooleanFieldEditor fEmphasizedCheckbox;
    private BooleanFieldEditor fIgnorePotentialMatchesCheckbox;

    private static class PerspectiveDescriptorComparator implements Comparator {
        /*
         * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
         */
        public int compare(Object o1, Object o2) {
            if (o1 instanceof IPerspectiveDescriptor && o2 instanceof IPerspectiveDescriptor) {
                String id1 = ((IPerspectiveDescriptor) o1).getLabel();
                String id2 = ((IPerspectiveDescriptor) o2).getLabel();
                return Collator.getInstance().compare(id1, id2);
            }
            return 0;
        }
    }

    public SearchPreferencePage() {
        super(GRID);
        setPreferenceStore(SearchPlugin.getDefault().getPreferenceStore());
    }

    public static void initDefaults(IPreferenceStore store) {
        RGB gray = new RGB(85, 85, 85);
        store.setDefault(EMPHASIZE_POTENTIAL_MATCHES, true);
        store.setDefault(IGNORE_POTENTIAL_MATCHES, false);
        PreferenceConverter.setDefault(store, POTENTIAL_MATCH_FG_COLOR, gray);
        store.setDefault(REUSE_EDITOR, true);
        store.setDefault(DEFAULT_PERSPECTIVE, NO_DEFAULT_PERSPECTIVE);
        store.setDefault(TEXT_SEARCH_ENGINE, ""); //default search engine is empty string //$NON-NLS-1$
        store.setDefault(TEXT_SEARCH_QUERY_PROVIDER, ""); // default query provider is empty string  //$NON-NLS-1$
        store.setDefault(LIMIT_HISTORY, 10);
    }

    public void createControl(Composite parent) {
        super.createControl(parent);
        PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),
                ISearchHelpContextIds.SEARCH_PREFERENCE_PAGE);
    }

    protected void createFieldEditors() {
        addField(new BooleanFieldEditor(REUSE_EDITOR, SearchMessages.SearchPreferencePage_reuseEditor,
                getFieldEditorParent()));

        fIgnorePotentialMatchesCheckbox = new BooleanFieldEditor(IGNORE_POTENTIAL_MATCHES,
                SearchMessages.SearchPreferencePage_ignorePotentialMatches, getFieldEditorParent());
        addField(fIgnorePotentialMatchesCheckbox);

        fEmphasizedCheckbox = new BooleanFieldEditor(EMPHASIZE_POTENTIAL_MATCHES,
                SearchMessages.SearchPreferencePage_emphasizePotentialMatches, getFieldEditorParent());
        addField(fEmphasizedCheckbox);

        fColorEditor = new ColorFieldEditor(POTENTIAL_MATCH_FG_COLOR,
                SearchMessages.SearchPreferencePage_potentialMatchFgColor, getFieldEditorParent());
        addField(fColorEditor);

        fEmphasizedCheckbox.setEnabled(!arePotentialMatchesIgnored(), getFieldEditorParent());
        fColorEditor.setEnabled(!arePotentialMatchesIgnored() && arePotentialMatchesEmphasized(),
                getFieldEditorParent());

        handleDeletedPerspectives();
        String[][] perspectiveNamesAndIds = getPerspectiveNamesAndIds();
        ComboFieldEditor comboEditor = new ComboFieldEditor(DEFAULT_PERSPECTIVE,
                SearchMessages.SearchPreferencePage_defaultPerspective, perspectiveNamesAndIds,
                getFieldEditorParent());
        addField(comboEditor);

        // in case we have a contributed engine, let the user choose.
        TextSearchEngineRegistry reg = SearchPlugin.getDefault().getTextSearchEngineRegistry();
        String[][] engineNamesAndIds = reg.getAvailableEngines();
        if (engineNamesAndIds.length > 1) {
            comboEditor = new ComboFieldEditor(TEXT_SEARCH_ENGINE,
                    SearchMessages.SearchPreferencePage_textSearchEngine, engineNamesAndIds,
                    getFieldEditorParent());
            addField(comboEditor);
        }
    }

    public void setVisible(boolean state) {
        handleDeletedPerspectives();
        super.setVisible(state);
    }

    public void propertyChange(PropertyChangeEvent event) {
        updateFieldEnablement();
    }

    public void init(IWorkbench workbench) {
    }

    protected void performDefaults() {
        super.performDefaults();
        updateFieldEnablement();
    }

    private void updateFieldEnablement() {
        boolean arePotentialMatchesIgnored = fIgnorePotentialMatchesCheckbox.getBooleanValue();
        fEmphasizedCheckbox.setEnabled(!arePotentialMatchesIgnored, getFieldEditorParent());
        fColorEditor.setEnabled(!arePotentialMatchesIgnored && fEmphasizedCheckbox.getBooleanValue(),
                getFieldEditorParent());
    }

    /*
     * Return a 2-dimensional array of perspective names and ids.
     */
    private String[][] getPerspectiveNamesAndIds() {

        IPerspectiveRegistry registry = PlatformUI.getWorkbench().getPerspectiveRegistry();
        IPerspectiveDescriptor[] perspectiveDescriptors = registry.getPerspectives();

        Arrays.sort(perspectiveDescriptors, new PerspectiveDescriptorComparator());

        String[][] table = new String[perspectiveDescriptors.length + 1][2];
        table[0][0] = SearchMessages.SearchPreferencePage_defaultPerspective_none;
        table[0][1] = NO_DEFAULT_PERSPECTIVE;
        for (int i = 0; i < perspectiveDescriptors.length; i++) {
            table[i + 1][0] = perspectiveDescriptors[i].getLabel();
            table[i + 1][1] = perspectiveDescriptors[i].getId();
        }
        return table;
    }

    private static void handleDeletedPerspectives() {
        IPreferenceStore store = SearchPlugin.getDefault().getPreferenceStore();
        String id = store.getString(DEFAULT_PERSPECTIVE);
        if (PlatformUI.getWorkbench().getPerspectiveRegistry().findPerspectiveWithId(id) == null) {
            store.putValue(DEFAULT_PERSPECTIVE, NO_DEFAULT_PERSPECTIVE);
        }
    }

    // Accessors to preference values
    public static String getDefaultPerspectiveId() {
        handleDeletedPerspectives();
        IPreferenceStore store = SearchPlugin.getDefault().getPreferenceStore();
        String id = store.getString(DEFAULT_PERSPECTIVE);
        if (id == null || id.length() == 0 || id.equals(NO_DEFAULT_PERSPECTIVE))
            return null;
        else if (PlatformUI.getWorkbench().getPerspectiveRegistry().findPerspectiveWithId(id) == null) {
            store.putValue(DEFAULT_PERSPECTIVE, id);
            return null;
        }
        return id;
    }

    public static boolean isEditorReused() {
        IPreferenceStore store = SearchPlugin.getDefault().getPreferenceStore();
        return store.getBoolean(REUSE_EDITOR);
    }

    public static boolean arePotentialMatchesIgnored() {
        IPreferenceStore store = SearchPlugin.getDefault().getPreferenceStore();
        return store.getBoolean(IGNORE_POTENTIAL_MATCHES);
    }

    public static boolean arePotentialMatchesEmphasized() {
        IPreferenceStore store = SearchPlugin.getDefault().getPreferenceStore();
        return store.getBoolean(EMPHASIZE_POTENTIAL_MATCHES);
    }

    public static RGB getPotentialMatchForegroundColor() {
        IPreferenceStore store = SearchPlugin.getDefault().getPreferenceStore();
        return PreferenceConverter.getColor(store, POTENTIAL_MATCH_FG_COLOR);
    }

    public static int getHistoryLimit() {
        IPreferenceStore store = SearchPlugin.getDefault().getPreferenceStore();
        int limit = store.getInt(LIMIT_HISTORY);
        if (limit < 1) {
            limit = 1;
        } else if (limit >= 100) {
            limit = 99;
        }
        return limit;
    }

}