de.bmw.yamaica.ide.ui.internal.preferences.Preferences.java Source code

Java tutorial

Introduction

Here is the source code for de.bmw.yamaica.ide.ui.internal.preferences.Preferences.java

Source

/* Copyright (C) 2013-2015 BMW Group
 * Author: Manfred Bathelt (manfred.bathelt@bmw.de)
 * Author: Juergen Gehring (juergen.gehring@bmw.de)
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package de.bmw.yamaica.ide.ui.internal.preferences;

import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.ComboFieldEditor;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;

import de.bmw.yamaica.common.ui.YamaicaUIConstants;
import de.bmw.yamaica.common.ui.utils.ExtendedStringFieldEditor;
import de.bmw.yamaica.ide.ui.internal.Activator;

/**
 * This class is needed by the org.eclipse.ui.preferencePages extension point (see plugin.xml)
 * and defines the preference page of this plug-in.
 */
public class Preferences extends PreferencePage implements IWorkbenchPreferencePage {
    private static final String NEVER_HIDE = "Never Hide";
    private static final String ALWAYS_HIDE = "Always Hide";
    private static final String MENU_BAR_HIDING_RULE = "&Menu bar hiding rule:";
    private static final String GUI_SETTINGS = "GUI settings";
    private static final String CREATE_YAMAICA_EDITOR_LINK_BUTTON_TEXT = "&Create yamaica editor link";
    private static final String TARGET_FOLDER_BUTTON_TEXT = "&Target folder:";
    private static final String IMPORT_FOLDER_BUTTON_TEXT = "&Import folder:";
    private static final String LIMIT_CONSOLE_OUTPUT2 = "&Limit console output";
    private static final String REDIRECT_SYSTEM_STREAMS_TO_BUILT_IN_CONSOLE = "&Redirect system streams to built-in console";
    private static final String YAMAICA_PREFERENCES_CONTEXT = ".yamaica_preferences_context";
    public static final String CREATE_YAMAICA_EDITOR_LINK = "CREATE_YAMAICA_EDITOR_LINK";
    public static final String YAMAICA_EDITOR_LINK_NAME = "YAMAICA_EDITOR_LINK_NAME";

    private BooleanFieldEditor redirectStreamsFieldEditor, limitConsoleOutputFieldEditor,
            createEditorLinkFieldEditor;
    private ExtendedStringFieldEditor importDirectoryFieldEditor, targetDirectoryFieldEditor;
    private ComboFieldEditor menuBarHidingRuleFieldEditor;

    @Override
    public void init(IWorkbench workbench) {
        setPreferenceStore(Activator.getDefault().getPreferenceStore());
        // setDescription("Example of a Description");
    }

