org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/IJettyServer.java
public interface IJettyServer extends IURLProvider
{

    /**
     * Property which specifies whether this server is configured for testing environment.
     */
    public static final String PROPERTY_TEST_ENVIRONMENT = "testEnvironment";

    /**
     * Property which specifies the directory where the server instance exists. If not specified, instance directory is derived from the textEnvironment
     * setting.
     */
    public static final String PROPERTY_INSTANCE_DIR = "instanceDir";

    /**
     * Property which specifies the directory where web applications are published.
     */
    public static final String PROPERTY_DEPLOY_DIR = "deployDir";

    /**
     * Property which specifies if modules should be served without publishing.
     */
    public static final String PROPERTY_SERVE_MODULES_WITHOUT_PUBLISH = "serveModulesWithoutPublish";

    IJettyConfiguration getJettyConfiguration() throws CoreException;

    IJettyConfiguration getServerConfiguration() throws CoreException;

}
org.eclipse.jst.server.jetty.ui/src/org/eclipse/jst/server/jetty/ui/internal/ContextIds.java
public interface ContextIds
{

    public static final String RUNTIME_COMPOSITE = JettyUIPlugin.__PLUGIN_ID + ".twnr0000";

    public static final String CONFIGURATION_EDITOR_PORTS = JettyUIPlugin.__PLUGIN_ID + ".tecp0000";
    public static final String CONFIGURATION_EDITOR_PORTS_LIST = JettyUIPlugin.__PLUGIN_ID + ".tecp0002";

    public static final String CONFIGURATION_EDITOR_WEBMODULES = JettyUIPlugin.__PLUGIN_ID + ".tecw0000";
    public static final String CONFIGURATION_EDITOR_WEBMODULES_LIST = JettyUIPlugin.__PLUGIN_ID + ".tecw0002";
    public static final String CONFIGURATION_EDITOR_WEBMODULES_ADD_PROJECT = JettyUIPlugin.__PLUGIN_ID + ".tecw0004";
    public static final String CONFIGURATION_EDITOR_WEBMODULES_ADD_EXTERNAL = JettyUIPlugin.__PLUGIN_ID + ".tecw0006";
    public static final String CONFIGURATION_EDITOR_WEBMODULES_EDIT = JettyUIPlugin.__PLUGIN_ID + ".tecw0008";
    public static final String CONFIGURATION_EDITOR_WEBMODULES_REMOVE = JettyUIPlugin.__PLUGIN_ID + ".tecw0010";

    public static final String CONFIGURATION_EDITOR_WEBMODULE_DIALOG = JettyUIPlugin.__PLUGIN_ID + ".tdwm0000";
    public static final String CONFIGURATION_EDITOR_WEBMODULE_DIALOG_PROJECT = JettyUIPlugin.__PLUGIN_ID + ".tdpr0002";
    public static final String CONFIGURATION_EDITOR_WEBMODULE_DIALOG_PATH = JettyUIPlugin.__PLUGIN_ID + ".tdpr0004";
    public static final String CONFIGURATION_EDITOR_WEBMODULE_DIALOG_DOCBASE = JettyUIPlugin.__PLUGIN_ID + ".tdpr0006";
}
org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/IJettyConfiguration.java
public interface IJettyConfiguration
{

    public static final String __NAME_PROPERTY = "name";
    public static final String __PORT_PROPERTY = "port";
    public static final String __MODIFY_PORT_PROPERTY = "modifyPort";

    public static final String __MODIFY_WEB_MODULE_PROPERTY = "modifyWebModule";
    public static final String __ADD_WEB_MODULE_PROPERTY = "addWebModule";
    public static final String __REMOVE_WEB_MODULE_PROPERTY = "removeWebModule";

    /**
     * Returns a list of ServerPorts that this configuration uses.
     * 
     * @return the server ports
     */
    Collection<ServerPort> getServerPorts();

    /**
     * Returns the main server port.
     * 
     * @return ServerPort
     */
    ServerPort getMainPort();
    
    /**
     * Returns the admin port
     * 
     * @return ServerPort
     */
    ServerPort getAdminPort();

    /**
     * 
     * @param path
     * @param monitor
     * @throws CoreException
     */
    void load(IPath path, IPath runtimeBaseDirectory, IProgressMonitor monitor) throws CoreException;

    /**
     * 
     * @param path
     * @param monitor
     * @throws CoreException
     */
    void load(IFolder folder, IPath runtimeBaseDirectory, IProgressMonitor monitor) throws CoreException;

