eu.celar.ui.views.AuthTokenView.java Source code

Java tutorial

Introduction

Here is the source code for eu.celar.ui.views.AuthTokenView.java

Source

/*****************************************************************************
 * Copyright (c) 2006-2008 g-Eclipse Consortium 
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Initial development of the original code was made for the
 * g-Eclipse project founded by European Union
 * project number: FP6-IST-034327  http://www.geclipse.eu/
 *
 * Contributors:
 *    Mathias Stuempert - initial API and implementation
 *    Ariel Garcia      - added table sorting
 *****************************************************************************/

package eu.celar.ui.views;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableFontProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.graphics.Device;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.CompoundContributionItem;
import org.eclipse.ui.part.ViewPart;

import eu.celar.core.ExtensionManager;
import eu.celar.core.Extensions;
import eu.celar.core.auth.AuthenticationException;
import eu.celar.core.auth.AuthenticationTokenManager;
import eu.celar.core.auth.IAuthenticationToken;
import eu.celar.core.security.ISecurityManager;
import eu.celar.core.security.ISecurityManagerListener;
import eu.celar.ui.AbstractAuthTokenUIFactory;
import eu.celar.ui.IAuthTokenUIFactory;
import eu.celar.ui.UIAuthTokenProvider;
import eu.celar.ui.cheatsheets.OpenAuthTokenDialogAction;
import eu.celar.ui.comparators.TableColumnComparator;
import eu.celar.ui.dialogs.AuthTokenInfoDialog;
import eu.celar.ui.dialogs.ProblemDialog;
import eu.celar.ui.internal.Activator;
import eu.celar.ui.listeners.TableColumnListener;

/**
 * The <code>AuthTokenView</code> is the central point in the g-Eclipse UI to
 * manage authentication tokens. It provides UI elements to create new and to destroy old
 * authentication tokens. Users can also activate or deactivate their tokens. Therefore
 * the <code>AuthTokenView</code> can be seen as graphical frontend of the
 * {@link eu.geclipse.core.auth.AuthenticationTokenManager}. 
 *
 * @author stuempert-m
 */
public class AuthTokenView extends ViewPart implements ISecurityManagerListener {

