001/*
002 * (C) Copyright 2015 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the GNU Lesser General Public License
006 * (LGPL) version 2.1 which accompanies this distribution, and is available at
007 * http://www.gnu.org/licenses/lgpl-2.1.html
008 *
009 * This library is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Lesser General Public License for more details.
013 *
014 * Contributors:
015 *     Stephane Lacoin <slacoin@nuxeo.com>
016 *     Vladimir Pasquier <vpasquier@nuxeo.com>
017 */
018package org.nuxeo.automation.scripting.internals;
019
020import java.util.List;
021
022import javax.script.ScriptEngine;
023import javax.script.ScriptEngineFactory;
024
025import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
026
027/**
028 * This script factory configure the Nashorn engine with cache (following
029 * {@link org.nuxeo.automation.scripting.internals.ScriptingCache#enabled}).
030 *
031 * @since 7.3
032 */
033public class ScriptingCache implements ScriptEngineFactory {
034
035    protected final NashornScriptEngineFactory nashornScriptEngineFactory;
036
037    protected final boolean enabled;
038
039    public ScriptingCache(boolean enabled) {
040        this.nashornScriptEngineFactory = new NashornScriptEngineFactory();
041        this.enabled = enabled;
042    }
043
044    @Override
045    public ScriptEngine getScriptEngine() {
046        return enabled ? nashornScriptEngineFactory.getScriptEngine("-strict", "--persistent-code-cache",
047                "--class-cache-size=50") : nashornScriptEngineFactory.getScriptEngine();
048    }
049
050    @Override
051    public String getProgram(String... statements) {
052        return nashornScriptEngineFactory.getProgram(statements);
053    }
054
055    @Override
056    public Object getParameter(String key) {
057        return nashornScriptEngineFactory.getParameter(key);
058    }
059
060    @Override
061    public String getOutputStatement(String toDisplay) {
062        return nashornScriptEngineFactory.getOutputStatement(toDisplay);
063    }
064
065    @Override
066    public List<String> getNames() {
067        return nashornScriptEngineFactory.getNames();
068    }
069
070    @Override
071    public List<String> getMimeTypes() {
072        return nashornScriptEngineFactory.getMimeTypes();
073    }
074
075    @Override
076    public String getMethodCallSyntax(String obj, String method, String... args) {
077        return nashornScriptEngineFactory.getMethodCallSyntax(obj, method, args);
078    }
079
080    @Override
081    public String getLanguageVersion() {
082        return nashornScriptEngineFactory.getLanguageVersion();
083    }
084
085    @Override
086    public String getLanguageName() {
087        return nashornScriptEngineFactory.getLanguageName();
088    }
089
090    @Override
091    public List<String> getExtensions() {
092        return nashornScriptEngineFactory.getExtensions();
093    }
094
095    @Override
096    public String getEngineVersion() {
097        return nashornScriptEngineFactory.getEngineVersion();
098    }
099
100    @Override
101    public String getEngineName() {
102        return nashornScriptEngineFactory.getEngineName();
103    }
104}