summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2009-06-23 10:02:09 +0000
committerRobert Gemmell <robbie@apache.org>2009-06-23 10:02:09 +0000
commitd4a13453731946c03c2a130055ccecb345042226 (patch)
tree3bee46131ca48c504e442fd87d51d1bac42329a2
parent93d8d461634725d0079435f4f7d123e055253be4 (diff)
downloadqpid-python-d4a13453731946c03c2a130055ccecb345042226.tar.gz
QPID-1931: add initial Logging Management mbean view
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/jmx_mc_gsoc09@787617 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTabFolderFactory.java14
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/ConfigurationFileTabControl.java481
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableContentProvider.java52
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableLabelProvider.java59
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableSorter.java90
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/RuntimeTabControl.java449
6 files changed, 1144 insertions, 1 deletions
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 8bb081ba83..acafc3b7b2 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
@@ -37,6 +37,8 @@ import org.apache.qpid.management.ui.model.NotificationInfoModel;
import org.apache.qpid.management.ui.model.OperationData;
import org.apache.qpid.management.ui.model.OperationDataModel;
import org.apache.qpid.management.ui.views.users.UserManagementTabControl;
+import org.apache.qpid.management.ui.views.logging.ConfigurationFileTabControl;
+import org.apache.qpid.management.ui.views.logging.RuntimeTabControl;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
@@ -92,7 +94,17 @@ public class MBeanTabFolderFactory
tempCreateGeneric(tabFolder, mbean);
break;
case LOGGING_MANAGEMENT:
- tempCreateGeneric(tabFolder, mbean);
+ tab = new TabItem(tabFolder, SWT.NONE);
+ tab.setText("Runtime Options");
+ controller = new RuntimeTabControl(tabFolder, mbean, mbsc);
+ tab.setControl(controller.getControl());
+ tab.setData(TabControl.CONTROLLER, controller);
+
+ tab = new TabItem(tabFolder, SWT.NONE);
+ tab.setText("ConfigurationFile Options");
+ controller = new ConfigurationFileTabControl(tabFolder, mbean, mbsc);
+ tab.setControl(controller.getControl());
+ tab.setData(TabControl.CONTROLLER, controller);
break;
case USER_MANAGEMENT:
tab = new TabItem(tabFolder, SWT.NONE);
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/ConfigurationFileTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/ConfigurationFileTabControl.java
new file mode 100644
index 0000000000..0265d42816
--- /dev/null
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/ConfigurationFileTabControl.java
@@ -0,0 +1,481 @@
+/*
+ *
+ * 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.logging;
+
+import javax.management.MBeanServerConnection;
+import javax.management.MBeanServerInvocationHandler;
+import javax.management.openmbean.CompositeData;
+import javax.management.openmbean.TabularDataSupport;
+
+import static org.apache.qpid.management.ui.Constants.FONT_BOLD;
+
+import org.apache.qpid.management.ui.ApplicationRegistry;
+import org.apache.qpid.management.ui.ManagedBean;
+import org.apache.qpid.management.common.mbeans.LoggingManagement;
+import org.apache.qpid.management.ui.jmx.JMXManagedObject;
+import org.apache.qpid.management.ui.jmx.MBeanUtility;
+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.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+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.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.ui.forms.widgets.Form;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+
+/**
+ * Control class for the LoggingManagement mbean ConfigFile Options tab.
+ */
+public class ConfigurationFileTabControl extends TabControl
+{
+ private FormToolkit _toolkit;
+ private Form _form;
+ private Table _table = null;
+ private TableViewer _tableViewer = null;
+ private Composite _headerComposite = null;
+ private Composite _paramsComposite = null;
+
+ private Label _configFileRootLoggerLevelLabel = null;
+ private Label _logWatchIntervalLabel = null;
+ private String[] _availableLoggerLevels;
+ private TabularDataSupport _configFileLoggerLevels = null;
+ private LoggingManagement _lmmb;
+
+ static final String LOGGER_NAME = LoggingManagement.COMPOSITE_ITEM_NAMES[0];
+ static final String LOGGER_LEVEL = LoggingManagement.COMPOSITE_ITEM_NAMES[1];
+
+ public ConfigurationFileTabControl(TabFolder tabFolder, JMXManagedObject mbean, MBeanServerConnection mbsc)
+ {
+ super(tabFolder);
+ _mbean = mbean;
+ _lmmb = (LoggingManagement)
+ MBeanServerInvocationHandler.newProxyInstance(mbsc, mbean.getObjectName(),
+ LoggingManagement.class, false);
+ _toolkit = new FormToolkit(_tabFolder.getDisplay());
+ _form = _toolkit.createForm(_tabFolder);
+ _form.getBody().setLayout(new GridLayout());
+ createComposites();
+ createWidgets();
+ }
+
+ private void createComposites()
+ {
+
+ _headerComposite = _toolkit.createComposite(_form.getBody(), SWT.NONE);
+ _headerComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+ _headerComposite.setLayout(new GridLayout());
+
+ _paramsComposite = _toolkit.createComposite(_form.getBody(), SWT.NONE);
+ _paramsComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+ _paramsComposite.setLayout(new GridLayout());
+ }
+
+ /**
+ * @see TabControl#getControl()
+ */
+ public Control getControl()
+ {
+ return _form;
+ }
+
+ /**
+ * @see TabControl#setFocus()
+ */
+ public void setFocus()
+ {
+ _table.setFocus();
+ }
+
+ @Override
+ public void refresh(ManagedBean mbean)
+ {
+ _mbean = mbean;
+ if (_mbean == null)
+ {
+ _tableViewer.setInput(null);
+ return;
+ }
+
+ String configFileRootLoggerLevel = "-";
+ try
+ {
+ configFileRootLoggerLevel = _lmmb.getConfigFileRootLoggerLevel();
+ }
+ catch (Exception e1)
+ {
+ MBeanUtility.handleException(_mbean, e1);
+ }
+
+ int log4jLogWatchInterval = -1;
+ try
+ {
+ log4jLogWatchInterval = _lmmb.getLog4jLogWatchInterval();
+ }
+ catch (Exception e2)
+ {
+ MBeanUtility.handleException(_mbean, e2);
+ }
+
+ _configFileLoggerLevels = null;
+ try
+ {
+ _configFileLoggerLevels = (TabularDataSupport) _lmmb.viewConfigFileLoggerLevels();
+ }
+ catch (Exception e3)
+ {
+ MBeanUtility.handleException(_mbean, e3);
+ }
+
+ _form.setVisible(false);
+ _configFileRootLoggerLevelLabel.setText(String.valueOf(configFileRootLoggerLevel));
+ if (log4jLogWatchInterval == 0)
+ {
+ _logWatchIntervalLabel.setText("Disabled (0 sec)");
+ }
+ else
+ {
+ _logWatchIntervalLabel.setText(String.valueOf(log4jLogWatchInterval) + " seconds");
+ }
+ _tableViewer.setInput(_configFileLoggerLevels);
+ _form.setVisible(true);
+ layout();
+ }
+
+ public void layout()
+ {
+ _form.layout(true);
+ _form.getBody().layout(true, true);
+ }
+
+ private void createWidgets()
+ {
+ try
+ {
+ _availableLoggerLevels = _lmmb.getAvailableLoggerLevels();
+ }
+ catch(Exception e)
+ {
+ _availableLoggerLevels = new String[]{"ALL","TRACE","DEBUG","INFO","WARN","ERROR","FATAL","OFF"};
+ }
+
+ Label noteLabel = _toolkit.createLabel(_headerComposite,
+ "NOTE: These options modify only the configuration file. " +
+ "Changes made here will only take effect if either LogWatch " +
+ "is enabled or the broker is restarted.");
+ GridData gridData = new GridData(SWT.FILL, SWT.FILL, false, true);
+ noteLabel.setLayoutData(gridData);
+
+ Group configFileLoggerLevelsGroup = new Group(_paramsComposite, SWT.SHADOW_NONE);
+ configFileLoggerLevelsGroup.setBackground(_paramsComposite.getBackground());
+ configFileLoggerLevelsGroup.setText("Config File Logger Levels");
+ configFileLoggerLevelsGroup.setLayout(new GridLayout());
+ gridData = new GridData(SWT.LEFT, SWT.TOP, true, false);
+ configFileLoggerLevelsGroup.setLayoutData(gridData);
+
+ Composite tableComposite = _toolkit.createComposite(configFileLoggerLevelsGroup);
+ gridData = new GridData(SWT.FILL, SWT.FILL, false, true);
+ tableComposite .setLayoutData(gridData);
+ GridLayout gridLayout = new GridLayout();
+ gridData.heightHint = 250;
+ tableComposite .setLayout(gridLayout);
+
+ _table = new Table (tableComposite, SWT.SINGLE | SWT.SCROLL_LINE | SWT.BORDER | SWT.FULL_SELECTION);
+ _table.setLinesVisible (true);
+ _table.setHeaderVisible (true);
+ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+ data.heightHint = 350;
+ _table.setLayoutData(data);
+
+ _tableViewer = new TableViewer(_table);
+ final LoggingTableSorter tableSorter = new LoggingTableSorter();
+
+ String[] titles = { LOGGER_NAME, LOGGER_LEVEL };
+ int[] bounds = { 600, 60 };
+ 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 LoggingTableContentProvider());
+ _tableViewer.setLabelProvider(new LoggingTableLabelProvider());
+ _tableViewer.setSorter(tableSorter);
+ _table.setSortColumn(_table.getColumn(0));
+ _table.setSortDirection(SWT.UP);
+ _table.addMouseListener(new MouseListener()
+ {
+ public void mouseDoubleClick(MouseEvent event)
+ {
+ editLoggerLevel(_table.getShell());
+ }
+
+ public void mouseDown(MouseEvent e){}
+ public void mouseUp(MouseEvent e){}
+ });
+
+ final Button logLevelEditButton = _toolkit.createButton(configFileLoggerLevelsGroup, "Edit Selected Logger...", SWT.PUSH);
+ logLevelEditButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
+ logLevelEditButton.setEnabled(false);
+ logLevelEditButton.addSelectionListener(new SelectionAdapter()
+ {
+ public void widgetSelected(SelectionEvent e)
+ {
+ editLoggerLevel(logLevelEditButton.getShell());
+ }
+ });
+
+ _tableViewer.addSelectionChangedListener(new ISelectionChangedListener(){
+ public void selectionChanged(SelectionChangedEvent evt)
+ {
+ int selectionIndex = _table.getSelectionIndex();
+
+ if(selectionIndex != -1)
+ {
+ logLevelEditButton.setEnabled(true);
+ }
+ else
+ {
+ logLevelEditButton.setEnabled(false);
+ }
+ }
+ });
+
+
+ Composite attributesComposite = _toolkit.createComposite(_paramsComposite);
+ gridData = new GridData(SWT.LEFT, SWT.FILL, false, true);
+ attributesComposite.setLayoutData(gridData);
+ gridLayout = new GridLayout(3,false);
+ attributesComposite.setLayout(gridLayout);
+
+ Group configFileRootLoggerLevelGroup = new Group(attributesComposite, SWT.SHADOW_NONE);
+ configFileRootLoggerLevelGroup.setBackground(attributesComposite.getBackground());
+ configFileRootLoggerLevelGroup.setText("Config File RootLogger Level");
+ gridData = new GridData(SWT.LEFT, SWT.TOP, true, false);
+ configFileRootLoggerLevelGroup.setLayoutData(gridData);
+ configFileRootLoggerLevelGroup.setLayout(new GridLayout(2,false));
+
+ _configFileRootLoggerLevelLabel = _toolkit.createLabel(configFileRootLoggerLevelGroup, "-");
+ _configFileRootLoggerLevelLabel.setFont(ApplicationRegistry.getFont(FONT_BOLD));
+ _configFileRootLoggerLevelLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
+
+ final Button configFileRootLoggerLevelButton = _toolkit.createButton(configFileRootLoggerLevelGroup, "Edit ...", SWT.PUSH);
+ configFileRootLoggerLevelButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
+ configFileRootLoggerLevelButton.addSelectionListener(new SelectionAdapter()
+ {
+ public void widgetSelected(SelectionEvent e)
+ {
+ editRootLoggerLevel(configFileRootLoggerLevelButton.getShell());
+ }
+ });
+
+
+ Group logWatchIntervalGroup = new Group(attributesComposite, SWT.SHADOW_NONE);
+ logWatchIntervalGroup.setBackground(attributesComposite.getBackground());
+ logWatchIntervalGroup.setText("Log Watch Interval");
+ gridData = new GridData(SWT.LEFT, SWT.TOP, true, false);
+ logWatchIntervalGroup.setLayoutData(gridData);
+ logWatchIntervalGroup.setLayout(new GridLayout());
+
+ _logWatchIntervalLabel = _toolkit.createLabel(logWatchIntervalGroup, "-");
+ _logWatchIntervalLabel.setFont(ApplicationRegistry.getFont(FONT_BOLD));
+ _logWatchIntervalLabel.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false));
+ }
+
+
+
+ private void editLoggerLevel(Shell parent)
+ {
+ int selectionIndex = _table.getSelectionIndex();
+
+ if (selectionIndex != -1)
+ {
+ final CompositeData selectedLogger = (CompositeData)_table.getItem(selectionIndex).getData();
+ String loggerName = selectedLogger.get(LOGGER_NAME).toString();
+
+ final Shell shell = ViewUtility.createModalDialogShell(parent, "Set Config File Logger Level");
+
+ Composite loggerComp = _toolkit.createComposite(shell);
+ loggerComp.setBackground(shell.getBackground());
+ loggerComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ loggerComp.setLayout(new GridLayout(2,false));
+
+ _toolkit.createLabel(loggerComp, "Logger: ").setBackground(shell.getBackground());
+ _toolkit.createLabel(loggerComp, loggerName).setBackground(shell.getBackground());
+
+ Composite levelComp = _toolkit.createComposite(shell);
+ levelComp.setBackground(shell.getBackground());
+ levelComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ levelComp.setLayout(new GridLayout(2,false));
+
+ _toolkit.createLabel(levelComp,"Level: ").setBackground(levelComp.getBackground());
+ final Combo levelCombo = new Combo (levelComp, SWT.READ_ONLY );
+ levelCombo.setItems(_availableLoggerLevels);
+ levelCombo.select(0);
+
+ 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 logger = selectedLogger.get(LOGGER_NAME).toString();
+ String level = levelCombo.getItem(levelCombo.getSelectionIndex()).toString();
+
+ shell.close();
+
+ try
+ {
+ _lmmb.setConfigFileLoggerLevel(logger, level);
+ //TODO: display result?
+ }
+ catch (Exception e4)
+ {
+ MBeanUtility.handleException(_mbean, e4);
+ }
+
+ refresh(_mbean);
+ }
+ });
+
+ cancelButton.addSelectionListener(new SelectionAdapter()
+ {
+ public void widgetSelected(SelectionEvent e)
+ {
+ shell.dispose();
+ }
+ });
+
+ shell.pack();
+ shell.open();
+ }
+ }
+
+ private void editRootLoggerLevel(Shell parent)
+ {
+ final Shell shell = ViewUtility.createModalDialogShell(parent, "ConfigFile RootLogger Level");
+
+ Composite levelComp = _toolkit.createComposite(shell);
+ levelComp.setBackground(shell.getBackground());
+ levelComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ levelComp.setLayout(new GridLayout(2,false));
+
+ _toolkit.createLabel(levelComp,"RootLogger level: ").setBackground(levelComp.getBackground());
+ final Combo levelCombo = new Combo (levelComp, SWT.READ_ONLY );
+ levelCombo.setItems(_availableLoggerLevels);
+ levelCombo.select(0);
+
+ 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 selection = levelCombo.getItem(levelCombo.getSelectionIndex()).toString();
+ shell.dispose();
+ try
+ {
+ _lmmb.setConfigFileRootLoggerLevel(selection);
+ //TODO: display result?
+ }
+ 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();
+ }
+}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableContentProvider.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableContentProvider.java
new file mode 100644
index 0000000000..6ef3ab70a7
--- /dev/null
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableContentProvider.java
@@ -0,0 +1,52 @@
+/*
+ *
+ * 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.logging;
+
+import java.util.Collection;
+
+import javax.management.openmbean.TabularDataSupport;
+
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * Content Provider class for theLogging Management table viewers
+ */
+public class LoggingTableContentProvider implements IStructuredContentProvider
+{
+
+ public void inputChanged(Viewer v, Object oldInput, Object newInput)
+ {
+
+ }
+
+ public void dispose()
+ {
+
+ }
+
+ public Object[] getElements(Object parent)
+ {
+ Collection<Object> rowCollection = ((TabularDataSupport) parent).values();
+
+ return rowCollection.toArray();
+ }
+} \ No newline at end of file
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableLabelProvider.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableLabelProvider.java
new file mode 100644
index 0000000000..27f6040d7d
--- /dev/null
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableLabelProvider.java
@@ -0,0 +1,59 @@
+/*
+ *
+ * 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.logging;
+
+import javax.management.openmbean.CompositeDataSupport;
+
+import org.apache.qpid.management.common.mbeans.LoggingManagement;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Label Provider class for the LoggingManagement table viewers
+ */
+public class LoggingTableLabelProvider extends LabelProvider implements ITableLabelProvider
+{
+ private static final String LOGGER_NAME = LoggingManagement.COMPOSITE_ITEM_NAMES[0];
+ private static final String LOGGER_LEVEL = LoggingManagement.COMPOSITE_ITEM_NAMES[1];
+
+ @Override
+ public String getColumnText(Object element, int columnIndex)
+ {
+ switch (columnIndex)
+ {
+ case 0 : // logger name column
+ return (String) ((CompositeDataSupport) element).get(LOGGER_NAME);
+ case 1 : // logger level column
+ return (String) ((CompositeDataSupport) element).get(LOGGER_LEVEL);
+ default :
+ return "-";
+ }
+ }
+
+ @Override
+ public Image getColumnImage(Object element, int columnIndex)
+ {
+ return null;
+ }
+
+
+}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableSorter.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableSorter.java
new file mode 100644
index 0000000000..c1833148d7
--- /dev/null
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableSorter.java
@@ -0,0 +1,90 @@
+/*
+ *
+ * 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.logging;
+
+import javax.management.openmbean.CompositeData;
+
+import org.apache.qpid.management.common.mbeans.LoggingManagement;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+
+/**
+ * Sorter class for the Logging Management table viewers.
+ */
+public class LoggingTableSorter extends ViewerSorter
+{
+ private static final String LOGGER_NAME = LoggingManagement.COMPOSITE_ITEM_NAMES[0];
+ private static final String LOGGER_LEVEL = LoggingManagement.COMPOSITE_ITEM_NAMES[1];
+ private static final int ASCENDING = 0;
+ private static final int DESCENDING = 1;
+
+ private int column;
+ private int direction;
+
+ public LoggingTableSorter()
+ {
+ 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)
+ {
+ CompositeData logger1 = (CompositeData) e1;
+ CompositeData logger2 = (CompositeData) e2;
+
+ int comparison = 0;
+ switch(column)
+ {
+ case 0:
+ comparison = String.valueOf(logger1.get(LOGGER_NAME)).compareTo(
+ String.valueOf(logger2.get(LOGGER_NAME)));
+ break;
+ case 1:
+ comparison = String.valueOf(logger1.get(LOGGER_LEVEL)).compareTo(
+ String.valueOf(logger2.get(LOGGER_LEVEL)));
+ break;
+ default:
+ comparison = 0;
+ }
+ // If descending order, flip the direction
+ if (direction == DESCENDING)
+ {
+ comparison = -comparison;
+ }
+ return comparison;
+ }
+}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/RuntimeTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/RuntimeTabControl.java
new file mode 100644
index 0000000000..9c829765d0
--- /dev/null
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/RuntimeTabControl.java
@@ -0,0 +1,449 @@
+/*
+ *
+ * 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.logging;
+
+import javax.management.MBeanServerConnection;
+import javax.management.MBeanServerInvocationHandler;
+import javax.management.openmbean.CompositeData;
+import javax.management.openmbean.TabularDataSupport;
+
+import static org.apache.qpid.management.ui.Constants.FONT_BOLD;
+
+import org.apache.qpid.management.ui.ApplicationRegistry;
+import org.apache.qpid.management.ui.ManagedBean;
+import org.apache.qpid.management.common.mbeans.LoggingManagement;
+import org.apache.qpid.management.ui.jmx.JMXManagedObject;
+import org.apache.qpid.management.ui.jmx.MBeanUtility;
+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.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+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.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.ui.forms.widgets.Form;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+
+/**
+ * Control class for the LoggingManagement mbean Runtime Options tab.
+ */
+public class RuntimeTabControl extends TabControl
+{
+ private FormToolkit _toolkit;
+ private Form _form;
+ private Table _table = null;
+ private TableViewer _tableViewer = null;
+ private Composite _headerComposite = null;
+ private Composite _paramsComposite = null;
+
+ private Label _runtimeRootLoggerLevelLabel = null;
+ private String[] _availableLoggerLevels;
+ private TabularDataSupport _runtimeLoggerLevels = null;
+ private LoggingManagement _lmmb;
+
+ static final String LOGGER_NAME = LoggingManagement.COMPOSITE_ITEM_NAMES[0];
+ static final String LOGGER_LEVEL = LoggingManagement.COMPOSITE_ITEM_NAMES[1];
+
+ public RuntimeTabControl(TabFolder tabFolder, JMXManagedObject mbean, MBeanServerConnection mbsc)
+ {
+ super(tabFolder);
+ _mbean = mbean;
+ _lmmb = (LoggingManagement)
+ MBeanServerInvocationHandler.newProxyInstance(mbsc, mbean.getObjectName(),
+ LoggingManagement.class, false);
+ _toolkit = new FormToolkit(_tabFolder.getDisplay());
+ _form = _toolkit.createForm(_tabFolder);
+ _form.getBody().setLayout(new GridLayout());
+ createComposites();
+ createWidgets();
+ }
+
+ private void createComposites()
+ {
+
+ _headerComposite = _toolkit.createComposite(_form.getBody(), SWT.NONE);
+ _headerComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+ _headerComposite.setLayout(new GridLayout());
+
+ _paramsComposite = _toolkit.createComposite(_form.getBody(), SWT.NONE);
+ _paramsComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+ _paramsComposite.setLayout(new GridLayout());
+ }
+
+ /**
+ * @see TabControl#getControl()
+ */
+ public Control getControl()
+ {
+ return _form;
+ }
+
+ /**
+ * @see TabControl#setFocus()
+ */
+ public void setFocus()
+ {
+ _table.setFocus();
+ }
+
+ @Override
+ public void refresh(ManagedBean mbean)
+ {
+ _mbean = mbean;
+ if (_mbean == null)
+ {
+ _tableViewer.setInput(null);
+ return;
+ }
+
+ String runtimeRootLoggerLevel = "-";
+ try
+ {
+ runtimeRootLoggerLevel = _lmmb.getRuntimeRootLoggerLevel();
+ }
+ catch(Exception e1)
+ {
+ MBeanUtility.handleException(_mbean, e1);
+ }
+
+ _runtimeLoggerLevels = null;
+ try
+ {
+ _runtimeLoggerLevels = (TabularDataSupport) _lmmb.viewEffectiveRuntimeLoggerLevels();
+ }
+ catch(Exception e2)
+ {
+ MBeanUtility.handleException(_mbean, e2);
+ }
+
+ _form.setVisible(false);
+ _runtimeRootLoggerLevelLabel.setText(String.valueOf(runtimeRootLoggerLevel));
+ _tableViewer.setInput(_runtimeLoggerLevels);
+ _form.setVisible(true);
+ layout();
+ }
+
+ public void layout()
+ {
+ _form.layout(true);
+ _form.getBody().layout(true, true);
+ }
+
+ private void createWidgets()
+ {
+ try
+ {
+ _availableLoggerLevels = _lmmb.getAvailableLoggerLevels();
+ }
+ catch(Exception e)
+ {
+ _availableLoggerLevels = new String[]{"ALL","TRACE","DEBUG","INFO","WARN","ERROR","FATAL","OFF"};
+ }
+
+ Label noteLabel = _toolkit.createLabel(_headerComposite,
+ "NOTE: These options modify only the live runtime settings. " +
+ "Changes made here will be lost following broker restart if " +
+ "they introduce non-default values.");
+ GridData gridData = new GridData(SWT.FILL, SWT.FILL, false, true);
+ noteLabel.setLayoutData(gridData);
+
+ Group effectiveRuntimeLoggerLevelsGroup = new Group(_paramsComposite, SWT.SHADOW_NONE);
+ effectiveRuntimeLoggerLevelsGroup.setBackground(_paramsComposite.getBackground());
+ effectiveRuntimeLoggerLevelsGroup.setText("Effective Runtime Logger Levels");
+ effectiveRuntimeLoggerLevelsGroup.setLayout(new GridLayout());
+ gridData = new GridData(SWT.LEFT, SWT.TOP, true, false);
+ effectiveRuntimeLoggerLevelsGroup.setLayoutData(gridData);
+
+ Composite tableComposite = _toolkit.createComposite(effectiveRuntimeLoggerLevelsGroup);
+ gridData = new GridData(SWT.FILL, SWT.FILL, false, true);
+ tableComposite .setLayoutData(gridData);
+ GridLayout gridLayout = new GridLayout();
+ gridData.heightHint = 250;
+ tableComposite .setLayout(gridLayout);
+
+ _table = new Table (tableComposite, SWT.SINGLE | SWT.SCROLL_LINE | SWT.BORDER | SWT.FULL_SELECTION);
+ _table.setLinesVisible (true);
+ _table.setHeaderVisible (true);
+ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+ data.heightHint = 350;
+ _table.setLayoutData(data);
+
+ _tableViewer = new TableViewer(_table);
+ final LoggingTableSorter tableSorter = new LoggingTableSorter();
+
+ String[] titles = { LOGGER_NAME, LOGGER_LEVEL };
+ int[] bounds = { 600, 60 };
+ 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 LoggingTableContentProvider());
+ _tableViewer.setLabelProvider(new LoggingTableLabelProvider());
+ _tableViewer.setSorter(tableSorter);
+ _table.setSortColumn(_table.getColumn(0));
+ _table.setSortDirection(SWT.UP);
+ _table.addMouseListener(new MouseListener()
+ {
+ public void mouseDoubleClick(MouseEvent event)
+ {
+ editLoggerLevel(_table.getShell());
+ }
+
+ public void mouseDown(MouseEvent e){}
+ public void mouseUp(MouseEvent e){}
+ });
+
+ final Button logLevelEditButton = _toolkit.createButton(effectiveRuntimeLoggerLevelsGroup, "Edit Selected Logger...", SWT.PUSH);
+ logLevelEditButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
+ logLevelEditButton.setEnabled(false);
+ logLevelEditButton.addSelectionListener(new SelectionAdapter()
+ {
+ public void widgetSelected(SelectionEvent e)
+ {
+ editLoggerLevel(logLevelEditButton.getShell());
+ }
+ });
+
+ _tableViewer.addSelectionChangedListener(new ISelectionChangedListener(){
+ public void selectionChanged(SelectionChangedEvent evt)
+ {
+ int selectionIndex = _table.getSelectionIndex();
+
+ if (selectionIndex != -1)
+ {
+ logLevelEditButton.setEnabled(true);
+ }
+ else
+ {
+ logLevelEditButton.setEnabled(false);
+ }
+ }
+ });
+
+ Composite attributesComposite = _toolkit.createComposite(_paramsComposite);
+ gridData = new GridData(SWT.FILL, SWT.FILL, false, true);
+ attributesComposite.setLayoutData(gridData);
+ gridLayout = new GridLayout(3,false);
+ attributesComposite.setLayout(gridLayout);
+
+ Group runtimeRootLoggerGroup = new Group(attributesComposite, SWT.SHADOW_NONE);
+ runtimeRootLoggerGroup.setBackground(attributesComposite.getBackground());
+ runtimeRootLoggerGroup.setText("Runtime RootLogger Level");
+ gridData = new GridData(SWT.LEFT, SWT.CENTER, true, false);
+ runtimeRootLoggerGroup.setLayoutData(gridData);
+ runtimeRootLoggerGroup.setLayout(new GridLayout(2,false));
+
+ _runtimeRootLoggerLevelLabel = _toolkit.createLabel(runtimeRootLoggerGroup, "-");
+ _runtimeRootLoggerLevelLabel.setFont(ApplicationRegistry.getFont(FONT_BOLD));
+ _runtimeRootLoggerLevelLabel.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, false, false));
+
+ final Button runtimeRootLoggerLevelButton = _toolkit.createButton(runtimeRootLoggerGroup, "Edit ...", SWT.PUSH);
+ runtimeRootLoggerLevelButton.addSelectionListener(new SelectionAdapter()
+ {
+ public void widgetSelected(SelectionEvent e)
+ {
+ editRootLoggerLevel(runtimeRootLoggerLevelButton.getShell());
+ }
+ });
+ }
+
+ private void editLoggerLevel(Shell parent)
+ {
+ int selectionIndex = _table.getSelectionIndex();
+
+ if (selectionIndex != -1)
+ {
+ final CompositeData selectedLogger = (CompositeData)_table.getItem(selectionIndex).getData();
+ String loggerName = selectedLogger.get(LOGGER_NAME).toString();
+
+ final Shell shell = ViewUtility.createModalDialogShell(parent, "Set Runtime Logger Level");
+
+ Composite loggerComp = _toolkit.createComposite(shell);
+ loggerComp.setBackground(shell.getBackground());
+ loggerComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ loggerComp.setLayout(new GridLayout(2,false));
+
+ _toolkit.createLabel(loggerComp, "Logger: ").setBackground(shell.getBackground());
+ _toolkit.createLabel(loggerComp, loggerName).setBackground(shell.getBackground());
+
+ Composite levelComp = _toolkit.createComposite(shell);
+ levelComp.setBackground(shell.getBackground());
+ levelComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ levelComp.setLayout(new GridLayout(2,false));
+
+ _toolkit.createLabel(levelComp,"Level: ").setBackground(levelComp.getBackground());
+ final Combo levelCombo = new Combo (levelComp, SWT.READ_ONLY );
+ levelCombo.setItems(_availableLoggerLevels);
+ levelCombo.select(0);
+
+ 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 logger = selectedLogger.get(LOGGER_NAME).toString();
+ String level = levelCombo.getItem(levelCombo.getSelectionIndex()).toString();
+
+ shell.close();
+
+ try
+ {
+ _lmmb.setRuntimeLoggerLevel(logger, level);
+ }
+ catch(Exception e3)
+ {
+ MBeanUtility.handleException(_mbean, e3);
+ }
+ //TODO: display result?
+
+ refresh(_mbean);
+ }
+ });
+
+ cancelButton.addSelectionListener(new SelectionAdapter()
+ {
+ public void widgetSelected(SelectionEvent e)
+ {
+ shell.dispose();
+ }
+ });
+
+ shell.setDefaultButton(okButton);
+ shell.pack();
+ shell.open();
+ }
+ }
+
+ private void editRootLoggerLevel(Shell parent)
+ {
+ final Shell shell = ViewUtility.createModalDialogShell(parent, "Runtime RootLogger Level");
+
+ Composite levelComp = _toolkit.createComposite(shell);
+ levelComp.setBackground(shell.getBackground());
+ levelComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ levelComp.setLayout(new GridLayout(2,false));
+
+ _toolkit.createLabel(levelComp,"RootLogger level: ").setBackground(levelComp.getBackground());
+ final Combo levelCombo = new Combo (levelComp, SWT.READ_ONLY );
+ levelCombo.setItems(_availableLoggerLevels);
+ levelCombo.select(0);
+
+ 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 selection = levelCombo.getItem(levelCombo.getSelectionIndex()).toString();
+ shell.dispose();
+
+ try
+ {
+ _lmmb.setRuntimeRootLoggerLevel(selection);
+ }
+ catch(Exception e4)
+ {
+ MBeanUtility.handleException(_mbean, e4);
+ }
+
+ refresh(_mbean);
+ //TODO: display result?
+ }
+ });
+
+ cancelButton.addSelectionListener(new SelectionAdapter()
+ {
+ public void widgetSelected(SelectionEvent e)
+ {
+ shell.dispose();
+ }
+ });
+
+ shell.setDefaultButton(okButton);
+ shell.pack();
+ shell.open();
+ }
+}