Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||||||
Action |
|
| 1.625;1.625 |
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.scxml.model; |
|
18 | ||
19 | import java.io.Serializable; |
|
20 | import java.util.Collection; |
|
21 | import java.util.Map; |
|
22 | ||
23 | import org.apache.commons.logging.Log; |
|
24 | import org.apache.commons.scxml.ErrorReporter; |
|
25 | import org.apache.commons.scxml.EventDispatcher; |
|
26 | import org.apache.commons.scxml.SCInstance; |
|
27 | import org.apache.commons.scxml.SCXMLExpressionException; |
|
28 | ||
29 | /** |
|
30 | * An abstract base class for executable elements in SCXML, |
|
31 | * such as <assign>, <log> etc. |
|
32 | * |
|
33 | */ |
|
34 | public abstract class Action implements NamespacePrefixesHolder, |
|
35 | Serializable { |
|
36 | ||
37 | /** |
|
38 | * Link to its parent or container. |
|
39 | */ |
|
40 | private Executable parent; |
|
41 | ||
42 | /** |
|
43 | * The current XML namespaces in the SCXML document for this action node, |
|
44 | * preserved for deferred XPath evaluation. |
|
45 | */ |
|
46 | private Map namespaces; |
|
47 | ||
48 | /** |
|
49 | * Current document namespaces are saved under this key in the parent |
|
50 | * state's context. |
|
51 | */ |
|
52 | private static final String NAMESPACES_KEY = "_ALL_NAMESPACES"; |
|
53 | ||
54 | /** |
|
55 | * Constructor. |
|
56 | */ |
|
57 | public Action() { |
|
58 | 196 | super(); |
59 | 196 | this.parent = null; |
60 | 196 | this.namespaces = null; |
61 | 196 | } |
62 | ||
63 | /** |
|
64 | * Get the Executable parent. |
|
65 | * |
|
66 | * @return Returns the parent. |
|
67 | */ |
|
68 | public final Executable getParent() { |
|
69 | 0 | return parent; |
70 | } |
|
71 | ||
72 | /** |
|
73 | * Set the Executable parent. |
|
74 | * |
|
75 | * @param parent The parent to set. |
|
76 | */ |
|
77 | public final void setParent(final Executable parent) { |
|
78 | 185 | this.parent = parent; |
79 | 185 | } |
80 | ||
81 | /** |
|
82 | * Get the XML namespaces at this action node in the SCXML document. |
|
83 | * |
|
84 | * @return Returns the map of namespaces. |
|
85 | */ |
|
86 | public final Map getNamespaces() { |
|
87 | 113 | return namespaces; |
88 | } |
|
89 | ||
90 | /** |
|
91 | * Set the XML namespaces at this action node in the SCXML document. |
|
92 | * |
|
93 | * @param namespaces The document namespaces. |
|
94 | */ |
|
95 | public final void setNamespaces(final Map namespaces) { |
|
96 | 181 | this.namespaces = namespaces; |
97 | 181 | } |
98 | ||
99 | /** |
|
100 | * Return the parent state. |
|
101 | * |
|
102 | * @return The parent State |
|
103 | * @throws ModelException For an unknown TransitionTarget subclass |
|
104 | */ |
|
105 | public final State getParentState() throws ModelException { |
|
106 | 114 | TransitionTarget tt = parent.getParent(); |
107 | 114 | if (tt instanceof State) { |
108 | 111 | State st = (State) tt; |
109 | 111 | return st; |
110 | 3 | } else if (tt instanceof Parallel || tt instanceof History) { |
111 | 2 | State st = (State) tt.getParent(); |
112 | 2 | return st; |
113 | } else { |
|
114 | 1 | throw new ModelException("Unknown TransitionTarget subclass:" |
115 | + tt.getClass().getName()); |
|
116 | } |
|
117 | } |
|
118 | ||
119 | /** |
|
120 | * Execute this action instance. |
|
121 | * |
|
122 | * @param evtDispatcher The EventDispatcher for this execution instance |
|
123 | * @param errRep The ErrorReporter to broadcast any errors |
|
124 | * during execution. |
|
125 | * @param scInstance The state machine execution instance information. |
|
126 | * @param appLog The application Log. |
|
127 | * @param derivedEvents The collection to which any internal events |
|
128 | * arising from the execution of this action |
|
129 | * must be added. |
|
130 | * |
|
131 | * @throws ModelException If the execution causes the model to enter |
|
132 | * a non-deterministic state. |
|
133 | * @throws SCXMLExpressionException If the execution involves trying |
|
134 | * to evaluate an expression which is malformed. |
|
135 | */ |
|
136 | public abstract void execute(final EventDispatcher evtDispatcher, |
|
137 | final ErrorReporter errRep, final SCInstance scInstance, |
|
138 | final Log appLog, final Collection derivedEvents) |
|
139 | throws ModelException, SCXMLExpressionException; |
|
140 | ||
141 | /** |
|
142 | * Return the key under which the current document namespaces are saved |
|
143 | * in the parent state's context. |
|
144 | * |
|
145 | * @return The namespaces key |
|
146 | */ |
|
147 | protected static String getNamespacesKey() { |
|
148 | 218 | return NAMESPACES_KEY; |
149 | } |
|
150 | ||
151 | } |
|
152 |