All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.lightlink.core.ScriptRunner Maven / Gradle / Ivy

package io.lightlink.core;

/*
 * #%L
 * lightlink-core
 * %%
 * Copyright (C) 2015 Vitaliy Shevchuk
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Lesser Public License for more details.
 * 
 * You should have received a copy of the GNU General Lesser Public
 * License along with this program.  If not, see
 * .
 * #L%
 */


import io.lightlink.config.ConfigManager;
import io.lightlink.config.Script;
import io.lightlink.facades.ResponseFacade;
import io.lightlink.facades.SQLFacade;
import io.lightlink.facades.ServletEnv;
import io.lightlink.facades.TxFacade;
import io.lightlink.output.ResponseStream;
import io.lightlink.security.CSRFTokensContainer;
import io.lightlink.translator.ScriptTranslator;
import io.lightlink.utils.LogUtils;
import io.lightlink.utils.Utils;
import jdk.nashorn.api.scripting.JSObject;

import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Enumeration;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class ScriptRunner {

    HttpServletResponse response;
    ConfigManager cm;
    HttpServletRequest request;
    private ServletContext servletContext;

    public static final Object DEBUG_FILE_ACCESS_LOCK = new Object();

    public ScriptRunner(String rootPackage) {
        cm = new ConfigManager(rootPackage);
    }

    public ScriptRunner() {
        cm = new ConfigManager();
    }

    public ScriptRunner(HttpServletRequest request) {
        servletContext = request.getServletContext();
        cm = new ConfigManager(servletContext);
        this.request = request;
    }

    public ScriptRunner(String rootPackage, HttpServletRequest request, HttpServletResponse resp) {
        servletContext = request.getServletContext();
        cm = new ConfigManager(rootPackage, servletContext);
        this.request = request;
        this.response = resp;
    }

    public ScriptRunner(String rootPackage, ServletContext servletContext) {
        this.servletContext = servletContext;
        cm = new ConfigManager(rootPackage, servletContext);
    }


    public void execute(String action, String method, Map inputParams, ResponseStream responseStream) throws IOException {

        ScriptEngine engine = ConfigManager.getScriptEngine();

        ScriptContext context = engine.getContext();

        RunnerContext runnerContext = new RunnerContext(responseStream, engine);

        runnerContext.setCsrfToken(CSRFTokensContainer.getToken(inputParams));

        ResponseFacade responseFacade = runnerContext.getResponseFacade();

        SQLFacade sqlFacade = runnerContext.getRootSQLFacade();

        TxFacade txFacade = runnerContext.getTxFacade();
        Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
        bindings.put("response", responseFacade);
        bindings.put("env", new ServletEnv(response, request));
        bindings.put("sql", sqlFacade);
        bindings.put("tx", runnerContext.getTxFacade());
        bindings.put("types", runnerContext.getTypesFacade());

        runnerContext.setParams(inputParams);

        PrintWriter printWriter = new PrintWriter(System.err);

        context.setWriter(printWriter);

        context.setAttribute(ScriptTranslator.SQL_CONTAINER_VARIABLE, "", ScriptContext.ENGINE_SCOPE);

        boolean success;

        List