1 /*
2 * scriptable-dataset (https://github.com/hazendaz/scriptable-dataset)
3 *
4 * Copyright 2011-2024 Hazendaz.
5 *
6 * All rights reserved. This program and the accompanying materials
7 * are made available under the terms of The Apache Software License,
8 * Version 2.0 which accompanies this distribution, and is available at
9 * https://www.apache.org/licenses/LICENSE-2.0.txt
10 *
11 * Contributors:
12 * Gunnar Morling
13 * Hazendaz (Jeremy Landis).
14 */
15 package de.gmorling.scriptabledataset.handlers;
16
17 import javax.script.ScriptEngine;
18
19 /**
20 * Implementations can be registered with a ScriptableDataSet to be called before and after script contained in a data
21 * set field is executed. This can be used to add commonly used import statements for all scripts of a given language or
22 * to post-process the result of a script execution.
23 * <p>
24 * Implementations must define a default constructor, if they shall be used as standard handler for a language.
25 */
26 public interface ScriptInvocationHandler {
27
28 /**
29 * Must return the name of the scripting language for which this handler can be registered, as expected by the JSR
30 * 223 scripting engine manager, e.g. "jruby".
31 *
32 * @return The name of the scripting language.
33 */
34 String getLanguageName();
35
36 /**
37 * Will be called before a script contained in a field of a data set is executed.
38 *
39 * @param script
40 * The script to be executed.
41 *
42 * @return The script to be executed, enriched with common imports for example.
43 */
44 String preInvoke(String script);
45
46 /**
47 * Will be called after a script contained in a field of a data set is executed.
48 *
49 * @param object
50 * The result of the script execution.
51 *
52 * @return The result of the script execution, possibly modified by this handler.
53 */
54 Object postInvoke(Object object);
55
56 /**
57 * Makes the scripting engine available to handler implementations.
58 *
59 * @param engine
60 * The scripting engine used to execute the current script.
61 */
62 void setScriptEngine(ScriptEngine engine);
63 }