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.wsdl.WsdlValidator;
32 import com.eviware.soapui.impl.wsdl.testcase.WsdlTestRunContext;
33 import com.eviware.soapui.impl.wsdl.teststeps.WsdlResponseMessageExchange;
34 import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequest;
35 import com.eviware.soapui.impl.wsdl.teststeps.assertions.AssertionError;
36 import com.eviware.soapui.model.ModelItem;
37 import com.eviware.soapui.support.xml.JXEditTextArea;
38
39 /***
40 * Factory for default "XML" source editor view in soapUI
41 *
42 * @author ole.matzura
43 */
44
45 public class XmlSourceEditorFactory implements ResponseEditorViewFactory, RequestEditorViewFactory
46 {
47 public static final String VIEW_ID = "Source";
48
49 public XmlEditorView createEditorView(XmlEditor editor)
50 {
51 return new XmlSourceEditorView( editor );
52 }
53
54 public String getViewId()
55 {
56 return VIEW_ID;
57 }
58
59 public XmlEditorView createRequestEditorView( XmlEditor editor, ModelItem modelItem )
60 {
61 if( modelItem instanceof WsdlRequest )
62 {
63 return new WsdlRequestXmlSourceEditor( editor, ( WsdlRequest ) modelItem );
64 }
65 else if( modelItem instanceof WsdlMockResponse )
66 {
67 return new WsdlMockRequestXmlSourceEditor( editor, ( WsdlMockResponse ) modelItem );
68 }
69
70 return null;
71 }
72
73 public XmlEditorView createResponseEditorView( XmlEditor editor, ModelItem modelItem )
74 {
75 if( modelItem instanceof WsdlRequest )
76 {
77 return new WsdlResponseXmlSourceEditor( editor, ( WsdlRequest ) modelItem );
78 }
79 else if( modelItem instanceof WsdlMockResponse )
80 {
81 return new WsdlMockResponseXmlSourceEditor( editor, ( WsdlMockResponse ) modelItem );
82 }
83
84 return null;
85 }
86
87 /***
88 * XmlSource editor for a WsdlRequest
89 *
90 * @author ole.matzura
91 */
92
93 public static class WsdlRequestXmlSourceEditor extends XmlSourceEditorView
94 {
95 private final WsdlRequest request;
96
97 public WsdlRequestXmlSourceEditor(XmlEditor xmlEditor, WsdlRequest request )
98 {
99 super(xmlEditor);
100 this.request = request;
101 }
102
103 protected ValidationError[] validateXml( String xml )
104 {
105 WsdlOperation operation = (WsdlOperation) request.getOperation();
106 WsdlValidator validator = new WsdlValidator(((WsdlInterface) operation.getInterface()).getWsdlContext());
107
108 WsdlResponseMessageExchange wsdlResponseMessageExchange = new WsdlResponseMessageExchange( request );
109 wsdlResponseMessageExchange.setRequestContent( xml );
110 return validator.assertRequest( wsdlResponseMessageExchange, false );
111 }
112
113 protected void buildPopup(JPopupMenu inputPopup, JXEditTextArea editArea )
114 {
115 super.buildPopup(inputPopup, editArea );
116
117 inputPopup.insert( new JSeparator(), 2 );
118 inputPopup.insert(new AddWSSUsernameTokenAction(request),3);
119 inputPopup.insert(new AddWSTimestampAction(request),4);
120 }
121 }
122
123 /***
124 * XmlSource editor for a WsdlMockRequest
125 *
126 * @author ole.matzura
127 */
128
129 public static class WsdlMockRequestXmlSourceEditor extends XmlSourceEditorView
130 {
131 private final WsdlMockResponse mockResponse;
132
133 public WsdlMockRequestXmlSourceEditor(XmlEditor xmlEditor, WsdlMockResponse mockResponse )
134 {
135 super(xmlEditor);
136 this.mockResponse = mockResponse;
137 }
138
139 protected ValidationError[] validateXml( String xml )
140 {
141 WsdlOperation operation = mockResponse.getMockOperation().getOperation();
142
143 if( operation == null )
144 {
145 return new ValidationError[] { new AssertionError( "Missing operation for MockResponse")};
146 }
147
148 WsdlValidator validator = new WsdlValidator(((WsdlInterface) operation.getInterface()).getWsdlContext());
149 return validator.assertRequest( new WsdlMockResultMessageExchange( mockResponse.getMockResult() ), false );
150 }
151
152 protected void buildPopup(JPopupMenu inputPopup, JXEditTextArea editArea )
153 {
154 super.buildPopup(inputPopup, editArea );
155 inputPopup.insert( new JSeparator(), 2 );
156 }
157 }
158
159 /***
160 * XmlSource editor for a WsdlResponse
161 *
162 * @author ole.matzura
163 */
164
165 public static class WsdlResponseXmlSourceEditor extends XmlSourceEditorView
166 {
167 private final WsdlRequest request;
168
169 public WsdlResponseXmlSourceEditor(XmlEditor xmlEditor, WsdlRequest request )
170 {
171 super(xmlEditor);
172 this.request = request;
173 }
174
175 protected ValidationError[] validateXml( String xml )
176 {
177 if( request instanceof WsdlTestRequest )
178 {
179 WsdlTestRequest testRequest = (WsdlTestRequest)request;
180 testRequest.assertResponse( new WsdlTestRunContext( testRequest.getTestStep() ));
181 }
182
183 WsdlOperation operation = (WsdlOperation)request.getOperation();
184 WsdlValidator validator = new WsdlValidator(((WsdlInterface) operation.getInterface()).getWsdlContext());
185
186 return validator.assertResponse( new WsdlResponseMessageExchange( request ), false );
187 }
188 }
189
190 /***
191 * XmlSource editor for a WsdlMockResponse
192 *
193 * @author ole.matzura
194 */
195
196 public static class WsdlMockResponseXmlSourceEditor extends XmlSourceEditorView
197 {
198 private final WsdlMockResponse mockResponse;
199
200 public WsdlMockResponseXmlSourceEditor(XmlEditor xmlEditor, WsdlMockResponse mockResponse)
201 {
202 super(xmlEditor);
203 this.mockResponse = mockResponse;
204 }
205
206 protected ValidationError[] validateXml( String xml )
207 {
208 WsdlOperation operation = mockResponse.getMockOperation().getOperation();
209 if( operation == null )
210 {
211 return new ValidationError[] { new AssertionError( "Missing operation for MockResponse")};
212 }
213
214 WsdlValidator validator = new WsdlValidator(((WsdlInterface) operation.getInterface()).getWsdlContext());
215 return validator.assertResponse( new WsdlMockResponseMessageExchange( mockResponse ), false );
216 }
217 }
218 }