inital plugin from webtools project
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.monitor.ui / src / net / sourceforge / phpdt / monitor / ui / internal / view / ViewerManager.java
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
7  *
8  * Contributors:
9  *    IBM - Initial API and implementation
10  **********************************************************************/
11 package net.sourceforge.phpdt.monitor.ui.internal.view;
12
13 import java.util.ArrayList;
14 import java.util.Iterator;
15 import java.util.List;
16
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;
24
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;
30
31 /**
32  * 
33  */
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;
40         
41         protected Composite reqHComp;
42         protected Composite reqVComp;
43         protected Composite respHComp;
44         protected Composite respVComp;
45         
46         protected List viewers;
47         protected IRequest request;
48         protected List filters = new ArrayList();
49
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();
63         }
64
65         private void setAvailableViewers() {
66                 IExtensionRegistry registry = Platform.getExtensionRegistry();
67                 IConfigurationElement[] cf = registry.getConfigurationElementsFor(MonitorUIPlugin.PLUGIN_ID, "viewers");
68
69                 int size = cf.length;
70                 viewers = new ArrayList(size);
71                 for (int i = 0; i < size; i++) {
72                         viewers.add(cf[i]);
73                 }
74         }
75         
76         /* (non-Javadoc)
77          * @see org.eclipse.monitor.internal.view.IViewerManager#hideHeader()
78          */
79         /*public void hideHeader() {
80                 displayHeaderInf = false;
81                 if (!reqHeader.isHidden())
82                         reqHeader.hideViewer();
83                 if (!respHeader.isHidden())
84                         respHeader.hideViewer();
85         }*/
86         
87         /* (non-Javadoc)
88          * @see org.eclipse.monitor.internal.view.IViewerManager#showHeader()
89          */
90         /*public void showHeader() {
91                 if (reqHeader.isHidden())
92                         reqHeader.showViewer();
93                 if (respHeader.isHidden())
94                         respHeader.showViewer();
95         }*/
96
97         /* (non-Javadoc)
98          * @see org.eclipse.monitor.internal.view.IViewerManager#setDisplayHeaderInfo(boolean)
99          */
100         public void setDisplayHeaderInfo(boolean b) {
101                 displayHeaderInf = b;
102                 reqHeader.setDisplayHeader(b);
103                 respHeader.setDisplayHeader(b);
104                 MonitorUIPlugin.setShowHeaderPreference(b);
105         }
106
107         /* (non-Javadoc)
108          * @see org.eclipse.monitor.internal.view.IViewerManager#getDisplayHeaderInfo()
109          */
110         public boolean getDisplayHeaderInfo() {
111                 return displayHeaderInf;
112         }
113         
114         public void setRequest(IRequest rr) {
115                 reqHeader.setRequestResponse(rr);
116                 respHeader.setRequestResponse(rr);
117                 
118                 byte[] b = null;
119                 if (rr != null)
120                         b = filter(rr.getRequest(IRequest.CONTENT));
121                 reqViewer.setContent(b);
122                 
123                 b = null;
124                 if (rr != null)
125                         b = filter(rr.getResponse(IRequest.CONTENT));
126                 respViewer.setContent(b);
127                 
128                 request = rr;
129         }
130         
131         public void addFilter(IContentFilter filter) {
132                 filters.add(filter);
133                 setRequest(request);
134         }
135         
136         public void removeFilter(IContentFilter filter) {
137                 filters.remove(filter);
138                 setRequest(request);
139         }
140         
141         protected byte[] filter(byte[] b) {
142                 if (b == null)
143                         return null;
144                 
145                 Iterator iterator = filters.iterator();
146                 while (iterator.hasNext()) {
147                         IContentFilter filter = (IContentFilter) iterator.next();
148                         try {
149                                 b = filter.filter(request, false, b);
150                         } catch (Exception e) {
151                                 Trace.trace(Trace.SEVERE, "Error while filtering with " + filter.getId(), e);
152                         }
153                 }
154                 return b;
155         }
156
157         /* (non-Javadoc)
158          * @see org.eclipse.tcpip.monitor.internal.view.IViewerManager#getRequestViewers()
159          */
160         public List getRequestViewers() {
161                 IConfigurationElement element;
162                 Iterator iterator = viewers.iterator();
163                 List temp = new ArrayList();
164                 
165                 while (iterator.hasNext()) {
166                         element = (IConfigurationElement) iterator.next();
167                         if (element.getAttribute("type").toLowerCase().indexOf("request") >= 0)
168                                 temp.add(element);
169                 }
170                 return temp;
171         }
172
173         /* (non-Javadoc)
174          * @see org.eclipse.tcpip.monitor.internal.view.IViewerManager#getResponseViewers()
175          */
176         public List getResponseViewers() {
177                 IConfigurationElement element;
178                 Iterator iterator = viewers.iterator();
179                 List temp = new ArrayList();
180                 
181                 while (iterator.hasNext()) {
182                         element = (IConfigurationElement) iterator.next();
183                         if (element.getAttribute("type").toLowerCase().indexOf("response") >= 0)
184                                 temp.add(element);
185                 }
186                 return temp;
187         }
188
189         /* (non-Javadoc)
190          * @see org.eclipse.tcpip.monitor.internal.view.IViewerManager#setRequestViewer(java.lang.String)
191          */
192         public void setRequestViewer(IConfigurationElement element) {
193                 reqViewer.dispose();
194                 try {
195                         reqViewer = (IContentViewer) element.createExecutableExtension("class");
196                 } catch (CoreException e) {
197                         Trace.trace(Trace.SEVERE, "Error", e);
198                 }
199                 reqViewer.init(reqVComp);
200                 //reqViewer.setRequestResponse(rr);
201                 byte[] b = null;
202                 if (request != null)
203                         b = filter(request.getRequest(IRequest.CONTENT));
204                 reqViewer.setContent(b);
205                 reqVComp.layout(true);
206         }
207
208         /* (non-Javadoc)
209          * @see org.eclipse.tcpip.monitor.internal.view.IViewerManager#setResponseViewer(java.lang.String)
210          */
211         public void setResponseViewer(IConfigurationElement element) {
212                 respViewer.dispose();
213                 try {
214                         respViewer = (IContentViewer) element.createExecutableExtension("class");
215                 } catch (CoreException e){
216                         Trace.trace(Trace.SEVERE, "Error", e);
217                 }
218                 respViewer.init(respVComp);
219                 //respViewer.setRequestResponse(rr);
220                 byte[] b = null;
221                 if (request != null)
222                         b = filter(request.getResponse(IRequest.CONTENT));
223                 respViewer.setContent(b);
224                 respVComp.layout(true);
225         }
226 }