Java tutorial
/******************************************************************************* * Copyright (c) 2002, 2012 Innoopract Informationssysteme GmbH 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: * Innoopract Informationssysteme GmbH - initial API and implementation * EclipseSource - ongoing development ******************************************************************************/ package org.eclipse.rap.demo; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.*; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.*; import org.eclipse.ui.part.ViewPart; import org.eclipse.ui.views.properties.*; public class DemoTreeViewPart extends ViewPart implements IDoubleClickListener { private TreeViewer viewer; private IPropertySheetPage propertyPage; // TODO [rst] Add via extension // private final class LeafStarLabelDecorator extends LabelProvider // implements ILabelDecorator // { // // public String decorateText( String text, Object element ) { // if( text.startsWith( "Leaf" ) ) { // return text + "*"; // } // return text; // } // // public Image decorateImage( Image image, Object element ) { // return null; // } // } private static final class ViewLabelProvider extends LabelProvider { @Override public Image getImage(Object element) { IWorkbench workbench = PlatformUI.getWorkbench(); ISharedImages sharedImages = workbench.getSharedImages(); return sharedImages.getImage(ISharedImages.IMG_OBJ_ELEMENT); } } class TreeObject implements IPropertySource { private static final String PROP_ID_LOCATION = "location"; private static final String PROP_ID_NAME = "name"; private String name; private String location; private TreeParent parent; public TreeObject(String name) { this(name, ""); } public TreeObject(String name, String location) { this.name = name; this.location = location; } public String getName() { return name; } public String getLocation() { return location; } public void setParent(TreeParent parent) { this.parent = parent; } public TreeParent getParent() { return parent; } @Override public String toString() { return getName(); } public Object getEditableValue() { return this; } public IPropertyDescriptor[] getPropertyDescriptors() { return new IPropertyDescriptor[] { new TextPropertyDescriptor(PROP_ID_NAME, "Name"), new TextPropertyDescriptor(PROP_ID_LOCATION, "Location"), }; } public Object getPropertyValue(Object id) { Object result = null; if (PROP_ID_NAME.equals(id)) { result = name; } else if (PROP_ID_LOCATION.equals(id)) { result = location; } return result; } public boolean isPropertySet(Object id) { boolean result = false; if (PROP_ID_NAME.equals(id)) { result = name != null && !"".equals(name); } else if (PROP_ID_LOCATION.equals(id)) { result = location != null && !"".equals(location); } return result; } public void resetPropertyValue(Object id) { if (PROP_ID_NAME.equals(id)) { name = ""; } else if (PROP_ID_LOCATION.equals(id)) { location = ""; } } public void setPropertyValue(Object id, Object value) { if (PROP_ID_NAME.equals(id)) { name = (String) value; } else if (PROP_ID_LOCATION.equals(id)) { location = (String) value; } update(this); } } /** * Instances of this type are decorated with an error marker */ private class BrokenTreeObject extends TreeObject { public BrokenTreeObject(String name) { super(name); } } private class TreeParent extends TreeObject { private final List<TreeObject> children; public TreeParent(String name) { super(name); children = new ArrayList<TreeObject>(); } public void addChild(TreeObject child) { children.add(child); child.setParent(this); } public TreeObject[] getChildren() { TreeObject[] result = new TreeObject[children.size()]; children.toArray(result); return result; } public boolean hasChildren() { return children.size() > 0; } } private final class TreeViewerContentProvider 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 instanceof IViewPart) { 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; } /* * We will set up a dummy model to initialize tree heararchy. In a real * code, you will connect to a real model and expose its hierarchy. */ private void initialize() { TreeObject to1 = new TreeObject("EclipseCon location", "http://maps.google.com/maps?q=5001%20Great%20America%20Pkwy%20Santa%20Clara%20CA%2095054"); TreeObject to2 = new TreeObject("Eclipse Foundation", "http://maps.google.com/maps?q=Ottawa"); TreeObject to3 = new TreeObject("Innoopract Inc", "http://maps.google.com/maps?q=Portland"); TreeParent p1 = new TreeParent("Locate in browser view"); p1.addChild(to1); p1.addChild(to2); p1.addChild(to3); TreeObject to4 = new BrokenTreeObject("Leaf 4"); TreeParent p2 = new TreeParent("Parent 2"); p2.addChild(to4); TreeParent root = new TreeParent("Root"); TreeParent p3 = new TreeParent("Child X - filter me!"); root.addChild(p1); root.addChild(p2); root.addChild(p3); invisibleRoot = new TreeParent(""); invisibleRoot.addChild(root); } } @Override public void createPartControl(Composite parent) { viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); viewer.setContentProvider(new TreeViewerContentProvider()); ILabelDecorator labelDecorator = PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator(); ILabelProvider labelProvider = new DecoratingLabelProvider(new ViewLabelProvider(), labelDecorator); viewer.setLabelProvider(labelProvider); viewer.setInput(this); viewer.addDoubleClickListener(this); getSite().setSelectionProvider(viewer); } @Override public Object getAdapter(Class adapter) { Object result = super.getAdapter(adapter); if (adapter == IPropertySheetPage.class) { if (propertyPage == null) { propertyPage = new PropertySheetPage(); } result = propertyPage; } return result; } @Override public void setFocus() { viewer.getTree().setFocus(); } public void doubleClick(DoubleClickEvent event) { String msg = "You doubleclicked on " + event.getSelection().toString(); Shell shell = viewer.getTree().getShell(); MessageDialog.openInformation(shell, "Treeviewer", msg); } private void update(TreeObject treeObject) { getViewer().update(treeObject, null); } public TreeViewer getViewer() { return viewer; } }