1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.panels.request.components.editor.views.source;
14
15 import javax.swing.JPopupMenu;
16 import javax.swing.JSeparator;
17
18 import com.eviware.soapui.impl.wsdl.WsdlInterface;
19 import com.eviware.soapui.impl.wsdl.WsdlOperation;
20 import com.eviware.soapui.impl.wsdl.WsdlRequest;
21 import com.eviware.soapui.impl.wsdl.actions.request.AddWSSUsernameTokenAction;
22 import com.eviware.soapui.impl.wsdl.actions.request.AddWSTimestampAction;
23 import com.eviware.soapui.impl.wsdl.mock.WsdlMockResponse;
24 import com.eviware.soapui.impl.wsdl.panels.mockoperation.WsdlMockResponseMessageExchange;
25 import com.eviware.soapui.impl.wsdl.panels.mockoperation.WsdlMockResultMessageExchange;
26 import com.eviware.soapui.impl.wsdl.panels.request.components.editor.XmlEditor;
27 import com.eviware.soapui.impl.wsdl.panels.request.components.editor.XmlEditorView;
28 import com.eviware.soapui.impl.wsdl.panels.request.components.editor.support.ValidationError;
29 import com.eviware.soapui.impl.wsdl.panels.request.components.editor.views.registry.RequestEditorViewFactory;
30 import com.eviware.soapui.impl.wsdl.panels.request.components.editor.views.registry.ResponseEditorViewFactory;
31 import com.eviware.soapui.impl.wsdl.support.MessageExchangeModelItem;
32 import com.eviware.soapui.impl.wsdl.support.wsdl.WsdlValidator;
33 import com.eviware.soapui.impl.wsdl.testcase.WsdlTestRunContext;
34 import com.eviware.soapui.impl.wsdl.teststeps.WsdlResponseMessageExchange;
35 import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequest;
36 import com.eviware.soapui.model.ModelItem;
37 import com.eviware.soapui.model.testsuite.AssertionError;
38 import com.eviware.soapui.support.propertyexpansion.PropertyExpansionPopupListener;
39 import com.eviware.soapui.support.xml.JXEditTextArea;
40
41 /***
42 * Factory for default "XML" source editor view in soapUI
43 *
44 * @author ole.matzura
45 */
46
47 public class XmlSourceEditorFactory implements ResponseEditorViewFactory, RequestEditorViewFactory
48 {
49 public static final String VIEW_ID = "Source";
50
51 public XmlEditorView createEditorView(XmlEditor editor)
52 {
53 return new XmlSourceEditorView( editor );
54 }
55
56 public String getViewId()
57 {
58 return VIEW_ID;
59 }
60
61 public XmlEditorView createRequestEditorView( XmlEditor editor, ModelItem modelItem )
62 {
63 if( modelItem instanceof WsdlRequest )
64 {
65 return new WsdlRequestXmlSourceEditor( editor, ( WsdlRequest ) modelItem );
66 }
67 else if( modelItem instanceof WsdlMockResponse )
68 {
69 return new WsdlMockRequestXmlSourceEditor( editor, ( WsdlMockResponse ) modelItem );
70 }
71 else if( modelItem instanceof MessageExchangeModelItem )
72 {
73 return new XmlSourceEditorView( editor );
74 }
75
76 return null;
77 }
78
79 public XmlEditorView createResponseEditorView( XmlEditor editor, ModelItem modelItem )
80 {
81 if( modelItem instanceof WsdlRequest )
82 {
83 return new WsdlResponseXmlSourceEditor( editor, ( WsdlRequest ) modelItem );
84 }
85 else if( modelItem instanceof WsdlMockResponse )
86 {
87 return new WsdlMockResponseXmlSourceEditor( editor, ( WsdlMockResponse ) modelItem );
88 }
89 else if( modelItem instanceof MessageExchangeModelItem )
90 {
91 return new XmlSourceEditorView( editor );
92 }
93
94 return null;
95 }
96
97 /***
98 * XmlSource editor for a WsdlRequest
99 *
100 * @author ole.matzura
101 */
102
103 public static class WsdlRequestXmlSourceEditor extends XmlSourceEditorView
104 {
105 private final WsdlRequest request;
106
107 public WsdlRequestXmlSourceEditor(XmlEditor xmlEditor, WsdlRequest request )
108 {
109 super(xmlEditor);
110 this.request = request;
111 }
112
113 protected ValidationError[] validateXml( String xml )
114 {
115 WsdlOperation operation = (WsdlOperation) request.getOperation();
116 WsdlValidator validator = new WsdlValidator(((WsdlInterface) operation.getInterface()).getWsdlContext());
117
118 WsdlResponseMessageExchange wsdlResponseMessageExchange = new WsdlResponseMessageExchange( request );
119 wsdlResponseMessageExchange.setRequestContent( xml );
120 return validator.assertRequest( wsdlResponseMessageExchange, false );
121 }
122
123 @Override
124 protected void buildUI()
125 {
126 super.buildUI();
127 PropertyExpansionPopupListener.enable( getInputArea(), request );
128 }
129
130 protected void buildPopup(JPopupMenu inputPopup, JXEditTextArea editArea )
131 {
132 super.buildPopup(inputPopup, editArea );
133
134 inputPopup.insert( new JSeparator(), 2 );
135 inputPopup.insert(new AddWSSUsernameTokenAction(request),3);
136 inputPopup.insert(new AddWSTimestampAction(request),4);
137 }
138
139 public WsdlRequest getRequest()
140 {
141 return request;
142 }
143 }
144
145 /***
146 * XmlSource editor for a WsdlMockRequest
147 *
148 * @author ole.matzura
149 */
150
151 public static class WsdlMockRequestXmlSourceEditor extends XmlSourceEditorView
152 {
153 private final WsdlMockResponse mockResponse;
154
155 public WsdlMockRequestXmlSourceEditor(XmlEditor xmlEditor, WsdlMockResponse mockResponse )
156 {
157 super(xmlEditor);
158 this.mockResponse = mockResponse;
159 }
160
161 protected ValidationError[] validateXml( String xml )
162 {
163 WsdlOperation operation = mockResponse.getMockOperation().getOperation();
164
165 if( operation == null )
166 {
167 return new ValidationError[] { new AssertionError( "Missing operation for MockResponse")};
168 }
169
170 WsdlValidator validator = new WsdlValidator(((WsdlInterface) operation.getInterface()).getWsdlContext());
171 return validator.assertRequest( new WsdlMockResultMessageExchange( mockResponse.getMockResult(), mockResponse ), false );
172 }
173
174 protected void buildPopup(JPopupMenu inputPopup, JXEditTextArea editArea )
175 {
176 super.buildPopup(inputPopup, editArea );
177 inputPopup.insert( new JSeparator(), 2 );
178 }
179 }
180
181 /***
182 * XmlSource editor for a WsdlResponse
183 *
184 * @author ole.matzura
185 */
186
187 public static class WsdlResponseXmlSourceEditor extends XmlSourceEditorView
188 {
189 private final WsdlRequest request;
190
191 public WsdlResponseXmlSourceEditor(XmlEditor xmlEditor, WsdlRequest request )
192 {
193 super(xmlEditor);
194 this.request = request;
195 }
196
197 protected ValidationError[] validateXml( String xml )
198 {
199 if( request instanceof WsdlTestRequest )
200 {
201 WsdlTestRequest testRequest = (WsdlTestRequest)request;
202 testRequest.assertResponse( new WsdlTestRunContext( testRequest.getTestStep() ));
203 }
204
205 WsdlOperation operation = (WsdlOperation)request.getOperation();
206 WsdlValidator validator = new WsdlValidator(((WsdlInterface) operation.getInterface()).getWsdlContext());
207
208 return validator.assertResponse( new WsdlResponseMessageExchange( request ), false );
209 }
210 }
211
212 /***
213 * XmlSource editor for a WsdlMockResponse
214 *
215 * @author ole.matzura
216 */
217
218 public static class WsdlMockResponseXmlSourceEditor extends XmlSourceEditorView
219 {
220 private final WsdlMockResponse mockResponse;
221
222 public WsdlMockResponseXmlSourceEditor(XmlEditor xmlEditor, WsdlMockResponse mockResponse)
223 {
224 super(xmlEditor);
225 this.mockResponse = mockResponse;
226 }
227
228 protected ValidationError[] validateXml( String xml )
229 {
230 WsdlOperation operation = mockResponse.getMockOperation().getOperation();
231 if( operation == null )
232 {
233 return new ValidationError[] { new AssertionError( "Missing operation for MockResponse")};
234 }
235
236 WsdlValidator validator = new WsdlValidator(((WsdlInterface) operation.getInterface()).getWsdlContext());
237 return validator.assertResponse( new WsdlMockResponseMessageExchange( mockResponse ), false );
238 }
239
240 public WsdlMockResponse getMockResponse()
241 {
242 return mockResponse;
243 }
244 }
245 }