| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| package org.apache.sling.scripting.api; |
| |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.util.Arrays; |
| import java.util.Collections; |
| import java.util.List; |
| import java.util.jar.Attributes; |
| import java.util.jar.Manifest; |
| |
| import javax.script.ScriptEngine; |
| import javax.script.ScriptEngineFactory; |
| |
| /** |
| * This abstract class can be used for own script engine |
| * factory implementations. |
| */ |
| public abstract class AbstractScriptEngineFactory |
| implements ScriptEngineFactory { |
| |
| /** The engine name. */ |
| private String engineName; |
| |
| /** The version of the engine. */ |
| private String engineVersion; |
| |
| /** List of extensions. */ |
| private List<String> extensions; |
| |
| /** List of mime types. */ |
| private List<String> mimeTypes; |
| |
| /** List of names. */ |
| private List<String> names; |
| |
| protected AbstractScriptEngineFactory() { |
| String name = null; |
| String version = null; |
| |
| // try to get the manifest |
| Manifest manifest = null; |
| InputStream ins = null; |
| try { |
| ins = getClass().getResourceAsStream("/META-INF/MANIFEST.MF"); |
| if (ins != null) { |
| manifest = new Manifest(ins); |
| Attributes attrs = manifest.getMainAttributes(); |
| name = attrs.getValue("ScriptEngine-Name"); |
| version = attrs.getValue("ScriptEngine-Version"); |
| } |
| } catch (IOException ioe) { |
| // might want to log ? |
| } finally { |
| if (ins != null) { |
| try { |
| ins.close(); |
| } catch (IOException ignore) { |
| } |
| } |
| } |
| |
| // fall back to class name and version zero |
| if (name == null) { |
| String className = getClass().getName(); |
| name = className.substring(className.lastIndexOf('.') + 1); |
| } |
| if (version == null) { |
| version = "0"; |
| } |
| |
| setEngineName(name); |
| setEngineVersion(version); |
| |
| setExtensions((String[]) null); |
| setMimeTypes((String[]) null); |
| setNames((String[]) null); |
| } |
| |
| /** |
| * @see javax.script.ScriptEngineFactory#getEngineName() |
| */ |
| public String getEngineName() { |
| return engineName; |
| } |
| |
| /** |
| * Set the engine name. |
| * @param engineName The new engine name |
| */ |
| protected void setEngineName(String engineName) { |
| this.engineName = engineName; |
| } |
| |
| /** |
| * @see javax.script.ScriptEngineFactory#getEngineVersion() |
| */ |
| public String getEngineVersion() { |
| return engineVersion; |
| } |
| |
| /** |
| * Set the engine version |
| * @param engineVersion The version string |
| */ |
| protected void setEngineVersion(String engineVersion) { |
| this.engineVersion = engineVersion; |
| } |
| |
| /** |
| * @see javax.script.ScriptEngineFactory#getExtensions() |
| */ |
| public List<String> getExtensions() { |
| return extensions; |
| } |
| |
| /** |
| * Set the extensions |
| * @param extensions The array of extensions |
| */ |
| protected void setExtensions(String... extensions) { |
| if (extensions == null) { |
| this.extensions = Collections.emptyList(); |
| } else { |
| this.extensions = Arrays.asList(extensions); |
| } |
| } |
| |
| /** |
| * @see javax.script.ScriptEngineFactory#getMimeTypes() |
| */ |
| public List<String> getMimeTypes() { |
| return mimeTypes; |
| } |
| |
| /** |
| * Set the mime types |
| * @param mimeTypes The array of mime types |
| */ |
| protected void setMimeTypes(String... mimeTypes) { |
| if (mimeTypes == null) { |
| this.mimeTypes = Collections.emptyList(); |
| } else { |
| this.mimeTypes = Arrays.asList(mimeTypes); |
| } |
| } |
| |
| /** |
| * @see javax.script.ScriptEngineFactory#getNames() |
| */ |
| public List<String> getNames() { |
| return names; |
| } |
| |
| /** |
| * Set the names |
| * @param names The array of names. |
| */ |
| protected void setNames(String... names) { |
| if (names == null) { |
| this.names = Collections.emptyList(); |
| } else { |
| this.names = Arrays.asList(names); |
| } |
| } |
| |
| /** |
| * @see javax.script.ScriptEngineFactory#getMethodCallSyntax(java.lang.String, java.lang.String, java.lang.String[]) |
| */ |
| public String getMethodCallSyntax(String obj, String m, String... args) { |
| StringBuilder callSyntax = new StringBuilder(); |
| callSyntax.append(obj).append('.').append(m).append('('); |
| for (int i = 0; args != null && i < args.length; i++) { |
| if (i > 0) callSyntax.append(','); |
| callSyntax.append(args[i]); |
| } |
| callSyntax.append(')'); |
| return callSyntax.toString(); |
| } |
| |
| /** |
| * @see javax.script.ScriptEngineFactory#getOutputStatement(java.lang.String) |
| */ |
| public String getOutputStatement(String value) { |
| return "out.print(" + value + ")"; |
| } |
| |
| /** |
| * @see javax.script.ScriptEngineFactory#getParameter(java.lang.String) |
| */ |
| public Object getParameter(String name) { |
| if (ScriptEngine.ENGINE.equals(name)) { |
| return getEngineName(); |
| } else if (ScriptEngine.ENGINE_VERSION.equals(name)) { |
| return getEngineVersion(); |
| } else if (ScriptEngine.NAME.equals(name)) { |
| return getNames(); |
| } else if (ScriptEngine.LANGUAGE.equals(name)) { |
| return getLanguageName(); |
| } else if (ScriptEngine.LANGUAGE_VERSION.equals(name)) { |
| return getLanguageVersion(); |
| } |
| return null; |
| } |
| |
| /** |
| * @see javax.script.ScriptEngineFactory#getProgram(java.lang.String[]) |
| */ |
| public String getProgram(String... arg0) { |
| return null; |
| } |
| |
| } |