    /**
     * Save the information held by this object to the given directory.
     * 
     * @param folder
     *            a folder
     * @param monitor
     *            a progress monitor
     * @throws CoreException
     */
    void save(IFolder folder, IProgressMonitor monitor) throws CoreException;

    /**
     * Return a list of the web modules in this server.
     * 
     * @return the web modules
     */
    public List<WebModule> getWebModules();

    void addWebModule(int i, IJettyWebModule module);

    void removeWebModule(int i);

    String getWebModuleURL(IModule module);

    String getDocBasePrefix();

    void importFromPath(IPath path, IPath runtimeBaseDirectory, boolean isTestEnv, IProgressMonitor monitor) throws CoreException;

    IStatus cleanupServer(IPath confDir, IPath installDir, IProgressMonitor monitor);

    IStatus backupAndPublish(IPath confDir, boolean b, IProgressMonitor monitor);

    IStatus localizeConfiguration(IPath confDir, IPath serverDeployDirectory, IJettyServer jettyServer, IProgressMonitor subMonitorFor);

    void addPropertyChangeListener(PropertyChangeListener listener);

    void removePropertyChangeListener(PropertyChangeListener listener);
}
org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/IJettyConfigurationWorkingCopy.java
public interface IJettyConfigurationWorkingCopy extends IJettyConfiguration
{
    /**
     * Add a web module.
     * 
     * @param index
     *            int
     * @param module
     *            org.eclipse.jst.server.jetty.WebModule
     */
    public void addWebModule(int index, IJettyWebModule module);

    /**
     * Change a web module.
     * 
     * @param index
     *            int
     * @param docBase
     *            java.lang.String
     * @param path
     *            java.lang.String
     * @param reloadable
     *            boolean
     */
    public void modifyWebModule(int index, String docBase, String path, boolean reloadable);

    /**
     * Remove a web module.
     * 
     * @param index
     *            int
     */
    public void removeWebModule(int index);

    // /**
    // * Adds a mime mapping.
    // *
    // * @param index int
    // * @param map MimeMapping
    // */
    // public void addMimeMapping(int index, IMimeMapping map);
    //
    // /**
    // * Change a mime mapping.
    // *
    // * @param index int
    // * @param map MimeMapping
    // */
    // public void modifyMimeMapping(int index, IMimeMapping map);

    /**
     * Modify the port with the given id.
     * 
     * @param id
     *            java.lang.String
     * @param port
     *            int
     */
    public void modifyServerPort(String id, int port);

    /**
     * Remove a mime mapping.
     * 
     * @param index
     *            int
     */
    // public void removeMimeMapping(int index);
}
org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/command/ModifyWebModuleCommand.java
public class ModifyWebModuleCommand extends ConfigurationCommand
{
    protected int _index;
    protected WebModule _oldModule;
    protected WebModule _newModule;

    public ModifyWebModuleCommand(IJettyConfigurationWorkingCopy configuration, int index, WebModule module)
    {
        super(configuration,Messages.configurationEditorActionModifyWebModule);
        _index = index;
        _newModule = module;
    }

    /**
     * Execute the command.
     */
    public void execute()
    {
        _oldModule = getWorkingCopy().getWebModules().get(_index);
        getWorkingCopy().modifyWebModule(_index,_newModule.getDocumentBase(),_newModule.getPath(),_newModule.isReloadable());
    }

    /**
     * Undo the command.
     */
    public void undo()
    {
        getWorkingCopy().modifyWebModule(_index,_oldModule.getDocumentBase(),_oldModule.getPath(),_oldModule.isReloadable());
    }
}
org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/command/RemoveWebModuleCommand.java
public class RemoveWebModuleCommand extends ConfigurationCommand
{
    protected int _index;
    protected WebModule _module;

    /**
     * RemoveWebModuleCommand constructor comment.
     * 
     * @param configuration
     *            a jetty configuration
     * @param index
     *            an index
     */
    public RemoveWebModuleCommand(IJettyConfigurationWorkingCopy configuration, int index)
    {
        super(configuration,Messages.configurationEditorActionRemoveWebModule);
        this._index = index;
    }

    /**
     * Execute the command.
     */
    public void execute()
    {
        _module = getWorkingCopy().getWebModules().get(_index);
        getWorkingCopy().removeWebModule(_index);
    }

    /**
     * Undo the command.
     */
    public void undo()
    {
        getWorkingCopy().addWebModule(_index,_module);
    }
}
org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/IJettyServerWorkingCopy.java
public interface IJettyServerWorkingCopy extends IJettyServer
{

