blob: 5435c1982f7ad5fd3ba03557fab199db8f488ab9 [file] [log] [blame]
/*******************************************************************************
* 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
* Angelo Zerr <angelo.zerr@gmail.com> - Jetty packages
*******************************************************************************/
package org.eclipse.jst.server.jetty.ui.internal.editor;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Iterator;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
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.command.ModifyPortCommand;
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.swt.SWT;
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.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.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.Section;
import org.eclipse.ui.help.IWorkbenchHelpSystem;
import org.eclipse.wst.server.core.ServerPort;
import org.eclipse.wst.server.ui.editor.ServerEditorSection;
/**
* Jetty configuration port editor page.
*/
public class ConfigurationPortEditorSection extends ServerEditorSection
{
protected IJettyConfigurationWorkingCopy jettyConfiguration;
protected boolean updating;
protected Table ports;
protected TableViewer viewer;
protected PropertyChangeListener listener;
/**
* ConfigurationPortEditorSection constructor comment.
*/
public ConfigurationPortEditorSection()
{
super();
}
/**
*
*/
protected void addChangeListener()
{
listener = new PropertyChangeListener()
{
public void propertyChange(PropertyChangeEvent event)
{
if (IJettyConfiguration.MODIFY_PORT_PROPERTY.equals(event.getPropertyName()))
{
String id = (String)event.getOldValue();
Integer i = (Integer)event.getNewValue();
changePortNumber(id,i.intValue());
}
}
};
jettyConfiguration.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++)
{
ServerPort sp = (ServerPort)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 = getFormToolkit(parent.getDisplay());
Section section = toolkit.createSection(parent,ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR
| Section.DESCRIPTION | ExpandableComposite.FOCUS_TITLE);
section.setText(Messages.configurationEditorPortsSection);
section.setDescription(Messages.configurationEditorPortsDescription);
section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | 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));
IWorkbenchHelpSystem whs = PlatformUI.getWorkbench().getHelpSystem();
whs.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);
whs.setHelp(ports,ContextIds.CONFIGURATION_EDITOR_PORTS_LIST);
TableLayout tableLayout = new TableLayout();
TableColumn col = new TableColumn(ports,SWT.NONE);
col.setText(Messages.configurationEditorPortNameColumn);
ColumnWeightData colData = new ColumnWeightData(15,150,true);
tableLayout.addColumnData(colData);
col = new TableColumn(ports,SWT.NONE);
col.setText(Messages.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)
{
ServerPort sp = (ServerPort)element;
if (sp.getPort() < 0)
return "-";
return sp.getPort() + "";
}
public boolean canModify(Object element, String property)
{
if ("port".equals(property))
return true;
return false;
}
public void modify(Object element, String property, Object value)
{
try
{
Item item = (Item)element;
ServerPort sp = (ServerPort)item.getData();
int port = Integer.parseInt((String)value);
execute(new ModifyPortCommand(jettyConfiguration,sp.getId(),port));
}
catch (Exception ex)
{
// ignore
}
}
};
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)
{
// ignore
}
}
});
}
}
public void dispose()
{
if (jettyConfiguration != null)
jettyConfiguration.removePropertyChangeListener(listener);
}
/*
* (non-Javadoc) Initializes the editor part with a site and input.
*/
public void init(IEditorSite site, IEditorInput input)
{
super.init(site,input);
IJettyServer ts = (IJettyServer)server.getAdapter(IJettyServer.class);
try
{
if (ts == null)
{
ts = (IJettyServer)server.loadAdapter(IJettyServer.class,null);
}
jettyConfiguration = (IJettyConfigurationWorkingCopy)ts.getJettyConfiguration();
}
catch (Exception e)
{
// ignore
}
addChangeListener();
initialize();
}
/**
* Initialize the fields in this editor.
*/
protected void initialize()
{
if (ports == null)
return;
ports.removeAll();
Iterator iterator = jettyConfiguration.getServerPorts().iterator();
while (iterator.hasNext())
{
ServerPort port = (ServerPort)iterator.next();
TableItem item = new TableItem(ports,SWT.NONE);
String portStr = "-";
if (port.getPort() >= 0)
portStr = port.getPort() + "";
String[] s = new String[]
{ port.getName(), portStr };
item.setText(s);
item.setImage(JettyUIPlugin.getImage(JettyUIPlugin.IMG_PORT));
item.setData(port);
}
if (readOnly)
{
viewer.setCellEditors(new CellEditor[]
{ null, null });
viewer.setCellModifier(null);
}
else
{
setupPortEditors();
}
}
}