1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.scxml2.env.minimal;
18
19 import java.io.Serializable;
20
21 import org.apache.commons.scxml2.Builtin;
22 import org.apache.commons.scxml2.Context;
23 import org.apache.commons.scxml2.Evaluator;
24 import org.apache.commons.scxml2.EvaluatorProvider;
25 import org.apache.commons.scxml2.SCXMLExpressionException;
26 import org.apache.commons.scxml2.model.SCXML;
27
28
29
30
31
32
33
34 public class MinimalEvaluator implements Evaluator, Serializable {
35
36
37 private static final long serialVersionUID = 1L;
38
39 public static final String SUPPORTED_DATA_MODEL = Evaluator.NULL_DATA_MODEL;
40
41 public static class MinimalEvaluatorProvider implements EvaluatorProvider {
42
43 @Override
44 public String getSupportedDatamodel() {
45 return SUPPORTED_DATA_MODEL;
46 }
47
48 @Override
49 public Evaluator getEvaluator() {
50 return new MinimalEvaluator();
51 }
52
53 @Override
54 public Evaluator getEvaluator(final SCXML document) {
55 return new MinimalEvaluator();
56 }
57 }
58
59 @Override
60 public String getSupportedDatamodel() {
61 return SUPPORTED_DATA_MODEL;
62 }
63
64 @Override
65 public Object eval(final Context ctx, final String expr) throws SCXMLExpressionException {
66 return expr;
67 }
68
69 @Override
70 public Boolean evalCond(final Context ctx, final String expr) throws SCXMLExpressionException {
71
72 String predicate = expr != null ? expr.trim() : "";
73 if (predicate.startsWith("In(") && predicate.endsWith(")")) {
74 String stateId = predicate.substring(3, predicate.length()-1);
75 return Builtin.isMember(ctx, stateId);
76 }
77 return false;
78 }
79
80 @Override
81 public Object evalLocation(final Context ctx, final String expr) throws SCXMLExpressionException {
82 return expr;
83 }
84
85 @Override
86 public void evalAssign(final Context ctx, final String location, final Object data, final AssignType type, final String attr) throws SCXMLExpressionException {
87 throw new UnsupportedOperationException("Assign expressions are not supported by the \"null\" datamodel");
88 }
89
90 @Override
91 public Object evalScript(final Context ctx, final String script) throws SCXMLExpressionException {
92 throw new UnsupportedOperationException("Scripts are not supported by the \"null\" datamodel");
93 }
94
95 @Override
96 public Context newContext(final Context parent) {
97 return parent instanceof MinimalContext ? parent : new MinimalContext(parent);
98 }
99 }