    /**
     * The default deployment directory. Avoid "webapps" due to side effects.
     */
    public static final String DEFAULT_DEPLOYDIR = "wtpwebapps";

    /**
     * The deployment directory used by default in prior versions.
     */
    public static final String LEGACY_DEPLOYDIR = "webapps";

    /**
     * Sets this server to test environment mode.
     * 
     * @param b
     *            boolean
     */
    public void setTestEnvironment(boolean b);

    /**
     * Sets the instance directory for the server. If set to null, the instance directory is derived from the testEnvironment setting.'
     * 
     * @param instanceDir
     *            absolule path to the instance directory.
     */
    public void setInstanceDirectory(String instanceDir);

    /**
     * Set the deployment directory for the server. May be absolute or relative to runtime base directory.
     * 
     * @param deployDir
     *            deployment directory for the server
     */
    public void setDeployDirectory(String deployDir);
}
org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/WebModule.java
public class WebModule implements IJettyWebModule
{
    private String _docBase;
    private String _path;
    private String _memento;
    private boolean _reloadable;

    /**
     * WebModule constructor comment.
     * 
     * @param path
     *            a path
     * @param docBase
     *            a document base
     * @param memento
     *            a memento
     * @param reloadable
     *            <code>true</code> if reloadable
     */
    public WebModule(String path, String docBase, String memento, boolean reloadable)
    {
        super();
        this._path = path;
        this._docBase = docBase;
        this._memento = memento;
        this._reloadable = reloadable;
    }

    /**
     * Get the document base.
     * 
     * @return java.lang.String
     */
    public String getDocumentBase()
    {
        return _docBase;
    }

    /**
     * Return the path. (context root)
     * 
     * @return java.lang.String
     */
    public String getPath()
    {
        return _path;
    }

    /**
     * Return the memento.
     * 
     * @return java.lang.String
     */
    public String getMemento()
    {
        return _memento;
    }

    /**
     * Return true if the web module is auto-reloadable.
     * 
     * @return java.lang.String
     */
    public boolean isReloadable()
    {
        return _reloadable;
    }

    public int hashCode()
    {
        return getDocumentBase().hashCode() + getPath().hashCode() + getMemento().hashCode();
    }

    /**
     * @see Object#equals(Object)
     */
    public boolean equals(Object obj)
    {
        if (!(obj instanceof WebModule))
            return false;

        WebModule wm = (WebModule)obj;
        if (!getDocumentBase().equals(wm.getDocumentBase()))
            return false;
        if (!getPath().equals(wm.getPath()))
            return false;
        if (!getMemento().equals(wm.getMemento()))
            return false;
        return true;
    }
}
org.eclipse.jst.server.jetty.ui/src/org/eclipse/jst/server/jetty/ui/internal/JettyUIPlugin.java
public class JettyUIPlugin extends AbstractUIPlugin
{

    // The plug-in ID
    public static final String __PLUGIN_ID = "org.eclipse.jst.server.jetty.ui"; //$NON-NLS-1$

    // base url for icons
    private static URL __ICON_BASE_URL;
    private static final String __URL_OBJ = "obj16/";
    private static final String __URL_WIZBAN = "wizban/";
    public static final String __IMG_WIZ_JETTY = "wizJetty";

    public static final String __IMG_WEB_MODULE = "webModule";
    public static final String __IMG_PORT = "port";
    public static final String __IMG_PROJECT_MISSING = "projectMissing";

    // The shared instance
    private static JettyUIPlugin _plugin;

    protected Map<String, ImageDescriptor> _imageDescriptors = new HashMap<String, ImageDescriptor>();