    /**
     * This internal class is used to present the currently available authentication
     * tokens in a structured way to the user. The standard presentation uses a table.
     * 
     * @author stuempert-m
     * @see AuthenticationTokenLabelProvider
     */
    public static class AuthenticationTokenContentProvider implements IStructuredContentProvider {

        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
         */
        public Object[] getElements(final Object input) {
            Object[] resultArray = null;
            if (input instanceof AuthenticationTokenManager) {
                List<IAuthenticationToken> tokens = ((AuthenticationTokenManager) input).getTokens();
                IAuthenticationToken[] tokenArray = new IAuthenticationToken[tokens.size()];
                resultArray = tokens.toArray(tokenArray);
            }
            return resultArray;
        }

        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
         */
        public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
            // empty implementation
        }

        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.IContentProvider#dispose()
         */
        public void dispose() {
            // empty implementation
        }

    }

    /**
     * This internal class is used to present the currently available authentication
     * tokens in a structured way to the user. The standard presentation uses a table.
     * 
     * @author stuempert-m
     * @see AuthenticationTokenContentProvider
     */
    public static class AuthenticationTokenLabelProvider extends LabelProvider
            implements ITableLabelProvider, ITableFontProvider {

        /**
         * The font that is used to draw activated tokens.
         */
        private Font boldFont;

        /**
         * Construct and initialize a new label provider.
         */
        public AuthenticationTokenLabelProvider() {
            Font font = JFaceResources.getDefaultFont();
            Device device = font.getDevice();
            FontData[] fontData = font.getFontData();
            for (int i = 0; i < fontData.length; i++) {
                int style = fontData[i].getStyle();
                fontData[i].setStyle(style | SWT.BOLD);
            }
            this.boldFont = new Font(device, fontData);
        }

        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.LabelProvider#dispose()
         */
        @Override
        public void dispose() {
            super.dispose();
            this.boldFont.dispose();
        }

        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
         */
        public Image getColumnImage(final Object element, final int columnIndex) {
            // no images supported at the moment
            return null;
        }

        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
         */
        public String getColumnText(final Object element, final int columnIndex) {
            // Just for debugging
            String columnText = element.toString();

            if (element instanceof IAuthenticationToken) {
                IAuthenticationToken token = (IAuthenticationToken) element;
                switch (columnIndex) {
                case 0:
                    columnText = token.getID();
                    break;
                case 1:
                    columnText = token.getDescription().getTokenTypeName();
                    break;
                case 2:
                    columnText = token.isActive() ? Messages.getString("AuthTokenView.token_active") //$NON-NLS-1$
                            : Messages.getString("AuthTokenView.token_inactive"); //$NON-NLS-1$
                    break;
                case 3:
                    if (!token.isActive()) {
                        columnText = ""; //$NON-NLS-1$
                    } else {
                        long lifetime = token.getTimeLeft();
                        if (lifetime < 0) {
                            columnText = Messages.getString("AuthTokenView.lifetime_infinite"); //$NON-NLS-1$
                        } else if (lifetime == 0) {
                            columnText = Messages.getString("AuthTokenView.lifetime_expired"); //$NON-NLS-1$
                        } else {
                            int days = (int) (lifetime / 86400);
                            int hours = (int) ((lifetime % 86400) / 3600);
                            int minutes = (int) ((lifetime % 3600) / 60);
                            int seconds = (int) (lifetime % 60);
                            columnText = String.format("%1$3dd %2$02dh %3$02dm %4$02ds", //$NON-NLS-1$
                                    Integer.valueOf(days), Integer.valueOf(hours), Integer.valueOf(minutes),
                                    Integer.valueOf(seconds));
                        }
                    }
                    break;
                }
            }
            return columnText;
        }

        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.ITableFontProvider#getFont(java.lang.Object, int)
         */
        public Font getFont(final Object element, final int columnIndex) {
            Font resultFont = null;
            if (element instanceof IAuthenticationToken) {
                IAuthenticationToken token = (IAuthenticationToken) element;
                if (token.isActive()) {
                    resultFont = this.boldFont;
                }
            }
            return resultFont;
        }

    }

    /**
     * The table used to present the currently available authentication tokens.
     */
    protected Table tokenTable;

    /**
     * A <code>CheckboxTableViewer</code> that helps to present the authentication tokens
     * in a more elegant way.
     */
    protected CheckboxTableViewer tokenList;

    /**
     * The context menu that let the users directly choose the type of token they want to create.
     */
    protected IContributionItem newWizardMenu;

    /**
     * Action for creating new authentication tokens.
     */
    private Action newAction;

    /**
     * Action for deleting old authentication tokens.
     */
    private Action deleteAction;

    /**
     * Action for activating the selected authentication token.
     */
    private Action activateAction;

    /**
     * Action for deactivating the selected authentication token.
     */
    private Action deactivateAction;

    /**
     * Action for retrieving information about the currently selected authenticaion token.
     */
    private Action infoAction;

    /**
     * Action for refreshing the token list.
     */
    private Action refreshAction;

    /**
     * The menu creator for the context menu of the <code>newAction</code>. 
     */
    private IMenuCreator newActionMenuCreator = new IMenuCreator() {

        /**
         * The menu manager for managing the drop down menu.
         */
        private MenuManager dropDownMenuMgr;

        /* (non-Javadoc)
         * @see org.eclipse.jface.action.IMenuCreator#createDropDownMenuMgr(java.lang.Object, int)
         */
        private void createDropDownMenuMgr() {
            if (this.dropDownMenuMgr == null) {
                this.dropDownMenuMgr = new MenuManager();
                this.dropDownMenuMgr.add(AuthTokenView.this.newWizardMenu);
            }
        }

        /* (non-Javadoc)
         * @see org.eclipse.jface.action.IMenuCreator#dispose()
         */
        public void dispose() {
            if (this.dropDownMenuMgr != null) {
                this.dropDownMenuMgr.dispose();
                this.dropDownMenuMgr = null;
            }
        }

        /* (non-Javadoc)
         * @see org.eclipse.jface.action.IMenuCreator#getMenu(org.eclipse.swt.widgets.Control)
         */
        public Menu getMenu(final Control parent) {
            createDropDownMenuMgr();
            return this.dropDownMenuMgr.createContextMenu(parent);
        }

        /* (non-Javadoc)
         * @see org.eclipse.jface.action.IMenuCreator#getMenu(org.eclipse.swt.widgets.Menu)
         */
        public Menu getMenu(final Menu parent) {
            createDropDownMenuMgr();
            Menu menu = new Menu(parent);
            IContributionItem[] items = this.dropDownMenuMgr.getItems();
            for (int i = 0; i < items.length; i++) {
                IContributionItem item = items[i];
                IContributionItem newItem = item;
                if (item instanceof ActionContributionItem) {
                    newItem = new ActionContributionItem(((ActionContributionItem) item).getAction());
                }
                newItem.fill(menu, -1);
            }
            return menu;
        }

    };

    /* (non-Javadoc)
     * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
     */
    @Override
    public void createPartControl(final Composite parent) {

        this.tokenTable = new Table(parent, SWT.CHECK | SWT.MULTI | SWT.FULL_SELECTION);
        this.tokenTable.setHeaderVisible(true);
        this.tokenTable.setLinesVisible(true);

        AuthenticationTokenManager manager = AuthenticationTokenManager.getManager();
        this.tokenList = new CheckboxTableViewer(this.tokenTable);
        this.tokenList.setLabelProvider(new AuthenticationTokenLabelProvider());
        this.tokenList.setContentProvider(new AuthenticationTokenContentProvider());

        TableColumnListener columnListener = new TableColumnListener(this.tokenList);

        TableColumn idColumn = new TableColumn(this.tokenTable, SWT.LEFT);
        idColumn.setText(Messages.getString("AuthTokenView.id_column_label")); //$NON-NLS-1$
        idColumn.setWidth(300);
        idColumn.setAlignment(SWT.LEFT);
        idColumn.addSelectionListener(columnListener);
        TableColumn typeColumn = new TableColumn(this.tokenTable, SWT.CENTER);
        typeColumn.setText(Messages.getString("AuthTokenView.type_column_label")); //$NON-NLS-1$
        typeColumn.setWidth(150);
        typeColumn.setAlignment(SWT.CENTER);
        typeColumn.addSelectionListener(columnListener);
        TableColumn stateColumn = new TableColumn(this.tokenTable, SWT.CENTER);
        stateColumn.setText(Messages.getString("AuthTokenView.state_column_label")); //$NON-NLS-1$
        stateColumn.setWidth(100);
        stateColumn.setAlignment(SWT.CENTER);
        stateColumn.addSelectionListener(columnListener);
        TableColumn lifetimeColumn = new TableColumn(this.tokenTable, SWT.CENTER);
        lifetimeColumn.setText(Messages.getString("AuthTokenView.lifetime_column_label")); //$NON-NLS-1$
        lifetimeColumn.setWidth(150);
        lifetimeColumn.setAlignment(SWT.CENTER);
        lifetimeColumn.addSelectionListener(columnListener);

        // Initially we sort the tokens by ID, ascending
        this.tokenTable.setSortColumn(idColumn);
        this.tokenTable.setSortDirection(SWT.UP);
        this.tokenList.setComparator(new TableColumnComparator(idColumn));

        this.tokenList.setInput(manager);
        IAuthenticationToken defaultToken = manager.getDefaultToken();
        if (defaultToken != null) {
            this.tokenList.setCheckedElements(new Object[] { defaultToken });
        }

        this.tokenList.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(final SelectionChangedEvent event) {
                updateActions();
            }
        });
        this.tokenList.addCheckStateListener(new ICheckStateListener() {
            public void checkStateChanged(final CheckStateChangedEvent event) {
                Object element = event.getElement();
                if (element instanceof IAuthenticationToken) {
                    IAuthenticationToken token = (IAuthenticationToken) element;
                    AuthenticationTokenManager innerManager = AuthenticationTokenManager.getManager();
                    if (!event.getChecked()) {
                        innerManager.setDefaultToken(null);
                    }
                    innerManager.setDefaultToken(token);
                }
            }
        });
        this.tokenList.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(final DoubleClickEvent e) {
                showSelectedTokenInfo();
            }
        });
        this.tokenTable.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(final KeyEvent event) {
                if (event.character == SWT.DEL && event.stateMask == 0) {
                    removeSelectedTokens();
                }
            }
        });
        manager.addListener(this);

        createActions();
        createToolbar();
        createContextMenu();

        // Set as selection provider so that properties get updated
        getSite().setSelectionProvider(this.tokenList);

    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.part.WorkbenchPart#dispose()
     */
    @Override
    public void dispose() {
        AuthenticationTokenManager manager = AuthenticationTokenManager.getManager();
        manager.removeListener(this);
    }

    public void contentChanged(final ISecurityManager manager) {
        Runnable runnable = new Runnable() {
            public void run() {
                AuthTokenView.this.tokenList.refresh();
                AuthenticationTokenManager innerManager = AuthenticationTokenManager.getManager();
                IAuthenticationToken innerDefaultToken = innerManager.getDefaultToken();
                if (innerDefaultToken != null) {
                    AuthTokenView.this.tokenList.setCheckedElements(new Object[] { innerDefaultToken });
                }
                updateActions();
            }
        };

        getViewSite().getShell().getDisplay().syncExec(runnable);
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
     */
    @Override
    public void setFocus() {
        this.tokenTable.setFocus();
    }

    /**
     * Get the currently selected token. If there are more tokens selected get the first
     * token in the list of selected tokens.
     * 
     * @return The first token in the list of selected tokens.
     */
    public IAuthenticationToken getSelectedToken() {
        IAuthenticationToken resultToken = null;
        IStructuredSelection selection = (IStructuredSelection) this.tokenList.getSelection();
        Object o = selection.getFirstElement();
        if (o instanceof IAuthenticationToken) {
            resultToken = (IAuthenticationToken) o;
        }
        return resultToken;
    }

    /**
     * Get a list of all currently selected tokens.
     * 
     * @return A list containing all currently selected tokens.
     */
    public List<IAuthenticationToken> getSelectedTokens() {
        IStructuredSelection selection = (IStructuredSelection) this.tokenList.getSelection();
        List<?> selectionList = selection.toList();
        List<IAuthenticationToken> result = new ArrayList<IAuthenticationToken>();
        for (Object element : selectionList) {
            if (element instanceof IAuthenticationToken) {
                IAuthenticationToken token = (IAuthenticationToken) element;
                result.add(token);
            }
        }
        return result;
    }

    /**
     * Activates or deactivates the currently selected token.
     * 
     * @param active If true the token will be activated, otherwise it will be deactivated.
     * @see #getSelectedToken()
     */
    protected void setSelectedTokenActive(final boolean active) {
        final IAuthenticationToken token = getSelectedToken();
        if (active == token.isActive())
            return;
        ProgressMonitorDialog progMon = new ProgressMonitorDialog(getSite().getShell());
        Throwable exc = null;
        try {
            progMon.run(false, false, new IRunnableWithProgress() {
                public void run(final IProgressMonitor monitor)
                        throws InvocationTargetException, InterruptedException {
                    try {
                        token.setActive(active, monitor);
                    } catch (AuthenticationException authExc) {
                        throw new InvocationTargetException(authExc);
                    }
                }
            });
        } catch (InvocationTargetException itExc) {
            exc = itExc.getCause();
        } catch (InterruptedException intExc) {
            exc = intExc;
        }

        if (exc != null) {
            String errMsg = active ? Messages.getString("AuthTokenView.token_activation_error") //$NON-NLS-1$
                    : Messages.getString("AuthTokenView.token_deactivation_error"); //$NON-NLS-1$
            ProblemDialog.openProblem(getSite().getShell(),
                    Messages.getString("AuthTokenView.token_activation_error_title"), //$NON-NLS-1$
                    errMsg, exc);
        }
    }

    /**
     * Removes the selected tokens from the table and destroys them using the authentication token manager.
     * 
     * @see #getSelectedTokens()
     */
    protected void removeSelectedTokens() {
        List<IAuthenticationToken> tokens = getSelectedTokens();
        if (!tokens.isEmpty()) {
            boolean confirm = !MessageDialog.openConfirm(getSite().getShell(),
                    Messages.getString("AuthTokenView.confirm_delete_title"), //$NON-NLS-1$
                    Messages.getString("AuthTokenView.confirm_delete_message")); //$NON-NLS-1$
            if (!confirm) {
                AuthenticationTokenManager manager = AuthenticationTokenManager.getManager();
                for (IAuthenticationToken token : tokens) {
                    try {
                        manager.destroyToken(token);
                    } catch (AuthenticationException authExc) {
                        eu.celar.ui.internal.Activator.logException(authExc);
                    }
                }
                updateActions();
            }
        }
    }

    /**
     * Show an info dialog for the currently selected token.
     * 
     * @see #getSelectedToken()
     */
    protected void showSelectedTokenInfo() {
        IAuthenticationToken token = getSelectedToken();
        if (token != null) {
            IAuthTokenUIFactory factory = AbstractAuthTokenUIFactory.findFactory(token);
            if (factory != null) {
                AuthTokenInfoDialog infoDialog = factory.getInfoDialog(token, getSite().getShell());
                infoDialog.open();
            }
        }
    }

    /**
     * Update the enabled state of the actions according to the current content of this view and
     * the content's state.
     */
    @SuppressWarnings("null")
    protected void updateActions() {
        IAuthenticationToken token = getSelectedToken();
        boolean selected = token != null;
        this.newAction.setEnabled(true);
        this.deleteAction.setEnabled(selected);
        this.activateAction.setEnabled(selected && !token.isActive());
        this.deactivateAction.setEnabled(selected && token.isActive());
        this.infoAction.setEnabled(selected);
        this.refreshAction.setEnabled(true);
    }

    /**
     * Fill the context menu belonging to the token table.
     * 
     * @param mgr The manager that takes responsible for the context menu.
     */
    protected void fillContextMenu(final IMenuManager mgr) {
        if (this.newAction.isEnabled())
            mgr.add(this.newAction);
        if (this.deleteAction.isEnabled() || this.activateAction.isEnabled() || this.deactivateAction.isEnabled()
                || this.infoAction.isEnabled() || this.refreshAction.isEnabled()) {
            mgr.add(new Separator());
            if (this.deleteAction.isEnabled())
                mgr.add(this.deleteAction);
            if (this.activateAction.isEnabled())
                mgr.add(this.activateAction);
            if (this.deactivateAction.isEnabled())
                mgr.add(this.deactivateAction);
            if (this.infoAction.isEnabled())
                mgr.add(this.infoAction);
            if (this.deleteAction.isEnabled() || this.activateAction.isEnabled()
                    || this.deactivateAction.isEnabled() || this.infoAction.isEnabled()) {
                mgr.add(new Separator());
            }
            if (this.refreshAction.isEnabled())
                mgr.add(this.refreshAction);
        }
        mgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
    }

    /**
     * Create the actions of this view.
     */
    private void createActions() {

        ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages();
        ImageRegistry imgReg = Activator.getDefault().getImageRegistry();

        ImageDescriptor newImage = sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_NEW_WIZARD);
        ImageDescriptor deleteImage = sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_DELETE);
        Image image = imgReg.get("activestate"); //$NON-NLS-1$
        ImageDescriptor activateImage = ImageDescriptor.createFromImage(image);
        image = imgReg.get("inactivestate"); //$NON-NLS-1$
        ImageDescriptor deactivateImage = ImageDescriptor.createFromImage(image);
        ImageDescriptor infoImage = sharedImages.getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK);
        image = imgReg.get("refresh"); //$NON-NLS-1$
        ImageDescriptor refreshImage = ImageDescriptor.createFromImage(image);

        this.infoAction = new Action() {
            @Override
            public void run() {
                showSelectedTokenInfo();
            }
        };
        this.infoAction.setText(Messages.getString("AuthTokenView.info_text")); //$NON-NLS-1$
        this.infoAction.setToolTipText(Messages.getString("AuthTokenView.info_tooltip")); //$NON-NLS-1$
        this.infoAction.setImageDescriptor(infoImage);

        this.refreshAction = new Action() {
            @Override
            public void run() {
                AuthenticationTokenManager innerManager = AuthenticationTokenManager.getManager();
                AuthTokenView.this.tokenList.refresh();
                IAuthenticationToken innerDefaultToken = innerManager.getDefaultToken();
                if (innerDefaultToken != null) {
                    AuthTokenView.this.tokenList.setCheckedElements(new Object[] { innerDefaultToken });
                }

                ///////////// Only for testing ///////////

                /*UIAuthTokenProvider provider = new UIAuthTokenProvider( AuthTokenView.this.getSite().getShell() );
                IAuthenticationTokenDescription description = new GridProxyDescription();
                provider.requestToken( description );*/

                ///////////// Will be removed soon //////////////

            }
        };
        this.refreshAction.setText(Messages.getString("AuthTokenView.refresh_text")); //$NON-NLS-1$
        this.refreshAction.setToolTipText(Messages.getString("AuthTokenView.refresh_tooltip")); //$NON-NLS-1$
        this.refreshAction.setImageDescriptor(refreshImage);

        this.deleteAction = new Action() {
            @Override
            public void run() {
                removeSelectedTokens();
            }
        };
        this.deleteAction.setText(Messages.getString("AuthTokenView.delete_text")); //$NON-NLS-1$
        this.deleteAction.setToolTipText(Messages.getString("AuthTokenView.delete_tooltip")); //$NON-NLS-1$
        this.deleteAction.setImageDescriptor(deleteImage);

        this.activateAction = new Action() {
            @Override
            public void run() {
                setSelectedTokenActive(true);
            }
        };
        this.activateAction.setText(Messages.getString("AuthTokenView.activate_text")); //$NON-NLS-1$
        this.activateAction.setToolTipText(Messages.getString("AuthTokenView.activate_tooltip")); //$NON-NLS-1$
        this.activateAction.setImageDescriptor(activateImage);

        this.deactivateAction = new Action() {
            @Override
            public void run() {
                setSelectedTokenActive(false);
            }
        };
        this.deactivateAction.setText(Messages.getString("AuthTokenView.deactivate_text")); //$NON-NLS-1$
        this.deactivateAction.setToolTipText(Messages.getString("AuthTokenView.deactivate_tooltip")); //$NON-NLS-1$
        this.deactivateAction.setImageDescriptor(deactivateImage);

        this.newAction = new OpenAuthTokenDialogAction();
        this.newAction.setText(Messages.getString("AuthTokenView.create_text")); //$NON-NLS-1$
        this.newAction.setToolTipText(Messages.getString("AuthTokenView.create_tooltip")); //$NON-NLS-1$
        this.newAction.setImageDescriptor(newImage);
        this.newAction.setMenuCreator(this.newActionMenuCreator);

        this.newWizardMenu = new CompoundContributionItem() {
            @Override
            protected IContributionItem[] getContributionItems() {
                List<IContributionItem> itemList = new LinkedList<IContributionItem>();
                ExtensionManager manager = new ExtensionManager();
                List<IConfigurationElement> cElements = manager
                        .getConfigurationElements(Extensions.AUTH_TOKEN_POINT, Extensions.AUTH_TOKEN_ELEMENT);
                for (IConfigurationElement element : cElements) {
                    final String name = element.getAttribute(Extensions.AUTH_TOKEN_NAME_ATTRIBUTE);
                    final String wizardId = element.getAttribute(Extensions.AUTH_TOKEN_WIZARD_ATTRIBUTE);
                    if (name != null && wizardId != null) {
                        Action action = new Action() {
                            @Override
                            public void run() {
                                UIAuthTokenProvider tokenProvider = new UIAuthTokenProvider(getSite().getShell());
                                tokenProvider.showNewTokenWizard(wizardId, true, null);
                            }
                        };
                        action.setText(name);
                        itemList.add(new ActionContributionItem(action));
                    }
                }
                return itemList.toArray(new IContributionItem[0]);
            }
        };

        updateActions();

    }

    /**
     * Create the toolbar of this view. 
     */
    private void createToolbar() {
        IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager();
        mgr.add(this.newAction);
        mgr.add(new Separator());
        mgr.add(this.deleteAction);
        mgr.add(this.activateAction);
        mgr.add(this.deactivateAction);
        mgr.add(this.infoAction);
        mgr.add(new Separator());
        mgr.add(this.refreshAction);
    }

    /**
     * Create the context menu for the token table.
     */
    private void createContextMenu() {
        MenuManager manager = new MenuManager();
        manager.setRemoveAllWhenShown(true);
        manager.addMenuListener(new IMenuListener() {
            public void menuAboutToShow(final IMenuManager mgr) {
                fillContextMenu(mgr);
            }
        });
        Menu menu = manager.createContextMenu(this.tokenTable);
        this.tokenTable.setMenu(menu);
        getSite().registerContextMenu(manager, getSite().getSelectionProvider());
    }

}