View Javadoc

1   /*
2    * soapUI, copyright (C) 2004-2009 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.mock;
14  
15  import java.util.HashMap;
16  import java.util.Map;
17  import java.util.Vector;
18  
19  import org.apache.log4j.Logger;
20  
21  import com.eviware.soapui.config.MockServiceConfig;
22  import com.eviware.soapui.model.project.Project;
23  import com.eviware.soapui.model.testsuite.TestCase;
24  
25  public class MockRunnerManagerImpl implements MockRunnerManager
26  {
27  	private final static Logger log = Logger.getLogger( MockRunnerManagerImpl.class );
28  
29  	private static Map<String, MockRunnerManager> managers = new HashMap<String, MockRunnerManager>();
30  
31  	private Map<String, WsdlMockService> mockServices = new HashMap<String, WsdlMockService>();
32  
33  	private Vector<WsdlMockRunner> mockRunners = new Vector<WsdlMockRunner>();
34  
35  	private Project project;
36  
37  	private MockRunnerManagerImpl( Project project )
38  	{
39  		this.project = project;
40  	}
41  
42  	public static MockRunnerManager getInstance( TestCase testCase )
43  	{
44  		if( managers.containsKey( testCase.getId() ) )
45  		{
46  			return managers.get( testCase.getId() );
47  		}
48  		else
49  		{
50  			MockRunnerManager manager = new MockRunnerManagerImpl( testCase.getTestSuite().getProject() );
51  			managers.put( testCase.getId(), manager );
52  
53  			return manager;
54  		}
55  	}
56  
57  	public WsdlMockService getMockService( int port, String path )
58  	{
59  		String key = port + path;
60  
61  		WsdlMockService service = mockServices.get( key );
62  		if( service == null )
63  		{
64  			MockServiceConfig mockServiceConfig = MockServiceConfig.Factory.newInstance();
65  			mockServiceConfig.setPath( path );
66  			mockServiceConfig.setPort( port );
67  			mockServiceConfig.setName( port + ":" + path );
68  			service = new WsdlMockService( project, mockServiceConfig );
69  			mockServices.put( key, service );
70  		}
71  
72  		return service;
73  	}
74  
75  	public void start() throws MockRunnerManagerException
76  	{
77  		if( log.isDebugEnabled() )
78  		{
79  			log.debug( "Starting MockRunnerManager" );
80  		}
81  
82  		for( WsdlMockService mockService : mockServices.values() )
83  		{
84  			try
85  			{
86  				mockRunners.add( mockService.start() );
87  			}
88  			catch( Exception e )
89  			{
90  				throw new MockRunnerManagerException( "Failed to create a WsdlMockRunner", e );
91  			}
92  		}
93  	}
94  
95  	public void stop()
96  	{
97  		if( log.isDebugEnabled() )
98  		{
99  			log.debug( "Stopping MockRunnerManager" );
100 		}
101 
102 		for( WsdlMockRunner runner : mockRunners )
103 		{
104 			try
105 			{
106 				runner.stop();
107 			}
108 			catch( Exception e )
109 			{
110 				log.error( e );
111 			}
112 		}
113 
114 		mockServices.clear();
115 		mockRunners.clear();
116 	}
117 
118 	public boolean isStarted()
119 	{
120 		for( WsdlMockRunner runner : mockRunners )
121 		{
122 			if( runner.isRunning() )
123 			{
124 				return true;
125 			}
126 		}
127 
128 		return false;
129 	}
130 }