diff options
Diffstat (limited to 'qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/type/MBeanTypeTabControl.java')
-rw-r--r-- | qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/type/MBeanTypeTabControl.java | 456 |
1 files changed, 456 insertions, 0 deletions
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/type/MBeanTypeTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/type/MBeanTypeTabControl.java new file mode 100644 index 0000000000..a4574b8d22 --- /dev/null +++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/type/MBeanTypeTabControl.java @@ -0,0 +1,456 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.management.ui.views.type; + + +import java.util.ArrayList; +import java.util.List; + +import org.apache.qpid.management.ui.ApiVersion; +import org.apache.qpid.management.ui.ApplicationRegistry; +import org.apache.qpid.management.ui.ManagedBean; +import org.apache.qpid.management.ui.ManagedServer; +import org.apache.qpid.management.ui.jmx.JMXManagedObject; +import org.apache.qpid.management.ui.jmx.JMXServerRegistry; +import org.apache.qpid.management.ui.jmx.MBeanUtility; +import org.apache.qpid.management.ui.views.MBeanView; +import org.apache.qpid.management.ui.views.NavigationView; +import org.apache.qpid.management.ui.views.TabControl; + +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.TableViewerColumn; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerSorter; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.MouseListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.TabFolder; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.forms.widgets.Form; +import org.eclipse.ui.forms.widgets.FormToolkit; + +public abstract class MBeanTypeTabControl extends TabControl +{ + protected FormToolkit _toolkit; + protected Form _form; + protected Table _table = null; + protected TableViewer _tableViewer = null; + + protected List<ManagedBean> _mbeans = null; + protected String _type; + protected ApiVersion _ApiVersion; + protected JMXManagedObject _vhostMbean; + protected String _virtualHost; + protected JMXServerRegistry _serverRegistry; + protected Composite _tableComposite; + protected Button _favouritesButton; + protected Button _openButton; + + public MBeanTypeTabControl(TabFolder tabFolder, ManagedServer server, String virtualHost, String type) + { + super(tabFolder); + _virtualHost = virtualHost; + _serverRegistry = (JMXServerRegistry) ApplicationRegistry.getServerRegistry(server); + _ApiVersion = _serverRegistry.getManagementApiVersion(); + _vhostMbean = (JMXManagedObject) _serverRegistry.getVirtualHostManagerMBean(_virtualHost); + _type = type; + _toolkit = new FormToolkit(_tabFolder.getDisplay()); + _form = _toolkit.createForm(_tabFolder); + _form.getBody().setLayout(new GridLayout()); + init(); + createWidgets(); + } + + protected void init() + { + + } + + /** + * @see TabControl#getControl() + */ + public Control getControl() + { + return _form; + } + + /** + * @see TabControl#setFocus() + */ + public void setFocus() + { + _table.setFocus(); + } + + public void refresh() + { + refresh(null); + } + + + @Override + public void refresh(ManagedBean mbean) + { + _mbeans = getMbeans(); + + _tableViewer.setInput(_mbeans); + + layout(); + } + + public void layout() + { + _form.layout(true); + _form.getBody().layout(true, true); + } + + protected abstract List<ManagedBean> getMbeans(); + + protected void createTable() + { + _table = new Table (_tableComposite, SWT.MULTI | SWT.SCROLL_LINE | SWT.BORDER | SWT.FULL_SELECTION); + _table.setLinesVisible (true); + _table.setHeaderVisible (true); + GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); + _table.setLayoutData(data); + + _tableViewer = new TableViewer(_table); + final TableSorter tableSorter = new TableSorter(); + + String[] titles = { "Name"}; + int[] bounds = { 310}; + for (int i = 0; i < titles.length; i++) + { + final int index = i; + final TableViewerColumn viewerColumn = new TableViewerColumn(_tableViewer, SWT.NONE); + final TableColumn column = viewerColumn.getColumn(); + + column.setText(titles[i]); + column.setWidth(bounds[i]); + column.setResizable(true); + + //Setting the right sorter + column.addSelectionListener(new SelectionAdapter() + { + @Override + public void widgetSelected(SelectionEvent e) + { + tableSorter.setColumn(index); + final TableViewer viewer = _tableViewer; + int dir = viewer .getTable().getSortDirection(); + if (viewer.getTable().getSortColumn() == column) + { + dir = dir == SWT.UP ? SWT.DOWN : SWT.UP; + } + else + { + dir = SWT.UP; + } + viewer.getTable().setSortDirection(dir); + viewer.getTable().setSortColumn(column); + viewer.refresh(); + } + }); + + } + + _tableViewer.setContentProvider(new ContentProviderImpl()); + _tableViewer.setLabelProvider(new LabelProviderImpl()); + _tableViewer.setSorter(tableSorter); + _table.setSortColumn(_table.getColumn(0)); + _table.setSortDirection(SWT.UP); + + addTableListeners(); + } + + protected void addTableListeners() + { + _favouritesButton.setEnabled(false); + _openButton.setEnabled(false); + + _tableViewer.addSelectionChangedListener(new ISelectionChangedListener(){ + public void selectionChanged(SelectionChangedEvent evt) + { + int selectionIndex = _table.getSelectionIndex(); + + if (selectionIndex == -1) + { + _favouritesButton.setEnabled(false); + _openButton.setEnabled(false); + return; + } + else + { + _favouritesButton.setEnabled(true); + } + + if(_table.getSelectionCount() > 1) + { + _openButton.setEnabled(false); + } + else + { + _openButton.setEnabled(true); + } + } + }); + + _table.addMouseListener(new MouseListener() + { + // MouseListener implementation + public void mouseDoubleClick(MouseEvent event) + { + openMBean(); + } + + public void mouseDown(MouseEvent e){} + public void mouseUp(MouseEvent e){} + }); + } + + + private void createWidgets() + { + Composite mainComposite = _toolkit.createComposite(_form.getBody(), SWT.NONE); + mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + mainComposite.setLayout(new GridLayout()); + + Composite buttonComposite = _toolkit.createComposite(mainComposite, SWT.NONE); + GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, false); + buttonComposite.setLayoutData(gridData); + buttonComposite.setLayout(new GridLayout(2,true)); + + _favouritesButton = _toolkit.createButton(buttonComposite, + "<-- Add " + _type + "(s) to favourites", SWT.PUSH); + gridData = new GridData(SWT.LEFT, SWT.CENTER, true, false); + _favouritesButton.setLayoutData(gridData); + _favouritesButton.addSelectionListener(new SelectionAdapter() + { + public void widgetSelected(SelectionEvent e) + { + addMBeanToFavourites(); + } + }); + + _openButton = _toolkit.createButton(buttonComposite, "Open selected " + _type, SWT.PUSH); + gridData = new GridData(SWT.RIGHT, SWT.CENTER, true, false); + _openButton.setLayoutData(gridData); + _openButton.addSelectionListener(new SelectionAdapter() + { + public void widgetSelected(SelectionEvent e) + { + openMBean(); + } + }); + + _tableComposite = _toolkit.createComposite(mainComposite); + gridData = new GridData(SWT.FILL, SWT.FILL, true, true); + _tableComposite.setLayoutData(gridData); + _tableComposite.setLayout(new GridLayout(1,false)); + + createTable(); + + createLowerAreaButton(mainComposite); + } + + protected void createLowerAreaButton(Composite parent) + { + + } + + /** + * Content Provider class for the table viewer + */ + private static class ContentProviderImpl implements IStructuredContentProvider + { + + public void inputChanged(Viewer v, Object oldInput, Object newInput) + { + + } + + public void dispose() + { + + } + + @SuppressWarnings("unchecked") + public Object[] getElements(Object parent) + { + return ((List<ManagedBean>) parent).toArray(); + } + } + + /** + * Label Provider class for the table viewer + */ + private static class LabelProviderImpl extends LabelProvider implements ITableLabelProvider + { + public String getColumnText(Object element, int columnIndex) + { + switch (columnIndex) + { + case 0 : // name column + return ((ManagedBean) element).getName(); + default: + return "-"; + } + } + + public Image getColumnImage(Object element, int columnIndex) + { + return null; + } + + } + + /** + * Sorter class for the table viewer. + * + */ + private static class TableSorter extends ViewerSorter + { + private int column; + private static final int ASCENDING = 0; + private static final int DESCENDING = 1; + + private int direction; + + public TableSorter() + { + this.column = 0; + direction = ASCENDING; + } + + public void setColumn(int column) + { + if(column == this.column) + { + // Same column as last sort; toggle the direction + direction = 1 - direction; + } + else + { + // New column; do an ascending sort + this.column = column; + direction = ASCENDING; + } + } + + @Override + public int compare(Viewer viewer, Object e1, Object e2) + { + ManagedBean mbean1 = (ManagedBean) e1; + ManagedBean mbean2 = (ManagedBean) e2; + + int comparison = 0; + switch(column) + { + case 0: + comparison = mbean1.getName().compareTo(mbean2.getName()); + break; + default: + comparison = 0; + } + // If descending order, flip the direction + if(direction == DESCENDING) + { + comparison = -comparison; + } + return comparison; + } + } + + protected void addMBeanToFavourites() + { + int selectionIndex = _table.getSelectionIndex(); + + if (selectionIndex == -1) + { + return; + } + + int[] selectedIndices = _table.getSelectionIndices(); + + ArrayList<ManagedBean> selectedMBeans = new ArrayList<ManagedBean>(); + + for(int index = 0; index < selectedIndices.length ; index++) + { + ManagedBean selectedMBean = (ManagedBean)_table.getItem(selectedIndices[index]).getData(); + selectedMBeans.add(selectedMBean); + } + + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + NavigationView view = (NavigationView)window.getActivePage().findView(NavigationView.ID); + + ManagedBean bean = null; + try + { + for(ManagedBean mbean: selectedMBeans) + { + view.addManagedBean(mbean); + } + } + catch (Exception ex) + { + MBeanUtility.handleException(bean, ex); + } + } + + protected void openMBean() + { + int selectionIndex = _table.getSelectionIndex(); + + if (selectionIndex == -1) + { + return; + } + + final ManagedBean selectedMBean = (ManagedBean)_table.getItem(selectionIndex).getData(); + + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + MBeanView view = (MBeanView) window.getActivePage().findView(MBeanView.ID); + try + { + view.openMBean(selectedMBean); + } + catch (Exception ex) + { + MBeanUtility.handleException(selectedMBean, ex); + } + } +} |