View Javadoc

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