001// license-header java merge-point
002//
003// Attention: generated code (by Metafacade.vsl) - do not modify!
004//
005package org.andromda.metafacades.uml;
006
007import java.util.Collection;
008
009/**
010 * State machines can be used to express the behavior of part of a system. Behavior is modeled as a
011 * traversal of a graph of state nodes interconnected by one or more joined transition arcs that are
012 * triggered by the dispatching of series of (event) occurrences. During this traversal, the state
013 * machine executes a series of activities associated with various elements of the state machine.
014 *
015 * Metafacade interface to be used by AndroMDA cartridges.
016 */
017public interface StateMachineFacade
018    extends ModelElementFacade
019{
020    /**
021     * Indicates the metafacade type (used for metafacade mappings).
022     *
023     * @return boolean always <code>true</code>
024     */
025    public boolean isStateMachineFacadeMetaType();
026
027    /**
028     * Represents a model element. It may be an Element or NamedElement. A named element is an
029     * element in a
030     * model that may have a name. An element is a constituent of a model. As such, it has the
031     * capability
032     * of owning other elements.
033     * @return ModelElementFacade
034     */
035    public ModelElementFacade getContextElement();
036
037    /**
038     * A special kind of state signifying that the enclosing region is completed. If the enclosing
039     * region
040     * is directly contained in a state machine and all other regions in the state machine also are
041     * completed, then it means that the entire state machine is completed.
042     * @return Collection<FinalStateFacade>
043     */
044    public Collection<FinalStateFacade> getFinalStates();
045
046    /**
047     * The first initial state (if any) found in this activity graph. Although technically many
048     * initial states per graph are allowed, it makes sense to have only one, for this reason we
049     * provide this property.
050     * @return PseudostateFacade
051     */
052    public PseudostateFacade getInitialState();
053
054    /**
055     * An abstraction that encompasses different types of transient vertices in the state machine
056     * graph.
057     * @return Collection<PseudostateFacade>
058     */
059    public Collection<PseudostateFacade> getInitialStates();
060
061    /**
062     * The first transition on the first initial state found for this activity graph.
063     * @return TransitionFacade
064     */
065    public TransitionFacade getInitialTransition();
066
067    /**
068     * An abstraction that encompasses different types of transient vertices in the state machine
069     * graph.
070     * @return Collection<PseudostateFacade>
071     */
072    public Collection<PseudostateFacade> getPseudostates();
073
074    /**
075     * Models a situation during which some (usually implicit) invariant condition holds. The states
076     * of
077     * protocol state machines are exposed to the users of their context classifiers. A protocol
078     * state
079     * represents an exposed stable situation of its context classifier: when an instance of the
080     * classifier
081     * is not processing any operation, users of this instance can always know its state
082     * configuration.
083     * @return Collection<StateFacade>
084     */
085    public Collection<StateFacade> getStates();
086
087    /**
088     * A directed relationship between a source vertex and a target vertex. It may be part of a
089     * compound
090     * transition, which takes the state machine from one state configuration to another,
091     * representing the
092     * complete response of the state machine to an occurrence of an event of a particular type.
093     * @return Collection<TransitionFacade>
094     */
095    public Collection<TransitionFacade> getTransitions();
096}