class GroovyScript extends Script<StreamlineEvent, O, javax.script.ScriptEngine> {

    @Override
    public O evaluate(StreamlineEvent event) throws ScriptException {
        LOG.debug("Evaluating [{}] with [{}]", expression, event);
        groovy.lang.Script parsedScript = getParsedScript();
        O evaluatedResult = null;

        if (event != null) {
            try {
                Binding binding = createBinding(event);
                parsedScript.setBinding(binding);
                LOG.debug("Set script binding to [{}]", event);

                evaluatedResult = (O) parsedScript.run();

                LOG.debug("Expression [{}] evaluated to [{}]", expression, evaluatedResult);
            } catch (groovy.lang.MissingPropertyException e) {
                LOG.debug("Missing property: Expression [{}] params [{}]", expression, event);
                throw new ScriptException(e);
            }
        }
        return evaluatedResult;
    }

    public  GroovyScript(String expression, com.hortonworks.streamline.streams.runtime.script.engine.ScriptEngine<ScriptEngine> scriptEngine);
    public  GroovyScript(String expression, com.hortonworks.streamline.streams.runtime.script.engine.ScriptEngine<ScriptEngine> scriptEngine, Map<String, Object> initialBindings);

}