1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.teststeps;
14
15 import javax.swing.ImageIcon;
16
17 import org.apache.xmlbeans.XmlObject;
18
19 import com.eviware.soapui.config.RequestAssertionConfig;
20 import com.eviware.soapui.impl.wsdl.submit.WsdlMessageExchange;
21 import com.eviware.soapui.impl.wsdl.support.assertions.Assertable;
22 import com.eviware.soapui.impl.wsdl.support.assertions.Assertable.AssertionStatus;
23 import com.eviware.soapui.impl.wsdl.teststeps.assertions.AssertionError;
24 import com.eviware.soapui.impl.wsdl.teststeps.assertions.AssertionException;
25 import com.eviware.soapui.impl.wsdl.teststeps.assertions.WsdlAssertionRegistry;
26 import com.eviware.soapui.model.iface.SubmitContext;
27 import com.eviware.soapui.model.settings.Settings;
28 import com.eviware.soapui.model.support.AbstractModelItem;
29 import com.eviware.soapui.support.UISupport;
30
31 /***
32 * Base class for WsdlAssertions
33 *
34 * @author Ole.Matzura
35 */
36
37 public abstract class WsdlMessageAssertion extends AbstractModelItem
38 {
39 private RequestAssertionConfig assertionConfig;
40 private final Assertable assertable;
41 private AssertionStatus assertionStatus = AssertionStatus.UNKNOWN;
42 private com.eviware.soapui.impl.wsdl.teststeps.assertions.AssertionError [] assertionErrors;
43 private ImageIcon validIcon;
44 private ImageIcon failedIcon;
45 private ImageIcon unknownIcon;
46
47 public final static String STATUS_PROPERTY = WsdlMessageAssertion.class.getName() + "@status";
48 public final static String ERRORS_PROPERTY = WsdlMessageAssertion.class.getName() + "@errors";
49 public final static String CONFIGURATION_PROPERTY = WsdlMessageAssertion.class.getName() + "@configuration";
50 private final boolean cloneable;
51 private final boolean configurable;
52 private final boolean allowMultiple;
53
54 protected WsdlMessageAssertion(RequestAssertionConfig assertionConfig, Assertable modelItem,
55 boolean cloneable, boolean configurable, boolean multiple )
56 {
57 this.assertionConfig = assertionConfig;
58 this.assertable = modelItem;
59 this.cloneable = cloneable;
60 this.configurable = configurable;
61 this.allowMultiple = multiple;
62
63 validIcon = UISupport.createImageIcon("/valid_assertion.gif");
64 failedIcon = UISupport.createImageIcon("/failed_assertion.gif");
65 unknownIcon = UISupport.createImageIcon("/unknown_assertion.gif");
66 }
67
68 public XmlObject getConfiguration()
69 {
70 if( null == assertionConfig.getConfiguration())
71 {
72 assertionConfig.addNewConfiguration();
73 }
74
75 return assertionConfig.getConfiguration();
76 }
77
78 public void setConfiguration( XmlObject configuration )
79 {
80 XmlObject oldConfig = assertionConfig.getConfiguration();
81 assertionConfig.setConfiguration( configuration );
82 notifyPropertyChanged( WsdlMessageAssertion.CONFIGURATION_PROPERTY, oldConfig, configuration );
83 }
84
85 public String getName()
86 {
87 return assertionConfig.isSetName() ? assertionConfig.getName() :
88 WsdlAssertionRegistry.getInstance().getAssertionNameForType( assertionConfig.getType());
89 }
90
91 public void setName(String name)
92 {
93 String old = getName();
94 assertionConfig.setName( name );
95 notifyPropertyChanged( NAME_PROPERTY, old, name );
96 }
97
98 public AssertionStatus getStatus()
99 {
100 return assertionStatus;
101 }
102
103 public AssertionError[] getErrors()
104 {
105 return assertionErrors;
106 }
107
108 public boolean isAllowMultiple()
109 {
110 return allowMultiple;
111 }
112
113 public AssertionStatus assertResponse( WsdlMessageExchange messageExchange, SubmitContext context)
114 {
115 AssertionStatus oldStatus = assertionStatus;
116 AssertionError[] oldErrors = getErrors();
117 ImageIcon oldIcon = getIcon();
118
119 if( !messageExchange.hasResponse() )
120 {
121 if( messageExchange.getOperation().isOneWay() )
122 {
123 assertionStatus = AssertionStatus.VALID;
124 assertionErrors = null;
125 }
126 else
127 {
128 assertionStatus = AssertionStatus.FAILED;
129 assertionErrors = new com.eviware.soapui.impl.wsdl.teststeps.assertions.AssertionError[]
130 { new com.eviware.soapui.impl.wsdl.teststeps.assertions.AssertionError("null/empty response") };
131 }
132 }
133 else
134 {
135 try
136 {
137 internalAssertResponse( messageExchange, context );
138 assertionStatus = AssertionStatus.VALID;
139 assertionErrors = null;
140 }
141 catch ( AssertionException e )
142 {
143 assertionStatus = AssertionStatus.FAILED;
144 assertionErrors = e.getErrors();
145 }
146 catch (Throwable e)
147 {
148 assertionStatus = AssertionStatus.FAILED;
149 assertionErrors = new com.eviware.soapui.impl.wsdl.teststeps.assertions.AssertionError[]
150 { new com.eviware.soapui.impl.wsdl.teststeps.assertions.AssertionError( e.getMessage() )};
151 }
152 }
153
154 notifyPropertyChanged( STATUS_PROPERTY, oldStatus, assertionStatus );
155 notifyPropertyChanged( ERRORS_PROPERTY, oldErrors, assertionErrors );
156 notifyPropertyChanged( ICON_PROPERTY, oldIcon, getIcon() );
157
158 return assertionStatus;
159 }
160
161 protected abstract String internalAssertResponse(WsdlMessageExchange messageExchange, SubmitContext context ) throws AssertionException;
162
163 public AssertionStatus assertRequest( WsdlMessageExchange messageExchange, SubmitContext context)
164 {
165 AssertionStatus oldStatus = assertionStatus;
166 ImageIcon oldIcon = getIcon();
167
168 if( !messageExchange.hasRequest( true ) )
169 {
170 assertionStatus = AssertionStatus.FAILED;
171 assertionErrors = new com.eviware.soapui.impl.wsdl.teststeps.assertions.AssertionError[]
172 { new com.eviware.soapui.impl.wsdl.teststeps.assertions.AssertionError("null/empty response") };
173 }
174 else
175 {
176 try
177 {
178 internalAssertRequest( messageExchange, context );
179 assertionStatus = AssertionStatus.VALID;
180 assertionErrors = null;
181 }
182 catch ( AssertionException e )
183 {
184 assertionStatus = AssertionStatus.FAILED;
185 assertionErrors = e.getErrors();
186 }
187 catch (Throwable e)
188 {
189 assertionStatus = AssertionStatus.FAILED;
190 assertionErrors = new com.eviware.soapui.impl.wsdl.teststeps.assertions.AssertionError[]
191 { new com.eviware.soapui.impl.wsdl.teststeps.assertions.AssertionError( e.getMessage() )};
192 }
193 }
194
195 notifyPropertyChanged( STATUS_PROPERTY, oldStatus, assertionStatus );
196 notifyPropertyChanged( ICON_PROPERTY, oldIcon, getIcon() );
197
198 return assertionStatus;
199 }
200
201 protected abstract String internalAssertRequest(WsdlMessageExchange messageExchange, SubmitContext context ) throws AssertionException;
202
203 public boolean isConfigurable()
204 {
205 return configurable;
206 }
207
208 public boolean isClonable()
209 {
210 return cloneable;
211 }
212
213 public boolean configure()
214 {
215 return true;
216 }
217
218 public String getDescription()
219 {
220 return getConfig().getDescription();
221 }
222
223 public ImageIcon getIcon()
224 {
225 switch( getStatus() )
226 {
227 case FAILED : return failedIcon;
228 case UNKNOWN : return unknownIcon;
229 case VALID : return validIcon;
230 }
231
232 return null;
233 }
234
235 public void updateConfig(RequestAssertionConfig config)
236 {
237 this.assertionConfig = config;
238 }
239
240 public RequestAssertionConfig getConfig()
241 {
242 return assertionConfig;
243 }
244
245 public Settings getSettings()
246 {
247 return assertable.getTestStep().getSettings();
248 }
249
250 public void release()
251 {
252 }
253
254 public Assertable getAssertable()
255 {
256 return assertable;
257 }
258 }
259
260