org.eclipse.dltk.mod.debug.ui.display.ScriptDisplayView.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.dltk.mod.debug.ui.display.ScriptDisplayView.java

Source

/*******************************************************************************
 * Copyright (c) 2005-2011 xored software, Inc., and eBay Inc.
 *
 * 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:
 *     xored software, Inc. - initial API and Implementation (Alex Panchenko)
 *     eBay Inc - modification
 *******************************************************************************/
package org.eclipse.dltk.mod.debug.ui.display;

import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IDebugEventSetListener;
import org.eclipse.debug.core.model.IDebugElement;
import org.eclipse.dltk.mod.console.IScriptInterpreter;
import org.eclipse.dltk.mod.debug.core.DLTKDebugPlugin;
import org.eclipse.dltk.mod.debug.core.model.IScriptDebugElement;
import org.eclipse.jdt.debug.core.IJavaStackFrame;
import org.eclipse.jdt.debug.core.IJavaThread;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.SubActionBars;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleConstants;
import org.eclipse.ui.console.IConsoleView;
import org.eclipse.ui.part.IPageBookViewPage;
import org.eclipse.ui.part.PageSite;
import org.eclipse.ui.part.ViewPart;

public class ScriptDisplayView extends ViewPart
        implements IConsoleView, ISelectionListener, IDebugEventSetListener {

    private DebugConsole console;

    private PageSite pageSite;
    private IPageBookViewPage page;

    // EBAY MOD START
    private DebugScriptInterpreter debugScriptInterpreter;
    private JDTScriptInterpreterAdapter jdtScriptInterpreter;

    // EBAY MOD END

    public void init(IViewSite site) throws PartInitException {
        // EBAY MOD START
        super.init(site);
        debugScriptInterpreter = new DebugScriptInterpreter(this);
        jdtScriptInterpreter = new JDTScriptInterpreterAdapter();
        console = new DebugConsole(Messages.ScriptDisplayView_consoleName, DebugConsole.class.getName(),
                debugScriptInterpreter);
        page = console.createPage(this);
        pageSite = new PageSite(getViewSite());
        page.init(pageSite);
        getSite().getWorkbenchWindow().getSelectionService().addPostSelectionListener(this);
        DebugPlugin.getDefault().addDebugEventListener(this);
        // EBAY MOD END
    }

    public void dispose() {
        // EBAY MOD START
        getSite().getWorkbenchWindow().getSelectionService().removePostSelectionListener(this);
        DebugPlugin.getDefault().removeDebugEventListener(this);
        // EBAY MOD END
        if (page != null) {
            page.dispose();
            page = null;
        }
        if (console != null) {
            console.dispose();
            console = null;
        }
        super.dispose();
    }

    public void createPartControl(Composite parent) {
        IToolBarManager toolBarManager = pageSite.getActionBars().getToolBarManager();
        toolBarManager.add(new GroupMarker(IConsoleConstants.OUTPUT_GROUP));
        toolBarManager.add(new GroupMarker(IConsoleConstants.LAUNCH_GROUP));
        page.createControl(parent);
        ((SubActionBars) pageSite.getActionBars()).activate();
    }

    public void setFocus() {
        page.setFocus();
    }

    public void display(IConsole console) {
        // NOP
    }

    public IConsole getConsole() {
        return console;
    }

    public boolean getScrollLock() {
        return false;
    }

    public boolean isPinned() {
        return false;
    }

    public void pin(IConsole console) {
        // NOP
    }

    public void setPinned(boolean pin) {
        // NOP
    }

    public void setScrollLock(boolean scrollLock) {
        // NOP
    }

    public void warnOfContentChange(IConsole console) {
        // NOP
    }

    // EBAY MOD START
    public void selectionChanged(IWorkbenchPart part, ISelection selection) {
        handleSelectionChangedEvent(part, selection);
    }

    private void handleSelectionChangedEvent(IWorkbenchPart part, ISelection selection) {
        if (!(selection instanceof IStructuredSelection)) {
            return;
        }

        Object element = ((IStructuredSelection) selection).getFirstElement();
        if (!(element instanceof IDebugElement)) {
            return;
        }

        setInterpreterByDebugElement(element);
    }

    private void setInterpreterByDebugElement(Object element) {
        IScriptInterpreter interpreter = null;
        if (element instanceof IScriptDebugElement) {
            interpreter = debugScriptInterpreter;
        } else if (element instanceof IJavaThread) {
            IJavaThread javaThread = (IJavaThread) element;
            try {
                if (javaThread.isSuspended() && javaThread.hasStackFrames()) {
                    interpreter = jdtScriptInterpreter;
                    jdtScriptInterpreter.setStackFrame((IJavaStackFrame) javaThread.getStackFrames()[0]);
                }
            } catch (DebugException e) {
                DLTKDebugPlugin.log(e);
            }
        } else if (element instanceof IJavaStackFrame) {
            interpreter = jdtScriptInterpreter;
            jdtScriptInterpreter.setStackFrame((IJavaStackFrame) element);
        }
        if (interpreter != null) {
            console.setInterpreter(interpreter);
        }
    }

    public void handleDebugEvents(DebugEvent[] events) {
        for (int i = 0; i < events.length; i++) {
            switch (events[i].getKind()) {
            case DebugEvent.SUSPEND:
                switch (events[i].getDetail()) {
                case DebugEvent.BREAKPOINT:
                case DebugEvent.STEP_END:
                    setInterpreterByDebugElement(events[i].getSource());
                    break;
                }
                break;
            default:
                break;
            }
        }
    }
    // EBAY MOD END
}