testdev/ite/src/com.nokia.testfw.codegen.ui/src/com/nokia/testfw/codegen/ui/preferences/TESTFWPropertiesPreferencePage.java
author Johnson Ma <johnson.ma@nokia.com>
Tue, 30 Mar 2010 14:39:29 +0800
changeset 1 96906a986c3b
permissions -rw-r--r--
contribute ITE to symbian foundation

/*
* Copyright (c) 2009 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.testfw.codegen.ui.preferences;

import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

import com.nokia.testfw.codegen.ui.CodegenUIPlugin;
import com.nokia.testfw.codegen.ui.preferences.PreferenceConstants;
import com.nokia.testfw.codegen.ui.preferences.PreferenceUtil;
import com.nokia.testfw.codegen.ui.Messages;

public class TESTFWPropertiesPreferencePage extends FieldEditorPreferencePage
		implements IWorkbenchPreferencePage {

	public StringFieldEditor iTestFolderName;
	public HexFieldEditor iUID3MaxValue;
	public HexFieldEditor iUID3MinValue;
	public StringFieldEditor iAutherName;

	public TESTFWPropertiesPreferencePage() {
		super(GRID);
		setPreferenceStore(CodegenUIPlugin.getDefault().getPreferenceStore());
		setDescription(Messages
				.getString("TESTFWPropertiesPreferencePage.Description"));
	}

	public void init(IWorkbench workbench) {
	}

	@Override
	protected void createFieldEditors() {

		iTestFolderName = new StringFieldEditor(
				PreferenceConstants.TEST_FOLDER_NAME,
				Messages
						.getString("TESTFWPropertiesPreferencePage.TestFolder.Name"),
				getFieldEditorParent()) {
			protected boolean doCheckState() {
				String testFolderName = getTextControl().getText();
				if (!testFolderName.matches("[\\w]*")) {
					setErrorMessage(Messages
							.getString("TESTFWPropertiesPreferencePage.TestFolder.Error"));
					return false;
				}
				return true;
			}
		};

		iUID3MaxValue = new HexFieldEditor(
				PreferenceConstants.UID3_MAX_VALUE,
				Messages
						.getString("TESTFWPropertiesPreferencePage.UID3.MaxValue"),
				getFieldEditorParent()) {
			protected boolean doCheckState() {
				if (super.doCheckState()) {
					if (iUID3MaxValue.getIntValue() < iUID3MinValue
							.getIntValue()) {
						setErrorMessage(Messages
								.getString("TESTFWPropertiesPreferencePage.UID3.Error1"));
						return false;
					} else {
						return true;
					}
				} else {
					Messages.getString(
							"TESTFWPropertiesPreferencePage.UIDHexError",
							iUID3MaxValue.getStringValue());
					return false;
				}
			}
		};

		iUID3MinValue = new HexFieldEditor(
				PreferenceConstants.UID3_MIN_VALUE,
				Messages
						.getString("TESTFWPropertiesPreferencePage.UID3.MinValue"),
				getFieldEditorParent()) {
			protected boolean doCheckState() {
				if (super.doCheckState()) {
					if (iUID3MinValue.getIntValue() > iUID3MaxValue
							.getIntValue()) {
						setErrorMessage(Messages
								.getString("TESTFWPropertiesPreferencePage.UID3.Error2"));
						return false;
					} else {
						return true;
					}
				} else {
					Messages.getString(
							"TESTFWPropertiesPreferencePage.UIDHexError",
							iUID3MinValue.getStringValue());
					return false;
				}
			}
		};

		iAutherName = new StringFieldEditor(PreferenceConstants.AUTHER,
				Messages.getString("TESTFWPropertiesPreferencePage.Author"),
				getFieldEditorParent());

		iTestFolderName.setEmptyStringAllowed(false);
		iUID3MaxValue.setEmptyStringAllowed(false);
		iUID3MinValue.setEmptyStringAllowed(false);
		iAutherName.setEmptyStringAllowed(true);

		addField(iTestFolderName);
		addField(iUID3MaxValue);
		addField(iUID3MinValue);
		addField(iAutherName);
	}

	public boolean performOk() {
		//CodegenUIPlugin.getDefault().savePluginPreferences();
		return super.performOk();
	}

	public class HexFieldEditor extends StringFieldEditor {

		private int minValidValue = 0;
		private int maxValidValue = Integer.MAX_VALUE;
		private static final int DEFAULT_TEXT_LIMIT = 10;

		protected HexFieldEditor() {
		}

		public HexFieldEditor(String name, String labelText, Composite parent) {
			this(name, labelText, parent, DEFAULT_TEXT_LIMIT);
		}

		public HexFieldEditor(String name, String labelText, Composite parent,
				int textLimit) {
			init(name, labelText);
			setTextLimit(textLimit);
			setEmptyStringAllowed(false);
			setErrorMessage(Messages
					.getString("TESTFWPropertiesPreferencePage.UIDHexError3"));
			createControl(parent);
			final Text text = getTextControl();
			text.addFocusListener(new FocusAdapter() {
				public void focusLost(FocusEvent event) {
					String hexString = text.getText();
					int number = -1;
					try {
						number = Integer.decode(hexString).intValue();
						hexString = PreferenceUtil
								.createCanonicalHexString(number);
						text.setText(hexString);
					} catch (NumberFormatException _ex) {
					}
				}
			});
		}

		public void setValidRange(int min, int max) {
			minValidValue = min;
			maxValidValue = max;
			setErrorMessage(Messages.getString(
					"TESTFWPropertiesPreferencePage.UIDHexError2",
					new Object[] { Integer.toHexString(min),
							Integer.toHexString(max) }));
		}

		protected boolean checkState() {
			String hexString;
			Text text = getTextControl();
			if (text == null)
				return false;
			hexString = text.getText();
			int number = -1;
			try {
				number = Integer.decode(hexString).intValue();
			} catch (NumberFormatException _ex) {
				showErrorMessage();
				return false;
			}
			if (number < minValidValue || number > maxValidValue) {
				showErrorMessage();
				return false;
			}
			clearErrorMessage();
			return true;
		}

		protected void doLoad() {
			Text text = getTextControl();
			if (text != null) {
				String strHex = getPreferenceStore().getString(
						getPreferenceName());
				text.setText(strHex);
				oldValue = strHex;
			}
		}

		protected void doLoadDefault() {
			Text text = getTextControl();
			if (text != null) {
				String strHex = getPreferenceStore().getString(
						getPreferenceName());
				text.setText(strHex);
			}
			valueChanged();
		}

		protected void doStore() {
			Text text = getTextControl();
			if (text != null) {
				getPreferenceStore().setValue(getPreferenceName(),
						text.getText());
			}
		}

		public int getIntValue() throws NumberFormatException {
			return Integer.decode(getStringValue()).intValue();
		}
	}
}