diff options
Diffstat (limited to 'trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java')
-rw-r--r-- | trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java | 713 |
1 files changed, 0 insertions, 713 deletions
diff --git a/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java b/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java deleted file mode 100644 index fcce0e67b6..0000000000 --- a/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java +++ /dev/null @@ -1,713 +0,0 @@ -/* - * - * 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.exchange; - -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; - -import javax.management.MBeanServerConnection; -import javax.management.MBeanServerInvocationHandler; -import javax.management.openmbean.CompositeData; -import javax.management.openmbean.CompositeDataSupport; -import javax.management.openmbean.TabularDataSupport; - -import org.apache.qpid.management.ui.ApplicationRegistry; -import org.apache.qpid.management.ui.ManagedBean; -import org.apache.qpid.management.ui.ServerRegistry; -import org.apache.qpid.management.common.mbeans.ManagedExchange; -import org.apache.qpid.management.ui.jmx.JMXManagedObject; -import org.apache.qpid.management.ui.jmx.MBeanUtility; -import org.apache.qpid.management.ui.views.MBeanView; -import org.apache.qpid.management.ui.views.TabControl; -import org.apache.qpid.management.ui.views.ViewUtility; -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.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.ScrolledComposite; -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.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.TabFolder; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.forms.widgets.FormToolkit; -import org.eclipse.ui.forms.widgets.ScrolledForm; - - -/** - * Control class for the Headers Exchange mbean Operations tab. - */ -public class HeadersExchangeOperationsTabControl extends TabControl -{ - private FormToolkit _toolkit; - private ScrolledForm _form; - private Table _bindingNumberTable = null; - private TableViewer _bindingNumberTableViewer = null; - private Table _headersTable = null; - private TableViewer _headersTableViewer = null; - private Composite _paramsComposite = null; - - private TabularDataSupport _bindings = null; - private ManagedExchange _emb; - - static final String BINDING_NUM = ManagedExchange.HEADERS_COMPOSITE_ITEM_NAMES[0]; - static final String QUEUE_NAME = ManagedExchange.HEADERS_COMPOSITE_ITEM_NAMES[1]; - static final String HEADER_BINDINGS = ManagedExchange.HEADERS_COMPOSITE_ITEM_NAMES[2]; - - public HeadersExchangeOperationsTabControl(TabFolder tabFolder, JMXManagedObject mbean, MBeanServerConnection mbsc) - { - super(tabFolder); - _mbean = mbean; - _emb = (ManagedExchange) MBeanServerInvocationHandler.newProxyInstance(mbsc, - mbean.getObjectName(), ManagedExchange.class, false); - _toolkit = new FormToolkit(_tabFolder.getDisplay()); - _form = _toolkit.createScrolledForm(_tabFolder); - _form.getBody().setLayout(new GridLayout()); - createComposites(); - createWidgets(); - } - - private void createComposites() - { - _paramsComposite = _toolkit.createComposite(_form.getBody(), SWT.NONE); - _paramsComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - _paramsComposite.setLayout(new GridLayout()); - } - - /** - * @see TabControl#getControl() - */ - public Control getControl() - { - return _form; - } - - /** - * @see TabControl#setFocus() - */ - public void setFocus() - { - _bindingNumberTable.setFocus(); - } - - @Override - public void refresh(ManagedBean mbean) - { - - _bindings = null; - try - { - //gather a list of all keys and queues for display and selection - _bindings = (TabularDataSupport) _emb.bindings(); - } - catch (Exception e) - { - MBeanUtility.handleException(_mbean,e); - } - - _bindingNumberTableViewer.setInput(_bindings); - - layout(); - } - - public void layout() - { - _form.layout(true); - _form.getBody().layout(true, true); - } - - private void createWidgets() - { - Group bindingsGroup = new Group(_paramsComposite, SWT.SHADOW_NONE); - bindingsGroup.setBackground(_paramsComposite.getBackground()); - bindingsGroup.setText("Bindings"); - bindingsGroup.setLayout(new GridLayout(2,false)); - GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); - bindingsGroup.setLayoutData(gridData); - - Composite tablesComposite = _toolkit.createComposite(bindingsGroup); - gridData = new GridData(SWT.FILL, SWT.FILL, true, true); - gridData.minimumHeight = 250; - gridData.heightHint = 250; - tablesComposite.setLayoutData(gridData); - tablesComposite.setLayout(new GridLayout(2,false)); - - //table of bindings for the exchange - _bindingNumberTable = new Table (tablesComposite, SWT.SINGLE | SWT.SCROLL_LINE | SWT.BORDER | SWT.FULL_SELECTION); - _bindingNumberTable.setLinesVisible(true); - _bindingNumberTable.setHeaderVisible(true); - GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); - data.minimumHeight = 300; - data.heightHint = 300; - _bindingNumberTable.setLayoutData(data); - - _bindingNumberTableViewer = new TableViewer(_bindingNumberTable); - final TableSorter tableSorter = new TableSorter(BINDING_NUM); - - String[] titles = {"Binding Number", "Queue Name"}; - int[] bounds = {135, 175}; - for (int i = 0; i < titles.length; i++) - { - final int index = i; - final TableColumn column = new TableColumn (_bindingNumberTable, SWT.NONE); - - 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 = _bindingNumberTableViewer; - 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(); - } - }); - - } - - _bindingNumberTableViewer.setContentProvider(new ContentProviderImpl(BINDING_NUM)); - _bindingNumberTableViewer.setLabelProvider(new LabelProviderImpl(BINDING_NUM)); - _bindingNumberTableViewer.setSorter(tableSorter); - _bindingNumberTable.setSortColumn(_bindingNumberTable.getColumn(0)); - _bindingNumberTable.setSortDirection(SWT.UP); - - //table of header bindings - _headersTable = new Table (tablesComposite, SWT.SINGLE | SWT.SCROLL_LINE | SWT.BORDER | SWT.FULL_SELECTION); - _headersTable.setLinesVisible (true); - _headersTable.setHeaderVisible (true); - data = new GridData(SWT.FILL, SWT.FILL, true, true); - data.minimumHeight = 300; - data.heightHint = 300; - _headersTable.setLayoutData(data); - - _headersTableViewer = new TableViewer(_headersTable); - final TableSorter queuesTableSorter = new TableSorter(HEADER_BINDINGS); - - titles = new String[]{"Header Bindings"}; - bounds = new int[]{225}; - for (int i = 0; i < titles.length; i++) - { - final int index = i; - final TableColumn column = new TableColumn (_headersTable, SWT.NONE); - - 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) - { - queuesTableSorter.setColumn(index); - final TableViewer viewer = _headersTableViewer; - 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(); - } - }); - - } - - _headersTableViewer.setContentProvider(new ContentProviderImpl(HEADER_BINDINGS)); - _headersTableViewer.setLabelProvider(new LabelProviderImpl(HEADER_BINDINGS)); - _headersTableViewer.setSorter(queuesTableSorter); - _headersTable.setSortColumn(_headersTable.getColumn(0)); - _headersTable.setSortDirection(SWT.UP); - _headersTableViewer.setInput(new String[]{"Select a binding to view key-value pairs"}); - - _bindingNumberTableViewer.addSelectionChangedListener(new ISelectionChangedListener(){ - public void selectionChanged(SelectionChangedEvent evt) - { - int selectionIndex = _bindingNumberTable.getSelectionIndex(); - - if (selectionIndex != -1) - { - final CompositeData selectedMsg = (CompositeData)_bindingNumberTable.getItem(selectionIndex).getData(); - - String[] bindings = (String[]) selectedMsg.get(HEADER_BINDINGS); - _headersTableViewer.setInput(bindings); - } - else - { - _headersTableViewer.setInput(new String[]{"Select a binding to view key-value pairs"}); - } - } - }); - - //listener for double clicking to open the selection mbean - _bindingNumberTable.addMouseListener(new MouseListener() - { - // MouseListener implementation - public void mouseDoubleClick(MouseEvent event) - { - openMBean(_bindingNumberTable); - } - - public void mouseDown(MouseEvent e){} - public void mouseUp(MouseEvent e){} - }); - - //Side Buttons - Composite buttonsComposite = _toolkit.createComposite(bindingsGroup); - gridData = new GridData(SWT.FILL, SWT.FILL, false, true); - buttonsComposite.setLayoutData(gridData); - buttonsComposite.setLayout(new GridLayout()); - - final Button createBindingButton = _toolkit.createButton(buttonsComposite, "Create ...", SWT.PUSH); - createBindingButton.addSelectionListener(new SelectionAdapter() - { - public void widgetSelected(SelectionEvent e) - { - createNewBinding(createBindingButton.getShell()); - } - }); - - } - - - /** - * Content Provider class for the table viewer - */ - private class ContentProviderImpl implements IStructuredContentProvider - { - String type; - - public ContentProviderImpl(String type) - { - this.type = type; - } - - public void inputChanged(Viewer v, Object oldInput, Object newInput) - { - - } - - public void dispose() - { - - } - - public Object[] getElements(Object parent) - { - if(type.equals(BINDING_NUM)) - { - Collection<Object> rowCollection = ((TabularDataSupport) parent).values(); - - return rowCollection.toArray(); - } - else - { - //we have the list of bindings, return directly - return (String[]) parent; - } - } - } - - /** - * Label Provider class for the routing key table viewer - */ - private class LabelProviderImpl extends LabelProvider implements ITableLabelProvider - { - String type; - - public LabelProviderImpl(String type) - { - this.type = type; - } - - @Override - public String getColumnText(Object element, int columnIndex) - { - if(type.equals(BINDING_NUM)) //binding num and queue name table - { - switch (columnIndex) - { - case 0 : // binding number column - return String.valueOf(((CompositeDataSupport) element).get(BINDING_NUM)); - case 1 : // queue name column - return (String) ((CompositeDataSupport) element).get(QUEUE_NAME); - default : - return ""; - } - } - else //binding key-value pair table - { - switch (columnIndex) - { - case 0 : //header binding column - return String.valueOf(element); - default : - return ""; - } - } - } - - @Override - public Image getColumnImage(Object element, int columnIndex) - { - return null; - } - } - - /** - * Sorter class for the table viewer. - * - */ - public class TableSorter extends ViewerSorter - { - private int column; - private static final int ASCENDING = 0; - private static final int DESCENDING = 1; - - private int direction = DESCENDING; - - private String type; - - public TableSorter(String type) - { - this.type = type; - 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) - { - int comparison = 0; - - if(type.equals(BINDING_NUM)) //binding num and queue name table - { - CompositeData binding1 = (CompositeData) e1; - CompositeData binding2 = (CompositeData) e2; - - switch(column) - { - case 0: // binding number column - comparison = ((Integer) binding1.get(BINDING_NUM)).compareTo((Integer) binding2.get(BINDING_NUM)); - break; - case 1: // queue name column - comparison = ((String) binding1.get(QUEUE_NAME)).compareTo((String) binding2.get(QUEUE_NAME)); - break; - default: - comparison = 0; - } - } - else //binding key-value pair table - { - switch(column) - { - case 0: //header binding column - comparison = ((String)e1).compareTo((String) e2); - break; - default: - comparison = 0; - } - } - - // If descending order, flip the direction - if(direction == DESCENDING) - { - comparison = -comparison; - } - return comparison; - } - } - - private void createNewBinding(Shell parent) - { - final Shell shell = ViewUtility.createModalDialogShell(parent, "Create New Binding"); - - Composite queueNameComposite = _toolkit.createComposite(shell, SWT.NONE); - queueNameComposite.setBackground(shell.getBackground()); - GridData layoutData = new GridData(SWT.CENTER, SWT.TOP, true, false); - layoutData.minimumWidth = 300; - queueNameComposite.setLayoutData(layoutData); - queueNameComposite.setLayout(new GridLayout(2,false)); - - _toolkit.createLabel(queueNameComposite,"Queue:").setBackground(shell.getBackground()); - final Combo destinationCombo = new Combo(queueNameComposite,SWT.NONE | SWT.READ_ONLY); - destinationCombo.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - - final ScrolledComposite scrolledComposite = new ScrolledComposite(shell, SWT.V_SCROLL); - scrolledComposite.setExpandHorizontal(true); - scrolledComposite.setLayout(new GridLayout()); - scrolledComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - scrolledComposite.setBackground(shell.getBackground()); - - final Composite bindingComposite = _toolkit.createComposite(scrolledComposite, SWT.NONE); - bindingComposite.setBackground(scrolledComposite.getBackground()); - bindingComposite.setLayout(new GridLayout(2,true)); - layoutData = new GridData(SWT.FILL, SWT.TOP, true, false); - bindingComposite.setLayoutData(layoutData); - scrolledComposite.setContent(bindingComposite); - - Composite addMoreButtonComp = _toolkit.createComposite(shell); - addMoreButtonComp.setBackground(shell.getBackground()); - addMoreButtonComp.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, true, true)); - addMoreButtonComp.setLayout(new GridLayout()); - - final Button addMoreButton = _toolkit.createButton(addMoreButtonComp, "Add additional field", SWT.PUSH); - - Composite okCancelButtonsComp = _toolkit.createComposite(shell); - okCancelButtonsComp.setBackground(shell.getBackground()); - okCancelButtonsComp.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, true, true)); - okCancelButtonsComp.setLayout(new GridLayout(2,false)); - - Button okButton = _toolkit.createButton(okCancelButtonsComp, "OK", SWT.PUSH); - okButton.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, false)); - Button cancelButton = _toolkit.createButton(okCancelButtonsComp, "Cancel", SWT.PUSH); - cancelButton.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, false)); - - List<String> queueList = ApplicationRegistry.getServerRegistry(_mbean).getQueueNames(_mbean.getVirtualHostName()); - - if(queueList.size() == 0) - { - destinationCombo.setItems(new String[]{"No queues available"}); - okButton.setEnabled(false); - } - else - { - Collections.sort(queueList); - destinationCombo.setItems(queueList.toArray(new String[0])); - } - destinationCombo.select(0); - - final HashMap<Text, Text> headerBindingHashMap = new HashMap<Text, Text>(); - - //add headings - Label keyLabel = _toolkit.createLabel(bindingComposite,"Key:"); - keyLabel.setBackground(bindingComposite.getBackground()); - keyLabel.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false)); - - Label valueLabel = _toolkit.createLabel(bindingComposite,"Value:"); - valueLabel.setBackground(bindingComposite.getBackground()); - valueLabel.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false)); - - //add the x-match key by default and offer a comobo to select its value - final Text xmatchKeyText = new Text(bindingComposite, SWT.BORDER); - xmatchKeyText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - xmatchKeyText.setText("x-match"); - xmatchKeyText.setEditable(false); - - final Combo xmatchValueCombo = new Combo(bindingComposite,SWT.NONE | SWT.READ_ONLY); - xmatchValueCombo.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - xmatchValueCombo.setItems(new String[]{"any", "all"}); - xmatchValueCombo.select(0); - - //make some empty key-value fields - for(int i=0; i < 4; i++) - { - Text keyText = new Text(bindingComposite, SWT.BORDER); - Text valueText = new Text(bindingComposite, SWT.BORDER); - keyText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - valueText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - - headerBindingHashMap.put(keyText, valueText); - } - bindingComposite.setSize(bindingComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); - - //allow adding more fields for additional key-value pairs - addMoreButton.addSelectionListener(new SelectionAdapter() - { - public void widgetSelected(SelectionEvent e) - { - Text keyText = new Text(bindingComposite, SWT.BORDER); - Text valueText = new Text(bindingComposite, SWT.BORDER); - keyText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - valueText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); - - headerBindingHashMap.put(keyText, valueText); - - bindingComposite.setSize(bindingComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); - bindingComposite.layout(true); - scrolledComposite.layout(true); - } - }); - - okButton.addSelectionListener(new SelectionAdapter() - { - public void widgetSelected(SelectionEvent e) - { - String xMatchString = xmatchValueCombo.getText(); - - String destQueue = destinationCombo.getItem(destinationCombo.getSelectionIndex()).toString(); - - StringBuffer bindingValue = new StringBuffer(); - - //insert the x-match key-value pair - if (xMatchString.equalsIgnoreCase("any")) - { - bindingValue.append("x-match=any"); - } - else - { - bindingValue.append("x-match=all"); - } - - //insert the other key-value pairs - for (Text keyText : headerBindingHashMap.keySet()) - { - - String key = keyText.getText(); - if(key == null || key.length() == 0) - { - continue; - } - - Text valueText = headerBindingHashMap.get(keyText); - String value = valueText.getText(); - - bindingValue.append(","); - bindingValue.append(key + "="); - //empty values are permitted, signalling only key-presence is required - if(value != null && value.length() > 0) - { - bindingValue.append(value); - } - } - - shell.dispose(); - - try - { - _emb.createNewBinding(destQueue, bindingValue.toString()); - ViewUtility.operationResultFeedback(null, "Created new Binding", null); - } - catch (Exception e4) - { - ViewUtility.operationFailedStatusBarMessage("Error creating new Binding"); - MBeanUtility.handleException(_mbean, e4); - } - - refresh(_mbean); - } - }); - - cancelButton.addSelectionListener(new SelectionAdapter() - { - public void widgetSelected(SelectionEvent e) - { - shell.dispose(); - } - }); - - shell.setDefaultButton(okButton); - shell.pack(); - ViewUtility.centerChildInParentShell(parent, shell); - - shell.open(); - } - - private void openMBean(Table table) - { - int selectionIndex = table.getSelectionIndex(); - - if (selectionIndex == -1) - { - return; - } - - CompositeData bindingResult = (CompositeData) table.getItem(selectionIndex).getData(); - String queueName = (String) bindingResult.get(QUEUE_NAME); - ServerRegistry serverRegistry = ApplicationRegistry.getServerRegistry(_mbean); - ManagedBean selectedMBean = serverRegistry.getQueue(queueName, _mbean.getVirtualHostName()); - - if(selectedMBean == null) - { - ViewUtility.popupErrorMessage("Error", "Unable to retrieve the selected MBean to open it"); - return; - } - - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - MBeanView view = (MBeanView) window.getActivePage().findView(MBeanView.ID); - try - { - view.openMBean(selectedMBean); - } - catch (Exception ex) - { - MBeanUtility.handleException(selectedMBean, ex); - } - } -} |