View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2008 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.views.xml.raw;
14  
15  import com.eviware.soapui.impl.support.AbstractHttpRequest;
16  import com.eviware.soapui.impl.wsdl.WsdlRequest;
17  import com.eviware.soapui.impl.wsdl.mock.WsdlMockResponse;
18  import com.eviware.soapui.impl.wsdl.support.MessageExchangeModelItem;
19  import com.eviware.soapui.model.ModelItem;
20  import com.eviware.soapui.model.iface.MessageExchange;
21  import com.eviware.soapui.support.editor.Editor;
22  import com.eviware.soapui.support.editor.EditorView;
23  import com.eviware.soapui.support.editor.registry.RequestEditorViewFactory;
24  import com.eviware.soapui.support.editor.registry.ResponseEditorViewFactory;
25  import com.eviware.soapui.support.editor.xml.XmlDocument;
26  import com.eviware.soapui.support.editor.xml.XmlEditor;
27  import com.eviware.soapui.support.types.StringToStringMap;
28  
29  import java.beans.PropertyChangeEvent;
30  
31  public class RawXmlEditorFactory implements ResponseEditorViewFactory, RequestEditorViewFactory
32  {
33  	public static final String VIEW_ID = "Raw";
34  
35  	public String getViewId()
36  	{
37  		return VIEW_ID;
38  	}
39  
40  	@SuppressWarnings("unchecked")
41  	public EditorView<?> createResponseEditorView( Editor<?> editor, ModelItem modelItem )
42  	{
43  		if( modelItem instanceof MessageExchangeModelItem  )
44  		{
45  			return new WsdlMessageExchangeResponseRawXmlEditor( (MessageExchangeModelItem) modelItem, (XmlEditor) editor );
46  		}
47  		else if( modelItem instanceof AbstractHttpRequest)
48  		{
49  			return new HttpResponseRawXmlEditor( (AbstractHttpRequest) modelItem, (XmlEditor) editor );
50  		}
51  		else if( modelItem instanceof WsdlMockResponse )
52  		{
53  			return new WsdlMockResponseRawXmlEditor( (WsdlMockResponse) modelItem, (XmlEditor) editor );
54  		}
55  
56  		return null;
57  	}
58  
59  	@SuppressWarnings("unchecked")
60  	public EditorView<XmlDocument> createRequestEditorView( Editor<?> editor, ModelItem modelItem )
61  	{
62  		if( modelItem instanceof MessageExchangeModelItem )
63  		{
64  			return new WsdlMessageExchangeRequestRawXmlEditor( (MessageExchangeModelItem) modelItem, (XmlEditor) editor );
65  		}
66  		else if( modelItem instanceof AbstractHttpRequest )
67  		{
68  			return new HttpRequestRawXmlEditor( (AbstractHttpRequest) modelItem, (XmlEditor) editor );
69  		}
70  		else if( modelItem instanceof WsdlMockResponse )
71  		{
72  			return new WsdlMockRequestRawXmlEditor( (WsdlMockResponse) modelItem, (XmlEditor) editor );
73  		}
74  		
75  		return null;
76  	}
77  	
78  	private static class HttpRequestRawXmlEditor extends RawXmlEditor<XmlDocument>
79  	{
80  		private final AbstractHttpRequest request;
81  
82  		public HttpRequestRawXmlEditor( AbstractHttpRequest request, XmlEditor<XmlDocument> editor )
83  		{
84  			super( "Raw", editor, "The actual content of the last submitted request" );
85  			this.request = request;
86  			
87  			request.addPropertyChangeListener( WsdlRequest.RESPONSE_PROPERTY, this );
88  		}
89  
90        @Override
91  		public void propertyChange( PropertyChangeEvent evt )
92  		{
93  			if( evt.getPropertyName().equals( WsdlRequest.RESPONSE_PROPERTY  ))
94  			{
95  				setXml( "" );
96  			}
97  		}
98  
99  		@Override
100 		public String getContent()
101 		{
102          if( request.getResponse() == null || request.getResponse().getRawRequestData() == null )
103             return "";
104          else
105 			   return new String( request.getResponse().getRawRequestData());
106 		}
107 
108 		@Override
109 		public void release()
110 		{
111 			request.removePropertyChangeListener( WsdlRequest.RESPONSE_PROPERTY, this );
112 			super.release();
113 		}
114 	}
115 	
116 	private static class HttpResponseRawXmlEditor extends RawXmlEditor<XmlDocument>
117 	{
118 		private final AbstractHttpRequest request;
119 
120 		public HttpResponseRawXmlEditor( AbstractHttpRequest request, XmlEditor<XmlDocument> editor )
121 		{
122 			super( "Raw", editor, "The actual content of the last received response" );
123 			this.request = request;
124 			
125 			request.addPropertyChangeListener( WsdlRequest.RESPONSE_PROPERTY, this );
126 		}
127 
128       @Override
129 		public void propertyChange( PropertyChangeEvent evt )
130 		{
131 			if( evt.getPropertyName().equals( WsdlRequest.RESPONSE_PROPERTY  ))
132 			{
133 				setXml( "" );
134 			}
135 		}
136 
137 		@Override
138 		public String getContent()
139 		{
140 			if( request.getResponse() == null )
141 				return"<missing response>";
142 			
143 			return new String( request.getResponse().getRawResponseData());
144 		}
145 
146 		@Override
147 		public void release()
148 		{
149 			request.removePropertyChangeListener( WsdlRequest.RESPONSE_PROPERTY, this );
150 			super.release();
151 		}}
152 
153 	private static class WsdlMockRequestRawXmlEditor extends RawXmlEditor<XmlDocument>
154 	{
155 		private final WsdlMockResponse request;
156 
157 		public WsdlMockRequestRawXmlEditor( WsdlMockResponse response, XmlEditor<XmlDocument> editor )
158 		{
159 			super( "Raw", editor, "The actual content of the last received mock request" );
160 			this.request = response;
161 			
162 			response.addPropertyChangeListener( WsdlMockResponse.MOCKRESULT_PROPERTY, this );
163 		}
164 		
165 		@Override
166 		public void propertyChange( PropertyChangeEvent evt )
167 		{
168 			if( evt.getPropertyName().equals( WsdlMockResponse.MOCKRESULT_PROPERTY  ))
169 			{
170 				setXml( "" );
171 			}
172 		}
173 
174 		@Override
175 		public String getContent()
176 		{
177 			if( request.getMockResult() == null )
178 				return"<missing request>";
179 
180 			return buildRawContent( request.getMockResult().getMockRequest().getRequestHeaders(), 
181 						request.getMockResult().getMockRequest().getRawRequestData());
182 		}
183 
184 		@Override
185 		public void release()
186 		{
187 			request.removePropertyChangeListener( WsdlMockResponse.MOCKRESULT_PROPERTY, this );
188 			super.release();
189 		}
190 	}
191 	
192 	private static class WsdlMockResponseRawXmlEditor extends RawXmlEditor<XmlDocument>
193 	{
194 		private final WsdlMockResponse request;
195 
196 		public WsdlMockResponseRawXmlEditor( WsdlMockResponse response, XmlEditor<XmlDocument> editor )
197 		{
198 			super( "Raw", editor, "The actual content of the last returned Mock Response" );
199 			this.request = response;
200 			
201 			response.addPropertyChangeListener( WsdlMockResponse.MOCKRESULT_PROPERTY, this );
202 		}
203 		
204 		@Override
205 		public void propertyChange( PropertyChangeEvent evt )
206 		{
207 			if( evt.getPropertyName().equals( WsdlMockResponse.MOCKRESULT_PROPERTY  ))
208 			{
209 				setXml( "" );
210 			}
211 		}
212 
213 		@Override
214 		public String getContent()
215 		{
216 			if( request.getMockResult() == null )
217 				return"<missing response>";
218 			
219 			StringToStringMap headers = request.getMockResult().getResponseHeaders();
220 			byte[] data = request.getMockResult().getRawResponseData();
221 			
222 			return buildRawContent( headers, data );
223 		}
224 
225 		@Override
226 		public void release()
227 		{
228 			request.removePropertyChangeListener( WsdlMockResponse.MOCKRESULT_PROPERTY, this );
229 			super.release();
230 		}}
231 
232 	private static String buildRawContent( StringToStringMap headers, byte[] data )
233 	{
234 		StringBuffer result = new StringBuffer();
235 		String status = headers.get( "#status#");
236 		if( status != null )
237 			result.append(  status ).append( '\n' );
238 
239 		for( String header : headers.keySet() )
240 		{
241 			if( header.equals( "#status#" ))
242 				continue;
243 
244 			result.append( header ).append( ": ").append( headers.get( header )).append( '\n' );
245 		}
246 		result.append(  '\n' );
247 
248 
249       if( data != null )
250          result.append( new String( data ).trim());
251 		
252 		return result.toString().trim();
253 	}
254 	
255 	private static class WsdlMessageExchangeResponseRawXmlEditor extends RawXmlEditor<XmlDocument>
256 	{
257 		private final MessageExchangeModelItem response;
258 
259 		public WsdlMessageExchangeResponseRawXmlEditor( MessageExchangeModelItem response, XmlEditor<XmlDocument> editor )
260 		{
261 			super( "Raw", editor, "The raw response data" );
262 			this.response = response;
263 		}
264 
265       @Override
266 		public String getContent()
267 		{
268 			MessageExchange me = response.getMessageExchange();
269 			return me == null || me.getRawResponseData() == null ? "" : new String( me.getRawResponseData());
270 		}
271 	}
272 	
273 	private static class WsdlMessageExchangeRequestRawXmlEditor extends RawXmlEditor<XmlDocument>
274 	{
275 		private final MessageExchangeModelItem request;
276 
277 		public WsdlMessageExchangeRequestRawXmlEditor( MessageExchangeModelItem request, XmlEditor<XmlDocument> editor )
278 		{
279 			super( "Raw", editor, "The raw request data" );
280 			this.request = request;
281 		}
282 		
283 		@Override
284 		public String getContent()
285 		{
286 			MessageExchange me = request.getMessageExchange();
287 			return me == null || me.getRawRequestData() == null ? "" : new String( me.getRawRequestData());
288 		}
289 	}
290 }