org.eclipse.imp.preferences.fields.IntegerFieldEditor.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.imp.preferences.fields.IntegerFieldEditor.java

Source

/*******************************************************************************
* Copyright (c) 2007 IBM Corporation.
* 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:
*    Robert Fuhrer (rfuhrer@watson.ibm.com) - initial API and implementation
    
*******************************************************************************/

package org.eclipse.imp.preferences.fields;

import org.eclipse.imp.preferences.IPreferencesService;
import org.eclipse.imp.preferences.PreferencesTab;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;

public class IntegerFieldEditor extends StringFieldEditor {

    // From IntegerFieldEditor
    protected int minValidValue = 0;
    protected int maxValidValue = Integer.MAX_VALUE;
    protected static final int DEFAULT_TEXT_LIMIT = 10;

    protected String errorMessage = "Value must be an integer between " + minValidValue + " and " + maxValidValue;

    /**
     * Creates an integer field editor
     * Use the method <code>setTextLimit</code> to limit the text.
     * 
     * @param name the name of the preference this field editor works on
     * @param labelText the label text of the field editor
     * @param width the width of the text input field in characters,
     *  or <code>UNLIMITED</code> for no limit
     * @param strategy either <code>VALIDATE_ON_KEY_STROKE</code> to perform
     *  on the fly checking (the default), or <code>VALIDATE_ON_FOCUS_LOST</code> to
     *  perform validation only after the text has been typed in
     * @param parent the parent of the field editor's control
     * @since 2.0
     */
    public IntegerFieldEditor(PreferencePage page, PreferencesTab tab, IPreferencesService service, String level,
            String name, String labelText, int width, int strategy, Composite parent) {
        super(page, tab, service, level, name, labelText, width, strategy, parent);
    }

    /**
     * Creates a string field editor.
     * Use the method <code>setTextLimit</code> to limit the text.
     * 
     * @param name the name of the preference this field editor works on
     * @param labelText the label text of the field editor
     * @param width the width of the text input field in characters,
     *  or <code>UNLIMITED</code> for no limit
     * @param parent the parent of the field editor's control
     */
    public IntegerFieldEditor(PreferencePage page, PreferencesTab tab, IPreferencesService service, String level,
            String name, String labelText, int width, Composite parent) {
        super(page, tab, service, level, name, labelText, width,
                org.eclipse.jface.preference.StringFieldEditor.VALIDATE_ON_KEY_STROKE, parent);
    }

    /**
     * Creates a string field editor of unlimited width.
     * Use the method <code>setTextLimit</code> to limit the text.
     * 
     * @param name the name of the preference this field editor works on
     * @param labelText the label text of the field editor
     * @param parent the parent of the field editor's control
     */
    public IntegerFieldEditor(PreferencePage page, PreferencesTab tab, IPreferencesService service, String level,
            String name, String labelText, Composite parent) {
        // Replaced UNLIMITED text width in the following with default
        super(page, tab, service, level, name, labelText, DEFAULT_TEXT_LIMIT, parent);
    }

    /**
     * Copied from IntegerFieldEditor.
     * 
     * Sets the range of valid values for this field.
     * 
     * @param min the minimum allowed value (inclusive)
     * @param max the maximum allowed value (inclusive)
     */
    public void setValidRange(int min, int max) {
        minValidValue = min;
        maxValidValue = max;
    }

    /**
     * Copied from IntegerFieldEditor.
     * 
     * Returns this field editor's current value as an integer.
     *
     * @return the value
     * @exception NumberFormatException if the <code>String</code> does not
     *   contain a parsable integer
     */
    public int getIntValue() throws NumberFormatException {
        return Integer.parseInt(getStringValue());
    }

    /* (non-Javadoc)
     * Copied from IntegerFieldEditor (with minor adaptations).
     * Method declared on StringFieldEditor.
     * Checks whether the entered String is a valid integer or not.
     */
    protected boolean checkState() {

        Text text = getTextControl(parent);

        if (text == null)
            return false;

        String numberString = text.getText();
        if (numberString == null || numberString.equals(""))
            numberString = "0";
        try {
            int number = Integer.valueOf(numberString).intValue();
            if (number >= minValidValue && number <= maxValidValue) {
                clearErrorMessage();
                return true;
            } else {
                setErrorMessage(getLevelName() + ":  " + getLabelText() + "  " + errorMessage);
                return false;
            }
        } catch (NumberFormatException e1) {
            setErrorMessage(getLevelName() + ":  " + getLabelText() + "  " + "Number format exception");
        }

        return false;
    }

    public String getLevelName() {
        if (preferencesLevel.equals(IPreferencesService.DEFAULT_LEVEL))
            return "Default";
        if (preferencesLevel.equals(IPreferencesService.CONFIGURATION_LEVEL))
            return "Configuration";
        if (preferencesLevel.equals(IPreferencesService.INSTANCE_LEVEL))
            return "Workspace";
        if (preferencesLevel.equals(IPreferencesService.PROJECT_LEVEL))
            return "Project";
        return "";
    }

}