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

io.gallery.db.util.JsUtil Maven / Gradle / Ivy

package io.gallery.db.util;

import io.gallery.db.exception.DataBaseDataBindingException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.graalvm.polyglot.Context;
import org.graalvm.polyglot.Source;

import javax.script.*;
import java.io.IOException;

public class JsUtil {
    private static final Log logger = LogFactory.getLog(JsUtil.class);
    private static ScriptEngine engine;

    public static ScriptEngine getEngine() {
        if (engine == null) {
            engine = new ScriptEngineManager().getEngineByName("js");
            Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
            bindings.put("polyglot.js.allowAllAccess", true);
        }
        return engine;
    }

    public static Object run(String code) {
        return run(code, null);
    }

    public static Object run(String code, String name) {
        Object result = null;
        if (DBT.isNotNull(code)) {
            code = code.replaceAll("DataBaseUtil\\.", "com.longruan.ark.common.db.util.DataBaseUtil.");
            //logger.info(code);
            code = code.replaceAll("DataBaseTools\\.", "com.longruan.ark.common.db.util.DataBaseTools.");
            //logger.info(code);
            code = code.replaceAll("DataSourceUtil\\.", "com.longruan.ark.common.db.util.DataSourceUtil.");
            //logger.info(code);
            code = code.replaceAll("DataBaseSpringUtil\\.", "com.longruan.ark.common.db.util.DataBaseSpringUtil.");
            //logger.info(code);
            code = code.replaceAll("DSUtil\\.", "com.longruan.ark.common.db.util.DSUtil.");
            //logger.info(code);
            code = code.replaceAll("DS\\.", "com.longruan.ark.common.db.util.DataSourceUtil.");
            //logger.info(code);
            code = code.replaceAll("DB\\.", "com.longruan.ark.common.db.util.DataBaseUtil.");
            //logger.info(code);
            code = code.replaceAll("DBT\\.", "com.longruan.ark.common.db.util.DataBaseTools.");
            code = code.replaceAll("Maps\\.", "com.longruan.ark.common.db.util.Maps.");
            code = code.replaceAll("ExportType\\.", "com.longruan.ark.common.db.bean.");
            //logger.info("code:" + code);
            try {
                Source source = Source.newBuilder("js", code, name).build();
                result = Context.newBuilder().allowAllAccess(true).build().eval(source).toString();
            } catch (IOException e) {
                throw new DataBaseDataBindingException("运行js错误", e);
            }
        }
        return result;
    }

    public static void test() {
        final ScriptEngineManager mgr = new ScriptEngineManager();
        for (ScriptEngineFactory fac : mgr.getEngineFactories()) {
            System.out.printf("EngineName: %s, EngineVersion: (%s), LanguageName:%s, LanguageVersion(%s), THREADING: %s%n",
                    fac.getEngineName(),
                    fac.getEngineVersion(),
                    fac.getLanguageName(),
                    fac.getLanguageVersion(),
                    fac.getParameter("THREADING"));
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy