001/* 002 * (C) Copyright 2015 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * Stephane Lacoin <slacoin@nuxeo.com> 018 * Vladimir Pasquier <vpasquier@nuxeo.com> 019 */ 020package org.nuxeo.automation.scripting.internals; 021 022import java.util.List; 023 024import javax.script.ScriptEngine; 025import javax.script.ScriptEngineFactory; 026 027import jdk.nashorn.api.scripting.NashornScriptEngineFactory; 028 029/** 030 * This script factory configure the Nashorn engine with cache (following 031 * {@link org.nuxeo.automation.scripting.internals.ScriptingCache#enabled}) and with Class Filter. 032 * 033 * @since 7.3 034 */ 035public class ScriptingCacheClassFilter implements ScriptEngineFactory { 036 037 protected final NashornScriptEngineFactory nashornScriptEngineFactory; 038 039 protected final boolean cacheEnable; 040 041 public ScriptingCacheClassFilter(boolean cacheEnable) { 042 this.nashornScriptEngineFactory = new NashornScriptEngineFactory(); 043 this.cacheEnable = cacheEnable; 044 } 045 046 @Override 047 public ScriptEngine getScriptEngine() { 048 if (cacheEnable) { 049 return nashornScriptEngineFactory.getScriptEngine(new String[] { "-strict", "--persistent-code-cache", 050 "--class-cache-size=50" }, null, new AutomationScriptingClassFilter()); 051 } else { 052 return nashornScriptEngineFactory.getScriptEngine(new AutomationScriptingClassFilter()); 053 } 054 } 055 056 @Override 057 public String getProgram(String... statements) { 058 return nashornScriptEngineFactory.getProgram(statements); 059 } 060 061 @Override 062 public Object getParameter(String key) { 063 return nashornScriptEngineFactory.getParameter(key); 064 } 065 066 @Override 067 public String getOutputStatement(String toDisplay) { 068 return nashornScriptEngineFactory.getOutputStatement(toDisplay); 069 } 070 071 @Override 072 public List<String> getNames() { 073 return nashornScriptEngineFactory.getNames(); 074 } 075 076 @Override 077 public List<String> getMimeTypes() { 078 return nashornScriptEngineFactory.getMimeTypes(); 079 } 080 081 @Override 082 public String getMethodCallSyntax(String obj, String method, String... args) { 083 return nashornScriptEngineFactory.getMethodCallSyntax(obj, method, args); 084 } 085 086 @Override 087 public String getLanguageVersion() { 088 return nashornScriptEngineFactory.getLanguageVersion(); 089 } 090 091 @Override 092 public String getLanguageName() { 093 return nashornScriptEngineFactory.getLanguageName(); 094 } 095 096 @Override 097 public List<String> getExtensions() { 098 return nashornScriptEngineFactory.getExtensions(); 099 } 100 101 @Override 102 public String getEngineVersion() { 103 return nashornScriptEngineFactory.getEngineVersion(); 104 } 105 106 @Override 107 public String getEngineName() { 108 return nashornScriptEngineFactory.getEngineName(); 109 } 110}