com.aptana.ide.debug.internal.ui.views.AJAXMonitorView.java Source code

Java tutorial

Introduction

Here is the source code for com.aptana.ide.debug.internal.ui.views.AJAXMonitorView.java

Source

/**
 * This file Copyright (c) 2005-2008 Aptana, Inc. This program is
 * dual-licensed under both the Aptana Public License and the GNU General
 * Public license. You may elect to use one or the other of these licenses.
 * 
 * This program is distributed in the hope that it will be useful, but
 * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
 * NONINFRINGEMENT. Redistribution, except as permitted by whichever of
 * the GPL or APL you select, is prohibited.
 *
 * 1. For the GPL license (GPL), you can redistribute and/or modify this
 * program under the terms of the GNU General Public License,
 * Version 3, as published by the Free Software Foundation.  You should
 * have received a copy of the GNU General Public License, Version 3 along
 * with this program; if not, write to the Free Software Foundation, Inc., 51
 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 * 
 * Aptana provides a special exception to allow redistribution of this file
 * with certain other free and open source software ("FOSS") code and certain additional terms
 * pursuant to Section 7 of the GPL. You may view the exception and these
 * terms on the web at http://www.aptana.com/legal/gpl/.
 * 
 * 2. For the Aptana Public License (APL), this program and the
 * accompanying materials are made available under the terms of the APL
 * v1.0 which accompanies this distribution, and is available at
 * http://www.aptana.com/legal/apl/.
 * 
 * You may view the GPL, Aptana's exception and additional terms, and the
 * APL in the file titled license.html at the root of the corresponding
 * plugin containing this source file.
 * 
 * Any modifications to this file must keep this entire header intact.
 */

package com.aptana.ide.debug.internal.ui.views;

import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IDebugEventSetListener;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.model.IDebugTarget;
import org.eclipse.debug.core.model.IProcess;
import org.eclipse.debug.ui.AbstractDebugView;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.part.IPage;
import org.eclipse.ui.part.PageBook;

import com.aptana.ide.core.StringUtils;
import com.aptana.ide.debug.core.DebugUtil;
import com.aptana.ide.debug.core.xhr.IXHRService;
import com.aptana.ide.debug.internal.ui.xhr.AJAXMonitorPage;

/**
 * @author Max Stepanov
 */
public class AJAXMonitorView extends AbstractDebugView implements IDebugEventSetListener {

    private ISelectionListener selectionListener;
    private IXHRService current;
    private boolean currentTerminated;

    /**
     * @see org.eclipse.debug.ui.AbstractDebugView#configureToolBar(org.eclipse.jface.action.IToolBarManager)
     */
    protected void configureToolBar(IToolBarManager tbm) {
    }

    /**
     * @see org.eclipse.debug.ui.AbstractDebugView#createActions()
     */
    protected void createActions() {
    }

    /**
     * @see org.eclipse.debug.ui.AbstractDebugView#createViewer(org.eclipse.swt.widgets.Composite)
     */
    protected Viewer createViewer(Composite parent) {
        throw new IllegalArgumentException("should not be called"); //$NON-NLS-1$
    }

    /**
     * @see org.eclipse.debug.ui.AbstractDebugView#fillContextMenu(org.eclipse.jface.action.IMenuManager)
     */
    protected void fillContextMenu(IMenuManager menu) {
    }

    /**
     * @see org.eclipse.debug.ui.AbstractDebugView#getHelpContextId()
     */
    protected String getHelpContextId() {
        return null;
    }

    /**
     * @see org.eclipse.ui.part.PageBookView#createDefaultPage(org.eclipse.ui.part.PageBook)
     */
    protected IPage createDefaultPage(PageBook book) {
        AJAXMonitorPage page = new AJAXMonitorPage();
        page.createControl(book);
        setViewer(page.getViewer());
        initPage(page);
        updateTitle();

        DebugPlugin.getDefault().addDebugEventListener(this);
        // listen to selection in debug view
        getSite().getPage().addPostSelectionListener(IDebugUIConstants.ID_DEBUG_VIEW, getSelectionListener());
        return page;
    }

    private void updateTitle() {
        int count = 0;
        if (current != null) {
            count = current.getTransfersCount();
        }
        setContentDescription(
                StringUtils.format(Messages.AJAXMonitorView_items_0, new Integer[] { new Integer(count) })); // count will be formatted as 1,234

    }

