blob: f328141a005447d4102fb807fecf58ded4c7b38c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2011 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.ui.refactoring;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ltk.core.refactoring.Refactoring;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
import org.eclipse.jdt.internal.corext.refactoring.structure.MoveInnerToTopRefactoring;
import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
public class MoveInnerToTopWizard extends RefactoringWizard {
private class MoveInnerToToplnputPage extends TextInputWizardPage {
private Text fFieldNameEntryText;
private Label fFieldNameLabel;
private Button fFinalCheckBox;
private final boolean fInitialInputValid;
public MoveInnerToToplnputPage(String initialValue) {
super(RefactoringMessages.MoveInnerToToplnputPage_description, true, initialValue);
final MoveInnerToTopRefactoring refactoring= getMoveRefactoring();
final boolean mandatory= refactoring.isCreatingInstanceFieldMandatory();
fInitialInputValid= (!initialValue.isEmpty()) || !mandatory;
if (!mandatory)
refactoring.setCreateInstanceField(false);
}
private void addFieldNameEntry(Composite newControl) {
fFieldNameLabel= new Label(newControl, SWT.NONE);
if (getMoveRefactoring().isCreatingInstanceFieldMandatory())
fFieldNameLabel.setText(RefactoringMessages.MoveInnerToToplnputPage_enter_name_mandatory);
else
fFieldNameLabel.setText(RefactoringMessages.MoveInnerToToplnputPage_enter_name);
fFieldNameLabel.setLayoutData(new GridData());
fFieldNameEntryText= createTextInputField(newControl);
fFieldNameEntryText.selectAll();
fFieldNameEntryText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
}
private void addFinalCheckBox(Composite newControl) {
fFinalCheckBox= new Button(newControl, SWT.CHECK);
fFinalCheckBox.setText(RefactoringMessages.MoveInnerToToplnputPage_instance_final);
GridData data= new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan= 2;
fFinalCheckBox.setLayoutData(data);
fFinalCheckBox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
getMoveRefactoring().setMarkInstanceFieldAsFinal(fFinalCheckBox.getSelection());
}
});
fFieldNameEntryText.addModifyListener(event -> {
final String text= fFieldNameEntryText.getText();
final MoveInnerToTopRefactoring refactoring= getMoveRefactoring();
if (refactoring.isCreatingInstanceFieldMandatory())
setPageComplete(validateTextField(text));
final boolean empty= text.length() == 0;
if (refactoring.isCreatingInstanceFieldMandatory()) {
// Do nothing
} else if (refactoring.isCreatingInstanceFieldPossible()) {
fFinalCheckBox.setEnabled(!empty);
}
if (!refactoring.isCreatingInstanceFieldMandatory())
refactoring.setCreateInstanceField(!empty);
});
}
@Override
public void createControl(Composite parent) {
initializeDialogUnits(parent);
Composite newControl= new Composite(parent, SWT.NONE);
setControl(newControl);
PlatformUI.getWorkbench().getHelpSystem().setHelp(newControl, IJavaHelpContextIds.MOVE_INNER_TO_TOP_WIZARD_PAGE);
newControl.setLayout(new GridLayout());
Dialog.applyDialogFont(newControl);
GridLayout layout= new GridLayout();
layout.numColumns= 2;
layout.verticalSpacing= 8;
newControl.setLayout(layout);
addFieldNameEntry(newControl);
addFinalCheckBox(newControl);
if (getMoveRefactoring().isCreatingInstanceFieldPossible()) {
fFinalCheckBox.setSelection(getMoveRefactoring().isInstanceFieldMarkedFinal());
fFinalCheckBox.setEnabled(true);
} else {
fFinalCheckBox.setSelection(false);
fFinalCheckBox.setEnabled(false);
}
}
/*
* @see org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage#isEmptyInputValid()
*/
@Override
protected boolean isEmptyInputValid() {
return !getMoveRefactoring().isCreatingInstanceFieldMandatory();
}
/*
* @see org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage#isInitialInputValid()
*/
@Override
protected boolean isInitialInputValid() {
return fInitialInputValid;
}
/*
* @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
*/
@Override
public void setVisible(boolean visible) {
super.setVisible(visible);
if (visible) {
String message= getMoveRefactoring().isCreatingInstanceFieldMandatory() ? RefactoringMessages.MoveInnerToToplnputPage_mandatory_info : RefactoringMessages.MoveInnerToToplnputPage_optional_info;
setPageComplete(RefactoringStatus.createInfoStatus(message));
} else {
setPageComplete(new RefactoringStatus());
getContainer().updateMessage();
}
}
/*
* @see org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage#validateTextField(String)
*/
@Override
protected RefactoringStatus validateTextField(String text) {
final MoveInnerToTopRefactoring refactoring= getMoveRefactoring();
refactoring.setEnclosingInstanceName(text);
if (refactoring.isCreatingInstanceFieldMandatory() || !text.isEmpty()) {
return refactoring.checkEnclosingInstanceName(text);
} else
return new RefactoringStatus();
}
}
public MoveInnerToTopWizard(Refactoring refactoring) {
super(refactoring, DIALOG_BASED_USER_INTERFACE);
setDefaultPageTitle(RefactoringMessages.MoveInnerToTopWizard_Move_Inner);
}
/*
* @see RefactoringWizard#addUserInputPages
*/
@Override
protected void addUserInputPages() {
final MoveInnerToTopRefactoring refactoring= getMoveRefactoring();
if (refactoring.isCreatingInstanceFieldPossible())
addPage(new MoveInnerToToplnputPage(refactoring.isCreatingInstanceFieldMandatory() ? refactoring.getEnclosingInstanceName() : "")); //$NON-NLS-1$
else
setChangeCreationCancelable(false);
}
private MoveInnerToTopRefactoring getMoveRefactoring() {
return (MoveInnerToTopRefactoring) getRefactoring();
}
}