summaryrefslogtreecommitdiffstats
path: root/test/samples/apache/microwave-02.xml
diff options
context:
space:
mode:
Diffstat (limited to 'test/samples/apache/microwave-02.xml')
-rw-r--r--test/samples/apache/microwave-02.xml87
1 files changed, 87 insertions, 0 deletions
diff --git a/test/samples/apache/microwave-02.xml b/test/samples/apache/microwave-02.xml
new file mode 100644
index 0000000..c03fe05
--- /dev/null
+++ b/test/samples/apache/microwave-02.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0"?>
+<!--
+ * 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 JSP 2.0 EL as the expressions language.
+-->
+<scxml xmlns="http://www.w3.org/2005/07/scxml"
+ xmlns:cs="http://commons.apache.org/scxml"
+ version="1.0"
+ initialstate="microwave">
+
+ <!-- trivial microwave oven example -->
+ <!-- using parallel and In() predicate -->
+
+ <parallel id="microwave">
+ <state id="oven">
+ <initial>
+ <transition target="off"/>
+ </initial>
+
+ <state id="off">
+ <!-- off state -->
+ <transition event="turn_on" target="on"/>
+ </state>
+
+ <state id="on">
+ <initial>
+ <transition target="idle"/>
+ </initial>
+
+ <!-- on/pause state -->
+ <onentry>
+ <!-- we assume the cook_time is passed in as a context parameter -->
+ <if cond="${empty cook_time}">
+ <!-- default setting -->
+ <cs:var name="cook_time" expr="${5}"/>
+ </if>
+ <!-- timer variable -->
+ <cs:var name="timer" expr="${0}"/>
+ </onentry>
+
+ <transition event="turn_off" target="off"/>
+
+ <transition cond="${timer ge cook_time}" target="off"/>
+
+ <state id="idle">
+ <transition cond="${In('closed')}" target="cooking"/>
+ </state>
+
+ <state id="cooking">
+ <transition cond="${not In('closed')}" target="idle"/>
+
+ <transition event="time" target="cooking">
+ <assign name="timer" expr="${timer + 1}"/>
+ </transition>
+ </state>
+ </state>
+ </state>
+
+ <state id="door">
+ <initial>
+ <transition target="closed"/>
+ </initial>
+ <state id="closed">
+ <transition event="door_open" target="open"/>
+ </state>
+ <state id="open">
+ <transition event="door_close" target="closed"/>
+ </state>
+ </state>
+ </parallel>
+
+</scxml>