1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.commons.scxml2;
18
19 import org.apache.commons.scxml2.env.xpath.XPathEvaluator;
20
21 /**
22 * Implementation and support of Commons SCXML builtin predicates to support XPath based datamodel operations
23 * for non-XPath languages.
24 *
25 * These static builtin functions delegate to a static {@link }XPathEvaluator} instance.
26 */
27 public class XPathBuiltin {
28
29 private static XPathEvaluator evaluator = new XPathEvaluator();
30
31 /**
32 * Optional static setter to change and override the default {@link XPathEvaluator}
33 * @param evaluator A custom evaluator to be used
34 */
35 public static void setEvaluator(XPathEvaluator evaluator) {
36 XPathBuiltin.evaluator = evaluator;
37 }
38
39 /**
40 * Evaluate an xpath expression returning a data value
41 *
42 * @param ctx variable context
43 * @param expression xpath expression
44 * @return the result of the evaluation
45 * @throws SCXMLExpressionException A malformed expression exception
46 * @see Evaluator#eval(Context, String)
47 */
48 public static Object eval(Context ctx, String expression) throws SCXMLExpressionException {
49 return evaluator.eval(ctx, expression);
50 }
51
52 /**
53 * Evaluate an xpath location that returns a data assignable reference or list of references.
54 * Manifests as "location" attributes of <assign> element.
55 *
56 * @param ctx variable context
57 * @param expression expression
58 * @return The location result.
59 * @throws SCXMLExpressionException A malformed expression exception
60 * @see Evaluator#evalLocation(Context, String)
61 */
62 public static Object evalLocation(Context ctx, String expression) throws SCXMLExpressionException {
63 return evaluator.evalLocation(ctx, expression);
64 }
65
66 /**
67 * Determine if an {@link Evaluator#evalLocation(Context, String)} returned result represents an XPath location
68 * @param ctx variable context
69 * @param data result data from {@link Evaluator#evalLocation(Context, String)}
70 * @return true if the data represents an XPath location
71 * @see XPathEvaluator#isXPathLocation(Context, Object)
72 */
73 public static boolean isXPathLocation(Context ctx, Object data) {
74 return evaluator.isXPathLocation(ctx, data);
75 }
76
77 /**
78 * Assigns data to a location
79 *
80 * @param ctx variable context
81 * @param location location expression
82 * @param data the data to assign.
83 * @param type the type of assignment to perform, null assumes {@link Evaluator.AssignType#REPLACE_CHILDREN}
84 * @param attr the name of the attribute to add when using type {@link Evaluator.AssignType#ADD_ATTRIBUTE}
85 * @throws SCXMLExpressionException A malformed expression exception
86 * @see Evaluator#evalAssign(Context, String, Object, Evaluator.AssignType, String)
87 * @see XPathEvaluator#assign(Context, Object, Object, Evaluator.AssignType, String)
88 */
89 public static void assign(Context ctx, Object location, Object data, Evaluator.AssignType type, String attr)
90 throws SCXMLExpressionException {
91 evaluator.assign(ctx, location, data, type, attr);
92 }
93 }