1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.support.scripting;
14
15 import java.util.HashMap;
16 import java.util.Map;
17
18 import org.apache.log4j.Logger;
19
20 import com.eviware.soapui.impl.wsdl.WsdlProject;
21 import com.eviware.soapui.model.ModelItem;
22 import com.eviware.soapui.model.support.ModelSupport;
23 import com.eviware.soapui.support.StringUtils;
24 import com.eviware.soapui.support.scripting.groovy.GroovyScriptEngineFactory;
25 import com.eviware.soapui.support.scripting.js.JsScriptEngineFactory;
26 import com.eviware.soapui.support.types.StringList;
27
28 /***
29 * Registry of available script engines
30 *
31 * @author ole.matzura
32 */
33
34 public class SoapUIScriptEngineRegistry
35 {
36 public static final String DEFAULT_SCRIPT_ENGINE_ID = GroovyScriptEngineFactory.ID;
37
38 private static Map<String, SoapUIScriptEngineFactory> factories = new HashMap<String, SoapUIScriptEngineFactory>();
39 private static final Logger log = Logger.getLogger( SoapUIScriptEngineRegistry.class );
40
41 public static void registerScriptEngine( String id, SoapUIScriptEngineFactory factory )
42 {
43 factories.put( id, factory );
44 }
45
46 public static SoapUIScriptEngineFactory getFactory( String id )
47 {
48 return factories.get( id );
49 }
50
51 public static SoapUIScriptEngine create( ModelItem modelItem )
52 {
53 return factories.get( getScriptEngineId( modelItem ) ).createScriptEngine( modelItem );
54 }
55
56 public static String getScriptEngineId( ModelItem modelItem )
57 {
58 WsdlProject project = ( WsdlProject )ModelSupport.getModelItemProject( modelItem );
59
60 String scriptEngineId = null;
61 if( project == null )
62 log.warn( "Project is null for modelItem [" + String.valueOf( modelItem ) + "], using default script language [" +
63 DEFAULT_SCRIPT_ENGINE_ID + "]" );
64 else
65 scriptEngineId = project.getDefaultScriptLanguage();
66
67 if( StringUtils.isNullOrEmpty( scriptEngineId ) )
68 scriptEngineId = DEFAULT_SCRIPT_ENGINE_ID;
69
70 return scriptEngineId;
71 }
72
73 public static SoapUIScriptGenerator createScriptGenerator( ModelItem modelItem )
74 {
75 WsdlProject project = ( WsdlProject )ModelSupport.getModelItemProject( modelItem );
76
77 String scriptEngineId = project.getDefaultScriptLanguage();
78 if( StringUtils.isNullOrEmpty( scriptEngineId ) )
79 scriptEngineId = DEFAULT_SCRIPT_ENGINE_ID;
80
81 return factories.get( scriptEngineId ).createCodeGenerator( modelItem );
82 }
83
84 static
85 {
86 registerScriptEngine( GroovyScriptEngineFactory.ID, new GroovyScriptEngineFactory() );
87 registerScriptEngine( JsScriptEngineFactory.ID, new JsScriptEngineFactory() );
88 }
89
90 public static String[] getAvailableEngineIds()
91 {
92 return new StringList( factories.keySet() ).toStringArray();
93 }
94 }