Java tutorial
/******************************************************************************* * Copyright (c) 2007 Conselleria de Infraestructuras y Transporte, Generalitat * de la Comunitat Valenciana . 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: Javier Muoz (Integranova) Initial implementation * ******************************************************************************/ package es.cv.gvcase.trmanager.ui.views; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.action.Action; 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.resource.ImageDescriptor; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IActionBars; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.DrillDownAdapter; import org.eclipse.ui.part.ViewPart; import es.cv.gvcase.trmanager.internal.ui.Messages; import es.cv.gvcase.trmanager.registry.TransformationDesc; /** */ public class TransformationsView extends ViewPart { private TreeViewer viewer; private DrillDownAdapter drillDownAdapter; private Action doubleClickAction; /* * The content provider class is responsible for providing objects to the * view. It can wrap existing objects in adapters or simply return objects * as-is. These objects may be sensitive to the current input of the view, * or ignore it and always show the same content (like Task List, for * example). */ class TreeObject implements IAdaptable { private String name; private String transfId; private TreeParent parent; private TransformationDesc transf; public TreeObject(TransformationDesc trDesc) { this.transf = trDesc; this.name = trDesc.getName(); this.transfId = trDesc.getId(); } public TreeObject(String name, String transfId) { this.name = name; this.transfId = transfId; } public TransformationDesc getTransformationDesc() { return transf; } public String getName() { return name; } public String getTransfId() { return transfId; } public void setParent(TreeParent parent) { this.parent = parent; } public TreeParent getParent() { return parent; } public String toString() { return getName(); } public Object getAdapter(Class key) { return null; } } class TreeParent extends TreeObject { private ArrayList<TreeObject> children; public TreeParent(String name) { super(name, null); children = new ArrayList<TreeObject>(); } public void addChild(TreeObject child) { children.add(child); child.setParent(this); } public void removeChild(TreeObject child) { children.remove(child); child.setParent(null); } public TreeObject[] getChildren() { return (TreeObject[]) children.toArray(new TreeObject[children.size()]); } public boolean hasChildren() { return children.size() > 0; } } class ViewContentProvider implements IStructuredContentProvider, ITreeContentProvider { private TreeParent invisibleRoot; public void inputChanged(Viewer v, Object oldInput, Object newInput) { } public void dispose() { } public Object[] getElements(Object parent) { if (parent.equals(getViewSite())) { if (invisibleRoot == null) initialize(); return getChildren(invisibleRoot); } return getChildren(parent); } public Object getParent(Object child) { if (child instanceof TreeObject) { return ((TreeObject) child).getParent(); } return null; } public Object[] getChildren(Object parent) { if (parent instanceof TreeParent) { return ((TreeParent) parent).getChildren(); } return new Object[0]; } public boolean hasChildren(Object parent) { if (parent instanceof TreeParent) return ((TreeParent) parent).hasChildren(); return false; } private void initialize() { TreeParent root = new TreeParent(Messages.getString("TransformationsView.Transformations")); //$NON-NLS-1$ HashMap<String, ArrayList<TransformationDesc>> transformationsMap = es.cv.gvcase.trmanager.registry.TransformationsRegistry .getTransformationsByPackage(); for (String packageName : transformationsMap.keySet()) { TreeParent packageNode = new TreeParent(packageName); root.addChild(packageNode); for (TransformationDesc tr : transformationsMap.get(packageName)) { if (tr.isUserAvailable()) { packageNode.addChild(new TreeObject(tr)); } } } invisibleRoot = new TreeParent(""); invisibleRoot.addChild(root); } } class ViewLabelProvider extends LabelProvider { public String getText(Object obj) { if (obj instanceof TreeParent) { return obj.toString(); } else { String label = ""; label += ((TreeObject) obj).getName(); label += " [" + ((TreeObject) obj).getTransformationDesc().getTrId(); label += ":" + ((TreeObject) obj).getTransformationDesc().getPriority() + "]"; return label; } } public Image getImage(Object obj) { String imageKey = ISharedImages.IMG_OBJ_ELEMENT; if (obj instanceof TreeParent) { imageKey = ISharedImages.IMG_OBJ_FOLDER; return PlatformUI.getWorkbench().getSharedImages().getImage(imageKey); } else { return getImageDescriptor("transf-exec.gif").createImage(); } } } public static ImageDescriptor getImageDescriptor(String name) { String iconPath = "icons/"; URL url = Platform.getBundle("es.cv.gvcase.trmanager.ui").getResource(iconPath + name); return ImageDescriptor.createFromURL(url); } /** * The constructor. */ public TransformationsView() { } /** * This is a callback that will allow us to create the viewer and initialize * it. */ public void createPartControl(Composite parent) { viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); drillDownAdapter = new DrillDownAdapter(viewer); viewer.setContentProvider(new ViewContentProvider()); viewer.setLabelProvider(new ViewLabelProvider()); viewer.setInput(getViewSite()); makeActions(); hookContextMenu(); hookDoubleClickAction(); contributeToActionBars(); } private void hookContextMenu() { MenuManager menuMgr = new MenuManager("#PopupMenu"); menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { TransformationsView.this.fillContextMenu(manager); } }); Menu menu = menuMgr.createContextMenu(viewer.getControl()); viewer.getControl().setMenu(menu); getSite().registerContextMenu(menuMgr, viewer); } private void contributeToActionBars() { IActionBars bars = getViewSite().getActionBars(); fillLocalPullDown(bars.getMenuManager()); fillLocalToolBar(bars.getToolBarManager()); } private void fillLocalPullDown(IMenuManager manager) { } private void fillContextMenu(IMenuManager manager) { // Other plug-ins can contribute there actions here manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } private void fillLocalToolBar(IToolBarManager manager) { drillDownAdapter.addNavigationActions(manager); } private void makeActions() { doubleClickAction = new Action() { public void run() { ISelection selection = viewer.getSelection(); Object obj = ((IStructuredSelection) selection).getFirstElement(); if (obj.getClass().getCanonicalName() .compareTo("es.cv.gvcase.trmanager.ui.views.TransformationsView.TreeObject") == 0) { TreeObject treeObject = (TreeObject) obj; es.cv.gvcase.trmanager.ui.TransformationUIManager.startTransformation(treeObject.getTransfId()); } } }; } private void hookDoubleClickAction() { viewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { doubleClickAction.run(); } }); } /** * Passing the focus request to the viewer's control. */ public void setFocus() { viewer.getControl().setFocus(); } }