Java tutorial
/******************************************************************************* * Copyright (c) 2012 Piotr Kopka * 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.kopson.cite.com/legal/epl-v10.html * * Contributors: * Piotr Kopka *******************************************************************************/ package com.kopson.cite.views; import org.eclipse.core.runtime.IAdapterFactory; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction; import org.eclipse.ui.model.BaseWorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.part.ViewPart; import com.kopson.cite.actions.ScriptEditorRun; import com.kopson.cite.application.Activator; import com.kopson.cite.devicemodel.Device; import com.kopson.cite.devicemodel.DeviceAdapterFactory; import com.kopson.cite.devicemodel.DeviceEntry; import com.kopson.cite.devicemodel.DeviceGroup; import com.kopson.cite.devicemodel.IDeviceListener; import com.kopson.cite.devicemodel.Session; /** * Device explorer view. * * @author kopson * */ public class DeviceExplorer extends ViewPart { /** * View ID */ public static final String ID = "com.kopson.cite.views.deviceexplorer"; /** * Device explorer */ private TreeViewer treeViewer; /** * Session control object */ private Session session; /** * */ private IAdapterFactory adapterFactory = new DeviceAdapterFactory(); /** * */ public DeviceExplorer() { super(); } /** * Create device explorer UI look and behavior and * register the adapter factory with Eclipse when the * ContactsView is created. * * @param Parent control capable of containing tree viewer control. */ public void createPartControl(Composite parent) { initializeSession(); treeViewer = new TreeViewer(parent, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL); getSite().setSelectionProvider(treeViewer); Platform.getAdapterManager().registerAdapters(adapterFactory, Device.class); treeViewer.setLabelProvider(new WorkbenchLabelProvider()); treeViewer.setContentProvider(new BaseWorkbenchContentProvider()); treeViewer.setInput(session.getRoot()); session.getRoot().addDeviceListener(new IDeviceListener() { public void deviceChanged(DeviceGroup contacts, DeviceEntry entry) { treeViewer.refresh(); } }); treeViewer.addDoubleClickListener(new IDoubleClickListener() { /** * Open script editor if device is selected */ @Override public void doubleClick(DoubleClickEvent event) { IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection(); if (selection.isEmpty()) return; IWorkbenchAction runAction = Activator.getDefault().getActionFromRegistry(ScriptEditorRun.ID); if (runAction.isEnabled()) runAction.run(); } }); } /** * Unregister adapter factory when the view is closed. */ public void dispose() { Platform.getAdapterManager().unregisterAdapters(adapterFactory); super.dispose(); } /** * Initialize session object. */ private void initializeSession() { session = new Session(); DeviceGroup root = session.getRoot(); DeviceGroup friendsGroup = new DeviceGroup(root, "Friends"); root.addEntry(friendsGroup); friendsGroup.addEntry(new DeviceEntry(friendsGroup, "Alize", "aliz", "localhost")); friendsGroup.addEntry(new DeviceEntry(friendsGroup, "Sydney", "syd", "localhost")); DeviceGroup otherGroup = new DeviceGroup(root, "Other"); root.addEntry(otherGroup); otherGroup.addEntry(new DeviceEntry(otherGroup, "Nadine", "nad", "localhost")); } /** * Choose control to assign focus. */ public void setFocus() { treeViewer.getControl().setFocus(); } }