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.loadtest.assertions;
14  
15  import java.lang.reflect.Constructor;
16  import java.lang.reflect.InvocationTargetException;
17  import java.util.HashMap;
18  import java.util.Map;
19  
20  import org.apache.log4j.Logger;
21  
22  import com.eviware.soapui.SoapUI;
23  import com.eviware.soapui.config.LoadTestAssertionConfig;
24  import com.eviware.soapui.impl.wsdl.loadtest.LoadTestAssertion;
25  import com.eviware.soapui.impl.wsdl.loadtest.WsdlLoadTest;
26  
27  /***
28   * Registry for available LoadTestAssertions
29   * 
30   * @author Ole.Matzura
31   */
32  
33  public class LoadTestAssertionRegistry
34  {
35     private static LoadTestAssertionRegistry instance;
36  	private Map<String,Class<? extends AbstractLoadTestAssertion> > availableAssertions = new HashMap<String,Class<? extends AbstractLoadTestAssertion> >();
37  	private final static Logger logger = Logger.getLogger( LoadTestAssertionRegistry.class );
38  
39  	public LoadTestAssertionRegistry()
40  	{
41        availableAssertions.put( TestStepAverageAssertion.STEP_AVERAGE_TYPE, TestStepAverageAssertion.class );
42        availableAssertions.put( TestStepTpsAssertion.STEP_TPS_TYPE, TestStepTpsAssertion.class );
43        availableAssertions.put( TestStepMaxAssertion.STEP_MAXIMUM_TYPE, TestStepMaxAssertion.class );
44        availableAssertions.put( TestStepStatusAssertion.STEP_STATUS_TYPE, TestStepStatusAssertion.class );
45        availableAssertions.put( MaxErrorsAssertion.MAX_ERRORS_TYPE, MaxErrorsAssertion.class );
46  	}
47  	
48  	public static synchronized LoadTestAssertionRegistry getInstance()
49  	{
50  		if( instance == null )
51  			instance = new LoadTestAssertionRegistry();
52  		
53  		return instance;
54  	}
55  
56  	public static AbstractLoadTestAssertion buildAssertion(LoadTestAssertionConfig config, WsdlLoadTest loadTest)
57  	{
58  	   try
59  		{
60  			Class<? extends AbstractLoadTestAssertion> clazz = getInstance().availableAssertions.get(config.getType());
61  			Constructor<? extends AbstractLoadTestAssertion> ctor = clazz
62  					.getConstructor(new Class[] { LoadTestAssertionConfig.class, WsdlLoadTest.class  });
63  
64  			return (AbstractLoadTestAssertion) ctor.newInstance(config, loadTest );
65  		}
66  		catch (SecurityException e)
67  		{
68  			SoapUI.logError( e );
69  		}
70  		catch (NoSuchMethodException e)
71  		{
72  			SoapUI.logError( e );
73  		}
74  		catch (IllegalArgumentException e)
75  		{
76  			SoapUI.logError( e );
77  		}
78  		catch (InstantiationException e)
79  		{
80  			SoapUI.logError( e );
81  		}
82  		catch (IllegalAccessException e)
83  		{
84  			SoapUI.logError( e );
85  		}
86  		catch (InvocationTargetException e)
87  		{
88  			SoapUI.logError( e );
89  		}
90  		
91  		return null;
92  	}
93  	
94  	public static LoadTestAssertionConfig createAssertionConfig( String type )
95  	{
96  		LoadTestAssertionConfig config = LoadTestAssertionConfig.Factory.newInstance();
97  		config.setType( type );
98  		return config;
99  	}
100 
101 	public static String[] getAvailableAssertions()
102 	{
103       return  getInstance().availableAssertions.keySet().toArray( 
104       		new String[getInstance().availableAssertions.size()] );
105 	}
106 
107 	public static LoadTestAssertion createAssertion(String type, WsdlLoadTest loadTest )
108 	{
109 		LoadTestAssertionConfig config = createAssertionConfig( type );
110 		return buildAssertion( config, loadTest );
111 	}
112 }