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.io.BufferedReader;
21 import java.io.IOException;
22 import java.io.InputStreamReader;
23 import java.io.OutputStreamWriter;
24 import java.io.PrintWriter;
25 import java.nio.charset.Charset;
26 import java.nio.file.Files;
27 import java.nio.file.Path;
28 import java.nio.file.Paths;
29
30 import javax.script.ScriptEngine;
31 import javax.script.ScriptException;
32
33
34
35
36
37
38 public class Main {
39
40
41 public Main() { }
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 public static void main(final String[] args) throws Exception {
58 try(BufferedReader in = args.length == 1? read(Paths.get(args[0])) : read(null);
59 PrintWriter out = new PrintWriter(
60 new OutputStreamWriter(System.out, Charset.defaultCharset()),true)) {
61 run(in, out, args);
62 }
63 }
64
65 static void run(final BufferedReader in, final PrintWriter out, final Object[] args) throws Exception {
66 final JexlScriptEngineFactory fac = new JexlScriptEngineFactory();
67 final ScriptEngine engine = fac.getScriptEngine();
68 if (args != null && args.length > 0) {
69 engine.put("args", args);
70 final Object value = engine.eval(in);
71 out.println(">>: " + value);
72 } else {
73 String line;
74 out.print("> ");
75 while (null != (line = in.readLine())) {
76 if ("//q!".equals(line)) {
77 break;
78 }
79 try {
80 final Object value = engine.eval(line);
81 out.println(">> " + value);
82 } catch (final ScriptException e) {
83 out.println("!!>" + e.getLocalizedMessage());
84 }
85 out.print("> ");
86 }
87 }
88 }
89
90
91
92
93
94
95
96
97 static BufferedReader read(final Path path) throws IOException {
98 return new BufferedReader(new InputStreamReader(path == null
99 ? System.in
100 : Files.newInputStream(path), Charset.defaultCharset()));
101 }
102 }