/*******************************************************************************
* Copyright (c) 2006 Jeff Mesnil
* 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
*
* Code was inspired by org.eclipse.equinox.client source, (c) 2006 IBM
*******************************************************************************/
package net.jmesnil.jmx.ui.internal.tables;
import net.jmesnil.jmx.resources.MBeanInfoWrapper;
import net.jmesnil.jmx.ui.JMXUIActivator;
import net.jmesnil.jmx.ui.internal.Messages;
import net.jmesnil.jmx.ui.internal.views.explorer.MBeanExplorer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.part.ISetSelectionTarget;
public class MBeanAttributesTable {
private TableViewer viewer;
public MBeanAttributesTable(Composite parent, final FormToolkit toolkit) {
final Table attrTable = toolkit.createTable(parent, SWT.FULL_SELECTION);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.heightHint = 20;
gd.widthHint = 100;
attrTable.setLayoutData(gd);
toolkit.paintBordersFor(parent);
createColumns(attrTable);
attrTable.setLinesVisible(true);
attrTable.setHeaderVisible(true);
viewer = new TableViewer(attrTable);
viewer.setContentProvider(new AttributesContentProvider());
viewer.setLabelProvider(new AttributesLabelProvider());
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IViewPart part = JMXUIActivator.getActivePage().findView(
MBeanExplorer.ID);
if (part != JMXUIActivator.getActivePage().getActivePart()) {
((ISetSelectionTarget) part).selectReveal(event
.getSelection());
}
}
});
}
private void createColumns(final Table attrTable) {
final TableColumn attrName = new TableColumn(attrTable, SWT.NONE);
attrName.setText(Messages.name);
attrName.setWidth(150);
final TableColumn attrValue = new TableColumn(attrTable, SWT.NONE);
attrValue.setText(Messages.value);
attrValue.setWidth(350);
Listener sortListener = new Listener() {
public void handleEvent(Event e) {
// determine new sort column and direction
TableColumn sortColumn = attrTable.getSortColumn();
TableColumn currentColumn = (TableColumn) e.widget;
int dir = attrTable.getSortDirection();
if (sortColumn == currentColumn) {
dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
} else {
attrTable.setSortColumn(currentColumn);
dir = SWT.UP;
}
int colIndex;
if (currentColumn == attrName)
colIndex = 0;
else if (currentColumn == attrValue)
colIndex = 1;
else
return;
// sort the data based on column and direction
attrTable.setSortDirection(dir);
viewer.setSorter(new AttributesViewerSorter(dir, colIndex));
}
};
attrName.addListener(SWT.Selection, sortListener);
attrTable.setSortColumn(attrName);
attrTable.setSortDirection(SWT.UP);
}
public void setInput(MBeanInfoWrapper input) {
if (input == null || input.getMBeanInfo() == null)
viewer.setInput(null);
else
viewer.setInput(input.getMBeanAttributeInfoWrappers());
viewer.getTable().redraw();
}
public Viewer getViewer() {
return viewer;
}
}