Package org.apache.qpid.management.ui.views

Source Code of org.apache.qpid.management.ui.views.MBeanTypeTabControl$Sorter

/*
*
* 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;

import static org.apache.qpid.management.ui.Constants.BUTTON_REFRESH;
import static org.apache.qpid.management.ui.Constants.FONT_BOLD;
import static org.apache.qpid.management.ui.Constants.FONT_ITALIC;
import static org.apache.qpid.management.ui.Constants.FONT_NORMAL;

import java.util.Collections;
import java.util.HashMap;

import org.apache.qpid.management.ui.ApplicationRegistry;
import org.apache.qpid.management.ui.ManagedBean;
import org.apache.qpid.management.ui.jmx.MBeanUtility;
import org.apache.qpid.management.ui.model.AttributeData;
import org.eclipse.swt.SWT;
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.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.widgets.Form;
import org.eclipse.ui.forms.widgets.FormToolkit;

/**
* Abstract class to be extended by the Controller classes for different MBean types (Connection, Queue, Exchange)
*/
public abstract class MBeanTypeTabControl
{
    private FormToolkit  _toolkit = null;
    private Form _form = null;
    private TabFolder _tabFolder = null;
    private Composite _composite = null;
    private Composite _headerComposite = null;
    private Composite _listComposite = null;
    private Label _labelName = null;
    private Label _labelDesc = null;
    private Label _labelList = null;
   
    private org.eclipse.swt.widgets.List _list = null;
    private Button _refreshButton = null;
    private Button _addButton = null;
   
    private String _type = null;
   
    // maps an mbean name with the mbean object. Required to get mbean object when an mbean
    // is to be added to the navigation view.
    private HashMap<String, ManagedBean> _objectsMap = new HashMap<String, ManagedBean>();
    private Sorter _sorterByName = new Sorter();
   
    public MBeanTypeTabControl(TabFolder tabFolder, String type)
    {
        _type = type;
        _tabFolder = tabFolder;
        _toolkit = new FormToolkit(_tabFolder.getDisplay());
        _form = _toolkit.createForm(_tabFolder);
        createFormComposite();
    }
   
    public FormToolkit getToolkit()
    {
        return _toolkit;
    }
   
    public Control getControl()
    {
        return _form;
    }
   
    public String getType()
    {
        return _type;
    }
   
    protected List getListWidget()
    {
        return _list;
    }
   
    protected HashMap<String, ManagedBean> getMBeansMap()
    {
        return _objectsMap;
    }
   
    public Sorter getMBeanNameSorter()
    {
        return _sorterByName;
    }
   
    public Button getAddButton()
    {
        return _addButton;
    }
   
    public Button getRefreshButton()
    {
        return _refreshButton;
    }
       
    /**
     * Creates the main Composite, which will contain all other Composites and Widgets
     */
    protected void createFormComposite()
    {
        _form.getBody().setLayout(new GridLayout());
        _composite = _toolkit.createComposite(_form.getBody(), SWT.NONE);
        _composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        GridLayout layout = new GridLayout();
        layout.verticalSpacing = 10;
        layout.horizontalSpacing = 0;
        _composite.setLayout(layout);
    }
   
    protected Composite getFormComposite()
    {
        return _composite;
    }
   
