]> git.uio.no Git - ifi-stolz-refaktor.git/blobdiff - case-study/jdt-before/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ParameterEditDialog.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-before / ui refactoring / org / eclipse / jdt / internal / ui / refactoring / ParameterEditDialog.java
diff --git a/case-study/jdt-before/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ParameterEditDialog.java b/case-study/jdt-before/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ParameterEditDialog.java
new file mode 100644 (file)
index 0000000..2508dfe
--- /dev/null
@@ -0,0 +1,240 @@
+/*******************************************************************************
+ * 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.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.Shell;
+import org.eclipse.swt.widgets.Text;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+
+import org.eclipse.jface.dialogs.StatusDialog;
+
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+
+import org.eclipse.jdt.core.JavaConventions;
+import org.eclipse.jdt.core.JavaCore;
+
+import org.eclipse.jdt.internal.corext.refactoring.Checks;
+import org.eclipse.jdt.internal.corext.refactoring.ParameterInfo;
+import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages;
+import org.eclipse.jdt.internal.corext.refactoring.StubTypeContext;
+import org.eclipse.jdt.internal.corext.refactoring.TypeContextChecker;
+import org.eclipse.jdt.internal.corext.refactoring.structure.ChangeSignatureProcessor;
+import org.eclipse.jdt.internal.corext.util.JavaConventionsUtil;
+import org.eclipse.jdt.internal.corext.util.Messages;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.dialogs.TextFieldNavigationHandler;
+import org.eclipse.jdt.internal.ui.refactoring.contentassist.ControlContentAssistHelper;
+import org.eclipse.jdt.internal.ui.refactoring.contentassist.JavaTypeCompletionProcessor;
+import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
+
+public class ParameterEditDialog extends StatusDialog {
+
+       private final ParameterInfo fParameter;
+       private final boolean fEditType;
+       private final boolean fEditDefault;
+       private final StubTypeContext fContext;
+       private Text fType;
+       private Text fName;
+       private Text fDefaultValue;
+
+       /**
+        * @param parentShell
+        * @param parameter
+        * @param canEditType
+        * @param canEditDefault
+        * @param context the <code>IPackageFragment</code> for type ContentAssist.
+        * Can be <code>null</code> if <code>canEditType</code> is <code>false</code>.
+        */
+       public ParameterEditDialog(Shell parentShell, ParameterInfo parameter, boolean canEditType, boolean canEditDefault, StubTypeContext context) {
+               super(parentShell);
+               fParameter= parameter;
+               fEditType= canEditType;
+               fEditDefault= canEditDefault;
+               fContext= context;
+       }
+
+       @Override
+       protected void configureShell(Shell newShell) {
+               super.configureShell(newShell);
+               newShell.setText(RefactoringMessages.ParameterEditDialog_title);
+       }
+
+       @Override
+       protected Control createDialogArea(Composite parent) {
+               Composite result= (Composite)super.createDialogArea(parent);
+               GridLayout layout= (GridLayout)result.getLayout();
+               layout.numColumns= 2;
+               Label label;
+               GridData gd;
+
+               label= new Label(result, SWT.NONE);
+               String newName = fParameter.getNewName();
+               if (newName.length() == 0)
+                       label.setText(RefactoringMessages.ParameterEditDialog_message_new);
+               else
+                       label.setText(Messages.format(RefactoringMessages.ParameterEditDialog_message, BasicElementLabels.getJavaElementName(newName)));
+               gd= new GridData(GridData.FILL_HORIZONTAL);
+               gd.horizontalSpan= 2;
+               label.setLayoutData(gd);
+
+               if (fEditType) {
+                       label= new Label(result, SWT.NONE);
+                       label.setText(RefactoringMessages.ParameterEditDialog_type);
+                       fType= new Text(result, SWT.BORDER);
+                       gd= new GridData(GridData.FILL_HORIZONTAL);
+                       fType.setLayoutData(gd);
+                       fType.setText(fParameter.getNewTypeName());
+                       fType.addModifyListener(
+                               new ModifyListener() {
+                                       public void modifyText(ModifyEvent e) {
+                                               validate((Text)e.widget);
+                                       }
+                               });
+                       TextFieldNavigationHandler.install(fType);
+                       JavaTypeCompletionProcessor processor= new JavaTypeCompletionProcessor(true, false);
+                       processor.setCompletionContext(fContext.getCuHandle(), fContext.getBeforeString(), fContext.getAfterString());
+                       ControlContentAssistHelper.createTextContentAssistant(fType, processor);
+               }
+
+               label= new Label(result, SWT.NONE);
+               fName= new Text(result, SWT.BORDER);
+               initializeDialogUnits(fName);
+               label.setText(RefactoringMessages.ParameterEditDialog_name);
+               gd= new GridData(GridData.FILL_HORIZONTAL);
+               gd.widthHint= convertWidthInCharsToPixels(45);
+               fName.setLayoutData(gd);
+               fName.setText(newName);
+               fName.addModifyListener(
+                       new ModifyListener() {
+                               public void modifyText(ModifyEvent e) {
+                                       validate((Text)e.widget);
+                               }
+                       });
+               TextFieldNavigationHandler.install(fName);
+
+               if (fEditDefault && fParameter.isAdded()) {
+                       label= new Label(result, SWT.NONE);
+                       label.setText(RefactoringMessages.ParameterEditDialog_defaultValue);
+                       fDefaultValue= new Text(result, SWT.BORDER);
+                       gd= new GridData(GridData.FILL_HORIZONTAL);
+                       fDefaultValue.setLayoutData(gd);
+                       fDefaultValue.setText(fParameter.getDefaultValue());
+                       fDefaultValue.addModifyListener(
+                               new ModifyListener() {
+                                       public void modifyText(ModifyEvent e) {
+                                               validate((Text)e.widget);
+                                       }
+                               });
+                       TextFieldNavigationHandler.install(fDefaultValue);
+               }
+               applyDialogFont(result);
+               return result;
+       }
+
+       @Override
+       protected void okPressed() {
+               if (fType != null) {
+                       fParameter.setNewTypeName(fType.getText());
+               }
+               fParameter.setNewName(fName.getText());
+               if (fDefaultValue != null) {
+                       fParameter.setDefaultValue(fDefaultValue.getText());
+               }
+               super.okPressed();
+       }
+
+       private void validate(Text first) {
+               IStatus[] result= new IStatus[3];
+               if (first == fType) {
+                       result[0]= validateType();
+                       result[1]= validateName();
+                       result[2]= validateDefaultValue();
+               } else if (first == fName) {
+                       result[0]= validateName();
+                       result[1]= validateType();
+                       result[2]= validateDefaultValue();
+               } else {
+                       result[0]= validateDefaultValue();
+                       result[1]= validateName();
+                       result[2]= validateType();
+               }
+               for (int i= 0; i < result.length; i++) {
+                       IStatus status= result[i];
+                       if (status != null && !status.isOK()) {
+                               updateStatus(status);
+                               return;
+                       }
+               }
+               updateStatus(Status.OK_STATUS);
+       }
+
+       private IStatus validateType() {
+               if (fType == null)
+                       return null;
+               String type= fType.getText();
+
+               RefactoringStatus status= TypeContextChecker.checkParameterTypeSyntax(type, fContext.getCuHandle().getJavaProject());
+               if (status == null || status.isOK())
+                       return Status.OK_STATUS;
+               if (status.hasError())
+                       return createErrorStatus(status.getEntryWithHighestSeverity().getMessage());
+               else
+                       return createWarningStatus(status.getEntryWithHighestSeverity().getMessage());
+       }
+
+       private IStatus validateName() {
+               if (fName == null)
+                       return null;
+               String text= fName.getText();
+               if (text.length() == 0)
+                       return createErrorStatus(RefactoringMessages.ParameterEditDialog_name_error);
+               IStatus status= fContext != null
+                               ? JavaConventionsUtil.validateFieldName(text, fContext.getCuHandle().getJavaProject())
+                               : JavaConventions.validateFieldName(text, JavaCore.VERSION_1_3, JavaCore.VERSION_1_3);
+               if (status.matches(IStatus.ERROR))
+                       return status;
+               if (! Checks.startsWithLowerCase(text))
+                       return createWarningStatus(RefactoringCoreMessages.ExtractTempRefactoring_convention);
+               return Status.OK_STATUS;
+       }
+
+       private IStatus validateDefaultValue() {
+               if (fDefaultValue == null)
+                       return null;
+               String defaultValue= fDefaultValue.getText();
+               if (defaultValue.length() == 0)
+                       return createErrorStatus(RefactoringMessages.ParameterEditDialog_defaultValue_error);
+               if (ChangeSignatureProcessor.isValidExpression(defaultValue))
+                       return Status.OK_STATUS;
+               String msg= Messages.format(RefactoringMessages.ParameterEditDialog_defaultValue_invalid, new String[]{defaultValue});
+               return createErrorStatus(msg);
+
+       }
+
+       private Status createWarningStatus(String message) {
+               return new Status(IStatus.WARNING, JavaPlugin.getPluginId(), IStatus.WARNING, message, null);
+       }
+
+       private Status createErrorStatus(String message) {
+               return new Status(IStatus.ERROR, JavaPlugin.getPluginId(), IStatus.ERROR, message, null);
+       }
+}