Author: robbie Date: Mon Jun 29 09:00:17 2009 New Revision: 789265 URL: http://svn.apache.org/viewvc?rev=789265&view=rev Log: QPID-1945: initial virtual host manager mbean view
Also modified the navigation tree to correctly identify the virtual host for single-instance mbeans like the VHM, and made the server registry mbean removal process more resistant to NPE's Added: qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/vhost/ qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/vhost/VHostTabControl.java Modified: qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTabFolderFactory.java qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java Modified: qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java URL: http://svn.apache.org/viewvc/qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java?rev=789265&r1=789264&r2=789265&view=diff ============================================================================== --- qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java (original) +++ qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java Mon Jun 29 09:00:17 2009 @@ -27,7 +27,7 @@ */ public class Constants { - public final static String APPLICATION_NAME = "Qpid Management Console"; + public final static String APPLICATION_NAME = "Qpid JMX Management Console"; public static final String DEFAULT_DOMAIN = "org.apache.qpid"; public final static String ACTION_REMOVE_MBEANNODE = "Remove from list"; Modified: qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java URL: http://svn.apache.org/viewvc/qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java?rev=789265&r1=789264&r2=789265&view=diff ============================================================================== --- qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java (original) +++ qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java Mon Jun 29 09:00:17 2009 @@ -164,6 +164,12 @@ public void removeManagedObject(ManagedBean mbean) { + if (mbean == null) + { + return; + } + + _mbeansMap.remove(mbean.getUniqueName()); if (mbean.isQueue()) { @@ -177,8 +183,6 @@ { removeConnectionMBean(mbean); } - - _mbeansMap.remove(mbean.getUniqueName()); } public void putMBeanInfo(ManagedBean mbean, MBeanInfo mbeanInfo) @@ -423,11 +427,11 @@ public void unregisterManagedObject(ObjectName objName) { ManagedBean mbean = _mbeansMap.get(objName.toString()); - removeManagedObject(mbean); // Check if mbean was not available in the map. It can happen if mbean unregistration // notification is received and the mbean is not added in the map. if (mbean != null) { + removeManagedObject(mbean); _mbeansToBeRemoved.add(mbean); } } Modified: qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTabFolderFactory.java URL: http://svn.apache.org/viewvc/qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTabFolderFactory.java?rev=789265&r1=789264&r2=789265&view=diff ============================================================================== --- qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTabFolderFactory.java (original) +++ qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTabFolderFactory.java Mon Jun 29 09:00:17 2009 @@ -44,6 +44,7 @@ import org.apache.qpid.management.ui.views.type.ExchangeTypeTabControl; import org.apache.qpid.management.ui.views.type.QueueTypeTabControl; import org.apache.qpid.management.ui.views.users.UserManagementTabControl; +import org.apache.qpid.management.ui.views.vhost.VHostTabControl; import org.apache.qpid.management.ui.views.logging.ConfigurationFileTabControl; import org.apache.qpid.management.ui.views.logging.RuntimeTabControl; import org.eclipse.swt.SWT; @@ -104,7 +105,11 @@ tempCreateGeneric(tabFolder, mbean); break; case VHOST_MANAGER: - tempCreateGeneric(tabFolder, mbean); + tab = new TabItem(tabFolder, SWT.NONE); + tab.setText("Operations"); + controller = new VHostTabControl(tabFolder, mbean, mbsc); + tab.setControl(controller.getControl()); + tab.setData(TabControl.CONTROLLER, controller); break; case LOGGING_MANAGEMENT: tab = new TabItem(tabFolder, SWT.NONE); Modified: qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java URL: http://svn.apache.org/viewvc/qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java?rev=789265&r1=789264&r2=789265&view=diff ============================================================================== --- qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java (original) +++ qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java Mon Jun 29 09:00:17 2009 @@ -632,6 +632,7 @@ // Add the mbean node now TreeObject mbeanNode = new TreeObject(mbean); + mbeanNode.setVirtualHost(mbean.getVirtualHostName()); mbeanNode.setParent(typeNode); // Add the mbean to the config file Added: qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/vhost/VHostTabControl.java URL: http://svn.apache.org/viewvc/qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/vhost/VHostTabControl.java?rev=789265&view=auto ============================================================================== --- qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/vhost/VHostTabControl.java (added) +++ qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/vhost/VHostTabControl.java Mon Jun 29 09:00:17 2009 @@ -0,0 +1,711 @@ +/* + * + * 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.vhost; + +import static org.apache.qpid.management.ui.Constants.EXCHANGE_TYPE_VALUES; + +import java.util.List; + +import javax.management.MBeanServerConnection; +import javax.management.MBeanServerInvocationHandler; + +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.ManagedBroker; +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.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.Group; +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.forms.widgets.Form; +import org.eclipse.ui.forms.widgets.FormToolkit; + + +/** + * Control class for the VirtualHostManager mbean operations tab. + */ +public class VHostTabControl extends TabControl +{ + private FormToolkit _toolkit; + private Form _form; + private Table _queueTable = null; + private TableViewer _queueTableViewer = null; + private Table _exchangeTable = null; + private TableViewer _exchangeTableViewer = null; + + private Composite _paramsComposite = null; + + private ManagedBroker _vhmb; + + public VHostTabControl(TabFolder tabFolder, JMXManagedObject mbean, MBeanServerConnection mbsc) + { + super(tabFolder); + _mbean = mbean; + _vhmb = (ManagedBroker) MBeanServerInvocationHandler.newProxyInstance(mbsc, + mbean.getObjectName(), ManagedBroker.class, false); + _toolkit = new FormToolkit(_tabFolder.getDisplay()); + _form = _toolkit.createForm(_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(2, true)); + } + + /** + * @see TabControl#getControl() + */ + public Control getControl() + { + return _form; + } + + /** + * @see TabControl#setFocus() + */ + public void setFocus() + { + + } + + @Override + public void refresh(ManagedBean mbean) + { + List<ManagedBean> queues = null; + List<ManagedBean> exchanges = null; + + ServerRegistry serverRegistry = ApplicationRegistry.getServerRegistry(MBeanView.getServer()); + queues = serverRegistry.getQueues(MBeanView.getVirtualHost()); + exchanges = serverRegistry.getExchanges(MBeanView.getVirtualHost()); + + _form.setVisible(false); + _queueTableViewer.setInput(queues); + _exchangeTableViewer.setInput(exchanges); + _form.setVisible(true); + layout(); + } + + public void layout() + { + _form.layout(true); + _form.getBody().layout(true, true); + } + + private void createWidgets() + { + Group queuesGroup = new Group(_paramsComposite, SWT.SHADOW_NONE); + queuesGroup.setBackground(_paramsComposite.getBackground()); + queuesGroup.setText("Queues"); + queuesGroup.setLayout(new GridLayout(2,false)); + GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); + queuesGroup.setLayoutData(gridData); + + _queueTable = new Table (queuesGroup, SWT.SINGLE | SWT.SCROLL_LINE | SWT.BORDER | SWT.FULL_SELECTION); + _queueTable.setLinesVisible (true); + _queueTable.setHeaderVisible (true); + GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); + _queueTable.setLayoutData(data); + + _queueTableViewer = new TableViewer(_queueTable); + final TableSorter tableSorter = new TableSorter(); + + String[] titles = {"Name"}; + int[] bounds = { 250 }; + for (int i = 0; i < titles.length; i++) + { + final int index = i; + final TableColumn column = new TableColumn (_queueTable, 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 = _queueTableViewer; + 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(); + } + }); + + } + + _queueTableViewer.setContentProvider(new ContentProviderImpl()); + _queueTableViewer.setLabelProvider(new LabelProviderImpl()); + _queueTableViewer.setSorter(tableSorter); + + Composite queuesRightComposite = _toolkit.createComposite(queuesGroup); + gridData = new GridData(SWT.FILL, SWT.FILL, false, true); + queuesRightComposite.setLayoutData(gridData); + queuesRightComposite.setLayout(new GridLayout()); + + final Button createQueueButton = _toolkit.createButton(queuesRightComposite, "Create Queue ...", SWT.PUSH); + createQueueButton.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false)); + createQueueButton.addSelectionListener(new SelectionAdapter() + { + public void widgetSelected(SelectionEvent e) + { + createQueue(createQueueButton.getShell()); + } + }); + + final Button deleteQueueButton = _toolkit.createButton(queuesRightComposite, "Delete Queue", SWT.PUSH); + deleteQueueButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + deleteQueueButton.setEnabled(false); + deleteQueueButton.addSelectionListener(new SelectionAdapter() + { + public void widgetSelected(SelectionEvent e) + { + int selectionIndex = _queueTable.getSelectionIndex(); + + if (selectionIndex != -1) + { + final ManagedBean selectedQueue = (ManagedBean)_queueTable.getItem(selectionIndex).getData(); + String queue = selectedQueue.getName(); + + int response = ViewUtility.popupOkCancelConfirmationMessage("VirtualHost Manager", + "Delete queue: " + queue + " ?"); + if (response == SWT.OK) + { + try + { + _vhmb.deleteQueue(queue); + + //remove queue from list of managed beans + ServerRegistry serverRegistry = ApplicationRegistry.getServerRegistry(MBeanView.getServer()); + serverRegistry.removeManagedObject(selectedQueue); + } + catch(Exception e1) + { + MBeanUtility.handleException(_mbean, e1); + } + //TODO:display result + refresh(_mbean);; + } + } + } + }); + + _queueTableViewer.addSelectionChangedListener(new ISelectionChangedListener(){ + public void selectionChanged(SelectionChangedEvent evt) + { + int selectionIndex = _queueTable.getSelectionIndex(); + + if (selectionIndex != -1) + { + deleteQueueButton.setEnabled(true); + } + else + { + deleteQueueButton.setEnabled(false); + } + } + }); + + + Group exchangesGroup = new Group(_paramsComposite, SWT.SHADOW_NONE); + exchangesGroup.setBackground(_paramsComposite.getBackground()); + exchangesGroup.setText("Exchanges"); + exchangesGroup.setLayout(new GridLayout(2,false)); + gridData = new GridData(SWT.FILL, SWT.FILL, true, true); + exchangesGroup.setLayoutData(gridData); + + _exchangeTable = new Table (exchangesGroup, SWT.SINGLE | SWT.SCROLL_LINE | SWT.BORDER | SWT.FULL_SELECTION); + _exchangeTable.setLinesVisible (true); + _exchangeTable.setHeaderVisible (true); + data = new GridData(SWT.FILL, SWT.FILL, true, true); + _exchangeTable.setLayoutData(data); + + _exchangeTableViewer = new TableViewer(_exchangeTable); + final TableSorter exchangeTableSorter = new TableSorter(); + + for (int i = 0; i < titles.length; i++) + { + final int index = i; + final TableColumn column = new TableColumn (_exchangeTable, 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) + { + exchangeTableSorter.setColumn(index); + final TableViewer viewer = _exchangeTableViewer; + 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(); + } + }); + + } + + _exchangeTableViewer.setContentProvider(new ContentProviderImpl()); + _exchangeTableViewer.setLabelProvider(new LabelProviderImpl()); + _exchangeTableViewer.setSorter(exchangeTableSorter); + + Composite exchangesRightComposite = _toolkit.createComposite(exchangesGroup); + gridData = new GridData(SWT.FILL, SWT.FILL, false, true); + exchangesRightComposite.setLayoutData(gridData); + exchangesRightComposite.setLayout(new GridLayout()); + + final Button createExchangeButton = _toolkit.createButton(exchangesRightComposite, "Create Exchange ...", SWT.PUSH); + createExchangeButton.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false)); + createExchangeButton.addSelectionListener(new SelectionAdapter() + { + public void widgetSelected(SelectionEvent e) + { + createExchange(createQueueButton.getShell()); + } + }); + + final Button deleteExchangeButton = _toolkit.createButton(exchangesRightComposite, "Delete Exchange", SWT.PUSH); + deleteExchangeButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + deleteExchangeButton.setEnabled(false); + deleteExchangeButton.addSelectionListener(new SelectionAdapter() + { + public void widgetSelected(SelectionEvent e) + { + int selectionIndex = _exchangeTable.getSelectionIndex(); + + if (selectionIndex != -1) + { + final ManagedBean selectedExchange = (ManagedBean)_exchangeTable.getItem(selectionIndex).getData(); + String exchange = selectedExchange.getName(); + + int response = ViewUtility.popupOkCancelConfirmationMessage("VirtualHost Manager", + "Delete exchange: " + exchange + " ?"); + if (response == SWT.OK) + { + try + { + _vhmb.unregisterExchange(exchange); + + //remove exchange from list of managed beans + ServerRegistry serverRegistry = ApplicationRegistry.getServerRegistry(MBeanView.getServer()); + serverRegistry.removeManagedObject(selectedExchange); + } + catch(Exception e1) + { + MBeanUtility.handleException(_mbean, e1); + } + //TODO:display result + + refresh(_mbean);; + } + } + } + }); + + _exchangeTableViewer.addSelectionChangedListener(new ISelectionChangedListener(){ + public void selectionChanged(SelectionChangedEvent evt) + { + int selectionIndex = _exchangeTable.getSelectionIndex(); + + if (selectionIndex != -1) + { + deleteExchangeButton.setEnabled(true); + } + else + { + deleteExchangeButton.setEnabled(false); + } + } + }); + + } + + + /** + * Content Provider class for the table viewer + */ + private 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 class LabelProviderImpl extends LabelProvider implements ITableLabelProvider + { + @Override + public String getColumnText(Object element, int columnIndex) + { + switch (columnIndex) + { + case 0 : // name column + return ((ManagedBean) element).getName(); + 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; + + 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; + } + } + + private void createQueue(final Shell parent) + { + final Shell shell = ViewUtility.createModalDialogShell(parent, "Create Queue"); + + Composite nameComposite = _toolkit.createComposite(shell, SWT.NONE); + nameComposite.setBackground(shell.getBackground()); + nameComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + nameComposite.setLayout(new GridLayout(2,false)); + + _toolkit.createLabel(nameComposite,"Name:").setBackground(shell.getBackground()); + final Text nameText = new Text(nameComposite, SWT.BORDER); + nameText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + + Composite ownerComposite = _toolkit.createComposite(shell, SWT.NONE); + ownerComposite.setBackground(shell.getBackground()); + ownerComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + ownerComposite.setLayout(new GridLayout(2,false)); + + _toolkit.createLabel(ownerComposite,"Owner:").setBackground(shell.getBackground()); + final Text ownerText = new Text(ownerComposite, SWT.BORDER); + ownerText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + + Composite durableComposite = _toolkit.createComposite(shell, SWT.NONE); + durableComposite.setBackground(shell.getBackground()); + GridData gridData = new GridData(SWT.FILL, SWT.TOP, true, false); + gridData.minimumWidth = 220; + durableComposite.setLayoutData(gridData); + durableComposite.setLayout(new GridLayout(2,false)); + + _toolkit.createLabel(durableComposite,"Durable:").setBackground(shell.getBackground()); + final Button durableButton = new Button(durableComposite, SWT.CHECK); + durableButton.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, false)); + + 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)); + + okButton.addSelectionListener(new SelectionAdapter() + { + public void widgetSelected(SelectionEvent e) + { + String name = nameText.getText(); + + if (name == null || name.length() == 0) + { + ViewUtility.popupErrorMessage("Create Queue", "Please enter a valid name"); + return; + } + + String owner = ownerText.getText(); + + if (owner != null && owner.length() == 0) + { + owner = null; + } + + boolean durable = durableButton.getSelection(); + + shell.dispose(); + + try + { + _vhmb.createNewQueue(name, owner, durable); + //TODO: display result? + + try + { + //delay to allow mbean registration notification processing + Thread.sleep(250); + } + catch(InterruptedException ie) + { + //ignore + } + } + catch(Exception e5) + { + MBeanUtility.handleException(_mbean, e5); + } + + refresh(_mbean); + } + }); + + cancelButton.addSelectionListener(new SelectionAdapter() + { + public void widgetSelected(SelectionEvent e) + { + shell.dispose(); + } + }); + + shell.setDefaultButton(okButton); + shell.pack(); + shell.open(); + } + + private void createExchange(final Shell parent) + { + final Shell shell = ViewUtility.createModalDialogShell(parent, "Create Exchange"); + + Composite nameComposite = _toolkit.createComposite(shell, SWT.NONE); + nameComposite.setBackground(shell.getBackground()); + nameComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + nameComposite.setLayout(new GridLayout(2,false)); + + _toolkit.createLabel(nameComposite,"Name:").setBackground(shell.getBackground()); + final Text nameText = new Text(nameComposite, SWT.BORDER); + nameText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + + Composite typeComposite = _toolkit.createComposite(shell, SWT.NONE); + typeComposite.setBackground(shell.getBackground()); + typeComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + typeComposite.setLayout(new GridLayout(2,false)); + + //TODO: get exchange types from broker instead of hardcoded + _toolkit.createLabel(typeComposite,"Type:").setBackground(shell.getBackground()); + final org.eclipse.swt.widgets.List typeList = new org.eclipse.swt.widgets.List(typeComposite, SWT.SINGLE | SWT.BORDER); + typeList.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + typeList.setItems(EXCHANGE_TYPE_VALUES); + + Composite durableComposite = _toolkit.createComposite(shell, SWT.NONE); + durableComposite.setBackground(shell.getBackground()); + GridData gridData = new GridData(SWT.FILL, SWT.TOP, true, false); + gridData.minimumWidth = 220; + durableComposite.setLayoutData(gridData); + durableComposite.setLayout(new GridLayout(2,false)); + + _toolkit.createLabel(durableComposite,"Durable:").setBackground(shell.getBackground()); + final Button durableButton = new Button(durableComposite, SWT.CHECK); + durableButton.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, false)); + + + 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)); + + okButton.addSelectionListener(new SelectionAdapter() + { + public void widgetSelected(SelectionEvent e) + { + String name = nameText.getText(); + + if (name == null || name.length() == 0) + { + ViewUtility.popupErrorMessage("Create Exchange", "Please enter a valid name"); + return; + } + + int selectedTypeIndex = typeList.getSelectionIndex(); + + if (selectedTypeIndex == -1) + { + ViewUtility.popupErrorMessage("Create Exchange", "Please select an Exchange type"); + return; + } + + String type = typeList.getItem(selectedTypeIndex); + + boolean durable = durableButton.getSelection(); + + shell.dispose(); + + try + { + _vhmb.createNewExchange(name, type, durable); + //TODO: display result? + + try + { + //delay to allow mbean registration notification processing + Thread.sleep(250); + } + catch(InterruptedException ie) + { + //ignore + } + } + catch(Exception e5) + { + MBeanUtility.handleException(_mbean, e5); + } + + refresh(_mbean); + } + }); + + cancelButton.addSelectionListener(new SelectionAdapter() + { + public void widgetSelected(SelectionEvent e) + { + shell.dispose(); + } + }); + + shell.setDefaultButton(okButton); + shell.pack(); + shell.open(); + } + +} --------------------------------------------------------------------- Apache Qpid - AMQP Messaging Implementation Project: http://qpid.apache.org Use/Interact: mailto:commits-subscr...@qpid.apache.org