    /**
     * @see org.eclipse.ui.IWorkbenchPart#dispose()
     */
    public void dispose() {
        getSite().getPage().removePostSelectionListener(IDebugUIConstants.ID_DEBUG_VIEW, getSelectionListener());
        DebugPlugin.getDefault().removeDebugEventListener(this);
        super.dispose();
    }

    /**
     * getCurrentXHRService
     * 
     * @return IXHRService
     */
    protected IXHRService getCurrentXHRService() {
        IAdaptable adaptable = DebugUITools.getDebugContext();
        if (adaptable == null) {
            IViewPart debugViewPart = getSite().getPage().findView(IDebugUIConstants.ID_DEBUG_VIEW);
            if (debugViewPart != null) {
                Object debugInput = ((AbstractDebugView) debugViewPart).getViewer().getInput();
                if (debugInput instanceof ILaunchManager) {
                    IDebugTarget[] debugTargets = ((ILaunchManager) debugInput).getDebugTargets();
                    if (debugTargets.length > 0) {
                        adaptable = debugTargets[0];
                    } else {
                        IProcess[] debugProcesses = ((ILaunchManager) debugInput).getProcesses();
                        if (debugProcesses.length > 0) {
                            adaptable = debugProcesses[0];
                        }
                    }
                }
            }

        }
        IDebugTarget target = (IDebugTarget) DebugUtil.findAdapter(adaptable, IDebugTarget.class);
        if (target != null) {
            return (IXHRService) target.getAdapter(IXHRService.class);
        }
        return null;
    }

    private void setViewerInput(IXHRService input) {
        if (current == null && input == null) {
            return;
        }
        if (current != null && current.equals(input)) {
            return;
        }

        current = input;
        getViewer().setInput(input);
        updateTitle();
        showViewer();
    }

    /**
     * @see org.eclipse.debug.ui.AbstractDebugView#becomesHidden()
     */
    protected void becomesHidden() {
        getViewer().setInput(null);
        showViewer();
        super.becomesHidden();
    }

    /**
     * @see org.eclipse.debug.ui.AbstractDebugView#becomesVisible()
     */
    protected void becomesVisible() {
        super.becomesVisible();
        if (current != null) {
            getViewer().setInput(current);
            showViewer();
        } else {
            setViewerInput(getCurrentXHRService());
        }
        if (getViewer().getSelection().isEmpty() && (current != null) && (current.getTransfersCount() > 0)) {
            getViewer().setSelection(new StructuredSelection(current.getTransfers()[0]));
        }
    }

    private ISelectionListener getSelectionListener() {
        if (selectionListener == null) {
            selectionListener = new ISelectionListener() {
                public void selectionChanged(IWorkbenchPart part, ISelection selection) {
                    if (!isAvailable() || !isVisible()) {
                        return;
                    }
                    setViewerInput(getCurrentXHRService());
                }
            };
        }
        return selectionListener;
    }

    /**
     * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent[])
     */
    public void handleDebugEvents(DebugEvent[] events) {
        for (int i = 0; i < events.length; i++) {
            final DebugEvent event = events[i];
            Object source = event.getSource();
            if (current == null || currentTerminated) {
                if ((event.getKind() == DebugEvent.CREATE)
                        && (source instanceof IDebugTarget || source instanceof IProcess)) {
                    getViewer().getControl().getDisplay().asyncExec(new Runnable() {
                        public void run() {
                            if (current == null || currentTerminated) {
                                currentTerminated = false;
                                setViewerInput(getCurrentXHRService());
                            }
                        }
                    });
                }
                continue;
            } else if ((event.getKind() == DebugEvent.TERMINATE)
                    && (source instanceof IDebugTarget || source instanceof IProcess)) {
                currentTerminated = true;
            } else if (source != current) {
                continue;
            }
            switch (event.getKind()) {
            case DebugEvent.CHANGE:
                getViewer().getControl().getDisplay().syncExec(new Runnable() {
                    public void run() {
                        Object data = event.getData();
                        if (data != null) {
                            ((StructuredViewer) getViewer()).update(current, null);
                        } else {
                            updateTitle();
                            ((StructuredViewer) getViewer()).refresh(current);
                        }
                    }
                });
                break;
            default:
                break;
            }
        }
    }
}