blob: a36e10fd70f69d8f013807a86ad7581fd19c75ac [file] [log] [blame]
package org.eclipse.jst.server.tomcat.ui.internal.editor;
/**********************************************************************
* Copyright (c) 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 - Initial API and implementation
**********************************************************************/
import java.beans.*;
import java.util.Iterator;
import org.eclipse.wst.server.core.model.IServerPort;
import org.eclipse.wst.server.core.util.ServerPort;
import org.eclipse.wst.server.ui.editor.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.jface.viewers.*;
import org.eclipse.jst.server.tomcat.core.ITomcatConfigurationWorkingCopy;
import org.eclipse.jst.server.tomcat.core.internal.command.*;
import org.eclipse.jst.server.tomcat.internal.core.TomcatConfiguration;
import org.eclipse.jst.server.tomcat.ui.internal.ContextIds;
import org.eclipse.jst.server.tomcat.ui.internal.TomcatUIPlugin;
import org.eclipse.ui.*;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.help.WorkbenchHelp;
/**
* Tomcat configuration port editor page.
*/
public class ConfigurationPortEditorSection extends ServerResourceEditorSection {
protected ITomcatConfigurationWorkingCopy tomcatConfiguration;
protected boolean updating;
protected Table ports;
protected TableViewer viewer;
protected PropertyChangeListener listener;
/**
* ConfigurationPortEditorSection constructor comment.
*/
protected ConfigurationPortEditorSection() {
super();
}
/**
*
*/
protected void addChangeListener() {
listener = new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
if (TomcatConfiguration.MODIFY_PORT_PROPERTY.equals(event.getPropertyName())) {
String id = (String) event.getOldValue();
Integer i = (Integer) event.getNewValue();
changePortNumber(id, i.intValue());
}
}
};
serverConfiguration.addPropertyChangeListener(listener);
}
/**
*
* @param id java.lang.String
* @param port int
*/
protected void changePortNumber(String id, int port) {
TableItem[] items = ports.getItems();
int size = items.length;
for (int i = 0; i < size; i++) {
IServerPort sp = (IServerPort) items[i].getData();
if (sp.getId().equals(id)) {
items[i].setData(new ServerPort(id, sp.getName(), port, sp.getProtocol()));
items[i].setText(1, port + "");
/*if (i == selection) {
selectPort();
}*/
return;
}
}
}
/**
* Creates the SWT controls for this workbench part.
*
* @param parent the parent control
*/
public void createSection(Composite parent) {
super.createSection(parent);
FormToolkit toolkit = new FormToolkit(parent.getDisplay());
Section section = toolkit.createSection(parent, ExpandableComposite.TWISTIE|ExpandableComposite.EXPANDED|ExpandableComposite.TITLE_BAR|Section.DESCRIPTION);
section.setText(TomcatUIPlugin.getResource("%configurationEditorPortsSection"));
section.setDescription(TomcatUIPlugin.getResource("%configurationEditorPortsDescription"));
section.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));
// ports
Composite composite = toolkit.createComposite(section);
GridLayout layout = new GridLayout();
layout.marginHeight = 8;
layout.marginWidth = 8;
composite.setLayout(layout);
composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.FILL_HORIZONTAL));
WorkbenchHelp.setHelp(composite, ContextIds.CONFIGURATION_EDITOR_PORTS);
toolkit.paintBordersFor(composite);
section.setClient(composite);
ports = toolkit.createTable(composite, SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION);
ports.setHeaderVisible(true);
ports.setLinesVisible(true);
WorkbenchHelp.setHelp(ports, ContextIds.CONFIGURATION_EDITOR_PORTS_LIST);
TableLayout tableLayout = new TableLayout();
TableColumn col = new TableColumn(ports, SWT.NONE);
col.setText(TomcatUIPlugin.getResource("%configurationEditorPortNameColumn"));
ColumnWeightData colData = new ColumnWeightData(15, 150, true);
tableLayout.addColumnData(colData);
col = new TableColumn(ports, SWT.NONE);
col.setText(TomcatUIPlugin.getResource("%configurationEditorPortValueColumn"));
colData = new ColumnWeightData(8, 80, true);
tableLayout.addColumnData(colData);
GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
data.widthHint = 230;
data.heightHint = 100;
ports.setLayoutData(data);
ports.setLayout(tableLayout);
viewer = new TableViewer(ports);
viewer.setColumnProperties(new String[] {"name", "port"});
initialize();
}
protected void setupPortEditors() {
viewer.setCellEditors(new CellEditor[] {null, new TextCellEditor(ports)});
ICellModifier cellModifier = new ICellModifier() {
public Object getValue(Object element, String property) {
IServerPort sp = (IServerPort) element;
return sp.getPort() + "";
}
public boolean canModify(Object element, String property) {
if ("port".equals(property))
return true;
else
return false;
}
public void modify(Object element, String property, Object value) {
try {
Item item = (Item) element;
IServerPort sp = (IServerPort) item.getData();
int port = Integer.parseInt((String) value);
commandManager.executeCommand(new ModifyPortCommand(tomcatConfiguration, sp.getId(), port));
} catch (Exception ex) { }
}
};
viewer.setCellModifier(cellModifier);
// preselect second column (Windows-only)
String os = System.getProperty("os.name");
if (os != null && os.toLowerCase().indexOf("win") >= 0) {
ports.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
try {
int n = ports.getSelectionIndex();
viewer.editElement(ports.getItem(n).getData(), 1);
} catch (Exception e) { }
}
});
}
}
public void dispose() {
if (serverConfiguration != null)
serverConfiguration.removePropertyChangeListener(listener);
}
/* (non-Javadoc)
* Initializes the editor part with a site and input.
* <p>
* Subclasses of <code>EditorPart</code> must implement this method. Within
* the implementation subclasses should verify that the input type is acceptable
* and then save the site and input. Here is sample code:
* </p>
* <pre>
* if (!(input instanceof IFileEditorInput))
* throw new PartInitException("Invalid Input: Must be IFileEditorInput");
* setSite(site);
* setInput(editorInput);
* </pre>
*/
public void init(IEditorSite site, IEditorInput input) {
super.init(site, input);
if (serverConfiguration != null) {
tomcatConfiguration = (ITomcatConfigurationWorkingCopy) serverConfiguration.getWorkingCopyDelegate();
addChangeListener();
}
initialize();
}
/**
* Initialize the fields in this editor.
*/
protected void initialize() {
if (ports == null)
return;
ports.removeAll();
Iterator iterator = tomcatConfiguration.getServerPorts().iterator();
while (iterator.hasNext()) {
IServerPort port = (IServerPort) iterator.next();
TableItem item = new TableItem(ports, SWT.NONE);
String[] s = new String[] {port.getName(), port.getPort() + ""};
item.setText(s);
item.setImage(TomcatUIPlugin.getImage(TomcatUIPlugin.IMG_PORT));
item.setData(port);
}
if (readOnly) {
viewer.setCellEditors(new CellEditor[] {null, null});
viewer.setCellModifier(null);
} else {
setupPortEditors();
}
}
protected void validate() { }
}