/*******************************************************************************
* Copyright (c) 2014, 2015 Cisco Systems, Inc. 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
*
*******************************************************************************/
package com.cisco.yangide.ext.refactoring.ui;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.ltk.core.refactoring.participants.RenameRefactoring;
import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
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.Label;
import org.eclipse.swt.widgets.Text;
import com.cisco.yangide.ext.refactoring.rename.YangRenameProcessor;
/**
* @author Konstantin Zaitsev
* @date Jul 30, 2014
*/
public class RenameInputWizardPage extends UserInputWizardPage {
// private Button updateReferences;
private Text newNameTxt;
private String initialValue;
public RenameInputWizardPage(String description, String initialValue) {
super("RenameInputPage");
this.initialValue = initialValue == null ? "" : initialValue;
setDescription(description);
}
@Override
public void createControl(Composite parent) {
Composite content = new Composite(parent, SWT.NONE);
content.setLayout(new GridLayout(2, false));
new Label(content, SWT.NONE).setText("New name:");
newNameTxt = new Text(content, SWT.BORDER);
newNameTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
newNameTxt.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
textModified();
}
});
newNameTxt.setText(initialValue);
newNameTxt.selectAll();
new Label(content, SWT.NONE).setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, false, 2, 1));
// updateReferences = new Button(content, SWT.CHECK);
// updateReferences.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, false, 2, 1));
// updateReferences.setText("Update references");
// updateReferences.setSelection(true);
// final YangRenameProcessor processor = (YangRenameProcessor) ((RenameRefactoring)
// getRefactoring())
// .getProcessor();
// processor.setUpdateReferences(updateReferences.getSelection());
// updateReferences.addSelectionListener(new SelectionAdapter() {
// @Override
// public void widgetSelected(SelectionEvent e) {
// processor.setUpdateReferences(updateReferences.getSelection());
// }
// });
Dialog.applyDialogFont(content);
setControl(content);
}
/**
* 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 txt = newNameTxt.getText();
if ("".equals(txt)) { //$NON-NLS-1$
setPageComplete(false);
setErrorMessage(null);
setMessage(null);
return;
}
if (initialValue.equals(txt)) {
setPageComplete(false);
setErrorMessage(null);
setMessage(null);
return;
}
RefactoringStatus status = validateTextField(txt);
if (status == null) {
status = new RefactoringStatus();
}
setPageComplete(status);
}
private RefactoringStatus validateTextField(String txt) {
YangRenameProcessor<?> processor = (YangRenameProcessor<?>) ((RenameRefactoring) getRefactoring())
.getProcessor();
processor.setNewName(txt);
return null;
}
@Override
public void setVisible(boolean visible) {
if (visible) {
YangRenameProcessor<?> processor = (YangRenameProcessor<?>) ((RenameRefactoring) getRefactoring())
.getProcessor();
if (processor != null) {
String newName = processor.getNewName();
if (newName != null && newName.length() > 0 && !newName.equals(initialValue)) {
newNameTxt.setText(newName);
newNameTxt.setSelection(0, newName.length());
}
}
}
super.setVisible(visible);
}
protected boolean getBooleanSetting(String key, boolean defaultValue) {
String update = getRefactoringSettings().get(key);
if (update != null) {
return Boolean.valueOf(update).booleanValue();
} else {
return defaultValue;
}
}
}