]> git.uio.no Git - ifi-stolz-refaktor.git/blobdiff - case-study/jdt-before/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/TextInputWizardPage.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-before / ui refactoring / org / eclipse / jdt / internal / ui / refactoring / TextInputWizardPage.java
diff --git a/case-study/jdt-before/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/TextInputWizardPage.java b/case-study/jdt-before/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/TextInputWizardPage.java
new file mode 100644 (file)
index 0000000..b207291
--- /dev/null
@@ -0,0 +1,200 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.jdt.internal.ui.refactoring;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+
+import org.eclipse.core.runtime.Assert;
+
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
+
+import org.eclipse.jdt.internal.ui.dialogs.TextFieldNavigationHandler;
+
+/**
+ * A TextInputWizardPage is a simple UserInputWizardPage with facilities
+ * to create a text input field and validate its contents.
+ * The text is assumed to be a java identifier, hence CamelCase word jumping is installed.
+ */
+public abstract class TextInputWizardPage extends UserInputWizardPage{
+
+       private String fInitialValue;
+       private Text fTextField;
+
+       public static final String PAGE_NAME= "TextInputPage";//$NON-NLS-1$
+
+       /**
+        * Creates a new text input page.
+        * @param isLastUserPage <code>true</code> if this page is the wizard's last
+        *  user input page. Otherwise <code>false</code>.
+        */
+       public TextInputWizardPage(String description, boolean isLastUserPage) {
+               this(description, isLastUserPage, ""); //$NON-NLS-1$
+       }
+
+       /**
+        * Creates a new text input page.
+        * @param isLastUserPage <code>true</code> if this page is the wizard's last
+        *  user input page. Otherwise <code>false</code>
+        * @param initialValue the initial value
+        */
+       public TextInputWizardPage(String description, boolean isLastUserPage, String initialValue) {
+               super(PAGE_NAME);
+               Assert.isNotNull(initialValue);
+               setDescription(description);
+               fInitialValue= initialValue;
+       }
+
+       /**
+        * Returns whether the initial input is valid. Typically it is not, because the
+        * user is required to provide some information e.g. a new type name etc.
+        *
+        * @return <code>true</code> iff the input provided at initialization is valid
+        */
+       protected boolean isInitialInputValid(){
+               return false;
+       }
+
+       /**
+        * Returns whether an empty string is a valid input. Typically it is not, because
+        * the user is required to provide some information e.g. a new type name etc.
+        *
+        * @return <code>true</code> iff an empty string is valid
+        */
+       protected boolean isEmptyInputValid(){
+               return false;
+       }
+
+       /**
+        * Returns the content of the text input field.
+        *
+        * @return the content of the text input field. Returns <code>null</code> if
+        * not text input field has been created
+        */
+       protected String getText() {
+               if (fTextField == null)
+                       return null;
+               return fTextField.getText();
+       }
+
+       /**
+        * Sets the new text for the text field. Does nothing if the text field has not been created.
+        * @param text the new value
+        */
+       protected void setText(String text) {
+               if (fTextField == null)
+                       return;
+               fTextField.setText(text);
+       }
+
+       /**
+        * Returns the text entry field
+        *
+        * @return the text entry field
+        */
+       protected Text getTextField() {
+               return fTextField;
+       }
+
+       /**
+        * Returns the initial value.
+        *
+        * @return the initial value
+        */
+       public String getInitialValue() {
+               return fInitialValue;
+       }
+
+       /**
+        * Performs input validation. Returns a <code>RefactoringStatus</code> which
+        * describes the result of input validation. <code>Null<code> is interpreted
+        * as no error.
+        */
+       protected RefactoringStatus validateTextField(String text){
+               return null;
+       }
+
+       protected Text createTextInputField(Composite parent) {
+               return createTextInputField(parent, SWT.BORDER);
+       }
+
+       protected Text createTextInputField(Composite parent, int style) {
+               fTextField= new Text(parent, style);
+               fTextField.addModifyListener(new ModifyListener() {
+                       public void modifyText(ModifyEvent e) {
+                               textModified(getText());
+                       }
+               });
+               fTextField.setText(fInitialValue);
+               TextFieldNavigationHandler.install(fTextField);
+               return fTextField;
+       }
+
+       /**
+        * Checks the page's state and issues a corresponding error message. The page validation
+        * is computed by calling <code>validatePage</code>.
+        */
+       protected void textModified(String text) {
+               if (! isEmptyInputValid() && "".equals(text)){ //$NON-NLS-1$
+                       setPageComplete(false);
+                       setErrorMessage(null);
+                       restoreMessage();
+                       return;
+               }
+               if ((! isInitialInputValid()) && fInitialValue.equals(text)){
+                       setPageComplete(false);
+                       setErrorMessage(null);
+                       restoreMessage();
+                       return;
+               }
+
+               RefactoringStatus status= validateTextField(text);
+               if (status == null)
+                       status= new RefactoringStatus();
+               setPageComplete(status);
+       }
+
+       /**
+        * Subclasses can override if they want to restore the message differently.
+        * This implementation calls <code>setMessage(null)</code>, which clears the message
+        * thus exposing the description.
+        */
+       protected void restoreMessage(){
+               setMessage(null);
+       }
+
+       /* (non-Javadoc)
+        * Method declared in IDialogPage
+        */
+       @Override
+       public void dispose() {
+               fTextField= null;
+       }
+
+       /* (non-Javadoc)
+        * Method declared in WizardPage
+        */
+       @Override
+       public void setVisible(boolean visible) {
+               if (visible) {
+                       textModified(getText());
+               }
+               super.setVisible(visible);
+               if (visible && fTextField != null) {
+                       fTextField.setFocus();
+               }
+       }
+}