/******************************************************************************* * Copyright (c) 2003, 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 *******************************************************************************/ package org.eclipse.jst.server.tomcat.ui.internal.editor; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jst.server.core.IWebModule; import org.eclipse.jst.server.tomcat.core.internal.ITomcatServerWorkingCopy; import org.eclipse.jst.server.tomcat.core.internal.TomcatConfiguration; import org.eclipse.jst.server.tomcat.core.internal.TomcatServer; import org.eclipse.jst.server.tomcat.core.internal.WebModule; import org.eclipse.jst.server.tomcat.core.internal.command.AddModuleCommand; import org.eclipse.jst.server.tomcat.core.internal.command.AddWebModuleCommand; import org.eclipse.jst.server.tomcat.core.internal.command.ModifyWebModuleCommand; import org.eclipse.jst.server.tomcat.core.internal.command.RemoveModuleCommand; import org.eclipse.jst.server.tomcat.core.internal.command.RemoveWebModuleCommand; 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.TomcatUIPlugin; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.widgets.ExpandableComposite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.help.IWorkbenchHelpSystem; import org.eclipse.wst.server.core.IModule; import org.eclipse.wst.server.core.ServerUtil; import org.eclipse.wst.server.ui.ServerUICore; import org.eclipse.wst.server.ui.editor.ServerEditorPart; /** * Tomcat configuration web module editor page. */ public class ConfigurationWebModuleEditorPart extends ServerEditorPart { protected ITomcatServerWorkingCopy server2; protected TomcatConfiguration configuration; protected Table webAppTable; protected int selection = -1; protected Button addProject; protected Button addExtProject; protected Button remove; protected Button edit; protected PropertyChangeListener listener; /** * ConfigurationWebModuleEditorPart constructor comment. */ public ConfigurationWebModuleEditorPart() { super(); } /** * */ protected void addChangeListener() { listener = new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { if (TomcatConfiguration.MODIFY_WEB_MODULE_PROPERTY.equals(event.getPropertyName())) { initialize(); } else if (TomcatConfiguration.ADD_WEB_MODULE_PROPERTY.equals(event.getPropertyName())) { initialize(); } else if (TomcatConfiguration.REMOVE_WEB_MODULE_PROPERTY.equals(event.getPropertyName())) { initialize(); } } }; configuration.addPropertyChangeListener(listener); } /** * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) */ public void createPartControl(Composite parent) { FormToolkit toolkit = getFormToolkit(parent.getDisplay()); ScrolledForm form = toolkit.createScrolledForm(parent); toolkit.decorateFormHeading(form.getForm()); form.setText(Messages.configurationEditorWebModulesPageTitle); form.setImage(TomcatUIPlugin.getImage(TomcatUIPlugin.IMG_WEB_MODULE)); GridLayout layout = new GridLayout(); layout.marginTop = 6; layout.marginLeft = 6; form.getBody().setLayout(layout); Section section = toolkit.createSection(form.getBody(), ExpandableComposite.TITLE_BAR | Section.DESCRIPTION); section.setText(Messages.configurationEditorWebModulesSection); section.setDescription(Messages.configurationEditorWebModulesDescription); section.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite composite = toolkit.createComposite(section); layout = new GridLayout(); layout.numColumns = 2; layout.marginHeight = 5; layout.marginWidth = 10; layout.verticalSpacing = 5; layout.horizontalSpacing = 15; composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); IWorkbenchHelpSystem whs = PlatformUI.getWorkbench().getHelpSystem(); whs.setHelp(composite, ContextIds.CONFIGURATION_EDITOR_WEBMODULES); toolkit.paintBordersFor(composite); section.setClient(composite); webAppTable = toolkit.createTable(composite, SWT.V_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION); webAppTable.setHeaderVisible(true); webAppTable.setLinesVisible(true); whs.setHelp(webAppTable, ContextIds.CONFIGURATION_EDITOR_WEBMODULES_LIST); //toolkit.paintBordersFor(webAppTable); TableLayout tableLayout = new TableLayout(); TableColumn col = new TableColumn(webAppTable, SWT.NONE); col.setText(Messages.configurationEditorPathColumn); ColumnWeightData colData = new ColumnWeightData(8, 85, true); tableLayout.addColumnData(colData); TableColumn col2 = new TableColumn(webAppTable, SWT.NONE); col2.setText(Messages.configurationEditorDocBaseColumn); colData = new ColumnWeightData(13, 135, true); tableLayout.addColumnData(colData); TableColumn col3 = new TableColumn(webAppTable, SWT.NONE); col3.setText(Messages.configurationEditorProjectColumn); colData = new ColumnWeightData(8, 85, true); tableLayout.addColumnData(colData); TableColumn col4 = new TableColumn(webAppTable, SWT.NONE); col4.setText(Messages.configurationEditorReloadColumn); colData = new ColumnWeightData(7, 75, true); tableLayout.addColumnData(colData); webAppTable.setLayout(tableLayout); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.widthHint = 450; data.heightHint = 120; webAppTable.setLayoutData(data); webAppTable.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { selectWebApp(); } }); Composite rightPanel = toolkit.createComposite(composite); layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; rightPanel.setLayout(layout); data = new GridData(); rightPanel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING)); //toolkit.paintBordersFor(rightPanel); // buttons still to add: // add project, add external module, remove module addProject = toolkit.createButton(rightPanel, Messages.configurationEditorAddProjectModule, SWT.PUSH); data = new GridData(GridData.FILL_HORIZONTAL); addProject.setLayoutData(data); whs.setHelp(addProject, ContextIds.CONFIGURATION_EDITOR_WEBMODULES_ADD_PROJECT); // disable the add project module button if there are no // web projects in the workbench if (!canAddWebModule()) addProject.setEnabled(false); else { addProject.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { WebModuleDialog dialog = new WebModuleDialog(getEditorSite().getShell(), getServer(), server2, configuration, true); dialog.open(); if (dialog.getReturnCode() == IDialogConstants.OK_ID) { execute(new AddModuleCommand(getServer(), dialog.module4)); } } }); } addExtProject = toolkit.createButton(rightPanel, Messages.configurationEditorAddExternalModule, SWT.PUSH); data = new GridData(GridData.FILL_HORIZONTAL); addExtProject.setLayoutData(data); addExtProject.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { WebModuleDialog dialog = new WebModuleDialog(getEditorSite().getShell(), getServer(), server2, configuration, false); dialog.open(); if (dialog.getReturnCode() == IDialogConstants.OK_ID) { execute(new AddWebModuleCommand(configuration, dialog.getWebModule())); } } }); whs.setHelp(addExtProject, ContextIds.CONFIGURATION_EDITOR_WEBMODULES_ADD_EXTERNAL); edit = toolkit.createButton(rightPanel, Messages.editorEdit, SWT.PUSH); data = new GridData(GridData.FILL_HORIZONTAL); edit.setLayoutData(data); edit.setEnabled(false); edit.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (selection < 0) return; WebModule module = (WebModule) configuration.getWebModules().get(selection); WebModuleDialog dialog = new WebModuleDialog(getEditorSite().getShell(), getServer(), server2, configuration, module); dialog.open(); if (dialog.getReturnCode() == IDialogConstants.OK_ID) { execute(new ModifyWebModuleCommand(configuration, selection, dialog.getWebModule())); } } }); whs.setHelp(edit, ContextIds.CONFIGURATION_EDITOR_WEBMODULES_EDIT); remove = toolkit.createButton(rightPanel, Messages.editorRemove, SWT.PUSH); data = new GridData(GridData.FILL_HORIZONTAL); remove.setLayoutData(data); remove.setEnabled(false); remove.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (selection < 0) return; TableItem item = webAppTable.getItem(selection); if (item.getData() != null) { IModule module = (IModule) item.getData(); execute(new RemoveModuleCommand(getServer(), module)); } else { execute(new RemoveWebModuleCommand(configuration, selection)); } remove.setEnabled(false); edit.setEnabled(false); selection = -1; } }); whs.setHelp(remove, ContextIds.CONFIGURATION_EDITOR_WEBMODULES_REMOVE); form.setContent(section); form.reflow(true); initialize(); } protected boolean canAddWebModule() { IModule[] modules = ServerUtil.getModules(server.getServerType().getRuntimeType().getModuleTypes()); if (modules != null) { int size = modules.length; for (int i = 0; i < size; i++) { IWebModule webModule = (IWebModule) modules[i].loadAdapter(IWebModule.class, null); if (webModule != null) { IStatus status = server.canModifyModules(new IModule[] { modules[i] }, null, null); if (status != null && status.isOK()) return true; } } } return false; } public void dispose() { super.dispose(); if (configuration != null) configuration.removePropertyChangeListener(listener); } /* (non-Javadoc) * Initializes the editor part with a site and input. */ public void init(IEditorSite site, IEditorInput input) { super.init(site, input); TomcatServer ts = (TomcatServer) server.loadAdapter(TomcatServer.class, null); try { configuration = ts.getTomcatConfiguration(); } catch (Exception e) { // ignore } if (configuration != null) addChangeListener(); if (server != null) server2 = (ITomcatServerWorkingCopy) server.loadAdapter(ITomcatServerWorkingCopy.class, null); initialize(); } /** * */ protected void initialize() { if (webAppTable == null) return; webAppTable.removeAll(); setErrorMessage(null); ILabelProvider labelProvider = ServerUICore.getLabelProvider(); List list = configuration.getWebModules(); Iterator iterator = list.iterator(); while (iterator.hasNext()) { WebModule module = (WebModule) iterator.next(); TableItem item = new TableItem(webAppTable, SWT.NONE); String memento = module.getMemento(); String projectName = ""; Image projectImage = null; if (memento != null && memento.length() > 0) { projectName = NLS.bind(Messages.configurationEditorProjectMissing, new String[] {memento}); projectImage = TomcatUIPlugin.getImage(TomcatUIPlugin.IMG_PROJECT_MISSING); IModule module2 = ServerUtil.getModule(memento); if (module2 != null) { projectName = labelProvider.getText(module2); projectImage = labelProvider.getImage(module2); item.setData(module2); } } String reload = module.isReloadable() ? Messages.configurationEditorReloadEnabled : Messages.configurationEditorReloadDisabled; String[] s = new String[] {module.getPath(), module.getDocumentBase(), projectName, reload}; item.setText(s); item.setImage(0, TomcatUIPlugin.getImage(TomcatUIPlugin.IMG_WEB_MODULE)); if (projectImage != null) item.setImage(2, projectImage); if (!isDocumentBaseValid(module.getDocumentBase())) { item.setImage(1, TomcatUIPlugin.getImage(TomcatUIPlugin.IMG_PROJECT_MISSING)); setErrorMessage(NLS.bind(Messages.errorMissingWebModule, module.getDocumentBase())); } } labelProvider = null; if (readOnly) { addProject.setEnabled(false); addExtProject.setEnabled(false); edit.setEnabled(false); remove.setEnabled(false); } else { addProject.setEnabled(canAddWebModule()); addExtProject.setEnabled(true); } } /** * */ protected void selectWebApp() { if (readOnly) return; try { selection = webAppTable.getSelectionIndex(); remove.setEnabled(true); edit.setEnabled(true); } catch (Exception e) { selection = -1; remove.setEnabled(false); edit.setEnabled(false); } } protected boolean isDocumentBaseValid(String s) { if (s == null || s.length() < 2) return true; // check absolute path File f = new File(s); if (f.exists()) return true; // check workspace try { if (ResourcesPlugin.getWorkspace().getRoot().getProject(s).exists()) return true; } catch (Exception e) { // bad path } if (s.startsWith(configuration.getDocBasePrefix())) { try { String t = s.substring(configuration.getDocBasePrefix().length()); if (ResourcesPlugin.getWorkspace().getRoot().getProject(t).exists()) return true; } catch (Exception e) { // bad path } } // check server relative path try { f = server.getRuntime().getLocation().append(s).toFile(); if (f.exists()) return true; } catch (Exception e) { // bad path } return false; } /* * @see IWorkbenchPart#setFocus() */ public void setFocus() { if (webAppTable != null) webAppTable.setFocus(); } }