View Javadoc

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