1
2
3
4
5
6
7
8
9
10
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 }