View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2010 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of version 2.1 of the GNU Lesser General Public License as published by 
6    *  the Free Software Foundation.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
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 }