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.model;
18
19 import java.util.ArrayList;
20 import java.util.List;
21
22 /**
23 * An abstract base class for state elements in SCXML that can be entered, such as State, Parallel or Final.
24 */
25 public abstract class EnterableState extends TransitionTarget implements DocumentOrder {
26
27 /**
28 * The document order of this state
29 */
30 private int order;
31
32 /**
33 * List of optional OnEntry elements holding executable content to be run upon
34 * entering this transition target.
35 */
36 private List<OnEntry> onEntries;
37
38 /**
39 * List of optional OnExit elements holding executable content to be run upon
40 * exiting this transition target.
41 */
42 private List<OnExit> onExits;
43
44 public EnterableState() {
45 super();
46 onEntries = new ArrayList<OnEntry>();
47 onExits = new ArrayList<OnExit>();
48 }
49
50 /**
51 * @return the document order of this state
52 * @see DocumentOrder
53 */
54 @Override
55 public final int getOrder() {
56 return order;
57 }
58
59 /**
60 * Sets the document order of this state
61 * @param order the document order
62 * @see DocumentOrder
63 */
64 public final void setOrder(int order) {
65 this.order = order;
66 }
67
68 /**
69 * Get the OnEntry elements.
70 *
71 * @return Returns the onEntry elements
72 */
73 public final List<OnEntry> getOnEntries() {
74 return onEntries;
75 }
76
77 /**
78 * Adds an OnEntry element
79 *
80 * @param onEntry The onEntry to add.
81 */
82 public final void addOnEntry(final OnEntry onEntry) {
83 onEntry.setParent(this);
84 onEntries.add(onEntry);
85 }
86
87 /**
88 * Get the OnExit elements
89 *
90 * @return Returns the onExit elements
91 */
92 public final List<OnExit> getOnExits() {
93 return onExits;
94 }
95
96 /**
97 * Add an OnExit element
98 *
99 * @param onExit The onExit to add.
100 */
101 public final void addOnExit(final OnExit onExit) {
102 onExit.setParent(this);
103 onExits.add(onExit);
104 }
105
106 /**
107 * Check whether this is an atomic state.
108 * <p>
109 * An atomic state is a state of type Final or of type State without children,
110 * </p>
111 * @return Returns true if this is an atomic state.
112 */
113 public abstract boolean isAtomicState();
114 }