View Javadoc

1   /*
2    *  soapUI, copyright (C) 2006 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of the GNU Lesser General Public License as published by the Free Software Foundation; 
6    *  either version 2.1 of the License, or (at your option) any later version.
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.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 }