com.nokia.tools.ui.prefs.UserPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.tools.ui.prefs.UserPreferencePage.java

Source

/*
* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/
package com.nokia.tools.ui.prefs;

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.custom.ScrolledComposite;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.graphics.Point;
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.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

import com.nokia.tools.ui.Activator;

public class UserPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {

    private String userData = "";
    private String realuserData = "";

    private static Label createLabel(final Composite parent, final String name) {
        final Label label = new Label(parent, SWT.NONE);
        label.setText(name);
        label.setLayoutData(new GridData());
        return label;
    }

    IPropertyChangeListener preferenceListener = new IPropertyChangeListener() {

        public void propertyChange(final PropertyChangeEvent event) {

        }

    };

    private Text realName;

    private Text user;

    private Composite createComposite(final Composite parent, final int numColumns) {
        final Composite composite = new Composite(parent, SWT.NONE);
        // GridLayout
        final GridLayout layout = new GridLayout();
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        layout.verticalSpacing = 7;
        layout.numColumns = numColumns;
        composite.setLayout(layout);
        // GridData
        final GridData data = new GridData(GridData.FILL);
        data.verticalAlignment = GridData.FILL;
        data.horizontalAlignment = GridData.FILL;
        composite.setLayoutData(data);
        return composite;
    }

    @Override
    protected Control createContents(final Composite parent) {
        final Composite composite = createScrolledComposite(parent);
        UserPreferencePage.createLabel(composite, "&User:");

        createUserText(composite);
        UserPreferencePage.createLabel(composite, "&Real name:");
        createFirstNameText(composite);

        initializeValues();

        return composite;
    }

    private void createFirstNameText(final Composite composite) {
        realName = new Text(composite, SWT.BORDER);
        realName.setEditable(true);
        realName.setTextLimit(100);
        final GridData gridData = new GridData();
        gridData.widthHint = 100;
        realName.setLayoutData(gridData);

        realName.addModifyListener(new ModifyListener() {
            public void modifyText(final ModifyEvent e) {

                realuserData = realName.getText();
                pageChanged();
            }
        });

        realName.addVerifyListener(new VerifyListener() {
            public void verifyText(final VerifyEvent e) {
                final String string = e.text;
                final char[] chars = new char[string.length()];
                string.getChars(0, chars.length, chars, 0);
                for (int i = 0; i < chars.length; i++) {

                    if (Character.isSpaceChar(chars[i])) {
                        e.doit = true;
                        return;
                    }

                    if (!Character.isLetterOrDigit(chars[i])) {
                        e.doit = false;
                        return;
                    }
                }
            }
        });
    }

    private Composite createScrolledComposite(final Composite parent) {
        final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
        sc1.setLayoutData(new GridData(GridData.FILL_BOTH));
        final Composite composite = createComposite(sc1, 2);
        sc1.setContent(composite);
        setSize(composite);
        return composite;
    }

    private void createUserText(final Composite composite) {

        user = new Text(composite, SWT.BORDER);
        user.setEditable(true);
        user.setTextLimit(100);
        final GridData gridData = new GridData();
        gridData.widthHint = 100;
        user.setLayoutData(gridData);

        user.addModifyListener(new ModifyListener() {
            public void modifyText(final ModifyEvent e) {

                userData = user.getText();
                pageChanged();
            }
        });

        user.addVerifyListener(new VerifyListener() {
            public void verifyText(final VerifyEvent e) {
                final String string = e.text;
                final char[] chars = new char[string.length()];
                string.getChars(0, chars.length, chars, 0);
                for (int i = 0; i < chars.length; i++) {
                    if (!Character.isLetterOrDigit(chars[i])) {
                        e.doit = false;
                        return;
                    }
                }
            }
        });
    }

    /**
     * Added the method to display the error message when the user related data
     * field is empty.
     */

    protected void pageChanged() {

        if ((userData.length() == 0) || (userData.trim().length() == 0)) {

            updateStatus(Messages.UserPreferencePage_UserDataNotExist);
            return;
        }
        if ((realuserData.length() == 0) || (realuserData.trim().length() == 0)) {

            updateStatus(Messages.UserPreferencePage_RealUserDataNotExist);
            return;
        }

        updateStatus(null);
    }

    /**
     * Updates error messages
     */
    private void updateStatus(final String message) {
        setErrorMessage(message);
        setValid(message == null);
    }

    @Override
    public void dispose() {
        super.dispose();
        Activator.getDefault().getPreferenceStore().removePropertyChangeListener(preferenceListener);
        if ((user != null) && !user.isDisposed()) {
            user.dispose();
        }
        if ((realName != null) && !realName.isDisposed()) {
            realName.dispose();
        }

    }

    public String getDefaultValue(final String id) {
        final IPreferenceStore store = Activator.getDefault().getPreferenceStore();
        return store.getDefaultString(id);
    }

    @Override
    public IPreferenceStore getPreferenceStore() {
        return Activator.getDefault().getPreferenceStore();
    }

    public void init(final IWorkbench arg0) {
        setPreferenceStore(Activator.getDefault().getPreferenceStore());
        getPreferenceStore().addPropertyChangeListener(preferenceListener);
    }

    private void initializeDefaultValues() {
        user.setText(getDefaultValue(UIPreferences.PREF_USER_LOGIN));
        realName.setText(getDefaultValue(UIPreferences.PREF_USER_NAME));

    }

    private void initializeValues() {
        user.setText(UIPreferencesUtil.getStringValue(UIPreferences.PREF_USER_LOGIN));
        realName.setText(UIPreferencesUtil.getStringValue(UIPreferences.PREF_USER_NAME));

    }

    @Override
    protected void performApply() {

        super.performApply();
        updateUserInfo();
        Activator.getDefault().savePluginPreferences();

    }

    @Override
    protected void performDefaults() {
        super.performDefaults();
        initializeDefaultValues();
    }

    @Override
    public boolean performOk() {
        updateUserInfo();
        Activator.getDefault().savePluginPreferences();
        return true;
    }

    public void setDataToPreferenceStore(final String id, final String value) {
        final IPreferenceStore store = Activator.getDefault().getPreferenceStore();
        store.setValue(id, value);
    }

    private void setSize(final Composite composite) {
        if (composite != null) {
            applyDialogFont(composite);
            final Point minSize = composite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
            composite.setSize(minSize);
            if (composite.getParent() instanceof ScrolledComposite) {
                final ScrolledComposite sc1 = (ScrolledComposite) composite.getParent();
                sc1.setMinSize(minSize);
                sc1.setExpandHorizontal(true);
                sc1.setExpandVertical(true);
            }
        }
    }

    private void setValue(final Text text, final String id) {
        String txt = text.getText();
        if (txt == null) {
            txt = UIPreferencesUtil.getStringValue(id);
        }
        setDataToPreferenceStore(id, txt.trim());
    }

    private void updateUserInfo() {
        setValue(user, UIPreferences.PREF_USER_LOGIN);
        setValue(realName, UIPreferences.PREF_USER_NAME);

    }
}