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