/******************************************************************************* * 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.requestviewer; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.ColumnLayoutData; import org.eclipse.jface.viewers.ColumnPixelData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; 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.part.ViewPart; import com.subgraph.vega.api.model.IModel; import com.subgraph.vega.api.model.IWorkspace; import com.subgraph.vega.api.model.requests.IRequestLog; import com.subgraph.vega.api.model.requests.IRequestLogRecord; import com.subgraph.vega.ui.http.Activator; public class HttpRequestView extends ViewPart { public final static String POPUP_REQUESTS_TABLE = "com.subgraph.vega.ui.http.requestviewer.HttpRequestView.requestView"; private TableViewer tableViewer; private RequestResponseViewer requestResponseViewer; public HttpRequestView() { } @Override public void createPartControl(Composite parent) { parent.setLayout(new FillLayout()); final SashForm form = new SashForm(parent, SWT.VERTICAL); final Composite comp = new Composite(form, SWT.NONE); final TableColumnLayout tcl = new TableColumnLayout(); comp.setLayout(tcl); tableViewer = new TableViewer(comp, SWT.VIRTUAL | SWT.FULL_SELECTION); createColumns(tableViewer, tcl); tableViewer.setContentProvider(new HttpViewContentProviderLazy()); tableViewer.setLabelProvider(new HttpViewLabelProvider()); MenuManager menuManager = new MenuManager(); Menu menu = menuManager.createContextMenu(tableViewer.getTable()); tableViewer.getTable().setMenu(menu); getSite().registerContextMenu(POPUP_REQUESTS_TABLE, menuManager, tableViewer); getSite().setSelectionProvider(tableViewer); tableViewer.setInput(Activator.getDefault().getModel()); requestResponseViewer = new RequestResponseViewer(form); form.setWeights(new int[] {40, 60}); parent.pack(); tableViewer.addSelectionChangedListener(createSelectionChangedListener()); } public void focusOnRecord(long requestId) { final Object inputObj = tableViewer.getInput(); if(!(inputObj instanceof IModel)) { return; } final IModel model = (IModel) inputObj; final IWorkspace workspace = model.getCurrentWorkspace(); if(workspace == null) { return; } final IRequestLog requestLog = workspace.getRequestLog(); final IRequestLogRecord record = requestLog.lookupRecord(requestId); if(record == null) return; tableViewer.setSelection(new StructuredSelection(record), true); requestResponseViewer.setDisplayResponse(); } private void createColumns(TableViewer viewer, TableColumnLayout layout) { final String[] titles = {"ID", "Host", "Method", "Request", "Status", "Length", "Time (ms)", }; final ColumnLayoutData[] layoutData = { new ColumnPixelData(60, true, true), new ColumnPixelData(120, true, true), new ColumnPixelData(60, true, true), new ColumnWeightData(100, 100, true), new ColumnPixelData(50, true, true), new ColumnPixelData(80, true, true), new ColumnPixelData(50, true, true) }; 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); } final Table table = viewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); } private ISelectionChangedListener createSelectionChangedListener() { return new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection selection = (IStructuredSelection) event.getSelection(); if(selection.getFirstElement() instanceof IRequestLogRecord) requestResponseViewer.setCurrentRecord((IRequestLogRecord) selection.getFirstElement()); else requestResponseViewer.setCurrentRecord(null); } }; } @Override public void setFocus() { tableViewer.getControl().setFocus(); } }