01: /*
02: * Copyright 2002-2007 the original author or authors.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16:
17: package org.springframework.scripting;
18:
19: import java.io.IOException;
20:
21: /**
22: * Script definition interface, encapsulating the configuration
23: * of a specific script as well as a factory method for
24: * creating the actual scripted Java <code>Object</code>.
25: *
26: * @author Juergen Hoeller
27: * @author Rob Harrop
28: * @since 2.0
29: * @see #getScriptSourceLocator
30: * @see #getScriptedObject
31: */
32: public interface ScriptFactory {
33:
34: /**
35: * Return a locator that points to the source of the script.
36: * Interpreted by the post-processor that actually creates the script.
37: * <p>Typical supported locators are Spring resource locations
38: * (such as "file:C:/myScript.bsh" or "classpath:myPackage/myScript.bsh")
39: * and inline scripts ("inline:myScriptText...").
40: * @return the script source locator
41: * @see org.springframework.scripting.support.ScriptFactoryPostProcessor#convertToScriptSource
42: * @see org.springframework.core.io.ResourceLoader
43: */
44: String getScriptSourceLocator();
45:
46: /**
47: * Return the business interfaces that the script is supposed to implement.
48: * <p>Can return <code>null</code> if the script itself determines
49: * its Java interfaces (such as in the case of Groovy).
50: * @return the interfaces for the script
51: */
52: Class[] getScriptInterfaces();
53:
54: /**
55: * Return whether the script requires a config interface to be
56: * generated for it. This is typically the case for scripts that
57: * do not determine Java signatures themselves, with no appropriate
58: * config interface specified in <code>getScriptInterfaces()</code>.
59: * @return whether the script requires a generated config interface
60: * @see #getScriptInterfaces()
61: */
62: boolean requiresConfigInterface();
63:
64: /**
65: * Factory method for creating the scripted Java object.
66: * <p>Implementations are encouraged to cache script metadata such as
67: * a generated script class. Note that this method may be invoked
68: * concurrently and must be implemented in a thread-safe fashion.
69: * @param scriptSource the actual ScriptSource to retrieve
70: * the script source text from (never <code>null</code>)
71: * @param actualInterfaces the actual interfaces to expose,
72: * including script interfaces as well as a generated config interface
73: * (if applicable; may be <code>null</code>)
74: * @return the scripted Java object
75: * @throws IOException if script retrieval failed
76: * @throws ScriptCompilationException if script compilation failed
77: */
78: Object getScriptedObject(ScriptSource scriptSource,
79: Class[] actualInterfaces) throws IOException,
80: ScriptCompilationException;
81:
82: /**
83: * Determine the type of the scripted Java object.
84: * <p>Implementations are encouraged to cache script metadata such as
85: * a generated script class. Note that this method may be invoked
86: * concurrently and must be implemented in a thread-safe fashion.
87: * @param scriptSource the actual ScriptSource to retrieve
88: * the script source text from (never <code>null</code>)
89: * @return the type of the scripted Java object, or <code>null</code>
90: * if none could be determined
91: * @throws IOException if script retrieval failed
92: * @throws ScriptCompilationException if script compilation failed
93: * @since 2.0.3
94: */
95: Class getScriptedObjectType(ScriptSource scriptSource)
96: throws IOException, ScriptCompilationException;
97:
98: }
|