View Javadoc

    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.util.Map;
    20
    21  /***
    22   * The class in this SCXML object model that corresponds to the
    23   * &lt;transition&gt; SCXML element. Transition rules are triggered
    24   * by &quot;events&quot; and conditionalized via
    25   * &quot;guard-conditions&quot;.
    26   *
    27   */
    28  public class Transition extends Executable
    29          implements NamespacePrefixesHolder {
    30
    31      /***
    32       * Serial version UID.
    33       */
    34      private static final long serialVersionUID = 1L;
    35
    36      /***
    37       * Property that specifies the trigger for this transition.
    38       */
    39      private String event;
    40
    41      /***
    42       * Optional guard condition.
    43       */
    44      private String cond;
    45
    46      /***
    47       * Optional property that specifies the new state or parallel
    48       * element to transition to. May be specified by reference or in-line.
    49       */
    50      private TransitionTarget target;
    51
    52      /***
    53       * The transition target ID (used by XML Digester only).
    54       */
    55      private String next;
    56
    57      /***
    58       * The path for this transition.
    59       * @see Path
    60       */
    61      private Path path;
    62
    63      /***
    64       * The current XML namespaces in the SCXML document for this action node,
    65       * preserved for deferred XPath evaluation.
    66       */
    67      private Map namespaces;
    68
    69      /***
    70       * Constructor.
    71       */
    72      public Transition() {
    73          super();
    74          this.target = null;
    75          this.path = null;
    76      }
    77
    78      /***
    79       * Get the guard condition (may be null).
    80       *
    81       * @return Returns the cond.
    82       */
    83      public final String getCond() {
    84          return cond;
    85      }
    86
    87      /***
    88       * Set the guard condition.
    89       *
    90       * @param cond The cond to set.
    91       */
    92      public final void setCond(final String cond) {
    93          this.cond = cond;
    94      }
    95
    96      /***
    97       * Get the event that will trigger this transition (pending
    98       * evaluation of the guard condition in favor).
    99       *
    100      * @return Returns the event.
    101      */
    102     public final String getEvent() {
    103         return event;
    104     }
    105
    106     /***
    107      * Set the event that will trigger this transition (pending
    108      * evaluation of the guard condition in favor).
    109      *
    110      * @param event The event to set.
    111      */
    112     public final void setEvent(final String event) {
    113         this.event = event;
    114     }
    115
    116     /***
    117      * Get the XML namespaces at this action node in the SCXML document.
    118      *
    119      * @return Returns the map of namespaces.
    120      */
    121     public final Map getNamespaces() {
    122         return namespaces;
    123     }
    124
    125     /***
    126      * Set the XML namespaces at this action node in the SCXML document.
    127      *
    128      * @param namespaces The document namespaces.
    129      */
    130     public final void setNamespaces(final Map namespaces) {
    131         this.namespaces = namespaces;
    132     }
    133
    134     /***
    135      * Get the transition target (may be null).
    136      *
    137      * @return Returns the target as specified in SCXML markup.
    138      * <p>Remarks: Is <code>null</code> for &quot;stay&quot; transitions.
    139      *  Returns parent (the source node) for &quot;self&quot; transitions.</p>
    140      */
    141     public final TransitionTarget getTarget() {
    142         return target;
    143     }
    144
    145     /***
    146      * Get the runtime transition target, which always resolves to
    147      * a TransitionTarget instance.
    148      *
    149      * @return Returns the actual target of a transition at runtime.
    150      * <p>Remarks: For both the &quot;stay&quot; and &quot;self&quot;
    151      * transitions it returns parent (the source node). This method should
    152      * never return <code>null</code>.</p>
    153      */
    154     public final TransitionTarget getRuntimeTarget() {
    155         if (target != null) {
    156             return target;
    157         }
    158         return getParent();
    159     }
    160
    161
    162     /***
    163      * Set the transition target.
    164      *
    165      * @param target The target to set.
    166      */
    167     public final void setTarget(final TransitionTarget target) {
    168         this.target = target;
    169     }
    170
    171     /***
    172      * Get the ID of the transition target (may be null, if, for example,
    173      * the target is specified inline).
    174      *
    175      * @return String Returns the transition target ID
    176      *                (used by SCXML Digester only).
    177      * @see #getTarget()
    178      */
    179     public final String getNext() {
    180         return next;
    181     }
    182
    183     /***
    184      * Set the transition target by specifying its ID.
    185      *
    186      * @param next The the transition target ID (used by SCXML Digester only).
    187      * @see #setTarget(TransitionTarget)
    188      */
    189     public final void setNext(final String next) {
    190         this.next = next;
    191     }
    192
    193     /***
    194      * Get the path of this transiton.
    195      *
    196      * @see Path
    197      * @return Path returns the transition path
    198      */
    199     public final Path getPath() {
    200         if (path == null) {
    201             path = new Path(getParent(), getTarget());
    202         }
    203         return path;
    204     }
    205
    206 }
    207