Java tutorial
/******************************************************************************* * Copyright (c) 2008 IBM Corporation and others. * 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 * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.equinox.internal.security.ui.storage.view; import org.eclipse.equinox.internal.security.ui.Activator; import org.eclipse.equinox.internal.security.ui.nls.SecUIMessages; import org.eclipse.equinox.internal.security.ui.storage.IStorageConst; import org.eclipse.equinox.security.storage.ISecurePreferences; import org.eclipse.equinox.security.storage.SecurePreferencesFactory; import org.eclipse.jface.action.*; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.*; import org.eclipse.jface.window.Window; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Tree; /** * View of nodes available on the secure preferences tree. */ public class NodesView { /** * For tree viewer to work, the input must not be the same as the root node * or it will get short circuit. Also input can not be null - so have to pass * some dummy value as an input. */ final private static String defaultPrefs = "default"; //$NON-NLS-1$ protected ISecurePreferencesSelection parentView; protected TreeViewer nodeTreeViewer; protected ViewContentProvider contentProvider; protected Action addNodeAction; protected Action removeNodeAction; protected Action refreshNodesAction; class ViewContentProvider implements ITreeContentProvider { public void inputChanged(Viewer v, Object oldInput, Object newInput) { if (nodeTreeViewer != null) { nodeTreeViewer.setSelection(null); nodeTreeViewer.refresh(); } } public void dispose() { // nothing to do } public Object[] getElements(Object parent) { if (defaultPrefs.equals(parent)) return new Object[] { SecurePreferencesFactory.getDefault() }; return new Object[0]; } public Object getParent(Object child) { if (!(child instanceof ISecurePreferences)) return null; ISecurePreferences node = (ISecurePreferences) child; ISecurePreferences parentNode = node.parent(); if (parentNode == null) return null; return node.parent(); } public Object[] getChildren(Object parent) { if (!(parent instanceof ISecurePreferences)) return new Object[0]; ISecurePreferences node = (ISecurePreferences) parent; String[] childrenNames = node.childrenNames(); ISecurePreferences[] result = new ISecurePreferences[childrenNames.length]; for (int i = 0; i < childrenNames.length; i++) result[i] = node.node(childrenNames[i]); return result; } public boolean hasChildren(Object parent) { if (!(parent instanceof ISecurePreferences)) return false; ISecurePreferences node = (ISecurePreferences) parent; String[] childrenNames = node.childrenNames(); return (childrenNames.length > 0); } } class ViewLabelProvider extends LabelProvider { public String getText(Object obj) { if (!(obj instanceof ISecurePreferences)) return obj.toString(); ISecurePreferences node = (ISecurePreferences) obj; if (node.parent() == null) return '[' + SecUIMessages.rootNodeName + ']'; return node.name(); } public Image getImage(Object obj) { return null; } } public NodesView(Tree nodeTree, final ISecurePreferencesSelection parentView) { this.parentView = parentView; nodeTreeViewer = new TreeViewer(nodeTree); contentProvider = new ViewContentProvider(); nodeTreeViewer.setContentProvider(contentProvider); nodeTreeViewer.setLabelProvider(new ViewLabelProvider()); nodeTreeViewer.setInput(defaultPrefs); nodeTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { TreeSelection selection = (TreeSelection) event.getSelection(); Object selected = selection.getFirstElement(); if (selected instanceof ISecurePreferences) parentView.setSelection((ISecurePreferences) selected); else parentView.setSelection(null); } }); if (Activator.getDefault().debugStorageContents()) { makeActions(); hookContextMenu(); } } private void hookContextMenu() { MenuManager menuMgr = new MenuManager(SecUIMessages.nodesContextMenu); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { boolean canRemove = false; boolean canAdd = false; TreeSelection selection = (TreeSelection) nodeTreeViewer.getSelection(); Object selected = selection.getFirstElement(); if (selected instanceof ISecurePreferences) { ISecurePreferences node = (ISecurePreferences) selected; boolean isRoot = (node.parent() == null); boolean isInternal = node.absolutePath().startsWith(IStorageConst.PROVIDER_NODE); canRemove = (!isRoot && !isInternal); canAdd = !isInternal; } removeNodeAction.setEnabled(canRemove); addNodeAction.setEnabled(canAdd); } }); Menu menu = menuMgr.createContextMenu(nodeTreeViewer.getControl()); nodeTreeViewer.getControl().setMenu(menu); // fill context menu menuMgr.add(refreshNodesAction); menuMgr.add(new Separator()); menuMgr.add(addNodeAction); menuMgr.add(removeNodeAction); } private void makeActions() { refreshNodesAction = new Action() { public void run() { nodeTreeViewer.refresh(); } }; refreshNodesAction.setText(SecUIMessages.refreshNodesCommand); refreshNodesAction.setToolTipText(SecUIMessages.refreshNodesCommandTip); refreshNodesAction.setImageDescriptor( ImageDescriptor.createFromFile(NodesView.class, "/icons/storage/node_refresh.gif")); //$NON-NLS-1$ addNodeAction = new Action() { public void run() { TreeSelection selection = (TreeSelection) nodeTreeViewer.getSelection(); Object selected = selection.getFirstElement(); if (selected instanceof ISecurePreferences) { ISecurePreferences node = (ISecurePreferences) selected; NewNodeDialog nodeDialog = new NewNodeDialog(nodeTreeViewer.getControl().getShell()); if (nodeDialog.open() != Window.OK) return; String name = nodeDialog.getNodeName(); ISecurePreferences child = node.node(name); parentView.modified(); // expand and select new node ISecurePreferences parentNode = child.parent(); if (parentNode != null) nodeTreeViewer.refresh(parentNode, false); else nodeTreeViewer.refresh(false); nodeTreeViewer.expandToLevel(child, 0); nodeTreeViewer.setSelection(new StructuredSelection(child), true); } } }; addNodeAction.setText(SecUIMessages.addNodeCommand); addNodeAction.setToolTipText(SecUIMessages.addNodeCommandTip); addNodeAction .setImageDescriptor(ImageDescriptor.createFromFile(NodesView.class, "/icons/storage/node_new.gif")); //$NON-NLS-1$ removeNodeAction = new Action() { public void run() { TreeSelection selection = (TreeSelection) nodeTreeViewer.getSelection(); Object selected = selection.getFirstElement(); if (selected instanceof ISecurePreferences) { ISecurePreferences node = (ISecurePreferences) selected; ISecurePreferences parentNode = node.parent(); if (parentNode == null) return; // can't remove root node node.removeNode(); parentView.modified(); // refresh parent node and select it nodeTreeViewer.refresh(parentNode, false); nodeTreeViewer.setSelection(new StructuredSelection(parentNode), true); } } }; removeNodeAction.setText(SecUIMessages.removeNodeCommand); removeNodeAction.setToolTipText(SecUIMessages.removeNodeCommandTip); removeNodeAction.setImageDescriptor( ImageDescriptor.createFromFile(NodesView.class, "/icons/storage/node_delete.gif")); //$NON-NLS-1$ } public void setFocus() { nodeTreeViewer.getControl().setFocus(); } public void postDeleted() { if (contentProvider == null) return; nodeTreeViewer.setSelection(StructuredSelection.EMPTY); nodeTreeViewer.refresh(); } }