1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.jexl3.scripting;
19
20 import java.util.Arrays;
21 import java.util.Collections;
22 import java.util.List;
23
24 import javax.script.ScriptEngine;
25 import javax.script.ScriptEngineFactory;
26
27 import org.apache.commons.jexl3.parser.StringParser;
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 public class JexlScriptEngineFactory implements ScriptEngineFactory {
45
46
47 public JexlScriptEngineFactory() {}
48
49 @Override
50 public String getEngineName() {
51 return "JEXL Engine";
52 }
53
54 @Override
55 public String getEngineVersion() {
56 return "3.5";
57 }
58
59 @Override
60 public List<String> getExtensions() {
61 return Collections.unmodifiableList(Arrays.asList("jexl", "jexl2", "jexl3"));
62 }
63
64 @Override
65 public String getLanguageName() {
66 return "JEXL";
67 }
68
69 @Override
70 public String getLanguageVersion() {
71 return "3.5";
72 }
73
74 @Override
75 public String getMethodCallSyntax(final String obj, final String m, final String... args) {
76 final StringBuilder sb = new StringBuilder();
77 sb.append(obj);
78 sb.append('.');
79 sb.append(m);
80 sb.append('(');
81 boolean needComma = false;
82 for(final String arg : args){
83 if (needComma) {
84 sb.append(',');
85 }
86 sb.append(arg);
87 needComma = true;
88 }
89 sb.append(')');
90 return sb.toString();
91 }
92
93 @Override
94 public List<String> getMimeTypes() {
95 return Collections.unmodifiableList(Arrays.asList("application/x-jexl",
96 "application/x-jexl2",
97 "application/x-jexl3"));
98 }
99
100 @Override
101 public List<String> getNames() {
102 return Collections.unmodifiableList(Arrays.asList("JEXL", "Jexl", "jexl",
103 "JEXL2", "Jexl2", "jexl2",
104 "JEXL3", "Jexl3", "jexl3"));
105 }
106
107 @Override
108 public String getOutputStatement(final String toDisplay) {
109 if (toDisplay == null) {
110 return "JEXL.out.print(null)";
111 }
112 return "JEXL.out.print("+StringParser.escapeString(toDisplay, '\'')+")";
113 }
114
115 @Override
116 public Object getParameter(final String key) {
117 switch (key) {
118 case ScriptEngine.ENGINE:
119 return getEngineName();
120 case ScriptEngine.ENGINE_VERSION:
121 return getEngineVersion();
122 case ScriptEngine.NAME:
123 return getNames();
124 case ScriptEngine.LANGUAGE:
125 return getLanguageName();
126 case ScriptEngine.LANGUAGE_VERSION:
127 return getLanguageVersion();
128 case "THREADING":
129
130
131
132
133
134
135 default:
136 return null;
137 }
138 }
139
140 @Override
141 public String getProgram(final String... statements) {
142 final StringBuilder sb = new StringBuilder();
143 for(final String statement : statements){
144 sb.append(statement.trim());
145 if (!statement.endsWith(";")){
146 sb.append(';');
147 }
148 }
149 return sb.toString();
150 }
151
152 @Override
153 public ScriptEngine getScriptEngine() {
154 return new JexlScriptEngine(this);
155 }
156
157 }