blob: 3f8ba64eb3d4b2fbaa36dadadbfa4cda05acea2d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jsp.launching;
import java.io.File;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.variables.VariablesPlugin;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.window.Window;
import org.eclipse.jsp.JspPluginImages;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
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.DirectoryDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;
import org.eclipse.ui.model.WorkbenchLabelProvider;
/**
* Specifies the install location of Tomcat.
*/
public class TomcatTab extends AbstractLaunchConfigurationTab {
// Tomcat location
private Button fBrowseButton;
private Text fTomcatDir;
// WebApp location
private Button fProjectButton;
private Text fProjectText;
/**
* Constructs a new Tomcat tab
*/
public TomcatTab() {
super();
}
/**
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(Composite)
*/
public void createControl(Composite parent) {
Font font = parent.getFont();
Composite composite = new Composite(parent, SWT.NONE);
GridLayout workingDirLayout = new GridLayout();
workingDirLayout.numColumns = 3;
workingDirLayout.marginHeight = 0;
workingDirLayout.marginWidth = 0;
composite.setLayout(workingDirLayout);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
composite.setLayoutData(gd);
composite.setFont(font);
setControl(composite);
createVerticalSpacer(composite, 3);
Label label = new Label(composite, SWT.NONE);
label.setText(LaunchingMessages.getString("TomcatTab.3")); //$NON-NLS-1$
gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
gd.horizontalSpan = 3;
label.setLayoutData(gd);
label.setFont(font);
fTomcatDir = new Text(composite, SWT.SINGLE | SWT.BORDER);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
fTomcatDir.setLayoutData(gd);
fTomcatDir.setFont(font);
fTomcatDir.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent evt) {
updateLaunchConfigurationDialog();
}
});
fBrowseButton = createPushButton(composite, LaunchingMessages.getString("TomcatTab.21"), null); //$NON-NLS-1$
fBrowseButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent evt) {
handleTomcatBrowseButtonSelected();
}
});
createVerticalSpacer(composite, 3);
label = new Label(composite, SWT.NONE);
label.setText(LaunchingMessages.getString("TomcatTab.22")); //$NON-NLS-1$
gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
gd.horizontalSpan = 3;
label.setLayoutData(gd);
label.setFont(font);
fProjectText = new Text(composite, SWT.SINGLE | SWT.BORDER);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
fProjectText.setLayoutData(gd);
fProjectText.setFont(font);
fProjectText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent evt) {
updateLaunchConfigurationDialog();
}
});
fProjectButton = createPushButton(composite, LaunchingMessages.getString("TomcatTab.23"), null); //$NON-NLS-1$
fProjectButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent evt) {
handleProjectBrowseButtonSelected();
}
});
}
/**
* Show a dialog that lets the user select a project
* from the workspace
*/
protected void handleProjectBrowseButtonSelected() {
ILabelProvider lp= new WorkbenchLabelProvider();
ElementListSelectionDialog dialog= new ElementListSelectionDialog(getShell(), lp);
dialog.setElements(ResourcesPlugin.getWorkspace().getRoot().getProjects());
dialog.setMultipleSelection(false);
dialog.setTitle(LaunchingMessages.getString("TomcatTab.28")); //$NON-NLS-1$
dialog.setMessage(LaunchingMessages.getString("TomcatTab.29")); //$NON-NLS-1$
if (dialog.open() == Window.OK) {
Object[] elements= dialog.getResult();
if (elements != null && elements.length == 1) {
fProjectText.setText(((IResource)elements[0]).getName());
}
}
}
/**
* Show a dialog that lets the user select a tomcat install directory
*/
protected void handleTomcatBrowseButtonSelected() {
DirectoryDialog dialog = new DirectoryDialog(getShell());
dialog.setMessage(LaunchingMessages.getString("TomcatTab.4")); //$NON-NLS-1$
String currentWorkingDir = fTomcatDir.getText();
if (!currentWorkingDir.trim().equals("")) { //$NON-NLS-1$
File path = new File(currentWorkingDir);
if (path.exists()) {
dialog.setFilterPath(currentWorkingDir);
}
}
String selectedDirectory = dialog.open();
if (selectedDirectory != null) {
fTomcatDir.setText(selectedDirectory);
}
}
/**
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#dispose()
*/
public void dispose() {
// empty implementation
}
/**
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#isValid(ILaunchConfiguration)
*/
public boolean isValid(ILaunchConfiguration config) {
setErrorMessage(null);
setMessage(null);
String workingDirPath = fTomcatDir.getText().trim();
// resolve variables (if any)
String expansion;
try {
expansion = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(workingDirPath);
} catch (CoreException e) {
setErrorMessage(e.getMessage());
return false;
}
if (workingDirPath.length() > 0) {
File dir = new File(expansion);
if (!dir.exists()) {
setErrorMessage(LaunchingMessages.getString("TomcatTab.5")); //$NON-NLS-1$
return false;
}
if (!dir.isDirectory()) {
setErrorMessage(LaunchingMessages.getString("TomcatTab.6")); //$NON-NLS-1$
return false;
}
}
String projectName = fProjectText.getText().trim();
if (projectName.length() > 0) {
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
if (!project.exists()) {
setErrorMessage(LaunchingMessages.getString("TomcatTab.30")); //$NON-NLS-1$
return false;
}
}
return true;
}
/**
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(ILaunchConfigurationWorkingCopy)
*/
public void setDefaults(ILaunchConfigurationWorkingCopy config) {
config.setAttribute(TomcatLaunchDelegate.ATTR_CATALINA_HOME, "${catalina_home}"); //$NON-NLS-1$
config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_CLASSPATH_PROVIDER, TomcatLaunchDelegate.ID_TOMCAT_CLASSPATH_PROVIDER);
config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, "org.apache.catalina.startup.Bootstrap"); //$NON-NLS-1$
}
/**
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(ILaunchConfiguration)
*/
public void initializeFrom(ILaunchConfiguration configuration) {
try {
fTomcatDir.setText(configuration.getAttribute(TomcatLaunchDelegate.ATTR_CATALINA_HOME, "")); //$NON-NLS-1$
fProjectText.setText(configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, "")); //$NON-NLS-1$
if (configuration.isWorkingCopy()) {
// set VM args
ILaunchConfigurationWorkingCopy workingCopy = (ILaunchConfigurationWorkingCopy)configuration;
String home = TomcatLaunchDelegate.getCatalinaHome();
IPath endorsed = new Path(home).append("common").append("endorsed"); //$NON-NLS-1$//$NON-NLS-2$
IPath temp = new Path(home).append("temp"); //$NON-NLS-1$
StringBuffer args = new StringBuffer();
args.append("-Djava.endorsed.dirs=\""); //$NON-NLS-1$
args.append(endorsed.toOSString());
args.append("\" "); //$NON-NLS-1$
args.append("-Dcatalina.base=\""); //$NON-NLS-1$
args.append(home);
args.append("\" "); //$NON-NLS-1$
args.append("-Dcatalina.home=\""); //$NON-NLS-1$
args.append(home);
args.append("\" "); //$NON-NLS-1$
args.append("-Djava.io.tmpdir=\""); //$NON-NLS-1$
args.append(temp.toOSString());
args.append("\""); //$NON-NLS-1$
workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, args.toString());
workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, "start"); //$NON-NLS-1$
}
} catch (CoreException e) {
setErrorMessage(e.getMessage());
DebugPlugin.log(e);
}
}
/**
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(ILaunchConfigurationWorkingCopy)
*/
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
configuration.setAttribute(TomcatLaunchDelegate.ATTR_CATALINA_HOME, getAttributeValueFrom(fTomcatDir));
String projectName = getAttributeValueFrom(fProjectText);
configuration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, projectName);
}
/**
* Retuns the string in the text widget, or <code>null</code> if empty.
*
* @return text or <code>null</code>
*/
protected String getAttributeValueFrom(Text text) {
String content = text.getText().trim();
if (content.length() > 0) {
return content;
}
return null;
}
/**
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName()
*/
public String getName() {
return LaunchingMessages.getString("TomcatTab.7"); //$NON-NLS-1$
}
/**
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#getImage()
*/
public Image getImage() {
return JspPluginImages.getImage(JspPluginImages.IMG_OBJ_TOMCAT);
}
}