com.kopson.cite.views.DeviceExplorer.java Source code

Java tutorial

Introduction

Here is the source code for com.kopson.cite.views.DeviceExplorer.java

Source

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