View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2007 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of version 2.1 of the GNU Lesser General Public License as published by 
6    *  the Free Software Foundation.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
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 }