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}) and with Class Filter.
030 *
031 * @since 7.3
032 */
033public class ScriptingCacheClassFilter implements ScriptEngineFactory {
034
035    protected final NashornScriptEngineFactory nashornScriptEngineFactory;
036
037    protected final boolean cacheEnable;
038
039    public ScriptingCacheClassFilter(boolean cacheEnable) {
040        this.nashornScriptEngineFactory = new NashornScriptEngineFactory();
041        this.cacheEnable = cacheEnable;
042    }
043
044    @Override
045    public ScriptEngine getScriptEngine() {
046        if (cacheEnable) {
047            return nashornScriptEngineFactory.getScriptEngine(new String[] { "-strict", "--persistent-code-cache",
048                    "--class-cache-size=50" }, null, new AutomationScriptingClassFilter());
049        } else {
050            return nashornScriptEngineFactory.getScriptEngine(new AutomationScriptingClassFilter());
051        }
052    }
053
054    @Override
055    public String getProgram(String... statements) {
056        return nashornScriptEngineFactory.getProgram(statements);
057    }
058
059    @Override
060    public Object getParameter(String key) {
061        return nashornScriptEngineFactory.getParameter(key);
062    }
063
064    @Override
065    public String getOutputStatement(String toDisplay) {
066        return nashornScriptEngineFactory.getOutputStatement(toDisplay);
067    }
068
069    @Override
070    public List<String> getNames() {
071        return nashornScriptEngineFactory.getNames();
072    }
073
074    @Override
075    public List<String> getMimeTypes() {
076        return nashornScriptEngineFactory.getMimeTypes();
077    }
078
079    @Override
080    public String getMethodCallSyntax(String obj, String method, String... args) {
081        return nashornScriptEngineFactory.getMethodCallSyntax(obj, method, args);
082    }
083
084    @Override
085    public String getLanguageVersion() {
086        return nashornScriptEngineFactory.getLanguageVersion();
087    }
088
089    @Override
090    public String getLanguageName() {
091        return nashornScriptEngineFactory.getLanguageName();
092    }
093
094    @Override
095    public List<String> getExtensions() {
096        return nashornScriptEngineFactory.getExtensions();
097    }
098
099    @Override
100    public String getEngineVersion() {
101        return nashornScriptEngineFactory.getEngineVersion();
102    }
103
104    @Override
105    public String getEngineName() {
106        return nashornScriptEngineFactory.getEngineName();
107    }
108}