    /**
     * Creates the header composite, which has MBean type name and description
     * @param parentComposite
     */
    protected void createHeaderComposite(Composite parentComposite)
    {
        _headerComposite = _toolkit.createComposite(parentComposite);
        _headerComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
        GridLayout layout = new GridLayout();
        layout.verticalSpacing = 10;
        layout.horizontalSpacing = 0;
        _headerComposite.setLayout(layout);
       
        _labelName = _toolkit.createLabel(_headerComposite, "Type:", SWT.NONE);
        GridData gridData = new GridData(SWT.CENTER, SWT.TOP, true, false);
        _labelName.setLayoutData(gridData);
        _labelName.setFont(ApplicationRegistry.getFont(FONT_BOLD));
       
        _labelDesc = _toolkit.createLabel(_headerComposite, " ", SWT.NONE);
        _labelDesc.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false));
        _labelDesc.setFont(ApplicationRegistry.getFont(FONT_ITALIC));
       
        _headerComposite.layout();
    }
   
    /**
     * Creates Composite, which contains the common buttons - Add and Refresh.
     * @param parentComposite
     */
    protected void createButtonsComposite(Composite parentComposite)
    {
        Composite composite = _toolkit.createComposite(parentComposite);
        composite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
        GridLayout layout = new GridLayout(2, true);
        layout.verticalSpacing = 10;
        layout.horizontalSpacing = 20;
        composite.setLayout(layout);
       
        createAddButton(composite);
        createRefreshButton(composite);
    }
   
    /**
     * Creates the Add button, which adds the selected item to the navigation view
     * @param parentComposite
     */
    protected void createAddButton(Composite parentComposite)
    {
        Button _addButton = _toolkit.createButton(parentComposite, "<- Add to Navigation", SWT.PUSH);
        GridData gridData = new GridData(SWT.CENTER, SWT.CENTER, false, false);
        _addButton.setLayoutData(gridData);
        _addButton.addSelectionListener(new SelectionAdapter(){
            public void widgetSelected(SelectionEvent e)
            {
                if (_list.getSelectionCount() == 0)
                    return;
               
                String[] selectedItems = _list.getSelection();
                for (int i = 0; i < selectedItems.length; i++)
                {
                    String name = selectedItems[i];
                    // pass the ManagedBean to the navigation view to be added
                    ManagedBean mbean = _objectsMap.get(name);
                    IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
                    NavigationView view = (NavigationView)window.getActivePage().findView(NavigationView.ID);
                    try
                    {
                        view.addManagedBean(mbean);
                    }
                    catch (Exception ex)
                    {
                        MBeanUtility.handleException(mbean, ex);
                    }
                }
            }
        });
    }
   
    /**
     * Creates the Refresh button, which gets syncs the items with the broker server
     * @param parentComposite
     */
    protected void createRefreshButton(Composite parentComposite)
    {
        Button _refreshButton = _toolkit.createButton(parentComposite, BUTTON_REFRESH, SWT.PUSH);
        GridData gridData = new GridData(SWT.CENTER, SWT.CENTER, false, false);
        gridData.widthHint = 120;
        _refreshButton.setLayoutData(gridData);
        _refreshButton.addSelectionListener(new SelectionAdapter(){
            public void widgetSelected(SelectionEvent e)
            {
                try
                {
                    // refresh the list from the broker server
                    populateList();
                }
                catch (Exception ex)
                {
                    MBeanUtility.handleException(ex);
                }
            }
        });
    }
   
    /**
     * Creates the Composite, which contains the items ( Connections, Exchanges or Queues)
     * @param parentComposite
     */
    protected void createListComposite(Composite parentComposite)
    {
        // Composite to contain the item list
        _listComposite = _toolkit.createComposite(parentComposite);
        GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
        _listComposite.setLayoutData(gridData);
        GridLayout layout = new GridLayout();
        layout.verticalSpacing = 0;
        _listComposite.setLayout(layout);
       
        // Label for item name
        _labelList = _toolkit.createLabel(_listComposite, " ", SWT.CENTER);
        gridData = new GridData(SWT.CENTER, SWT.TOP, true, false, 1, 1);
        _labelList.setLayoutData(gridData);
        _labelList.setFont(ApplicationRegistry.getFont(FONT_NORMAL));
       
        _list = new List(_listComposite, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
        gridData = new GridData(SWT.FILL, SWT.FILL, true, true,1, 1);
        _list.setLayoutData(gridData);
       
    }
   
    /**
     * This is called from MBean View to refresh the tab contents
     * @throws Exception
     */
    public void refresh() throws Exception
    {       
        setLabelValues();
        populateList();
        layout();
    }
   
    protected void setLabelValues()
    {
        _labelName.setText("Type : " + _type);       
        _labelDesc.setText("Select the " + _type + "(s) to add in the Navigation View");
        _labelList.setText("-- List of " + _type + "s --");
    }
   
    protected abstract void populateList() throws Exception;
   
    public void layout()
    {
        _form.layout(true);
        _form.getBody().layout(true, true);
    }
   
    // sets the map with appropriate mbean and name
    protected String[] getItems(java.util.List<ManagedBean> list)
    {
        if (list == null)
            return new String[0];
       
        Collections.sort(list, _sorterByName);
        String[] items = new String[list.size()];
        int i = 0;
        for (ManagedBean mbean : list)
        {
            items[i++] = mbean.getName();
            _objectsMap.put(mbean.getName(), mbean);
        }
        return items;
    }
   
    protected class ComparatorImpl implements java.util.Comparator<AttributeData>
    {
        public int compare(AttributeData data1, AttributeData data2)
        {
            Integer int1 = Integer.parseInt(data1.getValue().toString());
            Integer int2 = Integer.parseInt(data2.getValue().toString());
            return int1.compareTo(int2) * -1;
        }
    }
   
    protected class Sorter implements java.util.Comparator<ManagedBean>
    {
        public int compare(ManagedBean mbean1, ManagedBean mbean2)
        {
            return mbean1.getName().compareTo(mbean2.getName());
        }
    }
}
TOP

Related Classes of org.apache.qpid.management.ui.views.MBeanTypeTabControl$Sorter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.