1------------------------------------------------------------------------------
2--                                                                          --
3--                            Matreshka Project                             --
4--                                                                          --
5--                          Ada Modeling Framework                          --
6--                                                                          --
7--                        Runtime Library Component                         --
8--                                                                          --
9------------------------------------------------------------------------------
10--                                                                          --
11-- Copyright © 2011-2012, Vadim Godunko <vgodunko@gmail.com>                --
12-- All rights reserved.                                                     --
13--                                                                          --
14-- Redistribution and use in source and binary forms, with or without       --
15-- modification, are permitted provided that the following conditions       --
16-- are met:                                                                 --
17--                                                                          --
18--  * Redistributions of source code must retain the above copyright        --
19--    notice, this list of conditions and the following disclaimer.         --
20--                                                                          --
21--  * Redistributions in binary form must reproduce the above copyright     --
22--    notice, this list of conditions and the following disclaimer in the   --
23--    documentation and/or other materials provided with the distribution.  --
24--                                                                          --
25--  * Neither the name of the Vadim Godunko, IE nor the names of its        --
26--    contributors may be used to endorse or promote products derived from  --
27--    this software without specific prior written permission.              --
28--                                                                          --
29-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS      --
30-- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT        --
31-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    --
32-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT     --
33-- HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,   --
34-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED --
35-- TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR   --
36-- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF   --
37-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING     --
38-- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS       --
39-- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.             --
40--                                                                          --
41------------------------------------------------------------------------------
42--  $Revision: 2937 $ $Date: 2012-05-01 21:07:27 +0400 (Tue, 01 May 2012) $
43------------------------------------------------------------------------------
44with AMF.Internals.UML_Classes;
45with AMF.String_Collections;
46with AMF.UML.Behavioral_Features;
47with AMF.UML.Behaviored_Classifiers;
48with AMF.UML.Behaviors.Collections;
49with AMF.UML.Classes.Collections;
50with AMF.UML.Classifier_Template_Parameters;
51with AMF.UML.Classifiers.Collections;
52with AMF.UML.Collaboration_Uses.Collections;
53with AMF.UML.Connectable_Elements.Collections;
54with AMF.UML.Connectors.Collections;
55with AMF.UML.Constraints.Collections;
56with AMF.UML.Dependencies.Collections;
57with AMF.UML.Element_Imports.Collections;
58with AMF.UML.Extensions.Collections;
59with AMF.UML.Features.Collections;
60with AMF.UML.Generalization_Sets.Collections;
61with AMF.UML.Generalizations.Collections;
62with AMF.UML.Interface_Realizations.Collections;
63with AMF.UML.Named_Elements.Collections;
64with AMF.UML.Namespaces;
65with AMF.UML.Operations.Collections;
66with AMF.UML.Package_Imports.Collections;
67with AMF.UML.Packageable_Elements.Collections;
68with AMF.UML.Packages.Collections;
69with AMF.UML.Parameter_Sets.Collections;
70with AMF.UML.Parameterable_Elements.Collections;
71with AMF.UML.Parameters.Collections;
72with AMF.UML.Ports.Collections;
73with AMF.UML.Properties.Collections;
74with AMF.UML.Pseudostates.Collections;
75with AMF.UML.Receptions.Collections;
76with AMF.UML.Redefinable_Elements.Collections;
77with AMF.UML.Redefinable_Template_Signatures;
78with AMF.UML.Regions.Collections;
79with AMF.UML.State_Machines.Collections;
80with AMF.UML.States.Collections;
81with AMF.UML.String_Expressions;
82with AMF.UML.Substitutions.Collections;
83with AMF.UML.Template_Bindings.Collections;
84with AMF.UML.Template_Parameters;
85with AMF.UML.Template_Signatures;
86with AMF.UML.Types;
87with AMF.UML.Use_Cases.Collections;
88with AMF.Visitors;
89
90package AMF.Internals.UML_State_Machines is
91
92   type UML_State_Machine_Proxy is
93     limited new AMF.Internals.UML_Classes.UML_Class_Proxy
94       and AMF.UML.State_Machines.UML_State_Machine with null record;
95
96   overriding function Get_Connection_Point
97    (Self : not null access constant UML_State_Machine_Proxy)
98       return AMF.UML.Pseudostates.Collections.Set_Of_UML_Pseudostate;
99   --  Getter of StateMachine::connectionPoint.
100   --
101   --  The connection points defined for this state machine. They represent
102   --  the interface of the state machine when used as part of submachine
103   --  state.
104
105   overriding function Get_Extended_State_Machine
106    (Self : not null access constant UML_State_Machine_Proxy)
107       return AMF.UML.State_Machines.Collections.Set_Of_UML_State_Machine;
108   --  Getter of StateMachine::extendedStateMachine.
109   --
110   --  The state machines of which this is an extension.
111
112   overriding function Get_Region
113    (Self : not null access constant UML_State_Machine_Proxy)
114       return AMF.UML.Regions.Collections.Set_Of_UML_Region;
115   --  Getter of StateMachine::region.
116   --
117   --  The regions owned directly by the state machine.
118
119   overriding function Get_Submachine_State
120    (Self : not null access constant UML_State_Machine_Proxy)
121       return AMF.UML.States.Collections.Set_Of_UML_State;
122   --  Getter of StateMachine::submachineState.
123   --
124   --  References the submachine(s) in case of a submachine state. Multiple
125   --  machines are referenced in case of a concurrent state.
126
127   overriding function Get_Context
128    (Self : not null access constant UML_State_Machine_Proxy)
129       return AMF.UML.Behaviored_Classifiers.UML_Behaviored_Classifier_Access;
130   --  Getter of Behavior::context.
131   --
132   --  The classifier that is the context for the execution of the behavior.
133   --  If the behavior is owned by a BehavioredClassifier, that classifier is
134   --  the context. Otherwise, the context is the first BehavioredClassifier
135   --  reached by following the chain of owner relationships. For example,
136   --  following this algorithm, the context of an entry action in a state
137   --  machine is the classifier that owns the state machine. The features of
138   --  the context classifier as well as the elements visible to the context
139   --  classifier are visible to the behavior.
140
141   overriding function Get_Is_Reentrant
142    (Self : not null access constant UML_State_Machine_Proxy)
143       return Boolean;
144   --  Getter of Behavior::isReentrant.
145   --
146   --  Tells whether the behavior can be invoked while it is still executing
147   --  from a previous invocation.
148
149   overriding procedure Set_Is_Reentrant
150    (Self : not null access UML_State_Machine_Proxy;
151     To   : Boolean);
152   --  Setter of Behavior::isReentrant.
153   --
154   --  Tells whether the behavior can be invoked while it is still executing
155   --  from a previous invocation.
156
157   overriding function Get_Owned_Parameter
158    (Self : not null access constant UML_State_Machine_Proxy)
159       return AMF.UML.Parameters.Collections.Ordered_Set_Of_UML_Parameter;
160   --  Getter of Behavior::ownedParameter.
161   --
162   --  References a list of parameters to the behavior which describes the
163   --  order and type of arguments that can be given when the behavior is
164   --  invoked and of the values which will be returned when the behavior
165   --  completes its execution.
166
167   overriding function Get_Owned_Parameter_Set
168    (Self : not null access constant UML_State_Machine_Proxy)
169       return AMF.UML.Parameter_Sets.Collections.Set_Of_UML_Parameter_Set;
170   --  Getter of Behavior::ownedParameterSet.
171   --
172   --  The ParameterSets owned by this Behavior.
173
174   overriding function Get_Postcondition
175    (Self : not null access constant UML_State_Machine_Proxy)
176       return AMF.UML.Constraints.Collections.Set_Of_UML_Constraint;
177   --  Getter of Behavior::postcondition.
178   --
179   --  An optional set of Constraints specifying what is fulfilled after the
180   --  execution of the behavior is completed, if its precondition was
181   --  fulfilled before its invocation.
182
183   overriding function Get_Precondition
184    (Self : not null access constant UML_State_Machine_Proxy)
185       return AMF.UML.Constraints.Collections.Set_Of_UML_Constraint;
186   --  Getter of Behavior::precondition.
187   --
188   --  An optional set of Constraints specifying what must be fulfilled when
189   --  the behavior is invoked.
190
191   overriding function Get_Redefined_Behavior
192    (Self : not null access constant UML_State_Machine_Proxy)
193       return AMF.UML.Behaviors.Collections.Set_Of_UML_Behavior;
194   --  Getter of Behavior::redefinedBehavior.
195   --
196   --  References a behavior that this behavior redefines. A subtype of
197   --  Behavior may redefine any other subtype of Behavior. If the behavior
198   --  implements a behavioral feature, it replaces the redefined behavior. If
199   --  the behavior is a classifier behavior, it extends the redefined
200   --  behavior.
201
202   overriding function Get_Specification
203    (Self : not null access constant UML_State_Machine_Proxy)
204       return AMF.UML.Behavioral_Features.UML_Behavioral_Feature_Access;
205   --  Getter of Behavior::specification.
206   --
207   --  Designates a behavioral feature that the behavior implements. The
208   --  behavioral feature must be owned by the classifier that owns the
209   --  behavior or be inherited by it. The parameters of the behavioral
210   --  feature and the implementing behavior must match. A behavior does not
211   --  need to have a specification, in which case it either is the classifer
212   --  behavior of a BehavioredClassifier or it can only be invoked by another
213   --  behavior of the classifier.
214
215   overriding procedure Set_Specification
216    (Self : not null access UML_State_Machine_Proxy;
217     To   : AMF.UML.Behavioral_Features.UML_Behavioral_Feature_Access);
218   --  Setter of Behavior::specification.
219   --
220   --  Designates a behavioral feature that the behavior implements. The
221   --  behavioral feature must be owned by the classifier that owns the
222   --  behavior or be inherited by it. The parameters of the behavioral
223   --  feature and the implementing behavior must match. A behavior does not
224   --  need to have a specification, in which case it either is the classifer
225   --  behavior of a BehavioredClassifier or it can only be invoked by another
226   --  behavior of the classifier.
227
228   overriding function Get_Extension
229    (Self : not null access constant UML_State_Machine_Proxy)
230       return AMF.UML.Extensions.Collections.Set_Of_UML_Extension;
231   --  Getter of Class::extension.
232   --
233   --  References the Extensions that specify additional properties of the
234   --  metaclass. The property is derived from the extensions whose memberEnds
235   --  are typed by the Class.
236
237   overriding function Get_Is_Abstract
238    (Self : not null access constant UML_State_Machine_Proxy)
239       return Boolean;
240   --  Getter of Class::isAbstract.
241   --
242   --  True when a class is abstract.
243   --  If true, the Classifier does not provide a complete declaration and can
244   --  typically not be instantiated. An abstract classifier is intended to be
245   --  used by other classifiers e.g. as the target of general
246   --  metarelationships or generalization relationships.
247
248   overriding function Get_Is_Active
249    (Self : not null access constant UML_State_Machine_Proxy)
250       return Boolean;
251   --  Getter of Class::isActive.
252   --
253   --  Determines whether an object specified by this class is active or not.
254   --  If true, then the owning class is referred to as an active class. If
255   --  false, then such a class is referred to as a passive class.
256
257   overriding procedure Set_Is_Active
258    (Self : not null access UML_State_Machine_Proxy;
259     To   : Boolean);
260   --  Setter of Class::isActive.
261   --
262   --  Determines whether an object specified by this class is active or not.
263   --  If true, then the owning class is referred to as an active class. If
264   --  false, then such a class is referred to as a passive class.
265
266   overriding function Get_Nested_Classifier
267    (Self : not null access constant UML_State_Machine_Proxy)
268       return AMF.UML.Classifiers.Collections.Ordered_Set_Of_UML_Classifier;
269   --  Getter of Class::nestedClassifier.
270   --
271   --  References all the Classifiers that are defined (nested) within the
272   --  Class.
273
274   overriding function Get_Owned_Attribute
275    (Self : not null access constant UML_State_Machine_Proxy)
276       return AMF.UML.Properties.Collections.Ordered_Set_Of_UML_Property;
277   --  Getter of Class::ownedAttribute.
278   --
279   --  The attributes (i.e. the properties) owned by the class.
280
281   overriding function Get_Owned_Operation
282    (Self : not null access constant UML_State_Machine_Proxy)
283       return AMF.UML.Operations.Collections.Ordered_Set_Of_UML_Operation;
284   --  Getter of Class::ownedOperation.
285   --
286   --  The operations owned by the class.
287
288   overriding function Get_Owned_Reception
289    (Self : not null access constant UML_State_Machine_Proxy)
290       return AMF.UML.Receptions.Collections.Set_Of_UML_Reception;
291   --  Getter of Class::ownedReception.
292   --
293   --  Receptions that objects of this class are willing to accept.
294
295   overriding function Get_Super_Class
296    (Self : not null access constant UML_State_Machine_Proxy)
297       return AMF.UML.Classes.Collections.Set_Of_UML_Class;
298   --  Getter of Class::superClass.
299   --
300   --  This gives the superclasses of a class.
301
302   overriding function Get_Classifier_Behavior
303    (Self : not null access constant UML_State_Machine_Proxy)
304       return AMF.UML.Behaviors.UML_Behavior_Access;
305   --  Getter of BehavioredClassifier::classifierBehavior.
306   --
307   --  A behavior specification that specifies the behavior of the classifier
308   --  itself.
309
310   overriding procedure Set_Classifier_Behavior
311    (Self : not null access UML_State_Machine_Proxy;
312     To   : AMF.UML.Behaviors.UML_Behavior_Access);
313   --  Setter of BehavioredClassifier::classifierBehavior.
314   --
315   --  A behavior specification that specifies the behavior of the classifier
316   --  itself.
317
318   overriding function Get_Interface_Realization
319    (Self : not null access constant UML_State_Machine_Proxy)
320       return AMF.UML.Interface_Realizations.Collections.Set_Of_UML_Interface_Realization;
321   --  Getter of BehavioredClassifier::interfaceRealization.
322   --
323   --  The set of InterfaceRealizations owned by the BehavioredClassifier.
324   --  Interface realizations reference the Interfaces of which the
325   --  BehavioredClassifier is an implementation.
326
327   overriding function Get_Owned_Behavior
328    (Self : not null access constant UML_State_Machine_Proxy)
329       return AMF.UML.Behaviors.Collections.Set_Of_UML_Behavior;
330   --  Getter of BehavioredClassifier::ownedBehavior.
331   --
332   --  References behavior specifications owned by a classifier.
333
334   overriding function Get_Attribute
335    (Self : not null access constant UML_State_Machine_Proxy)
336       return AMF.UML.Properties.Collections.Set_Of_UML_Property;
337   --  Getter of Classifier::attribute.
338   --
339   --  Refers to all of the Properties that are direct (i.e. not inherited or
340   --  imported) attributes of the classifier.
341
342   overriding function Get_Collaboration_Use
343    (Self : not null access constant UML_State_Machine_Proxy)
344       return AMF.UML.Collaboration_Uses.Collections.Set_Of_UML_Collaboration_Use;
345   --  Getter of Classifier::collaborationUse.
346   --
347   --  References the collaboration uses owned by the classifier.
348
349   overriding function Get_Feature
350    (Self : not null access constant UML_State_Machine_Proxy)
351       return AMF.UML.Features.Collections.Set_Of_UML_Feature;
352   --  Getter of Classifier::feature.
353   --
354   --  Specifies each feature defined in the classifier.
355   --  Note that there may be members of the Classifier that are of the type
356   --  Feature but are not included in this association, e.g. inherited
357   --  features.
358
359   overriding function Get_General
360    (Self : not null access constant UML_State_Machine_Proxy)
361       return AMF.UML.Classifiers.Collections.Set_Of_UML_Classifier;
362   --  Getter of Classifier::general.
363   --
364   --  Specifies the general Classifiers for this Classifier.
365   --  References the general classifier in the Generalization relationship.
366
367   overriding function Get_Generalization
368    (Self : not null access constant UML_State_Machine_Proxy)
369       return AMF.UML.Generalizations.Collections.Set_Of_UML_Generalization;
370   --  Getter of Classifier::generalization.
371   --
372   --  Specifies the Generalization relationships for this Classifier. These
373   --  Generalizations navigaten to more general classifiers in the
374   --  generalization hierarchy.
375
376   overriding function Get_Inherited_Member
377    (Self : not null access constant UML_State_Machine_Proxy)
378       return AMF.UML.Named_Elements.Collections.Set_Of_UML_Named_Element;
379   --  Getter of Classifier::inheritedMember.
380   --
381   --  Specifies all elements inherited by this classifier from the general
382   --  classifiers.
383
384   overriding function Get_Is_Final_Specialization
385    (Self : not null access constant UML_State_Machine_Proxy)
386       return Boolean;
387   --  Getter of Classifier::isFinalSpecialization.
388   --
389   --  If true, the Classifier cannot be specialized by generalization. Note
390   --  that this property is preserved through package merge operations; that
391   --  is, the capability to specialize a Classifier (i.e.,
392   --  isFinalSpecialization =false) must be preserved in the resulting
393   --  Classifier of a package merge operation where a Classifier with
394   --  isFinalSpecialization =false is merged with a matching Classifier with
395   --  isFinalSpecialization =true: the resulting Classifier will have
396   --  isFinalSpecialization =false.
397
398   overriding procedure Set_Is_Final_Specialization
399    (Self : not null access UML_State_Machine_Proxy;
400     To   : Boolean);
401   --  Setter of Classifier::isFinalSpecialization.
402   --
403   --  If true, the Classifier cannot be specialized by generalization. Note
404   --  that this property is preserved through package merge operations; that
405   --  is, the capability to specialize a Classifier (i.e.,
406   --  isFinalSpecialization =false) must be preserved in the resulting
407   --  Classifier of a package merge operation where a Classifier with
408   --  isFinalSpecialization =false is merged with a matching Classifier with
409   --  isFinalSpecialization =true: the resulting Classifier will have
410   --  isFinalSpecialization =false.
411
412   overriding function Get_Owned_Template_Signature
413    (Self : not null access constant UML_State_Machine_Proxy)
414       return AMF.UML.Redefinable_Template_Signatures.UML_Redefinable_Template_Signature_Access;
415   --  Getter of Classifier::ownedTemplateSignature.
416   --
417   --  The optional template signature specifying the formal template
418   --  parameters.
419
420   overriding procedure Set_Owned_Template_Signature
421    (Self : not null access UML_State_Machine_Proxy;
422     To   : AMF.UML.Redefinable_Template_Signatures.UML_Redefinable_Template_Signature_Access);
423   --  Setter of Classifier::ownedTemplateSignature.
424   --
425   --  The optional template signature specifying the formal template
426   --  parameters.
427
428   overriding function Get_Owned_Use_Case
429    (Self : not null access constant UML_State_Machine_Proxy)
430       return AMF.UML.Use_Cases.Collections.Set_Of_UML_Use_Case;
431   --  Getter of Classifier::ownedUseCase.
432   --
433   --  References the use cases owned by this classifier.
434
435   overriding function Get_Powertype_Extent
436    (Self : not null access constant UML_State_Machine_Proxy)
437       return AMF.UML.Generalization_Sets.Collections.Set_Of_UML_Generalization_Set;
438   --  Getter of Classifier::powertypeExtent.
439   --
440   --  Designates the GeneralizationSet of which the associated Classifier is
441   --  a power type.
442
443   overriding function Get_Redefined_Classifier
444    (Self : not null access constant UML_State_Machine_Proxy)
445       return AMF.UML.Classifiers.Collections.Set_Of_UML_Classifier;
446   --  Getter of Classifier::redefinedClassifier.
447   --
448   --  References the Classifiers that are redefined by this Classifier.
449
450   overriding function Get_Representation
451    (Self : not null access constant UML_State_Machine_Proxy)
452       return AMF.UML.Collaboration_Uses.UML_Collaboration_Use_Access;
453   --  Getter of Classifier::representation.
454   --
455   --  References a collaboration use which indicates the collaboration that
456   --  represents this classifier.
457
458   overriding procedure Set_Representation
459    (Self : not null access UML_State_Machine_Proxy;
460     To   : AMF.UML.Collaboration_Uses.UML_Collaboration_Use_Access);
461   --  Setter of Classifier::representation.
462   --
463   --  References a collaboration use which indicates the collaboration that
464   --  represents this classifier.
465
466   overriding function Get_Substitution
467    (Self : not null access constant UML_State_Machine_Proxy)
468       return AMF.UML.Substitutions.Collections.Set_Of_UML_Substitution;
469   --  Getter of Classifier::substitution.
470   --
471   --  References the substitutions that are owned by this Classifier.
472
473   overriding function Get_Template_Parameter
474    (Self : not null access constant UML_State_Machine_Proxy)
475       return AMF.UML.Classifier_Template_Parameters.UML_Classifier_Template_Parameter_Access;
476   --  Getter of Classifier::templateParameter.
477   --
478   --  The template parameter that exposes this element as a formal parameter.
479
480   overriding procedure Set_Template_Parameter
481    (Self : not null access UML_State_Machine_Proxy;
482     To   : AMF.UML.Classifier_Template_Parameters.UML_Classifier_Template_Parameter_Access);
483   --  Setter of Classifier::templateParameter.
484   --
485   --  The template parameter that exposes this element as a formal parameter.
486
487   overriding function Get_Use_Case
488    (Self : not null access constant UML_State_Machine_Proxy)
489       return AMF.UML.Use_Cases.Collections.Set_Of_UML_Use_Case;
490   --  Getter of Classifier::useCase.
491   --
492   --  The set of use cases for which this Classifier is the subject.
493
494   overriding function Get_Element_Import
495    (Self : not null access constant UML_State_Machine_Proxy)
496       return AMF.UML.Element_Imports.Collections.Set_Of_UML_Element_Import;
497   --  Getter of Namespace::elementImport.
498   --
499   --  References the ElementImports owned by the Namespace.
500
501   overriding function Get_Imported_Member
502    (Self : not null access constant UML_State_Machine_Proxy)
503       return AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element;
504   --  Getter of Namespace::importedMember.
505   --
506   --  References the PackageableElements that are members of this Namespace
507   --  as a result of either PackageImports or ElementImports.
508
509   overriding function Get_Member
510    (Self : not null access constant UML_State_Machine_Proxy)
511       return AMF.UML.Named_Elements.Collections.Set_Of_UML_Named_Element;
512   --  Getter of Namespace::member.
513   --
514   --  A collection of NamedElements identifiable within the Namespace, either
515   --  by being owned or by being introduced by importing or inheritance.
516
517   overriding function Get_Owned_Member
518    (Self : not null access constant UML_State_Machine_Proxy)
519       return AMF.UML.Named_Elements.Collections.Set_Of_UML_Named_Element;
520   --  Getter of Namespace::ownedMember.
521   --
522   --  A collection of NamedElements owned by the Namespace.
523
524   overriding function Get_Owned_Rule
525    (Self : not null access constant UML_State_Machine_Proxy)
526       return AMF.UML.Constraints.Collections.Set_Of_UML_Constraint;
527   --  Getter of Namespace::ownedRule.
528   --
529   --  Specifies a set of Constraints owned by this Namespace.
530
531   overriding function Get_Package_Import
532    (Self : not null access constant UML_State_Machine_Proxy)
533       return AMF.UML.Package_Imports.Collections.Set_Of_UML_Package_Import;
534   --  Getter of Namespace::packageImport.
535   --
536   --  References the PackageImports owned by the Namespace.
537
538   overriding function Get_Client_Dependency
539    (Self : not null access constant UML_State_Machine_Proxy)
540       return AMF.UML.Dependencies.Collections.Set_Of_UML_Dependency;
541   --  Getter of NamedElement::clientDependency.
542   --
543   --  Indicates the dependencies that reference the client.
544
545   overriding function Get_Name_Expression
546    (Self : not null access constant UML_State_Machine_Proxy)
547       return AMF.UML.String_Expressions.UML_String_Expression_Access;
548   --  Getter of NamedElement::nameExpression.
549   --
550   --  The string expression used to define the name of this named element.
551
552   overriding procedure Set_Name_Expression
553    (Self : not null access UML_State_Machine_Proxy;
554     To   : AMF.UML.String_Expressions.UML_String_Expression_Access);
555   --  Setter of NamedElement::nameExpression.
556   --
557   --  The string expression used to define the name of this named element.
558
559   overriding function Get_Namespace
560    (Self : not null access constant UML_State_Machine_Proxy)
561       return AMF.UML.Namespaces.UML_Namespace_Access;
562   --  Getter of NamedElement::namespace.
563   --
564   --  Specifies the namespace that owns the NamedElement.
565
566   overriding function Get_Qualified_Name
567    (Self : not null access constant UML_State_Machine_Proxy)
568       return AMF.Optional_String;
569   --  Getter of NamedElement::qualifiedName.
570   --
571   --  A name which allows the NamedElement to be identified within a
572   --  hierarchy of nested Namespaces. It is constructed from the names of the
573   --  containing namespaces starting at the root of the hierarchy and ending
574   --  with the name of the NamedElement itself.
575
576   overriding function Get_Package
577    (Self : not null access constant UML_State_Machine_Proxy)
578       return AMF.UML.Packages.UML_Package_Access;
579   --  Getter of Type::package.
580   --
581   --  Specifies the owning package of this classifier, if any.
582
583   overriding procedure Set_Package
584    (Self : not null access UML_State_Machine_Proxy;
585     To   : AMF.UML.Packages.UML_Package_Access);
586   --  Setter of Type::package.
587   --
588   --  Specifies the owning package of this classifier, if any.
589
590   overriding function Get_Owning_Template_Parameter
591    (Self : not null access constant UML_State_Machine_Proxy)
592       return AMF.UML.Template_Parameters.UML_Template_Parameter_Access;
593   --  Getter of ParameterableElement::owningTemplateParameter.
594   --
595   --  The formal template parameter that owns this element.
596
597   overriding procedure Set_Owning_Template_Parameter
598    (Self : not null access UML_State_Machine_Proxy;
599     To   : AMF.UML.Template_Parameters.UML_Template_Parameter_Access);
600   --  Setter of ParameterableElement::owningTemplateParameter.
601   --
602   --  The formal template parameter that owns this element.
603
604   overriding function Get_Template_Parameter
605    (Self : not null access constant UML_State_Machine_Proxy)
606       return AMF.UML.Template_Parameters.UML_Template_Parameter_Access;
607   --  Getter of ParameterableElement::templateParameter.
608   --
609   --  The template parameter that exposes this element as a formal parameter.
610
611   overriding procedure Set_Template_Parameter
612    (Self : not null access UML_State_Machine_Proxy;
613     To   : AMF.UML.Template_Parameters.UML_Template_Parameter_Access);
614   --  Setter of ParameterableElement::templateParameter.
615   --
616   --  The template parameter that exposes this element as a formal parameter.
617
618   overriding function Get_Owned_Template_Signature
619    (Self : not null access constant UML_State_Machine_Proxy)
620       return AMF.UML.Template_Signatures.UML_Template_Signature_Access;
621   --  Getter of TemplateableElement::ownedTemplateSignature.
622   --
623   --  The optional template signature specifying the formal template
624   --  parameters.
625
626   overriding procedure Set_Owned_Template_Signature
627    (Self : not null access UML_State_Machine_Proxy;
628     To   : AMF.UML.Template_Signatures.UML_Template_Signature_Access);
629   --  Setter of TemplateableElement::ownedTemplateSignature.
630   --
631   --  The optional template signature specifying the formal template
632   --  parameters.
633
634   overriding function Get_Template_Binding
635    (Self : not null access constant UML_State_Machine_Proxy)
636       return AMF.UML.Template_Bindings.Collections.Set_Of_UML_Template_Binding;
637   --  Getter of TemplateableElement::templateBinding.
638   --
639   --  The optional bindings from this element to templates.
640
641   overriding function Get_Is_Leaf
642    (Self : not null access constant UML_State_Machine_Proxy)
643       return Boolean;
644   --  Getter of RedefinableElement::isLeaf.
645   --
646   --  Indicates whether it is possible to further redefine a
647   --  RedefinableElement. If the value is true, then it is not possible to
648   --  further redefine the RedefinableElement. Note that this property is
649   --  preserved through package merge operations; that is, the capability to
650   --  redefine a RedefinableElement (i.e., isLeaf=false) must be preserved in
651   --  the resulting RedefinableElement of a package merge operation where a
652   --  RedefinableElement with isLeaf=false is merged with a matching
653   --  RedefinableElement with isLeaf=true: the resulting RedefinableElement
654   --  will have isLeaf=false. Default value is false.
655
656   overriding procedure Set_Is_Leaf
657    (Self : not null access UML_State_Machine_Proxy;
658     To   : Boolean);
659   --  Setter of RedefinableElement::isLeaf.
660   --
661   --  Indicates whether it is possible to further redefine a
662   --  RedefinableElement. If the value is true, then it is not possible to
663   --  further redefine the RedefinableElement. Note that this property is
664   --  preserved through package merge operations; that is, the capability to
665   --  redefine a RedefinableElement (i.e., isLeaf=false) must be preserved in
666   --  the resulting RedefinableElement of a package merge operation where a
667   --  RedefinableElement with isLeaf=false is merged with a matching
668   --  RedefinableElement with isLeaf=true: the resulting RedefinableElement
669   --  will have isLeaf=false. Default value is false.
670
671   overriding function Get_Redefined_Element
672    (Self : not null access constant UML_State_Machine_Proxy)
673       return AMF.UML.Redefinable_Elements.Collections.Set_Of_UML_Redefinable_Element;
674   --  Getter of RedefinableElement::redefinedElement.
675   --
676   --  The redefinable element that is being redefined by this element.
677
678   overriding function Get_Redefinition_Context
679    (Self : not null access constant UML_State_Machine_Proxy)
680       return AMF.UML.Classifiers.Collections.Set_Of_UML_Classifier;
681   --  Getter of RedefinableElement::redefinitionContext.
682   --
683   --  References the contexts that this element may be redefined from.
684
685   overriding function Get_Owned_Port
686    (Self : not null access constant UML_State_Machine_Proxy)
687       return AMF.UML.Ports.Collections.Set_Of_UML_Port;
688   --  Getter of EncapsulatedClassifier::ownedPort.
689   --
690   --  References a set of ports that an encapsulated classifier owns.
691
692   overriding function Get_Owned_Connector
693    (Self : not null access constant UML_State_Machine_Proxy)
694       return AMF.UML.Connectors.Collections.Set_Of_UML_Connector;
695   --  Getter of StructuredClassifier::ownedConnector.
696   --
697   --  References the connectors owned by the classifier.
698
699   overriding function Get_Part
700    (Self : not null access constant UML_State_Machine_Proxy)
701       return AMF.UML.Properties.Collections.Set_Of_UML_Property;
702   --  Getter of StructuredClassifier::part.
703   --
704   --  References the properties specifying instances that the classifier owns
705   --  by composition. This association is derived, selecting those owned
706   --  properties where isComposite is true.
707
708   overriding function Get_Role
709    (Self : not null access constant UML_State_Machine_Proxy)
710       return AMF.UML.Connectable_Elements.Collections.Set_Of_UML_Connectable_Element;
711   --  Getter of StructuredClassifier::role.
712   --
713   --  References the roles that instances may play in this classifier.
714
715   overriding function LCA
716    (Self : not null access constant UML_State_Machine_Proxy;
717     S1 : AMF.UML.States.UML_State_Access;
718     S2 : AMF.UML.States.UML_State_Access)
719       return AMF.UML.Namespaces.UML_Namespace_Access;
720   --  Operation StateMachine::LCA.
721   --
722   --  The operation LCA(s1,s2) returns an orthogonal state or region which is
723   --  the least common ancestor of states s1 and s2, based on the
724   --  statemachine containment hierarchy.
725
726   overriding function Ancestor
727    (Self : not null access constant UML_State_Machine_Proxy;
728     S1 : AMF.UML.States.UML_State_Access;
729     S2 : AMF.UML.States.UML_State_Access)
730       return Boolean;
731   --  Operation StateMachine::ancestor.
732   --
733   --  The query ancestor(s1, s2) checks whether s1 is an ancestor state of
734   --  state s2.
735
736   overriding function Is_Consistent_With
737    (Self : not null access constant UML_State_Machine_Proxy;
738     Redefinee : AMF.UML.Redefinable_Elements.UML_Redefinable_Element_Access)
739       return Boolean;
740   --  Operation StateMachine::isConsistentWith.
741   --
742   --  The query isConsistentWith() specifies that a redefining state machine
743   --  is consistent with a redefined state machine provided that the
744   --  redefining state machine is an extension of the redefined state
745   --  machine: Regions are inherited and regions can be added, inherited
746   --  regions can be redefined. In case of multiple redefining state
747   --  machines, extension implies that the redefining state machine gets
748   --  orthogonal regions for each of the redefined state machines.
749
750   overriding function Is_Redefinition_Context_Valid
751    (Self : not null access constant UML_State_Machine_Proxy;
752     Redefined : AMF.UML.State_Machines.UML_State_Machine_Access)
753       return Boolean;
754   --  Operation StateMachine::isRedefinitionContextValid.
755   --
756   --  The query isRedefinitionContextValid() specifies whether the
757   --  redefinition contexts of a statemachine are properly related to the
758   --  redefinition contexts of the specified statemachine to allow this
759   --  element to redefine the other. The containing classifier of a
760   --  redefining statemachine must redefine the containing classifier of the
761   --  redefined statemachine.
762
763   overriding function Context
764    (Self : not null access constant UML_State_Machine_Proxy)
765       return AMF.UML.Behaviored_Classifiers.UML_Behaviored_Classifier_Access;
766   --  Operation Behavior::context.
767   --
768   --  Missing derivation for Behavior::/context : BehavioredClassifier
769
770   overriding function Extension
771    (Self : not null access constant UML_State_Machine_Proxy)
772       return AMF.UML.Extensions.Collections.Set_Of_UML_Extension;
773   --  Operation Class::extension.
774   --
775   --  Missing derivation for Class::/extension : Extension
776
777   overriding function Inherit
778    (Self : not null access constant UML_State_Machine_Proxy;
779     Inhs : AMF.UML.Named_Elements.Collections.Set_Of_UML_Named_Element)
780       return AMF.UML.Named_Elements.Collections.Set_Of_UML_Named_Element;
781   --  Operation Class::inherit.
782   --
783   --  The inherit operation is overridden to exclude redefined properties.
784
785   overriding function Super_Class
786    (Self : not null access constant UML_State_Machine_Proxy)
787       return AMF.UML.Classes.Collections.Set_Of_UML_Class;
788   --  Operation Class::superClass.
789   --
790   --  Missing derivation for Class::/superClass : Class
791
792   overriding function All_Features
793    (Self : not null access constant UML_State_Machine_Proxy)
794       return AMF.UML.Features.Collections.Set_Of_UML_Feature;
795   --  Operation Classifier::allFeatures.
796   --
797   --  The query allFeatures() gives all of the features in the namespace of
798   --  the classifier. In general, through mechanisms such as inheritance,
799   --  this will be a larger set than feature.
800
801   overriding function Conforms_To
802    (Self : not null access constant UML_State_Machine_Proxy;
803     Other : AMF.UML.Classifiers.UML_Classifier_Access)
804       return Boolean;
805   --  Operation Classifier::conformsTo.
806   --
807   --  The query conformsTo() gives true for a classifier that defines a type
808   --  that conforms to another. This is used, for example, in the
809   --  specification of signature conformance for operations.
810
811   overriding function General
812    (Self : not null access constant UML_State_Machine_Proxy)
813       return AMF.UML.Classifiers.Collections.Set_Of_UML_Classifier;
814   --  Operation Classifier::general.
815   --
816   --  The general classifiers are the classifiers referenced by the
817   --  generalization relationships.
818
819   overriding function Has_Visibility_Of
820    (Self : not null access constant UML_State_Machine_Proxy;
821     N : AMF.UML.Named_Elements.UML_Named_Element_Access)
822       return Boolean;
823   --  Operation Classifier::hasVisibilityOf.
824   --
825   --  The query hasVisibilityOf() determines whether a named element is
826   --  visible in the classifier. By default all are visible. It is only
827   --  called when the argument is something owned by a parent.
828
829   overriding function Inheritable_Members
830    (Self : not null access constant UML_State_Machine_Proxy;
831     C : AMF.UML.Classifiers.UML_Classifier_Access)
832       return AMF.UML.Named_Elements.Collections.Set_Of_UML_Named_Element;
833   --  Operation Classifier::inheritableMembers.
834   --
835   --  The query inheritableMembers() gives all of the members of a classifier
836   --  that may be inherited in one of its descendants, subject to whatever
837   --  visibility restrictions apply.
838
839   overriding function Inherited_Member
840    (Self : not null access constant UML_State_Machine_Proxy)
841       return AMF.UML.Named_Elements.Collections.Set_Of_UML_Named_Element;
842   --  Operation Classifier::inheritedMember.
843   --
844   --  The inheritedMember association is derived by inheriting the
845   --  inheritable members of the parents.
846   --  The inheritedMember association is derived by inheriting the
847   --  inheritable members of the parents.
848
849   overriding function Is_Template
850    (Self : not null access constant UML_State_Machine_Proxy)
851       return Boolean;
852   --  Operation Classifier::isTemplate.
853   --
854   --  The query isTemplate() returns whether this templateable element is
855   --  actually a template.
856
857   overriding function May_Specialize_Type
858    (Self : not null access constant UML_State_Machine_Proxy;
859     C : AMF.UML.Classifiers.UML_Classifier_Access)
860       return Boolean;
861   --  Operation Classifier::maySpecializeType.
862   --
863   --  The query maySpecializeType() determines whether this classifier may
864   --  have a generalization relationship to classifiers of the specified
865   --  type. By default a classifier may specialize classifiers of the same or
866   --  a more general type. It is intended to be redefined by classifiers that
867   --  have different specialization constraints.
868
869   overriding function Exclude_Collisions
870    (Self : not null access constant UML_State_Machine_Proxy;
871     Imps : AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element)
872       return AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element;
873   --  Operation Namespace::excludeCollisions.
874   --
875   --  The query excludeCollisions() excludes from a set of
876   --  PackageableElements any that would not be distinguishable from each
877   --  other in this namespace.
878
879   overriding function Get_Names_Of_Member
880    (Self : not null access constant UML_State_Machine_Proxy;
881     Element : AMF.UML.Named_Elements.UML_Named_Element_Access)
882       return AMF.String_Collections.Set_Of_String;
883   --  Operation Namespace::getNamesOfMember.
884   --
885   --  The query getNamesOfMember() takes importing into account. It gives
886   --  back the set of names that an element would have in an importing
887   --  namespace, either because it is owned, or if not owned then imported
888   --  individually, or if not individually then from a package.
889   --  The query getNamesOfMember() gives a set of all of the names that a
890   --  member would have in a Namespace. In general a member can have multiple
891   --  names in a Namespace if it is imported more than once with different
892   --  aliases. The query takes account of importing. It gives back the set of
893   --  names that an element would have in an importing namespace, either
894   --  because it is owned, or if not owned then imported individually, or if
895   --  not individually then from a package.
896
897   overriding function Import_Members
898    (Self : not null access constant UML_State_Machine_Proxy;
899     Imps : AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element)
900       return AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element;
901   --  Operation Namespace::importMembers.
902   --
903   --  The query importMembers() defines which of a set of PackageableElements
904   --  are actually imported into the namespace. This excludes hidden ones,
905   --  i.e., those which have names that conflict with names of owned members,
906   --  and also excludes elements which would have the same name when imported.
907
908   overriding function Imported_Member
909    (Self : not null access constant UML_State_Machine_Proxy)
910       return AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element;
911   --  Operation Namespace::importedMember.
912   --
913   --  The importedMember property is derived from the ElementImports and the
914   --  PackageImports. References the PackageableElements that are members of
915   --  this Namespace as a result of either PackageImports or ElementImports.
916
917   overriding function Members_Are_Distinguishable
918    (Self : not null access constant UML_State_Machine_Proxy)
919       return Boolean;
920   --  Operation Namespace::membersAreDistinguishable.
921   --
922   --  The Boolean query membersAreDistinguishable() determines whether all of
923   --  the namespace's members are distinguishable within it.
924
925   overriding function Owned_Member
926    (Self : not null access constant UML_State_Machine_Proxy)
927       return AMF.UML.Named_Elements.Collections.Set_Of_UML_Named_Element;
928   --  Operation Namespace::ownedMember.
929   --
930   --  Missing derivation for Namespace::/ownedMember : NamedElement
931
932   overriding function All_Owning_Packages
933    (Self : not null access constant UML_State_Machine_Proxy)
934       return AMF.UML.Packages.Collections.Set_Of_UML_Package;
935   --  Operation NamedElement::allOwningPackages.
936   --
937   --  The query allOwningPackages() returns all the directly or indirectly
938   --  owning packages.
939
940   overriding function Is_Distinguishable_From
941    (Self : not null access constant UML_State_Machine_Proxy;
942     N : AMF.UML.Named_Elements.UML_Named_Element_Access;
943     Ns : AMF.UML.Namespaces.UML_Namespace_Access)
944       return Boolean;
945   --  Operation NamedElement::isDistinguishableFrom.
946   --
947   --  The query isDistinguishableFrom() determines whether two NamedElements
948   --  may logically co-exist within a Namespace. By default, two named
949   --  elements are distinguishable if (a) they have unrelated types or (b)
950   --  they have related types but different names.
951
952   overriding function Namespace
953    (Self : not null access constant UML_State_Machine_Proxy)
954       return AMF.UML.Namespaces.UML_Namespace_Access;
955   --  Operation NamedElement::namespace.
956   --
957   --  Missing derivation for NamedElement::/namespace : Namespace
958
959   overriding function Conforms_To
960    (Self : not null access constant UML_State_Machine_Proxy;
961     Other : AMF.UML.Types.UML_Type_Access)
962       return Boolean;
963   --  Operation Type::conformsTo.
964   --
965   --  The query conformsTo() gives true for a type that conforms to another.
966   --  By default, two types do not conform to each other. This query is
967   --  intended to be redefined for specific conformance situations.
968
969   overriding function Is_Compatible_With
970    (Self : not null access constant UML_State_Machine_Proxy;
971     P : AMF.UML.Parameterable_Elements.UML_Parameterable_Element_Access)
972       return Boolean;
973   --  Operation ParameterableElement::isCompatibleWith.
974   --
975   --  The query isCompatibleWith() determines if this parameterable element
976   --  is compatible with the specified parameterable element. By default
977   --  parameterable element P is compatible with parameterable element Q if
978   --  the kind of P is the same or a subtype as the kind of Q. Subclasses
979   --  should override this operation to specify different compatibility
980   --  constraints.
981
982   overriding function Is_Template_Parameter
983    (Self : not null access constant UML_State_Machine_Proxy)
984       return Boolean;
985   --  Operation ParameterableElement::isTemplateParameter.
986   --
987   --  The query isTemplateParameter() determines if this parameterable
988   --  element is exposed as a formal template parameter.
989
990   overriding function Parameterable_Elements
991    (Self : not null access constant UML_State_Machine_Proxy)
992       return AMF.UML.Parameterable_Elements.Collections.Set_Of_UML_Parameterable_Element;
993   --  Operation TemplateableElement::parameterableElements.
994   --
995   --  The query parameterableElements() returns the set of elements that may
996   --  be used as the parametered elements for a template parameter of this
997   --  templateable element. By default, this set includes all the owned
998   --  elements. Subclasses may override this operation if they choose to
999   --  restrict the set of parameterable elements.
1000
1001   overriding function Is_Redefinition_Context_Valid
1002    (Self : not null access constant UML_State_Machine_Proxy;
1003     Redefined : AMF.UML.Redefinable_Elements.UML_Redefinable_Element_Access)
1004       return Boolean;
1005   --  Operation RedefinableElement::isRedefinitionContextValid.
1006   --
1007   --  The query isRedefinitionContextValid() specifies whether the
1008   --  redefinition contexts of this RedefinableElement are properly related
1009   --  to the redefinition contexts of the specified RedefinableElement to
1010   --  allow this element to redefine the other. By default at least one of
1011   --  the redefinition contexts of this element must be a specialization of
1012   --  at least one of the redefinition contexts of the specified element.
1013
1014   overriding function Owned_Port
1015    (Self : not null access constant UML_State_Machine_Proxy)
1016       return AMF.UML.Ports.Collections.Set_Of_UML_Port;
1017   --  Operation EncapsulatedClassifier::ownedPort.
1018   --
1019   --  Missing derivation for EncapsulatedClassifier::/ownedPort : Port
1020
1021   overriding function Part
1022    (Self : not null access constant UML_State_Machine_Proxy)
1023       return AMF.UML.Properties.Collections.Set_Of_UML_Property;
1024   --  Operation StructuredClassifier::part.
1025   --
1026   --  Missing derivation for StructuredClassifier::/part : Property
1027
1028   overriding procedure Enter_Element
1029    (Self    : not null access constant UML_State_Machine_Proxy;
1030     Visitor : in out AMF.Visitors.Abstract_Visitor'Class;
1031     Control : in out AMF.Visitors.Traverse_Control);
1032   --  Dispatch call to corresponding subprogram of visitor interface.
1033
1034   overriding procedure Leave_Element
1035    (Self    : not null access constant UML_State_Machine_Proxy;
1036     Visitor : in out AMF.Visitors.Abstract_Visitor'Class;
1037     Control : in out AMF.Visitors.Traverse_Control);
1038   --  Dispatch call to corresponding subprogram of visitor interface.
1039
1040   overriding procedure Visit_Element
1041    (Self     : not null access constant UML_State_Machine_Proxy;
1042     Iterator : in out AMF.Visitors.Abstract_Iterator'Class;
1043     Visitor  : in out AMF.Visitors.Abstract_Visitor'Class;
1044     Control  : in out AMF.Visitors.Traverse_Control);
1045   --  Dispatch call to corresponding subprogram of iterator interface.
1046
1047end AMF.Internals.UML_State_Machines;
1048