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.WsdlSubmitContext;
22 import com.eviware.soapui.impl.wsdl.actions.request.AddWSSUsernameTokenAction;
23 import com.eviware.soapui.impl.wsdl.actions.request.AddWSTimestampAction;
24 import com.eviware.soapui.impl.wsdl.mock.WsdlMockResponse;
25 import com.eviware.soapui.impl.wsdl.panels.mockoperation.WsdlMockResponseMessageExchange;
26 import com.eviware.soapui.impl.wsdl.panels.mockoperation.WsdlMockResultMessageExchange;
27 import com.eviware.soapui.impl.wsdl.panels.request.components.editor.XmlEditor;
28 import com.eviware.soapui.impl.wsdl.panels.request.components.editor.XmlEditorView;
29 import com.eviware.soapui.impl.wsdl.panels.request.components.editor.support.ValidationError;
30 import com.eviware.soapui.impl.wsdl.panels.request.components.editor.views.registry.RequestEditorViewFactory;
31 import com.eviware.soapui.impl.wsdl.panels.request.components.editor.views.registry.ResponseEditorViewFactory;
32 import com.eviware.soapui.impl.wsdl.support.wsdl.WsdlValidator;
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 public class XmlSourceEditorFactory implements ResponseEditorViewFactory, RequestEditorViewFactory
40 {
41 public static final String VIEW_ID = "Source";
42
43 public XmlEditorView createEditorView(XmlEditor editor)
44 {
45 return new XmlSourceEditorView( editor );
46 }
47
48 public String getViewId()
49 {
50 return VIEW_ID;
51 }
52
53 public XmlEditorView createRequestEditorView( XmlEditor editor, ModelItem modelItem )
54 {
55 if( modelItem instanceof WsdlRequest )
56 {
57 return new WsdlRequestXmlSourceEditor( editor, ( WsdlRequest ) modelItem );
58 }
59 else if( modelItem instanceof WsdlMockResponse )
60 {
61 return new WsdlMockRequestXmlSourceEditor( editor, ( WsdlMockResponse ) modelItem );
62 }
63
64 return null;
65 }
66
67 public XmlEditorView createResponseEditorView( XmlEditor editor, ModelItem modelItem )
68 {
69 if( modelItem instanceof WsdlRequest )
70 {
71 return new WsdlResponseXmlSourceEditor( editor, ( WsdlRequest ) modelItem );
72 }
73 else if( modelItem instanceof WsdlMockResponse )
74 {
75 return new WsdlMockResponseXmlSourceEditor( editor, ( WsdlMockResponse ) modelItem );
76 }
77
78 return null;
79 }
80
81 public static class WsdlRequestXmlSourceEditor extends XmlSourceEditorView
82 {
83 private final WsdlRequest request;
84
85 public WsdlRequestXmlSourceEditor(XmlEditor xmlEditor, WsdlRequest request )
86 {
87 super(xmlEditor);
88 this.request = request;
89 }
90
91 protected ValidationError[] validateXml( String xml )
92 {
93 WsdlOperation operation = (WsdlOperation) request.getOperation();
94 WsdlValidator validator = new WsdlValidator(((WsdlInterface) operation.getInterface()).getWsdlContext());
95
96 WsdlResponseMessageExchange wsdlResponseMessageExchange = new WsdlResponseMessageExchange( request );
97 wsdlResponseMessageExchange.setRequestContent( xml );
98 return validator.assertRequest( wsdlResponseMessageExchange, false );
99 }
100
101 protected void buildPopup(JPopupMenu inputPopup, JXEditTextArea editArea )
102 {
103 super.buildPopup(inputPopup, editArea );
104
105 inputPopup.insert( new JSeparator(), 2 );
106 inputPopup.insert(new AddWSSUsernameTokenAction(request),3);
107 inputPopup.insert(new AddWSTimestampAction(request),4);
108 }
109 }
110
111 public static class WsdlMockRequestXmlSourceEditor extends XmlSourceEditorView
112 {
113 private final WsdlMockResponse mockResponse;
114
115 public WsdlMockRequestXmlSourceEditor(XmlEditor xmlEditor, WsdlMockResponse mockResponse )
116 {
117 super(xmlEditor);
118 this.mockResponse = mockResponse;
119 }
120
121 protected ValidationError[] validateXml( String xml )
122 {
123 WsdlOperation operation = mockResponse.getMockOperation().getOperation();
124
125 if( operation == null )
126 {
127 return new ValidationError[] { new AssertionError( "Missing operation for MockResponse")};
128 }
129
130 WsdlValidator validator = new WsdlValidator(((WsdlInterface) operation.getInterface()).getWsdlContext());
131 return validator.assertRequest( new WsdlMockResultMessageExchange( mockResponse.getMockResult() ), false );
132 }
133
134 protected void buildPopup(JPopupMenu inputPopup, JXEditTextArea editArea )
135 {
136 super.buildPopup(inputPopup, editArea );
137 inputPopup.insert( new JSeparator(), 2 );
138 }
139 }
140
141 public static class WsdlResponseXmlSourceEditor extends XmlSourceEditorView
142 {
143 private final WsdlRequest request;
144
145 public WsdlResponseXmlSourceEditor(XmlEditor xmlEditor, WsdlRequest request )
146 {
147 super(xmlEditor);
148 this.request = request;
149 }
150
151 protected ValidationError[] validateXml( String xml )
152 {
153 if( request instanceof WsdlTestRequest )
154 {
155 WsdlTestRequest testRequest = (WsdlTestRequest)request;
156 testRequest.assertResponse( new WsdlSubmitContext( testRequest.getTestStep() ));
157 }
158
159 WsdlOperation operation = (WsdlOperation)request.getOperation();
160 WsdlValidator validator = new WsdlValidator(((WsdlInterface) operation.getInterface()).getWsdlContext());
161
162 return validator.assertResponse( new WsdlResponseMessageExchange( request ), false );
163 }
164 }
165
166 public static class WsdlMockResponseXmlSourceEditor extends XmlSourceEditorView
167 {
168 private final WsdlMockResponse mockResponse;
169
170 public WsdlMockResponseXmlSourceEditor(XmlEditor xmlEditor, WsdlMockResponse mockResponse)
171 {
172 super(xmlEditor);
173 this.mockResponse = mockResponse;
174 }
175
176 protected ValidationError[] validateXml( String xml )
177 {
178 WsdlOperation operation = mockResponse.getMockOperation().getOperation();
179 if( operation == null )
180 {
181 return new ValidationError[] { new AssertionError( "Missing operation for MockResponse")};
182 }
183
184 WsdlValidator validator = new WsdlValidator(((WsdlInterface) operation.getInterface()).getWsdlContext());
185 return validator.assertResponse( new WsdlMockResponseMessageExchange( mockResponse ), false );
186 }
187 }
188 }