summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2009-06-29 09:00:17 +0000
committerRobert Gemmell <robbie@apache.org>2009-06-29 09:00:17 +0000
commit5d50f406fb08204b5237c8d30fbac6a90b54f67a (patch)
treed636be40a32552d0388052a255b4da84090885bd
parent4aa0cbe5273955b91437297b45c23218cc149c94 (diff)
downloadqpid-python-5d50f406fb08204b5237c8d30fbac6a90b54f67a.tar.gz
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 git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/jmx_mc_gsoc09@789265 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java2
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java10
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTabFolderFactory.java7
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java1
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/vhost/VHostTabControl.java711
5 files changed, 726 insertions, 5 deletions
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java
index 5a6b3f8856..17468cab80 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java
@@ -27,7 +27,7 @@ package org.apache.qpid.management.ui;
*/
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";
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
index cf3db26f4b..bf3e95e308 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
@@ -164,6 +164,12 @@ public class JMXServerRegistry extends ServerRegistry
public void removeManagedObject(ManagedBean mbean)
{
+ if (mbean == null)
+ {
+ return;
+ }
+
+ _mbeansMap.remove(mbean.getUniqueName());
if (mbean.isQueue())
{
@@ -177,8 +183,6 @@ public class JMXServerRegistry extends ServerRegistry
{
removeConnectionMBean(mbean);
}
-
- _mbeansMap.remove(mbean.getUniqueName());
}
public void putMBeanInfo(ManagedBean mbean, MBeanInfo mbeanInfo)
@@ -423,11 +427,11 @@ public class JMXServerRegistry extends ServerRegistry
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);
}
}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTabFolderFactory.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTabFolderFactory.java
index 46e4426fb8..1fbc5c1843 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTabFolderFactory.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTabFolderFactory.java
@@ -44,6 +44,7 @@ import org.apache.qpid.management.ui.views.type.ConnectionTypeTabControl;
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 @@ public class MBeanTabFolderFactory
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);
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java
index 08a3563899..3322375b4f 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java
@@ -632,6 +632,7 @@ public class NavigationView extends ViewPart
// Add the mbean node now
TreeObject mbeanNode = new TreeObject(mbean);
+ mbeanNode.setVirtualHost(mbean.getVirtualHostName());
mbeanNode.setParent(typeNode);
// Add the mbean to the config file
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/vhost/VHostTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/vhost/VHostTabControl.java
new file mode 100644
index 0000000000..d659f70bcc
--- /dev/null
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/vhost/VHostTabControl.java
@@ -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();
+ }
+
+}