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.teststeps;
    14
    15  import java.beans.PropertyChangeEvent;
    16  import java.beans.PropertyChangeListener;
    17  import java.util.ArrayList;
    18  import java.util.Iterator;
    19  import java.util.List;
    20
    21  import com.eviware.soapui.SoapUI;
    22  import com.eviware.soapui.config.RequestAssertionConfig;
    23  import com.eviware.soapui.impl.wsdl.support.assertions.Assertable;
    24  import com.eviware.soapui.impl.wsdl.support.assertions.AssertionsListener;
    25  import com.eviware.soapui.impl.wsdl.teststeps.assertions.WsdlAssertionRegistry;
    26
    27  /***
    28   * Utility for implementing the Assertable interface
    29   *
    30   * @author ole.matzura
    31   */
    32
    33  public class AssertionsSupport implements PropertyChangeListener
    34  {
    35  	private List<AssertionsListener> assertionsListeners = new ArrayList<AssertionsListener>();
    36  	private List<WsdlMessageAssertion> assertions = new ArrayList<WsdlMessageAssertion>();
    37  	private final Assertable assertable;
    38
    39  	public AssertionsSupport( Assertable assertable, List<RequestAssertionConfig> assertionList )
    40  	{
    41  		this.assertable = assertable;
    42
    43  		for( RequestAssertionConfig rac : assertionList )
    44  		{
    45  			addWsdlAssertion( rac );
    46  		}
    47  	}
    48
    49  	public WsdlMessageAssertion addWsdlAssertion( RequestAssertionConfig config )
    50  	{
    51  		try
    52  		{
    53  			WsdlMessageAssertion assertion = WsdlAssertionRegistry.getInstance().buildAssertion(
    54  						config, assertable );
    55  			if( assertion == null )
    56  			{
    57  				return null;
    58  			}
    59  			else
    60  			{
    61  				assertions.add( assertion );
    62  				assertion.addPropertyChangeListener( this );
    63
    64  				return assertion;
    65  			}
    66  		}
    67  		catch( Exception e )
    68  		{
    69  			SoapUI.logError( e );
    70  			return null;
    71  		}
    72  	}
    73
    74  	public void propertyChange( PropertyChangeEvent arg0 )
    75  	{
    76  		if( assertable instanceof PropertyChangeListener )
    77  			((PropertyChangeListener)assertable).propertyChange( arg0 );
    78  	}
    79
    80  	public int getAssertionCount()
    81  	{
    82  		return assertions.size();
    83  	}
    84
    85  	public WsdlMessageAssertion getAssertionAt( int c )
    86  	{
    87  		return assertions.get( c );
    88  	}
    89
    90  	public void addAssertionsListener( AssertionsListener listener )
    91  	{
    92  		assertionsListeners.add( listener );
    93  	}
    94
    95  	public void removeAssertionsListener( AssertionsListener listener )
    96  	{
    97  		assertionsListeners.remove( listener );
    98  	}
    99
    100 	public int removeAssertion( WsdlMessageAssertion assertion )
    101 	{
    102 		int ix = assertions.indexOf( assertion );
    103 		if( ix == -1 )
    104 		{
    105 			throw new RuntimeException( "assertion [" + assertion.getName() + "] not available " );
    106 		}
    107
    108 		assertion.removePropertyChangeListener( this );
    109 		assertions.remove( ix );
    110 		fireAssertionRemoved( assertion );
    111
    112 		return ix;
    113 	}
    114
    115 	public void release()
    116 	{
    117 		for( WsdlMessageAssertion assertion : assertions )
    118 			assertion.release();
    119
    120 	}
    121
    122 	public Iterator<WsdlMessageAssertion> iterator()
    123 	{
    124 		return assertions.iterator();
    125 	}
    126
    127 	public void fireAssertionAdded( WsdlMessageAssertion assertion )
    128 	{
    129 		AssertionsListener[] listeners = assertionsListeners
    130 					.toArray( new AssertionsListener[assertionsListeners.size()] );
    131
    132 		for( int c = 0; c < listeners.length; c++ )
    133 		{
    134 			listeners[c].assertionAdded( assertion );
    135 		}
    136 	}
    137
    138 	public void fireAssertionRemoved( WsdlMessageAssertion assertion )
    139 	{
    140 		AssertionsListener[] listeners = assertionsListeners
    141 					.toArray( new AssertionsListener[assertionsListeners.size()] );
    142
    143 		for( int c = 0; c < listeners.length; c++ )
    144 		{
    145 			listeners[c].assertionRemoved( assertion );
    146 		}
    147 	}
    148
    149 	public void updateConfig( List<RequestAssertionConfig> assertionList )
    150 	{
    151 		int mod = 0;
    152
    153       for (int i = 0; i < assertionList.size(); i++)
    154       {
    155          RequestAssertionConfig config = assertionList.get( i );
    156          if( WsdlAssertionRegistry.getInstance().canBuildAssertion( config ))
    157          {
    158          	assertions.get( i-mod ).updateConfig( config );
    159          }
    160          else mod++;
    161       }
    162 	}
    163
    164 //	public WsdlMessageAssertion cloneAssertion( WsdlMessageAssertion source, String name )
    165 //	{
    166 //		RequestAssertionConfig config = ( RequestAssertionConfig ) source.getConfig().copy();
    167 //		config.setName( name );
    168 //		WsdlMessageAssertion assertion = addWsdlAssertion( config );
    169 //		fireAssertionAdded( assertion );
    170 //		return assertion;
    171 //	}
    172 }