    /**
     * The constructor
     */
    public JettyUIPlugin()
    {
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
     */
    public void start(BundleContext context) throws Exception
    {
        super.start(context);
        _plugin = this;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
     */
    public void stop(BundleContext context) throws Exception
    {
        _plugin = null;
        super.stop(context);
    }

    /**
     * Returns the shared instance
     * 
     * @return the shared instance
     */
    public static JettyUIPlugin getDefault()
    {
        return _plugin;
    }

    @Override
    protected ImageRegistry createImageRegistry()
    {
        ImageRegistry registry = new ImageRegistry();

        registerImage(registry,__IMG_WIZ_JETTY,__URL_WIZBAN + "jetty_wiz.png");

        registerImage(registry,__IMG_WEB_MODULE,__URL_OBJ + "web_module.gif");
        registerImage(registry,__IMG_PORT,__URL_OBJ + "port.gif");
        // registerImage(registry, IMG_WEB_MODULE, URL_OBJ + "web_module.gif");
        // registerImage(registry, IMG_MIME_MAPPING, URL_OBJ + "mime_mapping.gif");
        // registerImage(registry, IMG_MIME_EXTENSION, URL_OBJ + "mime_extension.gif");
        // registerImage(registry, IMG_PORT, URL_OBJ + "port.gif");
        registerImage(registry,__IMG_PROJECT_MISSING,__URL_OBJ + "project_missing.gif");

        return registry;
    }

    /**
     * Return the image with the given key from the image registry.
     * 
     * @param key
     *            java.lang.String
     * @return org.eclipse.jface.parts.IImage
     */
    public static Image getImage(String key)
    {
        return getDefault().getImageRegistry().get(key);
    }

    /**
     * Return the image with the given key from the image registry.
     * 
     * @param key
     *            java.lang.String
     * @return org.eclipse.jface.parts.IImage
     */
    public static ImageDescriptor getImageDescriptor(String key)
    {
        try
        {
            getDefault().getImageRegistry();
            return (ImageDescriptor)getDefault()._imageDescriptors.get(key);
        }
        catch (Exception e)
        {
            return null;
        }
    }

    /**
     * Register an image with the registry.
     * 
     * @param key
     *            java.lang.String
     * @param partialURL
     *            java.lang.String
     */
    private void registerImage(ImageRegistry registry, String key, String partialURL)
    {
        if (__ICON_BASE_URL == null)
        {
            String pathSuffix = "icons/";
            __ICON_BASE_URL = getDefault().getBundle().getEntry(pathSuffix);
        }

        try
        {
            ImageDescriptor id = ImageDescriptor.createFromURL(new URL(__ICON_BASE_URL,partialURL));
            registry.put(key,id);
            _imageDescriptors.put(key,id);
        }
        catch (Exception e)
        {
            Trace.trace(Trace.WARNING,"Error registering image",e);
        }
    }
}
org.eclipse.jst.server.jetty.ui/src/org/eclipse/jst/server/jetty/ui/internal/Messages.java
public class Messages extends NLS
{

    public static String wizardTitle;
    public static String wizardDescription;
    public static String runtimeName;
    public static String browse;
    public static String selectInstallDir;
    public static String installDir;
    public static String install;
    public static String installDialogTitle;
    public static String installedJRE;
    public static String installedJREs;
    public static String runtimeDefaultJRE;
    public static String configurationEditorPortsSection;
    public static String configurationEditorPortsDescription;
    public static String configurationEditorPortNameColumn;
    public static String configurationEditorPortValueColumn;
    public static String configurationEditorWebModuleDialogTitleEdit;
    public static String configurationEditorWebModuleDialogTitleAdd;
    public static String configurationEditorWebModuleDialogProjects;
    public static String configurationEditorWebModuleDialogDocumentBase;
    public static String configurationEditorWebModuleDialogSelectDirectory;
    public static String configurationEditorWebModuleDialogPath;
    public static String configurationEditorPathColumn;
    public static String configurationEditorDocBaseColumn;
    public static String configurationEditorProjectColumn;
    public static String configurationEditorWebModulesPageTitle;
    public static String configurationEditorWebModulesSection;
    public static String configurationEditorWebModulesDescription;
    public static String configurationEditorAddProjectModule;
    public static String configurationEditorAddExternalModule;
    public static String editorEdit;
    public static String editorRemove;
    public static String errorMissingWebModule;
    public static String configurationEditorReloadDisabled;
    public static String configurationEditorReloadEnabled;
    public static String configurationEditorProjectMissing;

    static
    {
        NLS.initializeMessages(JettyUIPlugin.__PLUGIN_ID + ".internal.Messages",Messages.class);
    }
}
org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/command/AddModuleCommand.java
public class AddModuleCommand extends AbstractOperation
{
    protected IServerWorkingCopy _server;
    protected IModule _module;
    protected int _moduleCount = -1;

    /**
     * AddModuleCommand constructor comment.
     * 
     * @param server
     *            a server
     * @param module
     *            a web module
     */
    public AddModuleCommand(IServerWorkingCopy server, IModule module)
    {
        super(Messages.configurationEditorActionAddWebModule);
        this._server = server;
        this._module = module;
    }

    public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException
    {
        try
        {
            _server.modifyModules(new IModule[]{ _module },null,monitor);
        }
        catch (Exception e)
        {
            JettyPlugin.log(e);
        }
        return Status.OK_STATUS;
    }

    public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException
    {
        return execute(monitor,info);
    }

    public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException
    {
        try
        {
            _server.modifyModules(null,new IModule[]{ _module },monitor);
        }
        catch (Exception e)
        {
            JettyPlugin.log(e);
        }
        return Status.OK_STATUS;
    }
}
org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/command/AddWebModuleCommand.java
public class AddWebModuleCommand extends ConfigurationCommand
{
    protected WebModule _module;
    protected int _moduleCount = -1;

    /**
     * AddWebModuleCommand constructor comment.
     * 
     * @param configuration
     *            a Jetty configuration
     * @param module
     *            a web module
     */
    public AddWebModuleCommand(IJettyConfigurationWorkingCopy configuration, WebModule module)
    {
        super(configuration,Messages.configurationEditorActionAddWebModule);
        this._module = module;
    }

    /**
     * Execute the command.
     */
    public void execute()
    {
        _moduleCount = getWorkingCopy().getWebModules().size();
        getWorkingCopy().addWebModule(-1,_module);
    }

    /**
     * Undo the command.
     */
    public void undo()
    {
        getWorkingCopy().removeWebModule(_moduleCount);
    }
}
org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/command/RemoveModuleCommand.java
public class RemoveModuleCommand extends AbstractOperation
{
    protected IServerWorkingCopy _server;
    protected IModule _module;

    /**
     * AddModuleCommand constructor comment.
     * 
     * @param server
     *            a server
     * @param module
     *            a web module
     */
    public RemoveModuleCommand(IServerWorkingCopy server, IModule module)
    {
        super(Messages.configurationEditorActionRemoveWebModule);
        this._server = server;
        this._module = module;
    }

    public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException
    {
        try
        {
            _server.modifyModules(null,new IModule[]{ _module },monitor);
        }
        catch (Exception e)
        {
            JettyPlugin.log(e);
        }
        return Status.OK_STATUS;
    }

    public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException
    {
        return execute(monitor,info);
    }

    public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException
    {
        try
        {
            _server.modifyModules(new IModule[]{ _module },null,monitor);
        }
        catch (Exception e)
        {
            JettyPlugin.log(e);
        }
        
        return Status.OK_STATUS;
    }
}


Question: 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.jetty.core.IJettyConfiguration;
import org.eclipse.jst.server.jetty.core.IJettyConfigurationWorkingCopy;
import org.eclipse.jst.server.jetty.core.IJettyServer;
import org.eclipse.jst.server.jetty.core.IJettyServerWorkingCopy;
import org.eclipse.jst.server.jetty.core.WebModule;
import org.eclipse.jst.server.jetty.core.command.AddModuleCommand;
import org.eclipse.jst.server.jetty.core.command.AddWebModuleCommand;
import org.eclipse.jst.server.jetty.core.command.ModifyWebModuleCommand;
import org.eclipse.jst.server.jetty.core.command.RemoveModuleCommand;
import org.eclipse.jst.server.jetty.core.command.RemoveWebModuleCommand;
import org.eclipse.jst.server.jetty.ui.internal.ContextIds;
import org.eclipse.jst.server.jetty.ui.internal.JettyUIPlugin;
import org.eclipse.jst.server.jetty.ui.internal.Messages;
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;
/*******************************************************************************
 * 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
 *     Angelo Zerr <angelo.zerr@gmail.com> - Jetty packages 
 *******************************************************************************/
package org.eclipse.jst.server.jetty.ui.internal.editor;



/**
 * Jetty configuration web module editor page.
 */
public class ConfigurationWebModuleEditorPart extends ServerEditorPart
{
    protected IJettyServerWorkingCopy _server2;
    protected IJettyConfigurationWorkingCopy _configuration;

    protected Table _webAppTable;
    protected int _selection = -1;
    protected Button _addProjectButton;
    protected Button _addExtProjectButton;
    protected Button _removeButton;
    protected Button _editButton;

    protected PropertyChangeListener _listener;

    /**
     * ConfigurationWebModuleEditorPart constructor comment.
     */
    public ConfigurationWebModuleEditorPart()
    {
        super();
    }

    /**
	 * 
	 */
    protected void addChangeListener()
    {
        _listener = new PropertyChangeListener()
        {
            public void propertyChange(PropertyChangeEvent event)
            {
                if (IJettyConfiguration.__MODIFY_WEB_MODULE_PROPERTY.equals(event.getPropertyName()))
                {
                    initialize();
                }
                else if (IJettyConfiguration.__ADD_WEB_MODULE_PROPERTY.equals(event.getPropertyName()))
                {
                    initialize();
                }
                else if (IJettyConfiguration.__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());
Answer:         form.setText(Messages.configurationEditorWebModulesPageTitle);