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 }