Java tutorial
/***************************************************************************** * 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()); } }