/* * SoapUI, Copyright (C) 2004-2016 SmartBear Software * * Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent * versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * * http://ec.europa.eu/idabc/eupl * * Unless required by applicable law or agreed to in writing, software distributed under the Licence is * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the Licence for the specific language governing permissions and limitations * under the Licence. */ package com.eviware.soapui.impl.wsdl.mock; import com.eviware.soapui.config.MockServiceConfig; import com.eviware.soapui.model.project.Project; import com.eviware.soapui.model.testsuite.TestCase; import org.apache.log4j.Logger; import java.util.HashMap; import java.util.Map; import java.util.Vector; public class MockRunnerManagerImpl implements MockRunnerManager { private final static Logger log = Logger.getLogger(MockRunnerManagerImpl.class); private static Map<String, MockRunnerManager> managers = new HashMap<String, MockRunnerManager>(); private Map<String, WsdlMockService> mockServices = new HashMap<String, WsdlMockService>(); private Vector<WsdlMockRunner> mockRunners = new Vector<WsdlMockRunner>(); private Project project; private MockRunnerManagerImpl(Project project) { this.project = project; } public static MockRunnerManager getInstance(TestCase testCase) { if (managers.containsKey(testCase.getId())) { return managers.get(testCase.getId()); } else { MockRunnerManager manager = new MockRunnerManagerImpl(testCase.getTestSuite().getProject()); managers.put(testCase.getId(), manager); return manager; } } public WsdlMockService getMockService(int port, String path) { String key = port + path; WsdlMockService service = mockServices.get(key); if (service == null) { MockServiceConfig mockServiceConfig = MockServiceConfig.Factory.newInstance(); mockServiceConfig.setPath(path); mockServiceConfig.setPort(port); mockServiceConfig.setName(port + ":" + path); service = new WsdlMockService(project, mockServiceConfig); mockServices.put(key, service); } return service; } public void start() throws MockRunnerManagerException { if (log.isDebugEnabled()) { log.debug("Starting MockRunnerManager"); } for (WsdlMockService mockService : mockServices.values()) { try { mockRunners.add(mockService.start()); } catch (Exception e) { throw new MockRunnerManagerException("Failed to create a WsdlMockRunner", e); } } } public void stop() { if (log.isDebugEnabled()) { log.debug("Stopping MockRunnerManager"); } for (WsdlMockRunner runner : mockRunners) { try { runner.stop(); } catch (Exception e) { log.error(e); } } mockServices.clear(); mockRunners.clear(); } public boolean isStarted() { for (WsdlMockRunner runner : mockRunners) { if (runner.isRunning()) { return true; } } return false; } }