1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.support.editor.inspectors.httpheaders;
14
15 import java.beans.PropertyChangeEvent;
16
17 import com.eviware.soapui.impl.support.AbstractHttpRequest;
18 import com.eviware.soapui.impl.support.AbstractHttpRequestInterface;
19 import com.eviware.soapui.impl.wsdl.WsdlRequest;
20 import com.eviware.soapui.impl.wsdl.mock.WsdlMockResponse;
21 import com.eviware.soapui.impl.wsdl.panels.teststeps.amf.AMFRequest;
22 import com.eviware.soapui.impl.wsdl.panels.teststeps.amf.AMFResponse;
23 import com.eviware.soapui.impl.wsdl.submit.transports.jms.JMSEndpoint;
24 import com.eviware.soapui.impl.wsdl.submit.transports.jms.util.JMSUtils;
25 import com.eviware.soapui.impl.wsdl.support.MessageExchangeModelItem;
26 import com.eviware.soapui.impl.wsdl.teststeps.AMFRequestTestStep;
27 import com.eviware.soapui.impl.wsdl.teststeps.AMFTestStepResult;
28 import com.eviware.soapui.model.ModelItem;
29 import com.eviware.soapui.model.iface.MessageExchange;
30 import com.eviware.soapui.support.editor.Editor;
31 import com.eviware.soapui.support.editor.EditorInspector;
32 import com.eviware.soapui.support.editor.inspectors.AbstractXmlInspector;
33 import com.eviware.soapui.support.editor.inspectors.httpheaders.HttpHeadersInspectorModel.AbstractHeadersModel;
34 import com.eviware.soapui.support.editor.registry.RequestInspectorFactory;
35 import com.eviware.soapui.support.editor.registry.ResponseInspectorFactory;
36 import com.eviware.soapui.support.types.StringToStringsMap;
37
38 public class HttpHeadersInspectorFactory implements RequestInspectorFactory, ResponseInspectorFactory
39 {
40 public static final String INSPECTOR_ID = "HTTP Headers";
41
42 public String getInspectorId()
43 {
44 return INSPECTOR_ID;
45 }
46
47 public EditorInspector<?> createRequestInspector( Editor<?> editor, ModelItem modelItem )
48 {
49
50 if( modelItem instanceof AbstractHttpRequestInterface<?> )
51 {
52 HttpHeadersInspector inspector = new HttpHeadersInspector( new WsdlRequestHeadersModel(
53 ( AbstractHttpRequest<?> )modelItem ) );
54 inspector.setEnabled( !JMSUtils.checkIfJMS( modelItem ) );
55 return inspector;
56 }
57 else if( modelItem instanceof WsdlMockResponse )
58 {
59 HttpHeadersInspector inspector = new HttpHeadersInspector( new WsdlMockResponseRequestHeadersModel(
60 ( WsdlMockResponse )modelItem ) );
61 inspector.setEnabled( !JMSUtils.checkIfJMS( modelItem ) );
62 return inspector;
63 }
64 else if( modelItem instanceof MessageExchangeModelItem )
65 {
66 if( ( ( MessageExchangeModelItem )modelItem ).getMessageExchange() instanceof AMFTestStepResult )
67 {
68 HttpHeadersInspector inspector = new HttpHeadersInspector( new AMFMessageExchangeRequestHTTPHeadersModel(
69 ( MessageExchangeModelItem )modelItem ) );
70 inspector.setEnabled( true );
71 return inspector;
72 }
73 HttpHeadersInspector inspector = new HttpHeadersInspector( new WsdlMessageExchangeRequestHeadersModel(
74 ( MessageExchangeModelItem )modelItem ) );
75 inspector.setEnabled( !JMSUtils.checkIfJMS( modelItem ) );
76 return inspector;
77 }
78 else if( modelItem instanceof AMFRequestTestStep )
79 {
80 HttpHeadersInspector inspector = new HttpHeadersInspector( new AMFRequestHeadersModel(
81 ( AMFRequestTestStep )modelItem ) );
82 inspector.setEnabled( !JMSUtils.checkIfJMS( modelItem ) );
83 return inspector;
84 }
85
86 return null;
87 }
88
89 public EditorInspector<?> createResponseInspector( Editor<?> editor, ModelItem modelItem )
90 {
91 if( modelItem instanceof AbstractHttpRequestInterface<?> )
92 {
93 HttpHeadersInspector inspector = new HttpHeadersInspector( new WsdlRequestResponseHeadersModel(
94 ( AbstractHttpRequest<?> )modelItem ) );
95 inspector.setEnabled( !JMSUtils.checkIfJMS( modelItem ) );
96 return inspector;
97 }
98 else if( modelItem instanceof WsdlMockResponse )
99 {
100 HttpHeadersInspector inspector = new HttpHeadersInspector( new WsdlMockResponseHeadersModel(
101 ( WsdlMockResponse )modelItem ) );
102 inspector.setEnabled( !JMSUtils.checkIfJMS( modelItem ) );
103 return inspector;
104 }
105 else if( modelItem instanceof MessageExchangeModelItem )
106 {
107 if( ( ( MessageExchangeModelItem )modelItem ).getMessageExchange() instanceof AMFTestStepResult )
108 {
109 HttpHeadersInspector inspector = new HttpHeadersInspector( new AMFMessageExchangeResponseHTTPHeadersModel(
110 ( MessageExchangeModelItem )modelItem ) );
111 inspector.setEnabled( true );
112 return inspector;
113 }
114 HttpHeadersInspector inspector = new HttpHeadersInspector( new WsdlMessageExchangeResponseHeadersModel(
115 ( MessageExchangeModelItem )modelItem ) );
116 inspector.setEnabled( !JMSUtils.checkIfJMS( modelItem ) );
117 return inspector;
118 }
119 else if( modelItem instanceof AMFRequestTestStep )
120 {
121 HttpHeadersInspector inspector = new HttpHeadersInspector( new AMFResponseHeadersModel(
122 ( AMFRequestTestStep )modelItem ) );
123 inspector.setEnabled( !JMSUtils.checkIfJMS( modelItem ) );
124 return inspector;
125 }
126
127 return null;
128 }
129
130 private class WsdlMessageExchangeRequestHeadersModel extends AbstractHeadersModel<MessageExchangeModelItem>
131 {
132 public WsdlMessageExchangeRequestHeadersModel( MessageExchangeModelItem request )
133 {
134 super( true, request, MessageExchangeModelItem.MESSAGE_EXCHANGE );
135 }
136
137 public StringToStringsMap getHeaders()
138 {
139 MessageExchange messageExchange = getModelItem().getMessageExchange();
140 return messageExchange == null ? new StringToStringsMap() : messageExchange.getRequestHeaders();
141 }
142 }
143
144 private class AMFMessageExchangeRequestHTTPHeadersModel extends AbstractHeadersModel<MessageExchangeModelItem>
145 {
146 public AMFMessageExchangeRequestHTTPHeadersModel( MessageExchangeModelItem request )
147 {
148 super( true, request, MessageExchangeModelItem.MESSAGE_EXCHANGE );
149 }
150
151 public StringToStringsMap getHeaders()
152 {
153 if( getModelItem().getMessageExchange() instanceof AMFTestStepResult )
154 {
155 AMFTestStepResult messageExchange = ( AMFTestStepResult )getModelItem().getMessageExchange();
156 return ( ( AMFRequestTestStep )messageExchange.getTestStep() ).getHttpHeaders();
157 }
158 return new StringToStringsMap();
159 }
160 }
161
162 private class AMFMessageExchangeResponseHTTPHeadersModel extends AbstractHeadersModel<MessageExchangeModelItem>
163 {
164 public AMFMessageExchangeResponseHTTPHeadersModel( MessageExchangeModelItem modelItem )
165 {
166 super( true, modelItem, MessageExchangeModelItem.MESSAGE_EXCHANGE );
167 }
168
169 public StringToStringsMap getHeaders()
170 {
171 if( getModelItem().getMessageExchange() instanceof AMFTestStepResult )
172 {
173 AMFTestStepResult messageExchange = ( AMFTestStepResult )getModelItem().getMessageExchange();
174 return ( ( AMFResponse )messageExchange.getResponse() ).getResponseHeaders();
175 }
176 return new StringToStringsMap();
177 }
178 }
179
180 private class WsdlMessageExchangeResponseHeadersModel extends AbstractHeadersModel<MessageExchangeModelItem>
181 {
182 public WsdlMessageExchangeResponseHeadersModel( MessageExchangeModelItem response )
183 {
184 super( true, response, MessageExchangeModelItem.MESSAGE_EXCHANGE );
185 }
186
187 public StringToStringsMap getHeaders()
188 {
189 MessageExchange messageExchange = getModelItem().getMessageExchange();
190 return messageExchange == null ? new StringToStringsMap() : messageExchange.getResponseHeaders();
191 }
192
193 }
194
195 private class WsdlRequestHeadersModel extends AbstractHeadersModel<AbstractHttpRequest<?>>
196 {
197 AbstractHttpRequest<?> request;
198 AbstractXmlInspector inspector;
199
200 public WsdlRequestHeadersModel( AbstractHttpRequest<?> abstractHttpRequest )
201 {
202 super( false, abstractHttpRequest, AbstractHttpRequestInterface.REQUEST_HEADERS_PROPERTY );
203 this.request = abstractHttpRequest;
204 this.request.addPropertyChangeListener( this );
205 }
206
207 public StringToStringsMap getHeaders()
208 {
209 return getModelItem().getRequestHeaders();
210 }
211
212 public void setHeaders( StringToStringsMap headers )
213 {
214 getModelItem().setRequestHeaders( headers );
215 }
216
217 public void setInspector( AbstractXmlInspector inspector )
218 {
219 this.inspector = inspector;
220 }
221
222 @Override
223 public void release()
224 {
225 super.release();
226 request.removePropertyChangeListener( this );
227 }
228
229 public void propertyChange( PropertyChangeEvent evt )
230 {
231 if( evt.getPropertyName().equals( AbstractHttpRequest.ENDPOINT_PROPERTY ) )
232 {
233 if( inspector != null && request.getEndpoint() != null )
234 {
235 inspector.setEnabled( !request.getEndpoint().startsWith( JMSEndpoint.JMS_ENDPIONT_PREFIX ) );
236 }
237 }
238 super.propertyChange( evt );
239 }
240
241 }
242
243 private class AMFRequestHeadersModel extends AbstractHeadersModel<AMFRequestTestStep>
244 {
245 public AMFRequestHeadersModel( AMFRequestTestStep testStep )
246 {
247 super( false, testStep, AMFRequest.AMF_REQUEST );
248 }
249
250 public StringToStringsMap getHeaders()
251 {
252 return getModelItem().getHttpHeaders();
253 }
254
255 public void setHeaders( StringToStringsMap headers )
256 {
257 getModelItem().setHttpHeaders( headers );
258 }
259
260 @Override
261 public void release()
262 {
263 super.release();
264 }
265
266 }
267
268 private class AMFResponseHeadersModel extends AbstractHeadersModel<AMFRequestTestStep>
269 {
270 AMFRequestTestStep testStep;
271
272 public AMFResponseHeadersModel( AMFRequestTestStep testStep )
273 {
274 super( true, testStep, AMFResponse.AMF_RESPONSE_HEADERS );
275 this.testStep = testStep;
276 this.testStep.getAMFRequest().addPropertyChangeListener( AMFRequest.AMF_RESPONSE_PROPERTY, this );
277 }
278
279 public StringToStringsMap getHeaders()
280 {
281 if( testStep.getAMFRequest().getResponse() != null )
282 {
283 AMFResponse response = testStep.getAMFRequest().getResponse();
284 return response.getResponseHeaders();
285 }
286 else
287 return new StringToStringsMap();
288 }
289
290 @Override
291 public void release()
292 {
293 super.release();
294 testStep.getAMFRequest().removePropertyChangeListener( AMFRequest.AMF_RESPONSE_PROPERTY, this );
295 }
296 }
297
298 private class WsdlMockResponseHeadersModel extends AbstractHeadersModel<WsdlMockResponse>
299 {
300 public WsdlMockResponseHeadersModel( WsdlMockResponse request )
301 {
302 super( false, request, WsdlMockResponse.HEADERS_PROPERTY );
303 }
304
305 public StringToStringsMap getHeaders()
306 {
307 return getModelItem().getResponseHeaders();
308 }
309
310 public void setHeaders( StringToStringsMap headers )
311 {
312 getModelItem().setResponseHeaders( headers );
313 }
314
315 }
316
317 private class WsdlRequestResponseHeadersModel extends AbstractHeadersModel<AbstractHttpRequest<?>>
318 {
319
320 AbstractHttpRequest<?> request;
321 AbstractXmlInspector inspector;
322
323 public WsdlRequestResponseHeadersModel( AbstractHttpRequest<?> request )
324 {
325 super( true, request, WsdlRequest.RESPONSE_PROPERTY );
326 this.request = request;
327 this.request.addPropertyChangeListener( this );
328 }
329
330 public StringToStringsMap getHeaders()
331 {
332 AbstractHttpRequestInterface<?> request = getModelItem();
333 return request.getResponse() == null ? new StringToStringsMap() : request.getResponse().getResponseHeaders();
334 }
335
336 public void setInspector( AbstractXmlInspector inspector )
337 {
338 this.inspector = inspector;
339 }
340
341 public void propertyChange( PropertyChangeEvent evt )
342 {
343 if( request.getEndpoint() != null && evt.getPropertyName().equals( AbstractHttpRequest.ENDPOINT_PROPERTY ) )
344 {
345 inspector.setEnabled( !request.getEndpoint().startsWith( JMSEndpoint.JMS_ENDPIONT_PREFIX ) );
346 }
347 super.propertyChange( evt );
348 }
349
350 @Override
351 public void release()
352 {
353 super.release();
354
355 request.removePropertyChangeListener( this );
356 }
357 }
358
359 private class WsdlMockResponseRequestHeadersModel extends AbstractHeadersModel<WsdlMockResponse>
360 {
361 public WsdlMockResponseRequestHeadersModel( WsdlMockResponse request )
362 {
363 super( true, request, WsdlMockResponse.MOCKRESULT_PROPERTY );
364 }
365
366 public StringToStringsMap getHeaders()
367 {
368 WsdlMockResponse request = getModelItem();
369 return request.getMockResult() == null ? new StringToStringsMap() : request.getMockResult().getMockRequest()
370 .getRequestHeaders();
371 }
372 }
373 }