1
2
3
4
5
6
7
8
9
10
11
12 package com.eviware.soapui.impl.rest.support;
13
14 import java.beans.PropertyChangeEvent;
15 import java.beans.PropertyChangeListener;
16 import java.beans.PropertyChangeSupport;
17 import java.util.ArrayList;
18 import java.util.Collection;
19 import java.util.HashMap;
20 import java.util.HashSet;
21 import java.util.List;
22 import java.util.Map;
23 import java.util.Properties;
24 import java.util.Set;
25
26 import javax.xml.namespace.QName;
27
28 import com.eviware.soapui.model.ModelItem;
29 import com.eviware.soapui.model.propertyexpansion.PropertyExpansion;
30 import com.eviware.soapui.model.testsuite.TestProperty;
31 import com.eviware.soapui.model.testsuite.TestPropertyListener;
32 import com.eviware.soapui.support.types.StringToStringMap;
33
34 public class RestRequestParamsPropertyHolder implements RestParamsPropertyHolder, TestPropertyListener
35 {
36 private StringToStringMap values;
37 private RestParamsPropertyHolder methodParams;
38 private ModelItem modelItem;
39 private Set<TestPropertyListener> listeners = new HashSet<TestPropertyListener>();
40 private Map<RestParamProperty, InternalRestParamProperty> wrappers = new HashMap<RestParamProperty, InternalRestParamProperty>();
41
42 public RestRequestParamsPropertyHolder( RestParamsPropertyHolder methodParams, ModelItem modelItem,
43 StringToStringMap values )
44 {
45 this.methodParams = methodParams;
46 this.modelItem = modelItem;
47 this.values = values;
48
49
50
51
52
53
54 methodParams.addTestPropertyListener( this );
55 }
56
57 public void reset( RestParamsPropertyHolder methodParams, StringToStringMap values )
58 {
59 this.methodParams = methodParams;
60 this.values = values;
61
62 clearWrappers();
63 }
64
65 private void clearWrappers()
66 {
67 for( InternalRestParamProperty property : wrappers.values() )
68 {
69 property.release();
70 }
71
72 wrappers.clear();
73 }
74
75 public RestParamProperty addProperty( String name )
76 {
77 return methodParams.addProperty( name );
78 }
79
80 public void addParameter( RestParamProperty prop )
81 {
82 methodParams.addParameter( prop );
83 }
84
85 public void addTestPropertyListener( TestPropertyListener listener )
86 {
87 listeners.add( listener );
88 }
89
90 public void clear()
91 {
92 for( String key : getPropertyNames() )
93 {
94 String oldValue = getPropertyValue( key );
95 values.put( key, "" );
96 firePropertyValueChanged( key, oldValue, "" );
97 }
98 }
99
100 public boolean containsKey( Object key )
101 {
102 return methodParams.containsKey( key );
103 }
104
105 public boolean containsValue( Object value )
106 {
107 return values.containsValue( value ) || methodParams.containsValue( value );
108 }
109
110 public Set<Entry<String, TestProperty>> entrySet()
111 {
112 Set<Entry<String, TestProperty>> entrySet = methodParams.entrySet();
113 for( Entry<String, TestProperty> entry : entrySet )
114 {
115 entry.setValue( getWrapper( ( RestParamProperty )entry.getValue() ) );
116 }
117 return entrySet;
118 }
119
120 public RestParamProperty get( Object key )
121 {
122 if( !methodParams.containsKey( key ) )
123 return null;
124 return getWrapper( methodParams.get( key ) );
125 }
126
127 public ModelItem getModelItem()
128 {
129 return methodParams.getModelItem();
130 }
131
132 public Map<String, TestProperty> getProperties()
133 {
134 Map<String, TestProperty> map = methodParams.getProperties();
135 for( String key : map.keySet() )
136 {
137 map.put( key, getWrapper( ( RestParamProperty )map.get( key ) ) );
138 }
139 return map;
140 }
141
142 public String getPropertiesLabel()
143 {
144 return methodParams.getPropertiesLabel();
145 }
146
147 public RestParamProperty getProperty( String name )
148 {
149 if( !methodParams.hasProperty( name ) )
150 return null;
151 return getWrapper( methodParams.getProperty( name ) );
152 }
153
154 public RestParamProperty getPropertyAt( int index )
155 {
156 if( methodParams.getPropertyCount() <= index )
157 return null;
158 return getWrapper( methodParams.getPropertyAt( index ) );
159 }
160
161 public int getPropertyCount()
162 {
163 return methodParams.getPropertyCount();
164 }
165
166 public PropertyExpansion[] getPropertyExpansions()
167 {
168 return methodParams.getPropertyExpansions();
169 }
170
171 public int getPropertyIndex( String name )
172 {
173 return methodParams.getPropertyIndex( name );
174 }
175
176 public String[] getPropertyNames()
177 {
178 return methodParams.getPropertyNames();
179 }
180
181 public String getPropertyValue( String name )
182 {
183 return values.containsKey( name ) ? values.get( name ) : methodParams.getPropertyValue( name );
184 }
185
186 public boolean hasProperty( String name )
187 {
188 return methodParams.hasProperty( name );
189 }
190
191 public boolean isEmpty()
192 {
193 return methodParams.isEmpty();
194 }
195
196 public Set<String> keySet()
197 {
198 return methodParams.keySet();
199 }
200
201 public void moveProperty( String propertyName, int targetIndex )
202 {
203 methodParams.moveProperty( propertyName, targetIndex );
204 }
205
206 public TestProperty put( String key, TestProperty value )
207 {
208 if( value.getValue() != null )
209 values.put( key, value.getValue() );
210 else
211 values.remove( key );
212 return get( key );
213 }
214
215 public void putAll( Map<? extends String, ? extends TestProperty> m )
216 {
217
218 for( Entry<? extends String, ? extends TestProperty> e : m.entrySet() )
219 put( e.getKey(), e.getValue() );
220 }
221
222 public TestProperty remove( Object key )
223 {
224 values.remove( key );
225 return methodParams.get( key );
226 }
227
228 public RestParamProperty removeProperty( String propertyName )
229 {
230 values.remove( propertyName );
231 return methodParams.getProperty( propertyName );
232 }
233
234 public void removeTestPropertyListener( TestPropertyListener listener )
235 {
236 listeners.remove( listener );
237 }
238
239 public boolean renameProperty( String name, String newName )
240 {
241 values.put( newName, values.get( name ) );
242 values.remove( name );
243 return methodParams.renameProperty( name, newName );
244 }
245
246 public void resetValues()
247 {
248 values.clear();
249 }
250
251 public void release()
252 {
253 methodParams.removeTestPropertyListener( this );
254 clearWrappers();
255 }
256
257 public void saveTo( Properties props )
258 {
259 int count = getPropertyCount();
260 for( int i = 0; i < count; i++ )
261 {
262 RestParamProperty p = getPropertyAt( i );
263 String name = p.getName();
264 String value = values.containsKey( name ) ? values.get( name ) : p.getValue();
265 if( value == null )
266 value = "";
267
268 props.setProperty( name, value );
269 }
270 }
271
272 public void setPropertiesLabel( String propertiesLabel )
273 {
274
275 }
276
277 public void setPropertyValue( String name, String value )
278 {
279 if( value == null )
280 values.remove( name );
281 else
282 values.put( name, value );
283 }
284
285 public int size()
286 {
287 return methodParams.size();
288 }
289
290 public Collection<TestProperty> values()
291 {
292 List<TestProperty> ret = new ArrayList<TestProperty>();
293 for( TestProperty p : methodParams.values() )
294 {
295 ret.add( getWrapper( ( RestParamProperty )p ) );
296 }
297 return ret;
298 }
299
300 private void firePropertyAdded( String name )
301 {
302 TestPropertyListener[] listenersArray = listeners.toArray( new TestPropertyListener[listeners.size()] );
303 for( TestPropertyListener listener : listenersArray )
304 {
305 listener.propertyAdded( name );
306 }
307 }
308
309 private void firePropertyRemoved( String name )
310 {
311 TestPropertyListener[] listenersArray = listeners.toArray( new TestPropertyListener[listeners.size()] );
312 for( TestPropertyListener listener : listenersArray )
313 {
314 listener.propertyRemoved( name );
315 }
316 }
317
318 private void firePropertyMoved( String name, int oldIndex, int newIndex )
319 {
320 TestPropertyListener[] listenersArray = listeners.toArray( new TestPropertyListener[listeners.size()] );
321 for( TestPropertyListener listener : listenersArray )
322 {
323 listener.propertyMoved( name, oldIndex, newIndex );
324 }
325 }
326
327 private void firePropertyRenamed( String oldName, String newName )
328 {
329 TestPropertyListener[] listenersArray = listeners.toArray( new TestPropertyListener[listeners.size()] );
330 for( TestPropertyListener listener : listenersArray )
331 {
332 listener.propertyRenamed( oldName, newName );
333 }
334 }
335
336 private void firePropertyValueChanged( String name, String oldValue, String newValue )
337 {
338 TestPropertyListener[] listenersArray = listeners.toArray( new TestPropertyListener[listeners.size()] );
339 for( TestPropertyListener listener : listenersArray )
340 {
341 listener.propertyValueChanged( name, oldValue, newValue );
342 }
343 }
344
345 private RestParamProperty getWrapper( RestParamProperty key )
346 {
347 if( !wrappers.containsKey( key ) )
348 {
349 wrappers.put( key, new InternalRestParamProperty( key ) );
350 }
351 return wrappers.get( key );
352 }
353
354 public void propertyAdded( String name )
355 {
356 firePropertyAdded( name );
357 }
358
359 public void propertyMoved( String name, int oldIndex, int newIndex )
360 {
361 firePropertyMoved( name, oldIndex, newIndex );
362 }
363
364 public void propertyRemoved( String name )
365 {
366 values.remove( name );
367 firePropertyRemoved( name );
368 }
369
370 public void propertyRenamed( String oldName, String newName )
371 {
372 if( values.containsKey( oldName ) )
373 {
374 values.put( newName, values.get( oldName ) );
375 values.remove( oldName );
376 }
377 firePropertyRenamed( oldName, newName );
378 }
379
380 public void propertyValueChanged( String name, String oldValue, String newValue )
381 {
382 if( !values.containsKey( name ) )
383 firePropertyValueChanged( name, oldValue, newValue );
384 }
385
386 public class InternalRestParamProperty implements RestParamProperty, PropertyChangeListener
387 {
388 private RestParamProperty overriddenProp;
389 private PropertyChangeSupport propertySupport;
390
391 public InternalRestParamProperty( RestParamProperty override )
392 {
393 overriddenProp = override;
394 overriddenProp.addPropertyChangeListener( this );
395 propertySupport = new PropertyChangeSupport( this );
396 }
397
398 public void addPropertyChangeListener( PropertyChangeListener listener )
399 {
400 propertySupport.addPropertyChangeListener( listener );
401 }
402
403 public void addPropertyChangeListener( String propertyName, PropertyChangeListener listener )
404 {
405 propertySupport.addPropertyChangeListener( propertyName, listener );
406 }
407
408 public boolean isDisableUrlEncoding()
409 {
410 return overriddenProp.isDisableUrlEncoding();
411 }
412
413 public void removePropertyChangeListener( PropertyChangeListener listener )
414 {
415 propertySupport.removePropertyChangeListener( listener );
416 }
417
418 public void removePropertyChangeListener( String propertyName, PropertyChangeListener listener )
419 {
420 propertySupport.removePropertyChangeListener( propertyName, listener );
421 }
422
423 public void setDisableUrlEncoding( boolean encode )
424 {
425
426 }
427
428 public void setName( String name )
429 {
430
431 }
432
433 public String getDefaultValue()
434 {
435 return overriddenProp.getDefaultValue();
436 }
437
438 public String getDescription()
439 {
440 return overriddenProp.getDescription();
441 }
442
443 public ModelItem getModelItem()
444 {
445 return modelItem;
446 }
447
448 public String getName()
449 {
450 return overriddenProp.getName();
451 }
452
453 public QName getType()
454 {
455 return overriddenProp.getType();
456 }
457
458 public String getValue()
459 {
460 if( values.containsKey( getName() ) && values.get( getName() ) != null )
461 return values.get( getName() );
462 return getDefaultValue();
463 }
464
465 public boolean isReadOnly()
466 {
467 return overriddenProp.isReadOnly();
468 }
469
470 public void setValue( String value )
471 {
472 String oldValue = getValue();
473 if( getDefaultValue() != null && getDefaultValue().equals( value ) )
474 value = null;
475 if( value == null )
476 values.remove( getName() );
477 else
478 values.put( getName(), value );
479 firePropertyValueChanged( getName(), oldValue, getValue() );
480 }
481
482 public String[] getOptions()
483 {
484 return overriddenProp.getOptions();
485 }
486
487 public boolean getRequired()
488 {
489 return overriddenProp.getRequired();
490 }
491
492 public ParameterStyle getStyle()
493 {
494 return overriddenProp.getStyle();
495 }
496
497 public void setDefaultValue( String default1 )
498 {
499
500 }
501
502 public void setDescription( String description )
503 {
504
505 }
506
507 public void setOptions( String[] arg0 )
508 {
509
510 }
511
512 public void setRequired( boolean arg0 )
513 {
514
515 }
516
517 public void setStyle( ParameterStyle style )
518 {
519
520 }
521
522 public void setType( QName arg0 )
523 {
524
525 }
526
527 public void propertyChange( PropertyChangeEvent evt )
528 {
529 propertySupport.firePropertyChange( evt );
530 }
531
532 public void release()
533 {
534 overriddenProp.removePropertyChangeListener( this );
535 overriddenProp = null;
536 propertySupport = null;
537 }
538 }
539
540 public List<TestProperty> getPropertyList()
541 {
542 return methodParams.getPropertyList();
543 }
544
545 }