com.subgraph.vega.ui.http.intercept.queue.InterceptQueueView.java Source code

Java tutorial

Introduction

Here is the source code for com.subgraph.vega.ui.http.intercept.queue.InterceptQueueView.java

Source

/*******************************************************************************
 * Copyright (c) 2011 Subgraph.
 * 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:
 *     Subgraph - initial API and implementation
 ******************************************************************************/
package com.subgraph.vega.ui.http.intercept.queue;

import java.net.URI;

import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnLayoutData;
import org.eclipse.jface.viewers.ColumnPixelData;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

import com.subgraph.vega.api.http.proxy.IHttpInterceptor;
import com.subgraph.vega.api.http.proxy.IProxyTransaction;
import com.subgraph.vega.ui.http.Activator;
import com.subgraph.vega.ui.http.ErrorDisplay;
import com.subgraph.vega.ui.http.intercept.InterceptView;

public class InterceptQueueView extends ViewPart {
    public final static String POPUP_TRANSACTIONS_TABLE = "com.subgraph.vega.ui.http.intercept.queue.InterceptQueueView.tableViewerTransactions";
    private IHttpInterceptor interceptor;
    private Composite parentComposite;
    private TableViewer tableViewerTransactions;

    public InterceptQueueView() {
    }

    @Override
    public void createPartControl(Composite parent) {
        interceptor = Activator.getDefault().getProxyService().getInterceptor();
        parentComposite = new Composite(parent, SWT.NONE);
        parentComposite.setLayout(new FillLayout());
        createTable(parentComposite);
        tableViewerTransactions.setInput(interceptor);
    }

    @Override
    public void setFocus() {
        tableViewerTransactions.getTable().setFocus();
    }

    private Composite createTable(Composite parent) {
        final Composite rootControl = new Composite(parent, SWT.NONE);
        final TableColumnLayout tcl = new TableColumnLayout();
        rootControl.setLayout(tcl);

        tableViewerTransactions = new TableViewer(rootControl,
                SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
        tableViewerTransactions.setContentProvider(new TransactionTableContentProvider(tableViewerTransactions));
        createColumns(tableViewerTransactions, tcl);
        final Table table = tableViewerTransactions.getTable();
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
        tableViewerTransactions.addDoubleClickListener(createDoubleClickListener());
        MenuManager menuManager = new MenuManager();
        Menu menu = menuManager.createContextMenu(tableViewerTransactions.getTable());
        tableViewerTransactions.getTable().setMenu(menu);
        getSite().registerContextMenu(POPUP_TRANSACTIONS_TABLE, menuManager, tableViewerTransactions);
        getSite().setSelectionProvider(tableViewerTransactions);

        return rootControl;
    }

    private void createColumns(TableViewer viewer, TableColumnLayout layout) {
        final String[] titles = { "Type", "Host", "Method", "Request", };
        final ColumnLayoutData[] layoutData = { new ColumnPixelData(60, true, true),
                new ColumnPixelData(120, true, true), new ColumnPixelData(60, true, true),
                new ColumnWeightData(100, 100, true), };

        final ColumnLabelProvider providerList[] = { new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                return ((IProxyTransaction) element).hasResponse() == false ? "Request" : "Response";
            }
        }, new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                final URI uri = ((IProxyTransaction) element).getRequest().getURI();
                final StringBuilder buf = new StringBuilder();
                buf.append(uri.getScheme());
                buf.append("://");
                buf.append(uri.getHost());
                if (uri.getPort() != -1) {
                    buf.append(':');
                    buf.append(Integer.toString(uri.getPort()));
                }
                return buf.toString();
            }
        }, new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                return ((IProxyTransaction) element).getRequest().getMethod();
            }
        }, new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                final URI uri = ((IProxyTransaction) element).getRequest().getURI();
                if (uri.getRawQuery() != null) {
                    return uri.getRawPath() + "?" + uri.getRawQuery();
                } else {
                    return uri.getRawPath();
                }
            }
        } };
        for (int i = 0; i < titles.length; i++) {
            final TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
            final TableColumn c = column.getColumn();
            layout.setColumnData(c, layoutData[i]);
            c.setText(titles[i]);
            c.setMoveable(true);
            column.setLabelProvider(providerList[i]);
        }
        final Table table = viewer.getTable();
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
    }

    private IDoubleClickListener createDoubleClickListener() {
        return new IDoubleClickListener() {
            @Override
            public void doubleClick(DoubleClickEvent event) {
                final Object element = ((IStructuredSelection) event.getSelection()).getFirstElement();
                final InterceptView view;
                try {
                    view = (InterceptView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
                            .showView(InterceptView.VIEW_ID);
                } catch (PartInitException e) {
                    ErrorDisplay.displayExceptionError(parentComposite.getShell(), e);
                    return;
                }
                view.openTransaction((IProxyTransaction) element);
            }
        };
    }

}