/******************************************************************************* * 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.wst.server.ui.internal.viewers; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.*; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.events.*; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.*; import org.eclipse.wst.server.core.IServer; import org.eclipse.wst.server.core.ServerPort; import org.eclipse.wst.server.ui.internal.Messages; /** * Dialog that prompts a user to add or edit a server monitor. */ public class MonitorDialog extends Dialog { protected IServer server; protected ServerPort port; protected int monitorPort = -1; protected String[] portContentTypes; protected String[] contentTypes; protected boolean isEdit = false; protected boolean portChanged = false; protected Button ok; protected Table table; protected TableViewer tableViewer; protected boolean init; /** * MonitorDialog constructor comment. * * @param parentShell the shell * @param server the server */ public MonitorDialog(Shell parentShell, IServer server) { super(parentShell); this.server = server; } public MonitorDialog(Shell parentShell, IServer server, ServerPort port, int monitorPort, String[] contentTypes) { this(parentShell, server); this.monitorPort = monitorPort; this.contentTypes = contentTypes; this.port = port; isEdit = true; } /** * */ protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(Messages.dialogMonitorTitle); } protected void createButtonsForButtonBar(Composite parent) { ok = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); } /** * */ 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.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); layout.numColumns = 2; composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); composite.setFont(parent.getFont()); //WorkbenchHelp.setHelp(composite, ContextIds.TERMINATE_SERVER_DIALOG); Label label = new Label(composite, SWT.WRAP); label.setText(NLS.bind(Messages.dialogMonitorAddDescription, new String[] { server.getName() } )); GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); data.horizontalSpan = 2; data.widthHint = 275; label.setLayoutData(data); table = new Table(composite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION); data = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL); data.heightHint = 100; data.horizontalSpan = 2; table.setLayoutData(data); table.setLinesVisible(true); tableViewer = new TableViewer(table); TableLayout tableLayout = new TableLayout(); table.setLayout(tableLayout); table.setHeaderVisible(true); tableLayout.addColumnData(new ColumnWeightData(12, 120, true)); TableColumn col = new TableColumn(table, SWT.NONE); col.setText(Messages.dialogMonitorColumnType); tableLayout.addColumnData(new ColumnWeightData(4, 40, true)); col = new TableColumn(table, SWT.NONE); col.setText(Messages.dialogMonitorColumnPort); tableViewer.setContentProvider(new PortContentProvider(server)); tableViewer.setLabelProvider(new PortLabelProvider(server)); tableViewer.setInput(AbstractTreeContentProvider.ROOT); tableViewer.setSorter(new ViewerSorter() { public int compare(Viewer viewer, Object e1, Object e2) { ServerPort port1 = (ServerPort) e1; ServerPort port2 = (ServerPort) e2; if (port1.getPort() == port2.getPort()) return 0; else if (port1.getPort() > port2.getPort()) return 1; else return -1; } }); label = new Label(composite, SWT.NONE); label.setText(Messages.dialogMonitorMonitorPort); final Text portText = new Text(composite, SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL); data.widthHint = 150; portText.setLayoutData(data); if (monitorPort >= 0) portText.setText(monitorPort + ""); portText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { try { monitorPort = Integer.parseInt(portText.getText()); if (ok != null) ok.setEnabled(true); } catch (Exception ex) { monitorPort = -1; if (ok != null) ok.setEnabled(false); } portChanged = true; } }); label = new Label(composite, SWT.NONE); label.setText(Messages.dialogMonitorContentType); final Combo combo = new Combo(composite, SWT.READ_ONLY); data = new GridData(GridData.FILL_HORIZONTAL); data.widthHint = 150; combo.setLayoutData(data); combo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int size = combo.getItemCount(); int sel = combo.getSelectionIndex(); if (sel == size - 1) contentTypes = portContentTypes; else contentTypes = new String[] { portContentTypes[sel] }; } }); tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { port = (ServerPort) getSelection(tableViewer.getSelection()); if (port == null) return; if (!portChanged) { portText.setText((port.getPort() + 1) + ""); portChanged = false; } portContentTypes = port.getContentTypes(); String[] s = null; String all = Messages.dialogMonitorContentTypeAll; if (portContentTypes == null || portContentTypes.length == 1) { s = new String[] { all }; } else { int size = portContentTypes.length; s = new String[size+1]; for (int i = 0; i < size; i++) { s[i] = MonitorLabelProvider.getContentTypeString(portContentTypes[i]); } s[size] = all; } combo.setItems(s); combo.setText(all); } }); Dialog.applyDialogFont(composite); if (port != null) { portChanged = true; String[] ct = contentTypes; tableViewer.setSelection(new StructuredSelection(port)); if (ct != null && ct.length > 0) combo.setText(MonitorLabelProvider.getContentTypeString(ct[0])); } else if (tableViewer != null) { try { Object obj = tableViewer.getElementAt(0); if (obj != null) tableViewer.setSelection(new StructuredSelection(obj)); } catch (Exception e) { // ignore } } portChanged = false; return composite; } protected Object getSelection(ISelection sel2) { IStructuredSelection sel = (IStructuredSelection) sel2; return sel.getFirstElement(); } public int getMonitorPort() { return monitorPort; } public ServerPort getServerPort() { return port; } public String[] getContentTypes() { return contentTypes; } }