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