| /******************************************************************************* |
| * 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.viewers.*; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.KeyEvent; |
| import org.eclipse.swt.events.KeyListener; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.events.SelectionListener; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Table; |
| import org.eclipse.swt.widgets.TableColumn; |
| import org.eclipse.wst.server.core.IRuntime; |
| import org.eclipse.wst.server.core.IRuntimeWorkingCopy; |
| import org.eclipse.wst.server.ui.internal.Messages; |
| import org.eclipse.wst.server.ui.internal.ServerUIPlugin; |
| /** |
| * |
| */ |
| public class RuntimeComposite extends AbstractTableComposite { |
| protected IRuntime selection; |
| protected IRuntime defaultRuntime; |
| protected RuntimeSelectionListener listener; |
| |
| public interface RuntimeSelectionListener { |
| public void runtimeSelected(IRuntime runtime); |
| } |
| |
| class RuntimeViewerSorter extends ViewerSorter { |
| boolean sortByName; |
| public RuntimeViewerSorter(boolean sortByName) { |
| this.sortByName = sortByName; |
| } |
| |
| public int compare(Viewer viewer, Object e1, Object e2) { |
| IRuntime r1 = (IRuntime) e1; |
| IRuntime r2 = (IRuntime) e2; |
| if (sortByName) |
| return getComparator().compare(notNull(r1.getName()), notNull(r2.getName())); |
| |
| if (r1.getRuntimeType() == null) |
| return -1; |
| if (r2.getRuntimeType() == null) |
| return 1; |
| return getComparator().compare(notNull(r1.getRuntimeType().getName()), notNull(r2.getRuntimeType().getName())); |
| } |
| |
| protected String notNull(String s) { |
| if (s == null) |
| return ""; |
| return s; |
| } |
| } |
| |
| public RuntimeComposite(Composite parent, int style, RuntimeSelectionListener listener2) { |
| super(parent, style); |
| this.listener = listener2; |
| |
| TableLayout tableLayout = new TableLayout(); |
| table.setLayout(tableLayout); |
| table.setHeaderVisible(true); |
| |
| tableLayout.addColumnData(new ColumnWeightData(0, 160, true)); |
| TableColumn col = new TableColumn(table, SWT.NONE); |
| col.setText(Messages.columnName); |
| col.addSelectionListener(new SelectionListener() { |
| public void widgetSelected(SelectionEvent e) { |
| tableViewer.setSorter(new RuntimeViewerSorter(true)); |
| } |
| |
| public void widgetDefaultSelected(SelectionEvent e) { |
| widgetSelected(e); |
| } |
| }); |
| |
| tableLayout.addColumnData(new ColumnWeightData(0, 125, true)); |
| col = new TableColumn(table, SWT.NONE); |
| col.setText(Messages.columnType); |
| col.addSelectionListener(new SelectionListener() { |
| public void widgetSelected(SelectionEvent e) { |
| tableViewer.setSorter(new RuntimeViewerSorter(false)); |
| } |
| |
| public void widgetDefaultSelected(SelectionEvent e) { |
| widgetSelected(e); |
| } |
| }); |
| |
| tableViewer.setContentProvider(new RuntimeContentProvider()); |
| |
| ILabelProvider labelProvider = new RuntimeTableLabelProvider(); |
| labelProvider.addListener(new ILabelProviderListener() { |
| public void labelProviderChanged(LabelProviderChangedEvent event) { |
| Object[] obj = event.getElements(); |
| if (obj == null) |
| tableViewer.refresh(true); |
| else { |
| obj = ServerUIPlugin.adaptLabelChangeObjects(obj); |
| int size = obj.length; |
| for (int i = 0; i < size; i++) |
| tableViewer.refresh(obj[i], true); |
| } |
| } |
| }); |
| tableViewer.setLabelProvider(labelProvider); |
| |
| tableViewer.setInput(AbstractTreeContentProvider.ROOT); |
| tableViewer.setColumnProperties(new String[] {"name", "type"}); |
| tableViewer.setSorter(new RuntimeViewerSorter(true)); |
| |
| tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { |
| public void selectionChanged(SelectionChangedEvent event) { |
| Object obj = getSelection(event.getSelection()); |
| if (obj instanceof IRuntime) |
| selection = (IRuntime) obj; |
| else |
| selection = null; |
| listener.runtimeSelected(selection); |
| } |
| }); |
| |
| table.addKeyListener(new KeyListener() { |
| public void keyPressed(KeyEvent e) { |
| if (e.character == 'l') { |
| try { |
| IRuntime runtime = getSelectedRuntime(); |
| IRuntimeWorkingCopy wc = runtime.createWorkingCopy(); |
| wc.setReadOnly(!runtime.isReadOnly()); |
| wc.save(false, null); |
| refresh(runtime); |
| } catch (Exception ex) { |
| // ignore |
| } |
| } |
| } |
| |
| public void keyReleased(KeyEvent e) { |
| // do nothing |
| } |
| }); |
| |
| // after adding an item do the packing of the table |
| if (table.getItemCount() > 0) { |
| TableColumn[] columns = table.getColumns(); |
| for (int i=0; i < columns.length; i++) |
| columns[i].pack(); |
| table.pack(); |
| } |
| } |
| |
| protected void createTable() { |
| table = new Table(this, SWT.BORDER | SWT.FULL_SELECTION | SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE); |
| } |
| |
| protected void createTableViewer() { |
| tableViewer = new LockedTableViewer(table); |
| } |
| |
| public IRuntime getSelectedRuntime() { |
| return selection; |
| } |
| } |