blob: a38dea456f4712bb28b331ed686c6ab2a9b1b413 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
-->
<!--
This document uses Groovy as the expressions language.
-->
<scxml xmlns="http://www.w3.org/2005/07/scxml"
xmlns:cs="https://commons.apache.org/scxml"
version="1.0"
datamodel="groovy"
initial="state1">
<script>
class Target implements Serializable {
private static final long serialVersionUID = 1L;
int val;
}
def targets(val) {
return target.val eq val;
}
target = new Target(val: 5)
</script>
<state id="state1">
<onentry>
<!-- More appropriate to use the script below to change target value instead of (mis)using an
expression with a modifying side-effect, but the var assignment would work also.
<cs:var name="target" expr="target.val=4;return target" />
-->
<script>
target.val = 4;
</script>
</onentry>
<!-- We'll trigger 'foo.bar.baz' event,
and therefore, must end up in state4 -->
<transition event="*" cond="targets(2)" target="state2"/>
<transition event="foo.*" cond="targets(3)" target="state3"/>
<transition event="foo.bar.*" cond="targets(4)" target="state4"/>
</state>
<final id="state2"/>
<final id="state3"/>
<final id="state4"/>
</scxml>