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.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 }