View Javadoc

1   /*
2    * soapUI, copyright (C) 2004-2008 eviware.com
3    *
4    * soapUI is free software; you can redistribute it and/or modify it under the
5    * terms of version 2.1 of the GNU Lesser General Public License as published by
6    * the Free Software Foundation.
7    *
8    * soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
9    * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10   * See the GNU Lesser General Public License for more details at gnu.org.
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 }