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: 2967 $ $Date: 2012-05-12 10:21:56 +0400 (Sat, 12 May 2012) $
43------------------------------------------------------------------------------
44with AMF.Internals.UML_Named_Elements;
45with AMF.Internals.UML_Multiplicity_Elements;
46with AMF.UML.Associations;
47with AMF.UML.Classes;
48with AMF.UML.Classifiers.Collections;
49with AMF.UML.Connectable_Element_Template_Parameters;
50with AMF.UML.Connector_Ends.Collections;
51with AMF.UML.Data_Types;
52with AMF.UML.Dependencies.Collections;
53with AMF.UML.Deployments.Collections;
54with AMF.UML.Interfaces;
55with AMF.UML.Multiplicity_Elements;
56with AMF.UML.Named_Elements;
57with AMF.UML.Namespaces;
58with AMF.UML.Packageable_Elements.Collections;
59with AMF.UML.Packages.Collections;
60with AMF.UML.Parameterable_Elements;
61with AMF.UML.Properties.Collections;
62with AMF.UML.Redefinable_Elements.Collections;
63with AMF.UML.String_Expressions;
64with AMF.UML.Template_Parameters;
65with AMF.UML.Types.Collections;
66with AMF.UML.Value_Specifications;
67with AMF.Visitors;
68
69package AMF.Internals.UML_Properties is
70
71   package Multiplicity_Elements is
72     new AMF.Internals.UML_Multiplicity_Elements
73          (AMF.Internals.UML_Named_Elements.UML_Named_Element_Proxy);
74
75   type UML_Property_Proxy is
76     limited new Multiplicity_Elements.UML_Multiplicity_Element_Proxy
77       and AMF.UML.Properties.UML_Property with null record;
78
79   overriding function Get_Aggregation
80    (Self : not null access constant UML_Property_Proxy)
81       return AMF.UML.UML_Aggregation_Kind;
82   --  Getter of Property::aggregation.
83   --
84   --  Specifies the kind of aggregation that applies to the Property.
85
86   overriding procedure Set_Aggregation
87    (Self : not null access UML_Property_Proxy;
88     To   : AMF.UML.UML_Aggregation_Kind);
89   --  Setter of Property::aggregation.
90   --
91   --  Specifies the kind of aggregation that applies to the Property.
92
93   overriding function Get_Association
94    (Self : not null access constant UML_Property_Proxy)
95       return AMF.UML.Associations.UML_Association_Access;
96   --  Getter of Property::association.
97   --
98   --  References the association of which this property is a member, if any.
99
100   overriding procedure Set_Association
101    (Self : not null access UML_Property_Proxy;
102     To   : AMF.UML.Associations.UML_Association_Access);
103   --  Setter of Property::association.
104   --
105   --  References the association of which this property is a member, if any.
106
107   overriding function Get_Association_End
108    (Self : not null access constant UML_Property_Proxy)
109       return AMF.UML.Properties.UML_Property_Access;
110   --  Getter of Property::associationEnd.
111   --
112   --  Designates the optional association end that owns a qualifier attribute.
113
114   overriding procedure Set_Association_End
115    (Self : not null access UML_Property_Proxy;
116     To   : AMF.UML.Properties.UML_Property_Access);
117   --  Setter of Property::associationEnd.
118   --
119   --  Designates the optional association end that owns a qualifier attribute.
120
121   overriding function Get_Class
122    (Self : not null access constant UML_Property_Proxy)
123       return AMF.UML.Classes.UML_Class_Access;
124   --  Getter of Property::class.
125   --
126   --  References the Class that owns the Property.
127   --  References the Class that owns the Property.
128
129   overriding procedure Set_Class
130    (Self : not null access UML_Property_Proxy;
131     To   : AMF.UML.Classes.UML_Class_Access);
132   --  Setter of Property::class.
133   --
134   --  References the Class that owns the Property.
135   --  References the Class that owns the Property.
136
137   overriding function Get_Datatype
138    (Self : not null access constant UML_Property_Proxy)
139       return AMF.UML.Data_Types.UML_Data_Type_Access;
140   --  Getter of Property::datatype.
141   --
142   --  The DataType that owns this Property.
143
144   overriding procedure Set_Datatype
145    (Self : not null access UML_Property_Proxy;
146     To   : AMF.UML.Data_Types.UML_Data_Type_Access);
147   --  Setter of Property::datatype.
148   --
149   --  The DataType that owns this Property.
150
151   overriding function Get_Default
152    (Self : not null access constant UML_Property_Proxy)
153       return AMF.Optional_String;
154   --  Getter of Property::default.
155   --
156   --  A String that is evaluated to give a default value for the Property
157   --  when an object of the owning Classifier is instantiated.
158   --  Specifies a String that represents a value to be used when no argument
159   --  is supplied for the Property.
160
161   overriding procedure Set_Default
162    (Self : not null access UML_Property_Proxy;
163     To   : AMF.Optional_String);
164   --  Setter of Property::default.
165   --
166   --  A String that is evaluated to give a default value for the Property
167   --  when an object of the owning Classifier is instantiated.
168   --  Specifies a String that represents a value to be used when no argument
169   --  is supplied for the Property.
170
171   overriding function Get_Default_Value
172    (Self : not null access constant UML_Property_Proxy)
173       return AMF.UML.Value_Specifications.UML_Value_Specification_Access;
174   --  Getter of Property::defaultValue.
175   --
176   --  A ValueSpecification that is evaluated to give a default value for the
177   --  Property when an object of the owning Classifier is instantiated.
178
179   overriding procedure Set_Default_Value
180    (Self : not null access UML_Property_Proxy;
181     To   : AMF.UML.Value_Specifications.UML_Value_Specification_Access);
182   --  Setter of Property::defaultValue.
183   --
184   --  A ValueSpecification that is evaluated to give a default value for the
185   --  Property when an object of the owning Classifier is instantiated.
186
187   overriding function Get_Interface
188    (Self : not null access constant UML_Property_Proxy)
189       return AMF.UML.Interfaces.UML_Interface_Access;
190   --  Getter of Property::interface.
191   --
192   --  References the Interface that owns the Property
193
194   overriding procedure Set_Interface
195    (Self : not null access UML_Property_Proxy;
196     To   : AMF.UML.Interfaces.UML_Interface_Access);
197   --  Setter of Property::interface.
198   --
199   --  References the Interface that owns the Property
200
201   overriding function Get_Is_Composite
202    (Self : not null access constant UML_Property_Proxy)
203       return Boolean;
204   --  Getter of Property::isComposite.
205   --
206   --  If isComposite is true, the object containing the attribute is a
207   --  container for the object or value contained in the attribute.
208   --  This is a derived value, indicating whether the aggregation of the
209   --  Property is composite or not.
210
211   overriding procedure Set_Is_Composite
212    (Self : not null access UML_Property_Proxy;
213     To   : Boolean);
214   --  Setter of Property::isComposite.
215   --
216   --  If isComposite is true, the object containing the attribute is a
217   --  container for the object or value contained in the attribute.
218   --  This is a derived value, indicating whether the aggregation of the
219   --  Property is composite or not.
220
221   overriding function Get_Is_Derived
222    (Self : not null access constant UML_Property_Proxy)
223       return Boolean;
224   --  Getter of Property::isDerived.
225   --
226   --  Specifies whether the Property is derived, i.e., whether its value or
227   --  values can be computed from other information.
228   --  If isDerived is true, the value of the attribute is derived from
229   --  information elsewhere.
230
231   overriding procedure Set_Is_Derived
232    (Self : not null access UML_Property_Proxy;
233     To   : Boolean);
234   --  Setter of Property::isDerived.
235   --
236   --  Specifies whether the Property is derived, i.e., whether its value or
237   --  values can be computed from other information.
238   --  If isDerived is true, the value of the attribute is derived from
239   --  information elsewhere.
240
241   overriding function Get_Is_Derived_Union
242    (Self : not null access constant UML_Property_Proxy)
243       return Boolean;
244   --  Getter of Property::isDerivedUnion.
245   --
246   --  Specifies whether the property is derived as the union of all of the
247   --  properties that are constrained to subset it.
248
249   overriding procedure Set_Is_Derived_Union
250    (Self : not null access UML_Property_Proxy;
251     To   : Boolean);
252   --  Setter of Property::isDerivedUnion.
253   --
254   --  Specifies whether the property is derived as the union of all of the
255   --  properties that are constrained to subset it.
256
257   overriding function Get_Is_ID
258    (Self : not null access constant UML_Property_Proxy)
259       return Boolean;
260   --  Getter of Property::isID.
261   --
262   --  True indicates this property can be used to uniquely identify an
263   --  instance of the containing Class.
264
265   overriding procedure Set_Is_ID
266    (Self : not null access UML_Property_Proxy;
267     To   : Boolean);
268   --  Setter of Property::isID.
269   --
270   --  True indicates this property can be used to uniquely identify an
271   --  instance of the containing Class.
272
273   overriding function Get_Is_Read_Only
274    (Self : not null access constant UML_Property_Proxy)
275       return Boolean;
276   --  Getter of Property::isReadOnly.
277   --
278   --  If isReadOnly is true, the attribute may not be written to after
279   --  initialization.
280   --  If true, the attribute may only be read, and not written.
281
282   overriding procedure Set_Is_Read_Only
283    (Self : not null access UML_Property_Proxy;
284     To   : Boolean);
285   --  Setter of Property::isReadOnly.
286   --
287   --  If isReadOnly is true, the attribute may not be written to after
288   --  initialization.
289   --  If true, the attribute may only be read, and not written.
290
291   overriding function Get_Opposite
292    (Self : not null access constant UML_Property_Proxy)
293       return AMF.UML.Properties.UML_Property_Access;
294   --  Getter of Property::opposite.
295   --
296   --  In the case where the property is one navigable end of a binary
297   --  association with both ends navigable, this gives the other end.
298
299   overriding procedure Set_Opposite
300    (Self : not null access UML_Property_Proxy;
301     To   : AMF.UML.Properties.UML_Property_Access);
302   --  Setter of Property::opposite.
303   --
304   --  In the case where the property is one navigable end of a binary
305   --  association with both ends navigable, this gives the other end.
306
307   overriding function Get_Owning_Association
308    (Self : not null access constant UML_Property_Proxy)
309       return AMF.UML.Associations.UML_Association_Access;
310   --  Getter of Property::owningAssociation.
311   --
312   --  References the owning association of this property, if any.
313
314   overriding procedure Set_Owning_Association
315    (Self : not null access UML_Property_Proxy;
316     To   : AMF.UML.Associations.UML_Association_Access);
317   --  Setter of Property::owningAssociation.
318   --
319   --  References the owning association of this property, if any.
320
321   overriding function Get_Qualifier
322    (Self : not null access constant UML_Property_Proxy)
323       return AMF.UML.Properties.Collections.Ordered_Set_Of_UML_Property;
324   --  Getter of Property::qualifier.
325   --
326   --  An optional list of ordered qualifier attributes for the end. If the
327   --  list is empty, then the Association is not qualified.
328
329   overriding function Get_Redefined_Property
330    (Self : not null access constant UML_Property_Proxy)
331       return AMF.UML.Properties.Collections.Set_Of_UML_Property;
332   --  Getter of Property::redefinedProperty.
333   --
334   --  References the properties that are redefined by this property.
335
336   overriding function Get_Subsetted_Property
337    (Self : not null access constant UML_Property_Proxy)
338       return AMF.UML.Properties.Collections.Set_Of_UML_Property;
339   --  Getter of Property::subsettedProperty.
340   --
341   --  References the properties of which this property is constrained to be a
342   --  subset.
343
344   overriding function Get_End
345    (Self : not null access constant UML_Property_Proxy)
346       return AMF.UML.Connector_Ends.Collections.Ordered_Set_Of_UML_Connector_End;
347   --  Getter of ConnectableElement::end.
348   --
349   --  Denotes a set of connector ends that attaches to this connectable
350   --  element.
351
352   overriding function Get_Template_Parameter
353    (Self : not null access constant UML_Property_Proxy)
354       return AMF.UML.Connectable_Element_Template_Parameters.UML_Connectable_Element_Template_Parameter_Access;
355   --  Getter of ConnectableElement::templateParameter.
356   --
357   --  The ConnectableElementTemplateParameter for this ConnectableElement
358   --  parameter.
359
360   overriding procedure Set_Template_Parameter
361    (Self : not null access UML_Property_Proxy;
362     To   : AMF.UML.Connectable_Element_Template_Parameters.UML_Connectable_Element_Template_Parameter_Access);
363   --  Setter of ConnectableElement::templateParameter.
364   --
365   --  The ConnectableElementTemplateParameter for this ConnectableElement
366   --  parameter.
367
368   overriding function Get_Type
369    (Self : not null access constant UML_Property_Proxy)
370       return AMF.UML.Types.UML_Type_Access;
371   --  Getter of TypedElement::type.
372   --
373   --  The type of the TypedElement.
374   --  This information is derived from the return result for this Operation.
375
376   overriding procedure Set_Type
377    (Self : not null access UML_Property_Proxy;
378     To   : AMF.UML.Types.UML_Type_Access);
379   --  Setter of TypedElement::type.
380   --
381   --  The type of the TypedElement.
382   --  This information is derived from the return result for this Operation.
383
384   overriding function Get_Client_Dependency
385    (Self : not null access constant UML_Property_Proxy)
386       return AMF.UML.Dependencies.Collections.Set_Of_UML_Dependency;
387   --  Getter of NamedElement::clientDependency.
388   --
389   --  Indicates the dependencies that reference the client.
390
391   overriding function Get_Name_Expression
392    (Self : not null access constant UML_Property_Proxy)
393       return AMF.UML.String_Expressions.UML_String_Expression_Access;
394   --  Getter of NamedElement::nameExpression.
395   --
396   --  The string expression used to define the name of this named element.
397
398   overriding procedure Set_Name_Expression
399    (Self : not null access UML_Property_Proxy;
400     To   : AMF.UML.String_Expressions.UML_String_Expression_Access);
401   --  Setter of NamedElement::nameExpression.
402   --
403   --  The string expression used to define the name of this named element.
404
405   overriding function Get_Namespace
406    (Self : not null access constant UML_Property_Proxy)
407       return AMF.UML.Namespaces.UML_Namespace_Access;
408   --  Getter of NamedElement::namespace.
409   --
410   --  Specifies the namespace that owns the NamedElement.
411
412   overriding function Get_Qualified_Name
413    (Self : not null access constant UML_Property_Proxy)
414       return AMF.Optional_String;
415   --  Getter of NamedElement::qualifiedName.
416   --
417   --  A name which allows the NamedElement to be identified within a
418   --  hierarchy of nested Namespaces. It is constructed from the names of the
419   --  containing namespaces starting at the root of the hierarchy and ending
420   --  with the name of the NamedElement itself.
421
422   overriding function Get_Owning_Template_Parameter
423    (Self : not null access constant UML_Property_Proxy)
424       return AMF.UML.Template_Parameters.UML_Template_Parameter_Access;
425   --  Getter of ParameterableElement::owningTemplateParameter.
426   --
427   --  The formal template parameter that owns this element.
428
429   overriding procedure Set_Owning_Template_Parameter
430    (Self : not null access UML_Property_Proxy;
431     To   : AMF.UML.Template_Parameters.UML_Template_Parameter_Access);
432   --  Setter of ParameterableElement::owningTemplateParameter.
433   --
434   --  The formal template parameter that owns this element.
435
436   overriding function Get_Template_Parameter
437    (Self : not null access constant UML_Property_Proxy)
438       return AMF.UML.Template_Parameters.UML_Template_Parameter_Access;
439   --  Getter of ParameterableElement::templateParameter.
440   --
441   --  The template parameter that exposes this element as a formal parameter.
442
443   overriding procedure Set_Template_Parameter
444    (Self : not null access UML_Property_Proxy;
445     To   : AMF.UML.Template_Parameters.UML_Template_Parameter_Access);
446   --  Setter of ParameterableElement::templateParameter.
447   --
448   --  The template parameter that exposes this element as a formal parameter.
449
450   overriding function Get_Deployed_Element
451    (Self : not null access constant UML_Property_Proxy)
452       return AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element;
453   --  Getter of DeploymentTarget::deployedElement.
454   --
455   --  The set of elements that are manifested in an Artifact that is involved
456   --  in Deployment to a DeploymentTarget.
457
458   overriding function Get_Deployment
459    (Self : not null access constant UML_Property_Proxy)
460       return AMF.UML.Deployments.Collections.Set_Of_UML_Deployment;
461   --  Getter of DeploymentTarget::deployment.
462   --
463   --  The set of Deployments for a DeploymentTarget.
464
465   overriding function Get_Featuring_Classifier
466    (Self : not null access constant UML_Property_Proxy)
467       return AMF.UML.Classifiers.Collections.Set_Of_UML_Classifier;
468   --  Getter of Feature::featuringClassifier.
469   --
470   --  The Classifiers that have this Feature as a feature.
471
472   overriding function Get_Is_Static
473    (Self : not null access constant UML_Property_Proxy)
474       return Boolean;
475   --  Getter of Feature::isStatic.
476   --
477   --  Specifies whether this feature characterizes individual instances
478   --  classified by the classifier (false) or the classifier itself (true).
479
480   overriding procedure Set_Is_Static
481    (Self : not null access UML_Property_Proxy;
482     To   : Boolean);
483   --  Setter of Feature::isStatic.
484   --
485   --  Specifies whether this feature characterizes individual instances
486   --  classified by the classifier (false) or the classifier itself (true).
487
488   overriding function Get_Is_Leaf
489    (Self : not null access constant UML_Property_Proxy)
490       return Boolean;
491   --  Getter of RedefinableElement::isLeaf.
492   --
493   --  Indicates whether it is possible to further redefine a
494   --  RedefinableElement. If the value is true, then it is not possible to
495   --  further redefine the RedefinableElement. Note that this property is
496   --  preserved through package merge operations; that is, the capability to
497   --  redefine a RedefinableElement (i.e., isLeaf=false) must be preserved in
498   --  the resulting RedefinableElement of a package merge operation where a
499   --  RedefinableElement with isLeaf=false is merged with a matching
500   --  RedefinableElement with isLeaf=true: the resulting RedefinableElement
501   --  will have isLeaf=false. Default value is false.
502
503   overriding procedure Set_Is_Leaf
504    (Self : not null access UML_Property_Proxy;
505     To   : Boolean);
506   --  Setter of RedefinableElement::isLeaf.
507   --
508   --  Indicates whether it is possible to further redefine a
509   --  RedefinableElement. If the value is true, then it is not possible to
510   --  further redefine the RedefinableElement. Note that this property is
511   --  preserved through package merge operations; that is, the capability to
512   --  redefine a RedefinableElement (i.e., isLeaf=false) must be preserved in
513   --  the resulting RedefinableElement of a package merge operation where a
514   --  RedefinableElement with isLeaf=false is merged with a matching
515   --  RedefinableElement with isLeaf=true: the resulting RedefinableElement
516   --  will have isLeaf=false. Default value is false.
517
518   overriding function Get_Redefined_Element
519    (Self : not null access constant UML_Property_Proxy)
520       return AMF.UML.Redefinable_Elements.Collections.Set_Of_UML_Redefinable_Element;
521   --  Getter of RedefinableElement::redefinedElement.
522   --
523   --  The redefinable element that is being redefined by this element.
524
525   overriding function Get_Redefinition_Context
526    (Self : not null access constant UML_Property_Proxy)
527       return AMF.UML.Classifiers.Collections.Set_Of_UML_Classifier;
528   --  Getter of RedefinableElement::redefinitionContext.
529   --
530   --  References the contexts that this element may be redefined from.
531
532   overriding function Default
533    (Self : not null access constant UML_Property_Proxy)
534       return AMF.Optional_String;
535   --  Operation Property::default.
536   --
537   --  Missing derivation for Property::/default : String
538
539   overriding function Is_Attribute
540    (Self : not null access constant UML_Property_Proxy;
541     P : AMF.UML.Properties.UML_Property_Access)
542       return Boolean;
543   --  Operation Property::isAttribute.
544   --
545   --  The query isAttribute() is true if the Property is defined as an
546   --  attribute of some classifier.
547
548   overriding function Is_Compatible_With
549    (Self : not null access constant UML_Property_Proxy;
550     P : AMF.UML.Parameterable_Elements.UML_Parameterable_Element_Access)
551       return Boolean;
552   --  Operation Property::isCompatibleWith.
553   --
554   --  The query isCompatibleWith() determines if this parameterable element
555   --  is compatible with the specified parameterable element. By default
556   --  parameterable element P is compatible with parameterable element Q if
557   --  the kind of P is the same or a subtype as the kind of Q. In addition,
558   --  for properties, the type must be conformant with the type of the
559   --  specified parameterable element.
560
561   overriding function Is_Composite
562    (Self : not null access constant UML_Property_Proxy)
563       return Boolean;
564   --  Operation Property::isComposite.
565   --
566   --  The value of isComposite is true only if aggregation is composite.
567
568   overriding function Is_Consistent_With
569    (Self : not null access constant UML_Property_Proxy;
570     Redefinee : AMF.UML.Redefinable_Elements.UML_Redefinable_Element_Access)
571       return Boolean;
572   --  Operation Property::isConsistentWith.
573   --
574   --  The query isConsistentWith() specifies, for any two Properties in a
575   --  context in which redefinition is possible, whether redefinition would
576   --  be logically consistent. A redefining property is consistent with a
577   --  redefined property if the type of the redefining property conforms to
578   --  the type of the redefined property, the multiplicity of the redefining
579   --  property (if specified) is contained in the multiplicity of the
580   --  redefined property.
581   --  The query isConsistentWith() specifies, for any two Properties in a
582   --  context in which redefinition is possible, whether redefinition would
583   --  be logically consistent. A redefining property is consistent with a
584   --  redefined property if the type of the redefining property conforms to
585   --  the type of the redefined property, and the multiplicity of the
586   --  redefining property (if specified) is contained in the multiplicity of
587   --  the redefined property.
588
589   overriding function Is_Navigable
590    (Self : not null access constant UML_Property_Proxy)
591       return Boolean;
592   --  Operation Property::isNavigable.
593   --
594   --  The query isNavigable() indicates whether it is possible to navigate
595   --  across the property.
596
597   overriding function Opposite
598    (Self : not null access constant UML_Property_Proxy)
599       return AMF.UML.Properties.UML_Property_Access;
600   --  Operation Property::opposite.
601   --
602   --  If this property is owned by a class, associated with a binary
603   --  association, and the other end of the association is also owned by a
604   --  class, then opposite gives the other end.
605
606   overriding function Subsetting_Context
607    (Self : not null access constant UML_Property_Proxy)
608       return AMF.UML.Types.Collections.Set_Of_UML_Type;
609   --  Operation Property::subsettingContext.
610   --
611   --  The query subsettingContext() gives the context for subsetting a
612   --  property. It consists, in the case of an attribute, of the
613   --  corresponding classifier, and in the case of an association end, all of
614   --  the classifiers at the other ends.
615
616   overriding function Ends
617    (Self : not null access constant UML_Property_Proxy)
618       return AMF.UML.Connector_Ends.Collections.Set_Of_UML_Connector_End;
619   --  Operation ConnectableElement::end.
620   --
621   --  Missing derivation for ConnectableElement::/end : ConnectorEnd
622
623   overriding function All_Owning_Packages
624    (Self : not null access constant UML_Property_Proxy)
625       return AMF.UML.Packages.Collections.Set_Of_UML_Package;
626   --  Operation NamedElement::allOwningPackages.
627   --
628   --  The query allOwningPackages() returns all the directly or indirectly
629   --  owning packages.
630
631   overriding function Is_Distinguishable_From
632    (Self : not null access constant UML_Property_Proxy;
633     N : AMF.UML.Named_Elements.UML_Named_Element_Access;
634     Ns : AMF.UML.Namespaces.UML_Namespace_Access)
635       return Boolean;
636   --  Operation NamedElement::isDistinguishableFrom.
637   --
638   --  The query isDistinguishableFrom() determines whether two NamedElements
639   --  may logically co-exist within a Namespace. By default, two named
640   --  elements are distinguishable if (a) they have unrelated types or (b)
641   --  they have related types but different names.
642
643   overriding function Namespace
644    (Self : not null access constant UML_Property_Proxy)
645       return AMF.UML.Namespaces.UML_Namespace_Access;
646   --  Operation NamedElement::namespace.
647   --
648   --  Missing derivation for NamedElement::/namespace : Namespace
649
650   overriding function Is_Template_Parameter
651    (Self : not null access constant UML_Property_Proxy)
652       return Boolean;
653   --  Operation ParameterableElement::isTemplateParameter.
654   --
655   --  The query isTemplateParameter() determines if this parameterable
656   --  element is exposed as a formal template parameter.
657
658   overriding function Deployed_Element
659    (Self : not null access constant UML_Property_Proxy)
660       return AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element;
661   --  Operation DeploymentTarget::deployedElement.
662   --
663   --  Missing derivation for DeploymentTarget::/deployedElement :
664   --  PackageableElement
665
666   overriding function Compatible_With
667    (Self : not null access constant UML_Property_Proxy;
668     Other : AMF.UML.Multiplicity_Elements.UML_Multiplicity_Element_Access)
669       return Boolean;
670   --  Operation MultiplicityElement::compatibleWith.
671   --
672   --  The operation compatibleWith takes another multiplicity as input. It
673   --  checks if one multiplicity is compatible with another.
674
675   overriding function Includes_Cardinality
676    (Self : not null access constant UML_Property_Proxy;
677     C : Integer)
678       return Boolean;
679   --  Operation MultiplicityElement::includesCardinality.
680   --
681   --  The query includesCardinality() checks whether the specified
682   --  cardinality is valid for this multiplicity.
683
684   overriding function Includes_Multiplicity
685    (Self : not null access constant UML_Property_Proxy;
686     M : AMF.UML.Multiplicity_Elements.UML_Multiplicity_Element_Access)
687       return Boolean;
688   --  Operation MultiplicityElement::includesMultiplicity.
689   --
690   --  The query includesMultiplicity() checks whether this multiplicity
691   --  includes all the cardinalities allowed by the specified multiplicity.
692
693   overriding function Iss
694    (Self : not null access constant UML_Property_Proxy;
695     Lowerbound : Integer;
696     Upperbound : Integer)
697       return Boolean;
698   --  Operation MultiplicityElement::is.
699   --
700   --  The operation is determines if the upper and lower bound of the ranges
701   --  are the ones given.
702
703   overriding function Is_Redefinition_Context_Valid
704    (Self : not null access constant UML_Property_Proxy;
705     Redefined : AMF.UML.Redefinable_Elements.UML_Redefinable_Element_Access)
706       return Boolean;
707   --  Operation RedefinableElement::isRedefinitionContextValid.
708   --
709   --  The query isRedefinitionContextValid() specifies whether the
710   --  redefinition contexts of this RedefinableElement are properly related
711   --  to the redefinition contexts of the specified RedefinableElement to
712   --  allow this element to redefine the other. By default at least one of
713   --  the redefinition contexts of this element must be a specialization of
714   --  at least one of the redefinition contexts of the specified element.
715
716   overriding procedure Enter_Element
717    (Self    : not null access constant UML_Property_Proxy;
718     Visitor : in out AMF.Visitors.Abstract_Visitor'Class;
719     Control : in out AMF.Visitors.Traverse_Control);
720   --  Dispatch call to corresponding subprogram of visitor interface.
721
722   overriding procedure Leave_Element
723    (Self    : not null access constant UML_Property_Proxy;
724     Visitor : in out AMF.Visitors.Abstract_Visitor'Class;
725     Control : in out AMF.Visitors.Traverse_Control);
726   --  Dispatch call to corresponding subprogram of visitor interface.
727
728   overriding procedure Visit_Element
729    (Self     : not null access constant UML_Property_Proxy;
730     Iterator : in out AMF.Visitors.Abstract_Iterator'Class;
731     Visitor  : in out AMF.Visitors.Abstract_Visitor'Class;
732     Control  : in out AMF.Visitors.Traverse_Control);
733   --  Dispatch call to corresponding subprogram of iterator interface.
734
735end AMF.Internals.UML_Properties;
736