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.StringToStringMap;
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 StringToStringMap getHeaders()
138 {
139 MessageExchange messageExchange = getModelItem().getMessageExchange();
140 return messageExchange == null ? new StringToStringMap() : 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 StringToStringMap 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 StringToStringMap();
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 StringToStringMap 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 StringToStringMap();
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 StringToStringMap getHeaders()
188 {
189 MessageExchange messageExchange = getModelItem().getMessageExchange();
190 return messageExchange == null ? new StringToStringMap() : 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 StringToStringMap getHeaders()
208 {
209 return getModelItem().getRequestHeaders();
210 }
211
212 public void setHeaders( StringToStringMap headers )
213 {
214 getModelItem().setRequestHeaders( headers );
215 }
216
217 public void setInspector( AbstractXmlInspector inspector )
218 {
219 this.inspector = inspector;
220 }
221
222 public void propertyChange( PropertyChangeEvent evt )
223 {
224 if( evt.getPropertyName().equals( AbstractHttpRequest.ENDPOINT_PROPERTY ) )
225 {
226 if( inspector != null && request.getEndpoint() != null )
227 {
228 inspector.setEnabled( !request.getEndpoint().startsWith( JMSEndpoint.JMS_ENDPIONT_PREFIX ) );
229 }
230 }
231 super.propertyChange( evt );
232 }
233
234 }
235
236 private class AMFRequestHeadersModel extends AbstractHeadersModel<AMFRequestTestStep>
237 {
238 public AMFRequestHeadersModel( AMFRequestTestStep testStep )
239 {
240 super( false, testStep, AMFRequest.AMF_REQUEST );
241 }
242
243 public StringToStringMap getHeaders()
244 {
245 return getModelItem().getHttpHeaders();
246 }
247
248 public void setHeaders( StringToStringMap headers )
249 {
250 getModelItem().setHttpHeaders( headers );
251 }
252
253 @Override
254 public void release()
255 {
256 super.release();
257 }
258
259 }
260
261 private class AMFResponseHeadersModel extends AbstractHeadersModel<AMFRequestTestStep>
262 {
263 AMFRequestTestStep testStep;
264
265 public AMFResponseHeadersModel( AMFRequestTestStep testStep )
266 {
267 super( true, testStep, AMFResponse.AMF_RESPONSE_HEADERS);
268 this.testStep = testStep;
269 this.testStep.getAMFRequest().addPropertyChangeListener( AMFRequest.AMF_RESPONSE_PROPERTY, this );
270 }
271
272 public StringToStringMap getHeaders()
273 {
274 if( testStep.getAMFRequest().getResponse() != null )
275 {
276 AMFResponse response = testStep.getAMFRequest().getResponse();
277 return response.getResponseHeaders();
278 }
279 else
280 return new StringToStringMap();
281 }
282
283 }
284
285 private class WsdlMockResponseHeadersModel extends AbstractHeadersModel<WsdlMockResponse>
286 {
287 public WsdlMockResponseHeadersModel( WsdlMockResponse request )
288 {
289 super( false, request, WsdlMockResponse.HEADERS_PROPERTY );
290 }
291
292 public StringToStringMap getHeaders()
293 {
294 return getModelItem().getResponseHeaders();
295 }
296
297 public void setHeaders( StringToStringMap headers )
298 {
299 getModelItem().setResponseHeaders( headers );
300 }
301
302 }
303
304 private class WsdlRequestResponseHeadersModel extends AbstractHeadersModel<AbstractHttpRequest<?>>
305 {
306
307 AbstractHttpRequest<?> request;
308 AbstractXmlInspector inspector;
309
310 public WsdlRequestResponseHeadersModel( AbstractHttpRequest<?> request )
311 {
312 super( true, request, WsdlRequest.RESPONSE_PROPERTY );
313 this.request = request;
314 this.request.addPropertyChangeListener( this );
315 }
316
317 public StringToStringMap getHeaders()
318 {
319 AbstractHttpRequestInterface<?> request = getModelItem();
320 return request.getResponse() == null ? new StringToStringMap() : request.getResponse().getResponseHeaders();
321 }
322
323 public void setInspector( AbstractXmlInspector inspector )
324 {
325 this.inspector = inspector;
326 }
327
328 public void propertyChange( PropertyChangeEvent evt )
329 {
330 if( request.getEndpoint() != null && evt.getPropertyName().equals( AbstractHttpRequest.ENDPOINT_PROPERTY ) )
331 {
332 inspector.setEnabled( !request.getEndpoint().startsWith( JMSEndpoint.JMS_ENDPIONT_PREFIX ) );
333 }
334 super.propertyChange( evt );
335 }
336 }
337
338 private class WsdlMockResponseRequestHeadersModel extends AbstractHeadersModel<WsdlMockResponse>
339 {
340 public WsdlMockResponseRequestHeadersModel( WsdlMockResponse request )
341 {
342 super( true, request, WsdlMockResponse.MOCKRESULT_PROPERTY );
343 }
344
345 public StringToStringMap getHeaders()
346 {
347 WsdlMockResponse request = getModelItem();
348 return request.getMockResult() == null ? new StringToStringMap() : request.getMockResult().getMockRequest()
349 .getRequestHeaders();
350 }
351 }
352 }