| /******************************************************************************* |
| * Copyright (c) 2003, 2006 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.jst.server.tomcat.ui.internal.editor; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.dialogs.IDialogConstants; |
| import org.eclipse.jface.viewers.ILabelProvider; |
| import org.eclipse.jst.server.core.IWebModule; |
| import org.eclipse.jst.server.tomcat.core.internal.ITomcatConfiguration; |
| import org.eclipse.jst.server.tomcat.core.internal.ITomcatServer; |
| import org.eclipse.jst.server.tomcat.core.internal.WebModule; |
| import org.eclipse.jst.server.tomcat.ui.internal.ContextIds; |
| import org.eclipse.jst.server.tomcat.ui.internal.Messages; |
| import org.eclipse.jst.server.tomcat.ui.internal.Trace; |
| 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.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.Control; |
| import org.eclipse.swt.widgets.DirectoryDialog; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.swt.widgets.Table; |
| import org.eclipse.swt.widgets.TableItem; |
| import org.eclipse.swt.widgets.Text; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.help.IWorkbenchHelpSystem; |
| |
| import org.eclipse.wst.server.core.IModule; |
| import org.eclipse.wst.server.core.IServerAttributes; |
| import org.eclipse.wst.server.core.ServerUtil; |
| import org.eclipse.wst.server.ui.ServerUICore; |
| /** |
| * Dialog to add or modify web modules. |
| */ |
| public class WebModuleDialog extends Dialog { |
| protected IModule module4; |
| protected WebModule module; |
| protected boolean isEdit; |
| protected boolean isProject; |
| protected Text docBase; |
| protected IServerAttributes server2; |
| protected ITomcatServer server; |
| protected ITomcatConfiguration config; |
| |
| protected Table projTable; |
| |
| /** |
| * WebModuleDialog constructor comment. |
| * |
| * @param parentShell a shell |
| * @param server2 a server |
| * @param server a Tomcat server |
| * @param config a Tomcat server configuration |
| * @param module a module |
| */ |
| public WebModuleDialog(Shell parentShell, IServerAttributes server2, ITomcatServer server, ITomcatConfiguration config, WebModule module) { |
| super(parentShell); |
| this.module = module; |
| this.server2 = server2; |
| this.server = server; |
| this.config = config; |
| isEdit = true; |
| } |
| |
| /** |
| * WebModuleDialog constructor comment. |
| * |
| * @param parentShell a shell |
| * @param server2 a server |
| * @param server a Tomcat server |
| * @param config a Tomcat server configuration |
| * @param isProject true if it is a project |
| */ |
| public WebModuleDialog(Shell parentShell, IServerAttributes server2, ITomcatServer server, ITomcatConfiguration config, boolean isProject) { |
| this(parentShell, server2, server, config, new WebModule("/", "", null, true)); |
| isEdit = false; |
| this.isProject = isProject; |
| } |
| |
| /** |
| * |
| */ |
| protected void configureShell(Shell newShell) { |
| super.configureShell(newShell); |
| if (isEdit) |
| newShell.setText(Messages.configurationEditorWebModuleDialogTitleEdit); |
| else |
| newShell.setText(Messages.configurationEditorWebModuleDialogTitleAdd); |
| } |
| |
| /** |
| * Creates and returns the contents of the upper part |
| * of this dialog (above the button bar). |
| * <p> |
| * The <code>Dialog</code> implementation of this framework method |
| * creates and returns a new <code>Composite</code> with |
| * standard margins and spacing. Subclasses should override. |
| * </p> |
| * |
| * @param parent the parent composite to contain the dialog area |
| * @return the dialog area control |
| */ |
| protected Control createDialogArea(Composite parent) { |
| // create a composite with standard margins and spacing |
| Composite composite = new Composite(parent, SWT.NONE); |
| GridLayout layout = new GridLayout(); |
| layout.numColumns = 3; |
| layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); |
| layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); |
| layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); |
| layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); |
| composite.setLayout(layout); |
| composite.setLayoutData(new GridData(GridData.FILL_BOTH)); |
| composite.setFont(parent.getFont()); |
| IWorkbenchHelpSystem whs = PlatformUI.getWorkbench().getHelpSystem(); |
| whs.setHelp(composite, ContextIds.CONFIGURATION_EDITOR_WEBMODULE_DIALOG); |
| // add project field if we are adding a project |
| if (!isEdit && isProject) { |
| Label l = new Label(composite, SWT.NONE); |
| l.setText(Messages.configurationEditorWebModuleDialogProjects); |
| GridData data = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); |
| l.setLayoutData(data); |
| |
| projTable = new Table(composite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE); |
| data = new GridData(); |
| data.widthHint = 150; |
| data.heightHint = 75; |
| projTable.setLayoutData(data); |
| whs.setHelp(projTable, ContextIds.CONFIGURATION_EDITOR_WEBMODULE_DIALOG_PROJECT); |
| |
| // fill table with web module projects |
| ILabelProvider labelProvider = ServerUICore.getLabelProvider(); |
| IModule[] modules = ServerUtil.getModules(server2.getServerType().getRuntimeType().getModuleTypes()); |
| if (modules != null) { |
| int size = modules.length; |
| for (int i = 0; i < size; i++) { |
| IModule module3 = modules[i]; |
| if ("jst.web".equals(module3.getModuleType().getId())) { |
| IStatus status = server2.canModifyModules(new IModule[] { module3 }, null, null); |
| if (status != null && status.isOK()) { |
| TableItem item = new TableItem(projTable, SWT.NONE); |
| item.setText(0, labelProvider.getText(module3)); |
| item.setImage(0, labelProvider.getImage(module3)); |
| item.setData(module3); |
| } |
| } |
| } |
| } |
| labelProvider.dispose(); |
| new Label(composite, SWT.NONE).setText(" "); |
| } |
| |
| new Label(composite, SWT.NONE).setText(Messages.configurationEditorWebModuleDialogDocumentBase); |
| docBase = new Text(composite, SWT.BORDER); |
| GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); |
| docBase.setLayoutData(data); |
| docBase.setText(module.getDocumentBase()); |
| whs.setHelp(docBase, ContextIds.CONFIGURATION_EDITOR_WEBMODULE_DIALOG_DOCBASE); |
| |
| // disable document base for project modules |
| if (isProject || (module.getMemento() != null && module.getMemento().length() > 0)) |
| docBase.setEditable(false); |
| else { |
| docBase.addModifyListener(new ModifyListener() { |
| public void modifyText(ModifyEvent e) { |
| module = new WebModule(module.getPath(), docBase.getText(), module.getMemento(), module.isReloadable()); |
| validate(); |
| } |
| }); |
| } |
| |
| if (isEdit || isProject) |
| new Label(composite, SWT.NONE).setText(" "); |
| else { |
| Button browse = new Button(composite, SWT.NONE); |
| browse.setText(Messages.browse); |
| browse.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent se) { |
| try { |
| DirectoryDialog dialog = new DirectoryDialog(getShell()); |
| dialog.setMessage(Messages.configurationEditorWebModuleDialogSelectDirectory); |
| String selectedDirectory = dialog.open(); |
| if (selectedDirectory != null) |
| docBase.setText(selectedDirectory); |
| } catch (Exception e) { |
| Trace.trace(Trace.SEVERE, "Error browsing", e); |
| } |
| } |
| }); |
| } |
| |
| // path (context-root) |
| new Label(composite, SWT.NONE).setText(Messages.configurationEditorWebModuleDialogPath); |
| final Text path = new Text(composite, SWT.BORDER); |
| data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); |
| data.widthHint = 150; |
| path.setLayoutData(data); |
| path.setText(module.getPath()); |
| /*if (module.getMemento() != null && module.getMemento().length() > 0) |
| path.setEditable(false); |
| else*/ |
| path.addModifyListener(new ModifyListener() { |
| public void modifyText(ModifyEvent e) { |
| module = new WebModule(path.getText(), module.getDocumentBase(), module.getMemento(), module.isReloadable()); |
| } |
| }); |
| whs.setHelp(path, ContextIds.CONFIGURATION_EDITOR_WEBMODULE_DIALOG_PATH); |
| |
| new Label(composite, SWT.NONE).setText(""); |
| |
| if (!isProject) { |
| // auto reload |
| new Label(composite, SWT.NONE).setText(""); |
| final Button reloadable = new Button(composite, SWT.CHECK); |
| reloadable.setText(Messages.configurationEditorWebModuleDialogReloadEnabled); |
| data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); |
| reloadable.setLayoutData(data); |
| reloadable.setSelection(module.isReloadable()); |
| reloadable.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| module = new WebModule(module.getPath(), module.getDocumentBase(), module.getMemento(), reloadable.getSelection()); |
| } |
| }); |
| whs.setHelp(reloadable, ContextIds.CONFIGURATION_EDITOR_WEBMODULE_DIALOG_RELOAD); |
| } |
| |
| if (!isEdit && isProject) { |
| projTable.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent event) { |
| try { |
| IModule module3 = (IModule) projTable.getSelection()[0].getData(); |
| IWebModule module2 = (IWebModule) module3.loadAdapter(IWebModule.class, null); |
| String contextRoot = module2.getContextRoot(); |
| if (contextRoot != null && !contextRoot.startsWith("/") && contextRoot.length() > 0) |
| contextRoot = "/" + contextRoot; |
| module = new WebModule(contextRoot, module3.getName(), module3.getId(), module.isReloadable()); |
| docBase.setText(module3.getName()); |
| path.setText(contextRoot); |
| module4 = module3; |
| } catch (Exception e) { |
| // ignore |
| } |
| validate(); |
| } |
| }); |
| new Label(composite, SWT.NONE).setText(""); |
| } |
| |
| Dialog.applyDialogFont(composite); |
| return composite; |
| } |
| |
| protected Control createButtonBar(Composite parent) { |
| Control control = super.createButtonBar(parent); |
| validate(); |
| |
| return control; |
| } |
| |
| protected void validate() { |
| boolean ok = true; |
| if (module.getDocumentBase() == null || module.getDocumentBase().length() < 1) |
| ok = false; |
| |
| getButton(IDialogConstants.OK_ID).setEnabled(ok); |
| } |
| |
| /** |
| * Return the mime mapping. |
| * |
| * @return org.eclipse.jst.server.tomcat.WebModule |
| */ |
| public WebModule getWebModule() { |
| return module; |
| } |
| } |