    @Override
    protected Control createContents(Composite parent) {
        PlatformUI.getWorkbench().getHelpSystem().setHelp(parent,
                Activator.PLUGIN_ID + YAMAICA_PREFERENCES_CONTEXT);

        IPreferenceStore store = de.bmw.yamaica.common.ui.Preferences.getPreferenceStore();

        GridLayout gridLayout = new GridLayout(1, false);
        gridLayout.marginWidth = gridLayout.marginHeight = 0;
        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayout(gridLayout);

        Group consoleSettings = new Group(composite, SWT.NONE);
        consoleSettings.setText("Console settings");
        consoleSettings.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));

        redirectStreamsFieldEditor = new BooleanFieldEditor(
                de.bmw.yamaica.common.ui.Preferences.REDIRECT_SYSTEM_STREAMS,
                REDIRECT_SYSTEM_STREAMS_TO_BUILT_IN_CONSOLE, consoleSettings);
        redirectStreamsFieldEditor.setPreferenceStore(store);
        redirectStreamsFieldEditor.setPage(this);
        redirectStreamsFieldEditor.load();

        limitConsoleOutputFieldEditor = new BooleanFieldEditor(
                de.bmw.yamaica.common.ui.Preferences.LIMIT_CONSOLE_OUTPUT, LIMIT_CONSOLE_OUTPUT2, consoleSettings);
        limitConsoleOutputFieldEditor.setPreferenceStore(store);
        limitConsoleOutputFieldEditor.setPage(this);
        limitConsoleOutputFieldEditor.load();

        consoleSettings.setLayout(new GridLayout(1, false));

        Group projectSettings = new Group(composite, SWT.NONE);
        projectSettings.setText("Project settings");
        projectSettings.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));

        importDirectoryFieldEditor = new ExtendedStringFieldEditor(
                de.bmw.yamaica.common.ui.Preferences.IMPORT_FOLDER, IMPORT_FOLDER_BUTTON_TEXT, projectSettings);
        importDirectoryFieldEditor.setPreferenceStore(store);
        importDirectoryFieldEditor.setPage(this);
        importDirectoryFieldEditor.setValidationPattern(ExtendedStringFieldEditor.getWorkbenchPathPattern());
        importDirectoryFieldEditor.setErrorMessage(YamaicaUIConstants.STRING_IS_NOT_A_VALID_WORKBENCH_PATH);
        importDirectoryFieldEditor.setPropertyChangeListener(new IPropertyChangeListener() {
            @Override
            public void propertyChange(PropertyChangeEvent event) {
                updateApplyButton();
            }
        });
        importDirectoryFieldEditor.fillIntoGrid(projectSettings, 2);
        importDirectoryFieldEditor.load();

        targetDirectoryFieldEditor = new ExtendedStringFieldEditor(
                de.bmw.yamaica.common.ui.Preferences.TARGET_FOLDER, TARGET_FOLDER_BUTTON_TEXT, projectSettings);
        targetDirectoryFieldEditor.setPreferenceStore(store);
        targetDirectoryFieldEditor.setPage(this);
        targetDirectoryFieldEditor.setValidationPattern(ExtendedStringFieldEditor.getWorkbenchPathPattern());
        targetDirectoryFieldEditor.setErrorMessage(YamaicaUIConstants.STRING_IS_NOT_A_VALID_WORKBENCH_PATH);
        targetDirectoryFieldEditor.setPropertyChangeListener(new IPropertyChangeListener() {
            @Override
            public void propertyChange(PropertyChangeEvent event) {
                updateApplyButton();
            }
        });
        targetDirectoryFieldEditor.fillIntoGrid(projectSettings, 2);
        targetDirectoryFieldEditor.load();

        createEditorLinkFieldEditor = new BooleanFieldEditor(CREATE_YAMAICA_EDITOR_LINK,
                CREATE_YAMAICA_EDITOR_LINK_BUTTON_TEXT, projectSettings);
        createEditorLinkFieldEditor.setPreferenceStore(getPreferenceStore());
        createEditorLinkFieldEditor.setPage(this);
        createEditorLinkFieldEditor.fillIntoGrid(projectSettings, 2);
        createEditorLinkFieldEditor.load();

        projectSettings.setLayout(new GridLayout(2, false));

        // The de.bmw.yamaica.ide.ui.workbenchobserver bundle is an optional dependency. Thus
        // we have to check if it is available. If not the GUI parts are not needed.
        if (null != Platform.getBundle(YamaicaUIConstants.WORKBENCHOBSERVER_PLUGIN_ID)) {
            Group guiSettings = new Group(composite, SWT.NONE);
            guiSettings.setText(GUI_SETTINGS);
            guiSettings.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

            String[][] menuBarHidingRuleNamesAndValues = new String[][] {
                    { YamaicaUIConstants.YAMAICA_DEFAULT,
                            de.bmw.yamaica.ide.ui.workbenchobserver.Preferences.YAMAICA_HIDE },
                    { ALWAYS_HIDE, de.bmw.yamaica.ide.ui.workbenchobserver.Preferences.ALWAYS_HIDE },
                    { NEVER_HIDE, de.bmw.yamaica.ide.ui.workbenchobserver.Preferences.NEVER_HIDE } };

            menuBarHidingRuleFieldEditor = new ComboFieldEditor(
                    de.bmw.yamaica.ide.ui.workbenchobserver.Preferences.MENU_BAR_HIDING_RULE, MENU_BAR_HIDING_RULE,
                    menuBarHidingRuleNamesAndValues, guiSettings);
            menuBarHidingRuleFieldEditor
                    .setPreferenceStore(de.bmw.yamaica.ide.ui.workbenchobserver.Preferences.getPreferenceStore());
            menuBarHidingRuleFieldEditor.setPage(this);
            menuBarHidingRuleFieldEditor.load();

            guiSettings.setLayout(new GridLayout(2, false));
        }

        return composite;
    }

    @Override
    protected void performDefaults() {
        redirectStreamsFieldEditor.loadDefault();
        limitConsoleOutputFieldEditor.loadDefault();
        importDirectoryFieldEditor.loadDefault();
        targetDirectoryFieldEditor.loadDefault();
        createEditorLinkFieldEditor.loadDefault();

        if (null != menuBarHidingRuleFieldEditor) {
            menuBarHidingRuleFieldEditor.loadDefault();
        }

        super.performDefaults();
    }

    @Override
    protected void performApply() {
        redirectStreamsFieldEditor.store();
        limitConsoleOutputFieldEditor.store();
        importDirectoryFieldEditor.store();
        targetDirectoryFieldEditor.store();
        createEditorLinkFieldEditor.store();

        if (null != menuBarHidingRuleFieldEditor) {
            menuBarHidingRuleFieldEditor.store();
        }
    }

    @Override
    public boolean performOk() {
        performApply();

        return true;
    }

    @Override
    public boolean isValid() {
        boolean isValid = importDirectoryFieldEditor.isValid() && targetDirectoryFieldEditor.isValid();

        setValid(isValid);

        return isValid;
    }
}