blob: 4c5c2f0476da1746267e2e333b0d28eff01a59e9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2007 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
* David Schneider, david.schneider@unisys.com - [142500] WTP properties pages fonts don't follow Eclipse preferences
*******************************************************************************/
package org.eclipse.jst.j2ee.internal.ui;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jst.j2ee.internal.J2EEPropertiesConstants;
import org.eclipse.jst.j2ee.internal.ui.refactoring.RenameContextRootChange;
import org.eclipse.jst.j2ee.internal.ui.refactoring.RenameContextRootRefactoringProcessor;
import org.eclipse.jst.j2ee.internal.ui.refactoring.RenameContextRootWizard;
import org.eclipse.jst.j2ee.project.JavaEEProjectUtilities;
import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
import org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation;
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.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.PropertyPage;
import org.eclipse.wst.common.componentcore.internal.util.ComponentUtilities;
public class J2EEPropertiesPage extends PropertyPage implements J2EEPropertiesConstants {
private Text contextRootNameField;
private boolean dirty = false;
/**
* @see org.eclipse.jface.preference.PreferencePage#createContents(Composite)
*/
@Override
protected Control createContents(Composite parent) {
Composite c = parent;
IProject project = getProject();
if (project != null
&& JavaEEProjectUtilities.getJ2EEProjectType(project).equals(
JavaEEProjectUtilities.DYNAMIC_WEB)
|| JavaEEProjectUtilities.getJ2EEProjectType(project).equals(
JavaEEProjectUtilities.STATIC_WEB)) {
c = new Composite(parent, SWT.NONE);
Label contextRootLabel = new Label(c, SWT.NONE);
contextRootLabel.setText(J2EEPropertiesConstants.WEB_CONTEXT_ROOT);
contextRootNameField = new Text(c, SWT.BORDER);
contextRootNameField.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
dirty = !contextRootNameField.getText().equals(
ComponentUtilities.getServerContextRoot(getProject()));
validateText();
}
});
GridLayoutFactory.fillDefaults().numColumns(2).applyTo(c);
GridDataFactory.defaultsFor(contextRootLabel).applyTo(contextRootLabel);
GridDataFactory.defaultsFor(contextRootNameField).grab(true, false).applyTo(
contextRootNameField);
}
applyDialogFont(c);
return c;
}
@Override
public void createControl(Composite parent) {
super.createControl(parent);
refresh();
refreshApplyButton();
}
private void validateText() {
IStatus status = RenameContextRootChange
.validateContextRoot(contextRootNameField.getText());
if (!status.isOK()) {
setErrorMessage(status.getMessage());
setValid(false);
}
else {
setErrorMessage(null);
setValid(true);
refreshApplyButton();
}
}
private void refreshApplyButton() {
if (dirty) {
if (getApplyButton() != null) {
getApplyButton().setEnabled(true);
}
}
else {
if (getApplyButton() != null) {
getApplyButton().setEnabled(false);
}
}
}
public void refresh() {
if (contextRootNameField != null) {
String s = ComponentUtilities.getServerContextRoot(getProject());
if (s == null) {
s = ""; //$NON-NLS-1$
}
contextRootNameField.setText(s);
validateText();
}
}
private IProject getProject() {
Object element = getElement();
if (element == null) {
return null;
}
if (element instanceof IProject) {
IProject project = (IProject) element;
return project;
}
return null;
}
private int doRefactor() {
int id = IDialogConstants.OK_ID;
if (dirty) {
RenameContextRootRefactoringProcessor processor = new RenameContextRootRefactoringProcessor();
processor.setProject(getProject());
processor.setNewName(contextRootNameField.getText());
RenameContextRootWizard wizard = new RenameContextRootWizard(processor,
RefactoringWizard.DIALOG_BASED_USER_INTERFACE);
wizard.setPrompt(false);
RefactoringWizardOpenOperation operation = new RefactoringWizardOpenOperation(wizard);
try {
id = operation.run(getShell(), ""); //$NON-NLS-1$
}
catch (InterruptedException ee) {
}
if (id == IDialogConstants.OK_ID) {
dirty = false;
refresh();
}
}
return id;
}
@Override
protected void performApply() {
doRefactor();
}
@Override
protected void performDefaults() {
refresh();
}
@Override
public boolean performOk() {
return doRefactor() == IDialogConstants.OK_ID;
}
}