testdev/ite/src/com.nokia.testfw.codegen.ui/src/com/nokia/testfw/codegen/ui/wizard/MethodEditDialog.java
changeset 1 96906a986c3b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testdev/ite/src/com.nokia.testfw.codegen.ui/src/com/nokia/testfw/codegen/ui/wizard/MethodEditDialog.java	Tue Mar 30 14:39:29 2010 +0800
@@ -0,0 +1,220 @@
+/*
+ * Copyright (c) 2005-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.wizard;
+
+import java.util.Set;
+
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Dialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+import com.nokia.testfw.codegen.ui.Messages;
+import com.nokia.testfw.codegen.model.INode;
+import com.nokia.testfw.codegen.model.MethodNodeImpl;
+import com.nokia.testfw.codegen.model.ClassNodeImpl;
+
+public class MethodEditDialog extends Dialog {
+	private static final Image ERROR_IMG = JFaceResources
+			.getImage("dialog_message_error_image");
+
+	private boolean result = false;
+	private String iTitle;
+	private MethodNodeImpl iTestMethod;
+	private ClassNodeImpl iTestClass;
+	private Text iTestMethodNameText;
+	private Button iBtnOK;
+	private CLabel iMessageLabel;
+	private String iMethodName;
+
+	private static final String NEWMETHOD = "TestMethod";
+
+	public MethodEditDialog(Shell parent, String title,
+			MethodNodeImpl testmethod) {
+		super(parent, 0);
+		iTitle = title;
+		if (testmethod != null) {
+			iTestMethod = testmethod;
+			iTestClass = (ClassNodeImpl) iTestMethod.getParent();
+		} else {
+			throw new IllegalArgumentException(
+					"Parameter testmethod can not be null.");
+		}
+	}
+
+	public MethodEditDialog(Shell parent, String title,
+			ClassNodeImpl parentClass) {
+		super(parent, 0);
+		iTitle = title;
+		if (parentClass != null) {
+			iTestClass = parentClass;
+			int counter = 1;
+			while (isDuplicate(NEWMETHOD + Integer.toString(counter))) {
+				counter++;
+			}
+			iTestMethod = new MethodNodeImpl(NEWMETHOD
+					+ Integer.toString(counter), parentClass);
+		} else {
+			throw new IllegalArgumentException(
+					"Parameter parentClass can not be null.");
+		}
+	}
+
+	private void init(final Shell shell) {
+		shell.setText(iTitle);
+		shell.setLayout(new GridLayout(4, true));
+		Label label = new Label(shell, SWT.None);
+		GridData data = new GridData(GridData.FILL_HORIZONTAL);
+		data.horizontalSpan = 1;
+		label.setLayoutData(data);
+		label.setText(Messages.getString("MethodDialog.MethodName"));
+
+		iTestMethodNameText = new Text(shell, SWT.BORDER);
+		data = new GridData(GridData.FILL_HORIZONTAL);
+		data.horizontalSpan = 3;
+		iTestMethodNameText.setLayoutData(data);
+		iTestMethodNameText.setText(iTestMethod.getName());
+		iTestMethodNameText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent event) {
+				canComplete(validation());
+			}
+		});
+		iTestMethodNameText.selectAll();
+
+		// Message Label
+		iMessageLabel = new CLabel(shell, SWT.NONE);
+		GridData messageLabelData = new GridData(GridData.FILL_HORIZONTAL);
+		messageLabelData.horizontalSpan = 4;
+		iMessageLabel.setLayoutData(messageLabelData);
+
+		label = new Label(shell, SWT.None);
+		data = new GridData(GridData.FILL_HORIZONTAL);
+		data.horizontalSpan = 2;
+		label.setLayoutData(data);
+
+		iBtnOK = new Button(shell, SWT.PUSH);
+		iBtnOK.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		iBtnOK.setText(Messages.getString("Dialog.OK"));
+		iBtnOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent event) {
+				result = true;
+				iTestMethod.setName(iMethodName);
+				((Button) event.widget).getShell().dispose();
+			}
+		});
+
+		Button lBtnCancel = new Button(shell, SWT.PUSH);
+		lBtnCancel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		lBtnCancel.setText(Messages.getString("Dialog.Cancel"));
+		lBtnCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent event) {
+				result = false;
+				((Button) event.widget).getShell().dispose();
+			}
+		});
+
+		canComplete(validation());
+	}
+
+	public boolean open() {
+		Shell parent = getParent();
+		Shell shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+
+		init(shell);
+		shell.pack();
+
+		Rectangle lParentBounds = parent.getBounds();
+		Point lDialogSize = shell.getSize();
+		shell.setLocation(lParentBounds.x
+				+ (lParentBounds.width - lDialogSize.x) / 2, lParentBounds.y
+				+ (lParentBounds.height - lDialogSize.y) / 2);
+
+		shell.open();
+		Display display = parent.getDisplay();
+		while (!shell.isDisposed()) {
+			if (!display.readAndDispatch())
+				display.sleep();
+		}
+		return result;
+	}
+
+	private boolean isDuplicate(String name) {
+		Set<INode> lMethodSet = (Set<INode>) iTestClass.getChildren();
+		for (INode item : lMethodSet) {
+			if (item != iTestMethod) {
+				if (item.getName().equals(name)) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	private boolean validation() {
+		String text = iTestMethodNameText.getText();
+		if (!text.matches("^[a-zA-Z~_]\\w*")) {
+			showMessage(Messages.getString("MethodDialog.InvalidMethodName",
+					text));
+			return false;
+		}
+		if (isDuplicate(text)) {
+			showMessage(Messages.getString("MethodDialog.DuplicateMethodName",
+					text));
+			return false;
+		}
+		iMethodName = text;
+		showMessage(null);
+		return true;
+	}
+
+	private void canComplete(boolean validate) {
+		if (validate) {
+			iBtnOK.setEnabled(true);
+		} else {
+			iBtnOK.setEnabled(false);
+		}
+	}
+
+	private void showMessage(String message) {
+		if (message == null) {
+			iMessageLabel.setImage(null);
+			iMessageLabel.setText(null);
+		} else {
+			iMessageLabel.setImage(ERROR_IMG);
+			iMessageLabel.setText(message);
+		}
+	}
+
+	public MethodNodeImpl getMethodItem() {
+		return iTestMethod;
+	}
+}