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