You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2009/06/23 12:02:09 UTC

svn commit: r787617 - in /qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views: ./ logging/

Author: robbie
Date: Tue Jun 23 10:02:09 2009
New Revision: 787617

URL: http://svn.apache.org/viewvc?rev=787617&view=rev
Log:
QPID-1931: add initial Logging Management mbean view

Added:
    qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/
    qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/ConfigurationFileTabControl.java
    qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableContentProvider.java
    qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableLabelProvider.java
    qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableSorter.java
    qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/RuntimeTabControl.java
Modified:
    qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTabFolderFactory.java

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=787617&r1=787616&r2=787617&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 Tue Jun 23 10:02:09 2009
@@ -37,6 +37,8 @@
 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 @@
                 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);

Added: qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/ConfigurationFileTabControl.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/logging/ConfigurationFileTabControl.java?rev=787617&view=auto
==============================================================================
--- qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/ConfigurationFileTabControl.java (added)
+++ qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/ConfigurationFileTabControl.java Tue Jun 23 10:02:09 2009
@@ -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();
+    }
+}

Added: qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableContentProvider.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/logging/LoggingTableContentProvider.java?rev=787617&view=auto
==============================================================================
--- qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableContentProvider.java (added)
+++ qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableContentProvider.java Tue Jun 23 10:02:09 2009
@@ -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

Added: qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableLabelProvider.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/logging/LoggingTableLabelProvider.java?rev=787617&view=auto
==============================================================================
--- qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableLabelProvider.java (added)
+++ qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableLabelProvider.java Tue Jun 23 10:02:09 2009
@@ -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;
+    }
+
+
+}

Added: qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableSorter.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/logging/LoggingTableSorter.java?rev=787617&view=auto
==============================================================================
--- qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableSorter.java (added)
+++ qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/LoggingTableSorter.java Tue Jun 23 10:02:09 2009
@@ -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;
+    }
+}

Added: qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/RuntimeTabControl.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/logging/RuntimeTabControl.java?rev=787617&view=auto
==============================================================================
--- qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/RuntimeTabControl.java (added)
+++ qpid/branches/jmx_mc_gsoc09/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/RuntimeTabControl.java Tue Jun 23 10:02:09 2009
@@ -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();
+    }
+}



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org