View Javadoc
1   package org.apache.maven.plugins.scripting;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import javax.script.ScriptContext;
23  import javax.script.ScriptEngine;
24  import javax.script.ScriptEngineManager;
25  import javax.script.ScriptException;
26  
27  /**
28   * Evaluates a script held in a string
29   * @author Rusi Popov
30   */
31  public class StringScriptEvaluator extends AbstractScriptEvaluator
32  {
33  
34    /**
35     * Not null name of the engine to execute the script
36     */
37    private final String engineName;
38  
39    /**
40     * The non-null script itself
41     */
42    private final String script;
43  
44    /**
45     * @param engineName the engine name
46     * @param script the script
47     * @throws IllegalArgumentException if either engineName or script is null
48     */
49    public StringScriptEvaluator( String engineName, String script )
50    {
51      if ( engineName == null || engineName.isEmpty() )
52      {
53        throw new IllegalArgumentException( "Expected a non-empty engine name provided" );
54      }
55      this.engineName = engineName;
56  
57      if ( script == null || script.trim().isEmpty() )
58      {
59        throw new IllegalArgumentException( "Expected a non-empty script provided" );
60      }
61      this.script = script;
62    }
63  
64    /**
65     * @param manager the script engine manager.
66     * @throws UnsupportedScriptEngineException if the engineName is not supported
67     * @see org.apache.maven.plugins.scripting.AbstractScriptEvaluator#getEngine(javax.script.ScriptEngineManager)
68     */
69    protected ScriptEngine getEngine( ScriptEngineManager manager ) throws UnsupportedScriptEngineException
70    {
71      ScriptEngine result = manager.getEngineByName( engineName );
72  
73      if ( result == null )
74      {
75        throw new UnsupportedScriptEngineException( "Unknown engine specified with name \"" + engineName + "\"" );
76      }
77      return result;
78    }
79  
80    /**
81     * @param engine the script engine.
82     * @param context the script context.
83     * @throws ScriptException if an error occurs in script.
84     * @see org.apache.maven.plugins.scripting.AbstractScriptEvaluator#eval(javax.script.ScriptEngine, javax.script.ScriptContext)
85     */
86    protected Object eval( ScriptEngine engine, ScriptContext context ) throws ScriptException
87    {
88      return engine.eval( script, context );
89    }
90  }