1 /**********************************************************************
2 * Copyright (c) 2003 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Common Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/cpl-v10.html
9 * IBM - Initial API and implementation
10 **********************************************************************/
11 package net.sourceforge.phpdt.monitor.ui.internal.view;
13 import java.util.ArrayList;
14 import java.util.Iterator;
15 import java.util.List;
17 import net.sourceforge.phpdt.monitor.core.IContentFilter;
18 import net.sourceforge.phpdt.monitor.core.IRequest;
19 import net.sourceforge.phpdt.monitor.ui.IContentViewer;
20 import net.sourceforge.phpdt.monitor.ui.internal.MonitorUIPlugin;
21 import net.sourceforge.phpdt.monitor.ui.internal.Trace;
22 import net.sourceforge.phpdt.monitor.ui.internal.viewers.ByteViewer;
23 import net.sourceforge.phpdt.monitor.ui.internal.viewers.HeaderViewer;
25 import org.eclipse.core.runtime.CoreException;
26 import org.eclipse.core.runtime.IConfigurationElement;
27 import org.eclipse.core.runtime.IExtensionRegistry;
28 import org.eclipse.core.runtime.Platform;
29 import org.eclipse.swt.widgets.Composite;
34 public class ViewerManager implements IViewerManager {
35 private boolean displayHeaderInf;
36 protected IContentViewer reqViewer;
37 protected IContentViewer respViewer;
38 protected HeaderViewer reqHeader;
39 protected HeaderViewer respHeader;
41 protected Composite reqHComp;
42 protected Composite reqVComp;
43 protected Composite respHComp;
44 protected Composite respVComp;
46 protected List viewers;
47 protected IRequest request;
48 protected List filters = new ArrayList();
50 public ViewerManager(Composite reqHeadParent, Composite reqViewParent, Composite respHeadParent, Composite respViewParent) {
51 reqHComp = reqHeadParent;
52 respHComp = respHeadParent;
53 reqVComp = reqViewParent;
54 respVComp = respViewParent;
55 reqHeader = new HeaderViewer(reqHComp, HeaderViewer.REQUEST_HEADER);
56 respHeader = new HeaderViewer(respHComp, HeaderViewer.RESPONSE_HEADER);
57 reqViewer = new ByteViewer();
58 reqViewer.init(reqVComp);
59 respViewer = new ByteViewer();
60 respViewer.init(respVComp);
61 setDisplayHeaderInfo(MonitorUIPlugin.getShowHeaderPreference());
62 setAvailableViewers();
65 private void setAvailableViewers() {
66 IExtensionRegistry registry = Platform.getExtensionRegistry();
67 IConfigurationElement[] cf = registry.getConfigurationElementsFor(MonitorUIPlugin.PLUGIN_ID, "viewers");
70 viewers = new ArrayList(size);
71 for (int i = 0; i < size; i++) {
77 * @see org.eclipse.monitor.internal.view.IViewerManager#hideHeader()
79 /*public void hideHeader() {
80 displayHeaderInf = false;
81 if (!reqHeader.isHidden())
82 reqHeader.hideViewer();
83 if (!respHeader.isHidden())
84 respHeader.hideViewer();
88 * @see org.eclipse.monitor.internal.view.IViewerManager#showHeader()
90 /*public void showHeader() {
91 if (reqHeader.isHidden())
92 reqHeader.showViewer();
93 if (respHeader.isHidden())
94 respHeader.showViewer();
98 * @see org.eclipse.monitor.internal.view.IViewerManager#setDisplayHeaderInfo(boolean)
100 public void setDisplayHeaderInfo(boolean b) {
101 displayHeaderInf = b;
102 reqHeader.setDisplayHeader(b);
103 respHeader.setDisplayHeader(b);
104 MonitorUIPlugin.setShowHeaderPreference(b);
108 * @see org.eclipse.monitor.internal.view.IViewerManager#getDisplayHeaderInfo()
110 public boolean getDisplayHeaderInfo() {
111 return displayHeaderInf;
114 public void setRequest(IRequest rr) {
115 reqHeader.setRequestResponse(rr);
116 respHeader.setRequestResponse(rr);
120 b = filter(rr.getRequest(IRequest.CONTENT));
121 reqViewer.setContent(b);
125 b = filter(rr.getResponse(IRequest.CONTENT));
126 respViewer.setContent(b);
131 public void addFilter(IContentFilter filter) {
136 public void removeFilter(IContentFilter filter) {
137 filters.remove(filter);
141 protected byte[] filter(byte[] b) {
145 Iterator iterator = filters.iterator();
146 while (iterator.hasNext()) {
147 IContentFilter filter = (IContentFilter) iterator.next();
149 b = filter.filter(request, false, b);
150 } catch (Exception e) {
151 Trace.trace(Trace.SEVERE, "Error while filtering with " + filter.getId(), e);
158 * @see org.eclipse.tcpip.monitor.internal.view.IViewerManager#getRequestViewers()
160 public List getRequestViewers() {
161 IConfigurationElement element;
162 Iterator iterator = viewers.iterator();
163 List temp = new ArrayList();
165 while (iterator.hasNext()) {
166 element = (IConfigurationElement) iterator.next();
167 if (element.getAttribute("type").toLowerCase().indexOf("request") >= 0)
174 * @see org.eclipse.tcpip.monitor.internal.view.IViewerManager#getResponseViewers()
176 public List getResponseViewers() {
177 IConfigurationElement element;
178 Iterator iterator = viewers.iterator();
179 List temp = new ArrayList();
181 while (iterator.hasNext()) {
182 element = (IConfigurationElement) iterator.next();
183 if (element.getAttribute("type").toLowerCase().indexOf("response") >= 0)
190 * @see org.eclipse.tcpip.monitor.internal.view.IViewerManager#setRequestViewer(java.lang.String)
192 public void setRequestViewer(IConfigurationElement element) {
195 reqViewer = (IContentViewer) element.createExecutableExtension("class");
196 } catch (CoreException e) {
197 Trace.trace(Trace.SEVERE, "Error", e);
199 reqViewer.init(reqVComp);
200 //reqViewer.setRequestResponse(rr);
203 b = filter(request.getRequest(IRequest.CONTENT));
204 reqViewer.setContent(b);
205 reqVComp.layout(true);
209 * @see org.eclipse.tcpip.monitor.internal.view.IViewerManager#setResponseViewer(java.lang.String)
211 public void setResponseViewer(IConfigurationElement element) {
212 respViewer.dispose();
214 respViewer = (IContentViewer) element.createExecutableExtension("class");
215 } catch (CoreException e){
216 Trace.trace(Trace.SEVERE, "Error", e);
218 respViewer.init(respVComp);
219 //respViewer.setRequestResponse(rr);
222 b = filter(request.getResponse(IRequest.CONTENT));
223 respViewer.setContent(b);
224 respVComp.layout(true);