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