blob: f4a15b4b56a66c003f7c925e7ec349f287b0434f [file] [log] [blame]
(object Petal
version 50
_written "Rose 8.3.0407.2800"
charSet 0)
(object Class_Category "data"
is_unit TRUE
is_loaded TRUE
quid "453E0C08006D"
stereotype "metamodel"
exportControl "Public"
logical_models (list unit_reference_list
(object Class_Category "classes"
quid "44D751530256"
documentation "BOs, BONodes, associations, regardless the association implementation (foreign keys, persistence structures, IDs, ...). Nodes have attributes that have types. Resulting is a datatype for the node that can be used, e.g., in the action language."
exportControl "Public"
logical_models (list unit_reference_list
(object Class "Association"
attributes (list Attribute_Set)
quid "44321DA40150"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "453F571D025B"
supplier "Logical View::modelmanagement::NamedElement"
quidu "45013C240030"))
nestedClasses (list nestedClasses
(object Class "UniquenessOnBothEndsMustBeTheSame"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.violationMessageExpression"
value (value Text "'Uniqueness on both ends must be the same'")))
quid "478BCB6A02F5"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "478BCB7B0007"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Association
|inv:
| self.ends->forAll( e1, e2 : AssociationEnd |
| e1 <> e2 implies e1.type.unique = e2.type.unique)
)
opExportControl "Public"
uid 0)))
(object Class "AtMostOneCompositeEnd"
quid "493FCCBC0290"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "493FCCCB01D4"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Association
|inv:
| self.ends->select(composite)->size() < 2
)
opExportControl "Public"
uid 0)))
(object Class "AtLeastOneNavigableEnd"
quid "494140D20251"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "494140DE0213"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Association
|inv:
| self.ends->select(ae:AssociationEnd | ae.navigable)->notEmpty()
)
opExportControl "Public"
uid 0)))
(object Class "AtMostOneEqualityContributionForTwoValueClasses"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.violationMessageExpression"
value (value Text "'Associations between two value types that affect equality of both types are currently not supported. It would lead to a recursive equality definition and therefore to recursive value constructors.'")))
quid "49422D7A004E"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "49422D7A006D"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Association
|inv:
| self.ends->select(contributesToEquality and type.clazz.valueType)->size() < 2
)
opExportControl "Public"
uid 0)))
(object Class "AtMostOneOrderedEnd"
quid "49788E6D003E"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "49788E7903A9"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Association
|inv:
| self.ends->select(ae|ae.type.ordered)->size() < 2
)
opExportControl "Public"
uid 0)))))
(object Class "Signature"
attributes (list Attribute_Set)
quid "4432198602CB"
documentation
|Defines an abstract callable operation or block signature with input parameter types, return type and exception / fault types. A signature may also be implemented by association navigation expressions or link set manipulation statements.
|
|The enforcement of side effect freeness is the SignatureImplementation subclasses' responsibility.
operations (list Operations
(object Operation "conformsTo"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context Signature::conformsTo(s:Signature):Boolean
|body:
| if self = s then
| true
| else
| self.conformsToExcluding(s, Sequence{}, Sequence{})
| endif
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "457589E201DD"
parameters (list Parameters
(object Parameter "s"
quid "45DD89D80282"
type "Signature"
quidu "4432198602CB"))
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "conformsToExcluding"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context Signature::conformsToExcluding(s:Signature, excludingConforming:Sequence(SapClass), excludingTo:Sequence(SapClass)):Boolean
|body:
| if s = self then
| true
| else
| let nameConforms:Boolean = self.oclIsKindOf(MethodSignature) and s.oclIsKindOf(MethodSignature)
| implies s.oclAsType(MethodSignature).name = self.oclAsType(MethodSignature).name in
| nameConforms and
| (s.sideEffectFree implies self.sideEffectFree) and
| s.input->size() = self.input->size() and
| Sequence{1..self.input->size()}->
| forAll(i | s.input->at(i).getType().conformsToExcluding(self.input->at(i).getType(), excludingConforming, excludingTo)) and
| s.output->size() = self.output->size() and
| Sequence{1..self.output->size()}->
| forAll(i | self.output->asSequence()->at(i).conformsToExcluding(s.output->asSequence()->at(i), excludingConforming, excludingTo))
| endif
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "45DD4F8E0018"
documentation "Same as conformsTo(Featured):Boolean but with the possibility to pass pairs of Featured elements that are to be considered conforming and thus don't need further exploration. This can be used to avoid endless recursions in conformance testing."
parameters (list Parameters
(object Parameter "s"
attributes (list Attribute_Set)
quid "457589EB003C"
type "Signature"
quidu "4432198602CB")
(object Parameter "excludingConforming"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "uml2mof.isOrdered"
value (value Text "true")))
quid "45DDB76C0185"
type "SapClass"
quidu "4432171B031E")
(object Parameter "excludingTo"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "uml2mof.isOrdered"
value (value Text "true")))
quid "45DDB77202ED"
type "SapClass"
quidu "4432171B031E"))
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "getNamedValuesInScope"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "*"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context Signature::getNamedValuesInScope():Set(NamedValue)
|body:
| self.getOwningClass().formalObjectParameters->asSet()
)))
quid "4B84F8BF030D"
documentation "For a signature, only the owning class's formal object parameters are in scope."
result "NamedValue"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "4522A56F0149")
(object Operation "getOwningClass"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "0..1"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context Signature::getOwningClass():SapClass
|body:
| if self.oclIsKindOf(MethodSignature) then
| let owner:SignatureOwner = self.oclAsType(MethodSignature).owner in
| if owner.oclIsKindOf(SapClass) then
| owner.oclAsType(SapClass)
| else
| null -- e.g., TypeAdapter
| endif
| else
| self.oclAsType(FunctionSignature).getImplementedAnonymousFunctionExpression().getOwningClass()
| endif
)))
quid "4B84F8F50186"
result "SapClass"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "4432171B031E"))
class_attributes (list class_attribute_list
(object ClassAttribute "sideEffectFree"
quid "489D4B780261"
documentation
|If this flag is set, the signature's implementation must not use a link-modifying implementation on any object of an entity class. It is permissible for an implementation to create value objects. All signatures being called by an implementation must then also have this flag set.
|
|This flag is also relevant for conformance. A signature only conforms to one with this flag set if it also has this flag set.
|
|Note that activities that do not modify the link structure may still have side effects outside of the scope of this programming model, such as producing a log entry in some persistence layer about a query being executed. Such side effects that are outside of this programming model do not count as a side effect in the sense of this flag. In particular, they do not make the program's semantics depend on execution order of such signature implementations.
type "Boolean"
quidu "39A2BDA60392"
exportControl "Public"))
abstract TRUE
nestedClasses (list nestedClasses
(object Class "OnlyTrailingOptionalParameters"
quid "49D2B379007D"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "49D2B38C008C"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Signature
|inv:
| self.input->forAll(p | p.defaultValue->notEmpty() implies Sequence{(self.input->indexOf(p)+1)..self.input->size()}->forAll(
| i | self.input->at(i).defaultValue->notEmpty()))
)
opExportControl "Public"
uid 0)))))
(object Class "AssociationEnd"
quid "44EC55FB03B8"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "457436EC01C4"
supplier "Logical View::modelmanagement::NamedElement"
quidu "45013C240030"))
operations (list Operations
(object Operation "otherEnd"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context AssociationEnd::otherEnd():AssociationEnd
|body:
| association.ends->select(ae|ae <> self)->first()
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "456DC3DA0356"
result "AssociationEnd"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "44EC55FB03B8"))
class_attributes (list class_attribute_list
(object ClassAttribute "navigable"
quid "44EC567E00FA"
documentation "Means that the association can be navigated in that direction towards this end. Note that non-navigability does not serve as a security-related feature. If all objects of the type at the other end can be enumerated and because the association has to be navigable in at least one direction, it will be possible to find out those objects on the other end that are linked to an instance which semantically implements navigation again, only potentially very slowly if the extent to enumerate is large."
type "Boolean"
quidu "39A2BDA60392"
exportControl "Public")
(object ClassAttribute "composite"
quid "44EC7CEF00F1"
documentation
|Expresses ownership that for entity-to-entity associations also implies delete propagation. Only one of the two association ends can be marked as composite. The end marked in this way attaches to the "owning" class whereas the otherEnd() attaches to the "owned" class.
|
|Composition cannot be used for value classes. Values cannot be owned, and values cannot own anything.
type "Boolean"
quidu "39A2BDA60392"
exportControl "Public")
(object ClassAttribute "contributesToEquality"
quid "49414120003E"
documentation
|If true, this association end contributes to the equality of the exposing class. An equality-contributing association end must be exposed (maybe with private visibility) because it is relevant for the contract of that class.
|
|It is a questionable construct to have both ends contribute to equality if both classes are value classes because it would mean that values of either of the classes can be identified only in pairs. The equality definition would be recursive, and an implementation would have to understand this and cut short the recursion, comparing only all other equality-related association end values.
type "Boolean"
quidu "39A2BDA60392"
exportControl "Public"))
nestedClasses (list nestedClasses
(object Class "ExposingClassesEqualOppositeEndsType"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.violationMessageExpression"
value (value Text "'Exposing classes equal opposite ends type'")))
quid "4574A7040339"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4574A71E0282"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context AssociationEnd
|inv:
| self.signatureImplementations.implements_.owner->forAll(c:SignatureOwner | c = self.otherEnd().type.clazz)
)
opExportControl "Public"
uid 0)))
(object Class "NoCompositionWithValueClass"
quid "49411E10033C"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "49411E1E01A5"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context AssociationEnd
|inv:
| self.composite implies self.association.ends.type->forAll(ctd:ClassTypeDefinition | not ctd.clazz.valueType)
)
opExportControl "Public"
uid 0)))
(object Class "EqualityContributionsMustBeExposedAndNavigable"
quid "49414222002E"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "49414238035B"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context AssociationEnd
|inv:
| self.contributesToEquality implies (self.otherEnd().signatureImplementations->notEmpty() and self.otherEnd().navigable)
)
opExportControl "Public"
uid 0)))
(object Class "EqualityContributingEndOnValueMustHaveUnlimitedUpperBounds"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.violationMessageExpression"
value (value Text "'If the association is equality relevant for the value and it is not the only attribute of the value, there may be an unlimited number of values connected to the other end. The multiplicity of the end must be *.'")))
quid "497443BF0271"
documentation "If the association is equality relevant for the value and it is not the only attribute of the value, there may be an unlimited number of values connected to the other end. The multiplicity of the end must be *."
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4974440300FA"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context AssociationEnd
|inv:
| (self.type.clazz.valueType and self.contributesToEquality and
| self.type.clazz.getAssociationEnds()->exists(ae |
| ae <> self and ae.contributesToEquality)) implies
| self.type.isMany()
)
opExportControl "Public"
uid 0)))))
(object Class "SapClass"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.requiresPartition"
value TRUE))
quid "4432171B031E"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "44ED67500396"
supplier "Logical View::behavioral::events::EventProducer"
quidu "44ECC164016C")
(object Inheritance_Relationship
quid "48A041320196"
supplier "Logical View::data::classes::SignatureOwner"
quidu "48A0412B002E"))
operations (list Operations
(object Operation "isAbstract"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::isAbstract():Boolean
|body:
| not (self.allSignatures()->forAll(s:MethodSignature | not s.isAbstract()))
))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "45DE22500389"
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "isParameterizedClassDefinition"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::isParameterizedClassDefinition():Boolean
|body:
| self.parameterization->notEmpty()
))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "45E5ABB003DE"
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "conformsTo"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::conformsTo(type:SapClass):Boolean
|body:
| if self.oclIsUndefined() then
| false
| else
| self.conformsToExcluding(type, Sequence{}, Sequence{})
| endif
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "4522A72200CC"
documentation "A class A conforms to a class B if they are the same or if there is a chain of (TypeAdapter_i, Class_i) pairs (0<=i<=n) where TypeAdapter_0 adapts A to Class_0, and where Class_n is B."
parameters (list Parameters
(object Parameter "type"
quid "4522A7320075"
type "SapClass"
quidu "4432171B031E"))
result "Boolean"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|post:
| TODO; the set of operations and exposed association ends owned by this class plus those owned by the classes to which this class
|delegates, plus the operations and exposed association ends of any type adapter that adapts this class need to fulfill the set of signatures of and association ends expoed by the "type" class, including those of the classes to which "type" delegates, but *not* the operations owned by any type adapters attached to "type" because those are not supposed to affect the requirements for conforming to "type".
)
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "allSignatures"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::allSignatures():Set(MethodSignature)
|body:
|self.allSignaturesExcluding(Set{})
))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "45828D3E0276"
documentation "Computes all locally-defined signatures plus those signatures offered by any Class (directly, or by delegation or recursively by type adaptation) attached to this class as a type adapter, plus allSignatures() recursively of all classes to which this class delegates."
result "MethodSignature"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "47D67D15030D")
(object Operation "delegatesTo"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::delegatesTo():Set(SapClass)
|body:
| if self.oclIsKindOf(data::generics::ParameterizedClassInstantiation) then
| self.oclAsType(data::generics::ParameterizedClassInstantiation).parameterizedClass.delegatesTo()
| else
| if self.oclIsKindOf(data::generics::FormalTypeParameter) then
| self.oclAsType(data::generics::FormalTypeParameter).typeConstraint->collect(c:SapClass | c.delegatesTo())->flatten()->asSet()
| else
| -- TODO improve OCL impact analysis algorithm so that this doesn't kill performance:
| -- Set{} -- use this for good performance
| self.getAssociationEnds().otherEnd()->select(delegation->notEmpty()).type.clazz->reject(c|c=self)->asSet() -- currently bad performance
| endif
| endif
))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "45828E740204"
documentation
|A class can delegate to another class via an attached association end that in turn has attached a Delegation element. The delegating class by this exposes all operations and association ends exposed by the delegate class (recursively). The semantics of such a delegation is that when invoked, the invocation will be forwarded to the delegate object transparently and recursively.
|
|Note, that TypeAdapter objects cannot delegate because they cannot have association ends attached to them. They can only expose association ends whose other end is attached to a class to which the TypeAdapter conforms.
result "SapClass"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "4432171B031E")
(object Operation "conformsToExcluding"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::conformsToExcluding(type:SapClass, excludingConforming:Sequence(SapClass), excludingTo:Sequence(SapClass)):Boolean
|body:
| if oclIsUndefined() then
| false
| else
| if self = type then
| true
| else
| if Sequence{1..excludingConforming->size()}->exists(i|
| excludingConforming->asSequence()->at(i) = self and excludingTo->asSequence()->at(i) = type) then
| true
| else
| self.adapters->exists(a|a.to.conformsToExcluding(type, excludingConforming->including(self), excludingTo->including(type))) or
| (if self.oclIsKindOf(data::generics::FormalTypeParameter) then
| if self.oclAsType(data::generics::FormalTypeParameter).typeConstraint->notEmpty() then
| self.oclAsType(data::generics::FormalTypeParameter).typeConstraint.conformsToExcluding(type, excludingConforming->including(self), excludingTo->including(type))
| else
| false
| endif
| else
| false
| endif)
| endif
| endif
|endif
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "45DD493C0152"
documentation "Same as conformsTo(Featured):Boolean but with the possibility to pass pairs of Featured elements that are to be considered conforming and thus don't need further exploration. This can be used to avoid endless recursions in conformance testing."
parameters (list Parameters
(object Parameter "type"
attributes (list Attribute_Set)
quid "45DD4D150271"
type "SapClass"
quidu "4432171B031E")
(object Parameter "excludingConforming"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "uml2mof.isOrdered"
value (value Text "true")))
quid "45DD4D2C03BF"
type "SapClass"
quidu "4432171B031E")
(object Parameter "excludingTo"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "uml2mof.isOrdered"
value (value Text "true")))
quid "45DDB9360315"
type "SapClass"
quidu "4432171B031E"))
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "signaturesWithDelegation"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::signaturesWithDelegation():Set(MethodSignature)
|body:
| self.signaturesWithDelegationExcluding(Set{})
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "47862CA2038A"
documentation "Signature declared directly by this class and those signatures obtained by delegation, recursively."
result "MethodSignature"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "47D67D15030D")
(object Operation "delegatedSignatures"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::delegatedSignatures():Set(MethodSignature)
|body:
| self.delegatesTo().signaturesWithDelegation()->flatten()->asSet()
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "47E4A6EE028B"
documentation "Signatures obtained by delegation recursively."
result "MethodSignature"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "47D67D15030D")
(object Operation "adaptedSignatures"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::adaptedSignatures():Set(MethodSignature)
|body:
| self.adaptedSignaturesExcluding(Set{})
|
))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "47E4A77602E6"
documentation "Computes signatures offered by any Class (directly, or by delegation or recursively by type adaptation) attached to this class as a type adapter"
result "MethodSignature"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "47D67D15030D")
(object Operation "adaptedSignaturesExcluding"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::adaptedSignaturesExcluding(excluding:Set(SapClass)):Set(MethodSignature)
|body:
| if excluding->count(self)=0 then
| if self.oclIsKindOf(data::generics::ParameterizedClassInstantiation) then
| self.oclAsType(data::generics::ParameterizedClassInstantiation).parameterizedClass.adaptedSignaturesExcluding(excluding->including(self))
| else
| if self.oclIsKindOf(data::generics::FormalTypeParameter) then
| self.oclAsType(data::generics::FormalTypeParameter).typeConstraint->collect(c:SapClass | c.adaptedSignaturesExcluding(excluding->including(self)))->flatten()->asSet()
| else
| self.adapters.allSignaturesExcluding(excluding->including(self))
| ->select(s | not self.ownedSignatures->exists(os | os.conformsTo(s)))
| ->flatten()->asSet()
| endif
| endif
| else
| Set{}
| endif
|
))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "47E4B8DB01D6"
documentation "Computes signatures offered by any type adapter adapting this class to another class, minus those signatures redefined in the local class"
parameters (list Parameters
(object Parameter "excluding"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "uml2mof.isUnique"
value (value Text "true")))
quid "47EAAAAB03AE"
type "SapClass"
quidu "4432171B031E"))
result "MethodSignature"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "47D67D15030D")
(object Operation "allSignaturesExcluding"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::allSignaturesExcluding(excluding:Set(SapClass)):Set(MethodSignature)
|body:
| if excluding->count(self)=0 then
| if self.oclIsKindOf(data::generics::ParameterizedClassInstantiation) then
| self.oclAsType(data::generics::ParameterizedClassInstantiation).parameterizedClass.allSignaturesExcluding(excluding->including(self))
| else
| if self.oclIsKindOf(data::generics::FormalTypeParameter) then
| self.oclAsType(data::generics::FormalTypeParameter).typeConstraint->collect(c:SapClass | c.allSignaturesExcluding(excluding->including(self)))->flatten()->asSet()
| else
| self.signaturesWithDelegationExcluding(excluding)->union(self.adaptedSignaturesExcluding(excluding))
| endif
| endif
| else
| Set{}
| endif
))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "47E4BEFB0049"
documentation "Computes all locally-defined signatures plus those signatures offered by any Class (directly, or by delegation or recursively by type adaptation) attached to this class as a type adapter, plus allSignatures() recursively of all classes to which this class delegates."
parameters (list Parameters
(object Parameter "excluding"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "uml2mof.isUnique"
value (value Text "true")))
quid "47EAAA740132"
type "SapClass"
quidu "4432171B031E"))
result "MethodSignature"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "47D67D15030D")
(object Operation "signaturesWithDelegationExcluding"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::signaturesWithDelegationExcluding(excluding:Set(SapClass)):Set(MethodSignature)
|body:
|if excluding->count(self)=0 then
| if self.oclIsKindOf(data::generics::ParameterizedClassInstantiation) then
| self.oclAsType(data::generics::ParameterizedClassInstantiation).parameterizedClass.signaturesWithDelegationExcluding(excluding->including(self))
| else
| if self.oclIsKindOf(data::generics::FormalTypeParameter) then
| self.oclAsType(data::generics::FormalTypeParameter).typeConstraint->collect(c:SapClass | c.signaturesWithDelegationExcluding(excluding->including(self)))->flatten()->asSet()
| else
| self.ownedSignatures->union(self.delegatesTo().signaturesWithDelegationExcluding(excluding->including(self)))->flatten()->asSet()
| endif
| endif
|else
| Set{}
|endif
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "47EAB2A10094"
documentation "Signature declared directly by this class and those signatures obtained by delegation, recursively."
parameters (list Parameters
(object Parameter "excluding"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "uml2mof.isUnique"
value (value Text "true")))
quid "47EAB2AC0343"
type "SapClass"
quidu "4432171B031E"))
result "MethodSignature"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "47D67D15030D")
(object Operation "delegatedSignaturesExcluding"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::delegatedSignaturesExcluding(excluding:Set(SapClass)):Set(MethodSignature)
|body:
|if excluding->count(self)=0 then
| self.delegatesTo().signaturesWithDelegationExcluding(excluding->including(self))->flatten()->asSet()
|else
| Set{}
|endif
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "47EAB40A028F"
documentation "Signatures obtained by delegation recursively."
parameters (list Parameters
(object Parameter "excluding"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "uml2mof.isUnique"
value (value Text "true")))
quid "47EAB4160083"
type "SapClass"
quidu "4432171B031E"))
result "MethodSignature"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "47D67D15030D")
(object Operation "getConformingClasses"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::getConformingClasses():Set(SapClass)
|body:
| self.adaptedBy.adapted.getConformingClasses()->including(self)->asSet()
|
|
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true")))
quid "488083D701C5"
result "SapClass"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "4432171B031E")
(object Operation "getAssociationEnds"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "*"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::getAssociationEnds():Set(AssociationEnd)
|body:
| self.elementsOfType->collect(associationEnd->asSet())->asSet()
))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true")))
quid "4976387602F5"
documentation "Retrieves those association ends that use this class in their type definition."
result "AssociationEnd"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "44EC55FB03B8")
(object Operation "getEqualityRelevantAssociationEnds"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "*"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::getEqualityRelevantAssociationEnds():Set(AssociationEnd)
|body:
| self.getAssociationEnds()->select(ae|ae.contributesToEquality)
)))
quid "4976394D03D7"
documentation "Obtains all association ends that use this class in their type definition and that contribute to this class's equality, indicated by their contributesToEquality attribute being set to true."
result "AssociationEnd"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "44EC55FB03B8")
(object Operation "getConformsToClasses"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "*"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::getConformsToClasses():Set(SapClass)
|body:
| self.adapters.to.getConformsToClasses()->including(self)->asSet()
)))
quid "49784E36029F"
documentation "Determines all classes to which this class conforms, directly and transitively, through chains of TypeAdapters. The result includes this class itself."
result "SapClass"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "4432171B031E")
(object Operation "getConformsToAssociationEnds"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "*"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::getConformsToAssociationEnds():Set(AssociationEnd)
|body:
| self.getConformsToClasses().getAssociationEnds()->asSet()
)))
quid "49784F2C02FD"
documentation
|Determines all association ends to whose type this class conforms. This means that an instance of this class can be inserted on that respective end of the corresponding association. For example, if there is an association between Order and Item with ends "order" and "items" and there are classes SalesOrder and SalesOrderItem conforming to Order and Item, respectively, then the "order" end will be returned by this method when invoked on the SalesOrder class because SalesOrder conforms to Order and therefore a SalesOrder can be inserted into the association in role "order."
result "AssociationEnd"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "44EC55FB03B8")
(object Operation "getConformsToCompositeParentAssociationEnds"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "*"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::getConformsToCompositeParentAssociationEnds():Set(AssociationEnd)
|body:
| self.getConformsToClasses().getAssociationEnds()->select(ae|ae.composite)->asSet()
)))
quid "4978501103A9"
documentation "Like getConformsToAssociationEnds(), but selects only those association ends that are marked as composite."
result "AssociationEnd"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "44EC55FB03B8")
(object Operation "getConformsToCompositeChildAssociationEnds"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "*"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SapClass::getConformsToCompositeChildAssociationEnds():Set(AssociationEnd)
|body:
| self.getConformsToClasses().getAssociationEnds()->select(ae|ae.otherEnd().composite)->asSet()
)))
quid "4978508B003E"
documentation "Like getConformsToAssociationEnds(), but selects only those association ends whose other ends are marked as composite."
result "AssociationEnd"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "44EC55FB03B8"))
class_attributes (list class_attribute_list
(object ClassAttribute "valueType"
quid "47B98A000000"
documentation
|If true, instances of the class will be immutable. Comparison will be by equality. Their identity is defined by value equality. Value types can of course contain associations to non-value (or "entity") types.
|
|As opposed to value types, instances of entity types have identity and mutable state. They are always passed by reference. Variables only hold a reference to a shared instance. Comparing two entity objects using "Equals" will compare their identities.
type "Boolean"
quidu "39A2BDA60392"
exportControl "Public"))
nestedClasses (list nestedClasses
(object Class "OnlyValueClassesCanHaveObjectParameters"
quid "49B15ADD007D"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "49B15AF902DE"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context SapClass
|inv:
| self.formalObjectParameters->notEmpty() implies self.valueType
)
opExportControl "Public"
uid 0)))
(object Class "OnlyObjectParameterizedClassesCanHaveConverter"
quid "49B15B25030D"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "49B15B3D008C"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context SapClass
|inv:
| self.converterBetweenParametrizations->notEmpty() implies self.formalObjectParameters->notEmpty()
)
opExportControl "Public"
uid 0)))
(object Class "OnlyTrailingOptionalParameters"
quid "49D2C2BB0280"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "49D2C2BB0290"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context SapClass
|inv:
| self.formalObjectParameters->forAll(p | p.defaultValue->notEmpty() implies Sequence{(self.formalObjectParameters->indexOf(p)+1)..self.formalObjectParameters->size()}->forAll(
| i | self.formalObjectParameters->at(i).defaultValue->notEmpty()))
)
opExportControl "Public"
uid 0)))
(object Class "NoRecursionForObjectParameters"
quid "4A0D90B302DE"
documentation
|If the class defines formal object parameters and one of those happens to be again a value class which as a component directly or indirectly holds a value of the class being defined, this would lead to an endless recursion in parameterizing the types. It is therefore generally forbidden by this constraint.
|
|The only exception is the Number class which is parameterized by a precision value which in turn is a Number value. However, that parameter's type's precision, in turn, defaults to the Number literal "0" which has a fixed precision of 1 which in turn has itself as its precision, ending the recursion. This special rule is supported by parser and interpreter.
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4A0D90D70280"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context SapClass
|inv:
| true -- TODO implement this
)
opExportControl "Public"
uid 0)))))
(object Class "Delegation"
quid "456DB5D50361"
documentation
|Exposes all features (operations and exposed association ends) of the class to which the opposite of the "from" end is attached as features of the "from" end's class. In particular, this makes the "from" class conform to the type of the "to" association end.
|
|The lower and upper multiplicity of the "from" opposite's association end must be 1 because a single instance is required in order to the "from" type to be able to delegate to it.
class_attributes (list class_attribute_list
(object ClassAttribute "allFeatures"
quid "456DC1B60091"
type "Boolean"
quidu "39A2BDA60392"
exportControl "Public"))
nestedClasses (list nestedClasses
(object Class "ToEndMustHaveMultiplicityOfOne"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.violationMessageExpression"
value (value Text "'TO end must have multiplicity of One'")))
quid "456DB71403E2"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "456DB72802F0"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Delegation
|inv:
| self.from.otherEnd().type.lowerMultiplicity = 1 and
| self.from.otherEnd().type.upperMultiplicity = 1
)
opExportControl "Public"
uid 0)))))
(object Class "TypedElement"
quid "4717B7BC031A"
operations (list Operations
(object Operation "conformsTo"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context TypedElement::conformsTo(typedElement:TypedElement):Boolean
|body:
| self = typedElement or
| self.getType().conformsTo(typedElement.getType())
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "47555350031C"
documentation
|A typed element consisting of a type with a multiplicity conforms to another typed element if this typed element's type conforms to the other type element's type, and this type element's multiplicity "conforms" to the other type element's multiplicity. In particular, equal multiplicities conform to each other.
|
|TODO: decide if and how non-equal multiplicites may still conform; for example, a single element may implicitly conform to a collection of elements of conforming type; however, additions to the single element would not be possible.
parameters (list Parameters
(object Parameter "typedElement"
quid "47555350031D"
type "TypedElement"
quidu "4717B7BC031A"))
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "getType"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context TypedElement::getType():TypeDefinition
|body:
| if self.ownedTypeDefinition->notEmpty() then
| self.ownedTypeDefinition
| else
| if self.oclIsKindOf(behavioral::actions::Variable) then
| self.oclAsType(behavioral::actions::Variable).initExpression.getType()
| else if self.oclIsKindOf(behavioral::actions::Constant) then
| if self.oclAsType(behavioral::actions::Constant).initExpression->notEmpty() then
| self.oclAsType(behavioral::actions::Constant).initExpression.getType()
| else
| if self.oclAsType(behavioral::actions::Constant)._iterate->notEmpty() then
| self.oclAsType(behavioral::actions::Constant)._iterate.iteratorExpression.getType()
| else
| null
| endif
| endif
| else if self.oclIsKindOf(behavioral::actions::Iterator) then
| if self.oclAsType(behavioral::actions::Iterator).boundToFor->notEmpty() then
| if self.oclAsType(behavioral::actions::Iterator).boundToFor.collection.getType().oclIsKindOf(data::classes::NestedTypeDefinition) then
| -- if the selection's object has a nested type definition, un-nest by one level
| self.oclAsType(behavioral::actions::Iterator).boundToFor.collection.getType().oclAsType(data::classes::NestedTypeDefinition).type
| else
| -- the tool should infer a better match; this as a better default than "null"
| self.oclAsType(behavioral::actions::Iterator).boundToFor.collection.getType()
| endif
| else
| let selection:Set(dataaccess::expressions::Expression)=self.oclAsType(behavioral::actions::Iterator).selection.object->asSet() in
| let groupby:Set(dataaccess::expressions::Expression)=self.oclAsType(behavioral::actions::Iterator).factOfGroupBy.object->asSet() in
| let iterateexp:Set(dataaccess::expressions::Expression)=self.oclAsType(behavioral::actions::Iterator)._iterate.source->asSet() in
| let iteratesource:Set(dataaccess::expressions::Expression)=selection->union(groupby)->union(iterateexp) in
| if iteratesource->notEmpty() then
| if iteratesource->any(true).getType().oclIsKindOf(data::classes::NestedTypeDefinition) then
| -- if the Selection's/GroupBy's object has a nested type definition, un-nest by one level
| iteratesource->any(true).getType().oclAsType(data::classes::NestedTypeDefinition).type
| else
| -- In this case the tool should create a cloned tpye definition with multiplicities set to 1;
| -- Just in case the tool doesn't do this and for the case where the object has upper
| -- multiplicity 1, use the object's type as the default for the "self" iterator
| iteratesource->any(true).getType()
| endif
| else
| if self.oclAsType(behavioral::actions::Iterator).groupedFactsOfGroupBy->notEmpty() then
| -- the groups of a group-by expression can re-used the facts type
| self.oclAsType(behavioral::actions::Iterator).factOfGroupBy.object.getType()
| else
| if self.oclAsType(behavioral::actions::Iterator).dimension->notEmpty() then
| -- the DimensionDefinition's expression defines the dimension iterator's type
| self.oclAsType(behavioral::actions::Iterator).dimension.expression.getType()
| else
| -- Then we have no idea how to infer the Iterator's type
| null
| endif
| endif
| endif
| endif
| else if self.oclIsKindOf(dataaccess::expressions::collectionexpressions::Including) or self.oclIsKindOf(dataaccess::expressions::collectionexpressions::Excluding) then
| self.oclAsType(dataaccess::expressions::collectionexpressions::CollectionExpression).source.getType()
| else if self.oclIsKindOf(dataaccess::expressions::collectionexpressions::Iterate) then
| self.oclAsType(dataaccess::expressions::collectionexpressions::Iterate).iteratorExpression.getType()
| else if self.oclIsKindOf(Parameter) then
| if self.oclAsType(Parameter).defaultValue->notEmpty() then
| self.oclAsType(Parameter).defaultValue.getType()
| else
| if self.oclAsType(Parameter).ownerSignature.oclIsKindOf(MethodSignature) and
| self.oclAsType(Parameter).ownerSignature.oclAsType(MethodSignature).implementation->notEmpty() and
| self.oclAsType(Parameter).ownerSignature.oclAsType(MethodSignature).implementation.oclIsKindOf(AssociationEndSignatureImplementation) then
| let impl:AssociationEndSignatureImplementation = self.oclAsType(Parameter).ownerSignature.oclAsType(MethodSignature).implementation.oclAsType(AssociationEndSignatureImplementation) in
| impl.end.type
| else
| if self.oclAsType(Parameter).ownerSignature.oclIsKindOf(FunctionSignature) then
| if self.oclAsType(Parameter).ownerSignature.oclAsType(FunctionSignature).dimension->notEmpty() then
| self.oclAsType(Parameter).ownerSignature.oclAsType(FunctionSignature).dimension.cellSet.factsType
| else
| if self.oclAsType(Parameter).ownerSignature.oclAsType(FunctionSignature).cellSetForValueFunction->notEmpty() then
| self.oclAsType(Parameter).ownerSignature.oclAsType(FunctionSignature).cellSetForValueFunction.factsType
| else
| if self.oclAsType(Parameter).ownerSignature.oclAsType(FunctionSignature).cellSetForAggregationFunction->notEmpty() then
| if self.oclAsType(Parameter).ownerSignature.oclAsType(FunctionSignature).cellSetForAggregationFunction.valueFunction->notEmpty() then
| self.oclAsType(Parameter).ownerSignature.oclAsType(FunctionSignature).cellSetForAggregationFunction.valueFunction.output
| else
| self.oclAsType(Parameter).ownerSignature.oclAsType(FunctionSignature).cellSetForAggregationFunction.factsType
| endif
| else
| if self.oclAsType(Parameter).ownerSignature.oclAsType(FunctionSignature).implementation.oclIsKindOf(dataaccess::analytics::CellSet) then
| let pos:Integer = self.oclAsType(Parameter).ownerSignature.input->indexOf(self.oclAsType(Parameter)) in
| if pos = 1 then
| self.oclAsType(Parameter).ownerSignature.oclAsType(FunctionSignature).implementation.oclAsType(dataaccess::analytics::CellSet).factsType
| else
| self.oclAsType(Parameter).ownerSignature.oclAsType(FunctionSignature).implementation.oclAsType(dataaccess::analytics::CellSet).
| dimensions->at(-1+pos).characteristicFunction.output
| endif
| else
| null
| endif
| endif
| endif
| endif
| else
| null
| endif
| endif
| endif
| else if self.oclIsKindOf(dataaccess::analytics::DimensionExpression) then
| -- TODO Here, the multiplicity would have to be forced to 0..*
| self.oclAsType(dataaccess::analytics::DimensionExpression).dimensionParameter.getType()
| else if self.oclIsKindOf(dataaccess::expressions::VariableExpression) then
| self.oclAsType(dataaccess::expressions::VariableExpression).variable.getType()
| else if self.oclIsKindOf(dataaccess::expressions::SignatureCallExpression) then
| self.oclAsType(dataaccess::expressions::SignatureCallExpression).getSignature().output
| else if self.oclIsKindOf(dataaccess::expressions::AssociationEndNavigationExpression) then
| self.oclAsType(dataaccess::expressions::AssociationEndNavigationExpression).toEnd.type
| else if self.oclIsKindOf(dataaccess::expressions::Replace) then
| self.oclAsType(dataaccess::expressions::Replace).object.getType()
| else if self.oclIsKindOf(dataaccess::expressions::Ternary) then
| -- Find the "least" TypeDefinition to which both, trueExpr.getType() and falseExpr.getType() conform.
| -- We determine the more general of the two types; we cannot synthesize a new TypeDefinition in OCL.
| -- Doing so would have to be done by explicit typing, setting the ownedTypeDefinition explicitly
| if self.oclAsType(dataaccess::expressions::Ternary).trueExpr.getType().conformsTo(self.oclAsType(dataaccess::expressions::Ternary).falseExpr.getType()) then
| self.oclAsType(dataaccess::expressions::Ternary).falseExpr.getType()
| else
| self.oclAsType(dataaccess::expressions::Ternary).trueExpr.getType()
| endif
| else if self.oclIsKindOf(dataaccess::query::Selection) then
| self.oclAsType(dataaccess::query::Selection).object.getType()
| else
| null
| endif
| endif
| endif
| endif
| endif
| endif
| endif
| endif
| endif
| endif
| endif
| endif
| endif
| endif
)))
quid "4905EBCF00CB"
documentation
|Determined the type of the element. If the element owns a type definition, that one is assumed to be the result. Otherwise, "polymorphically" (we will refactor this once we can defined OCL method bodies polymorphically) we determine the type of the respective element.
|
|TODO the inference for Iterator elements used in an Iterate expression needs to resolve NestedTypeDefinitions; for non-NestedTypeDefinition type definitions it needs to reduce the multiplicity to exactly 1.
result "TypeDefinition"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "47B9A97A00CB"))
abstract TRUE)
(object Class "Context"
quid "46FB5A85031C"
documentation
|An instance of a class can occur in a number of contexts. Each context has a characteristic condition that an object has to fulfill in order to "be in that context."
|
|A context can specify constraints, additional events that the object may raise, or preconditions for operations of the object's class.
|
|(Currently, the metamodel only describes context-based constraints; events and preconditions may have to be added later.)
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "478BC293014F"
supplier "Logical View::modelmanagement::NamedElement"
quidu "45013C240030"))
nestedClasses (list nestedClasses
(object Class "ConditionMustBeBoolean"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.violationMessageExpression"
value (value Text "'Condition must be boolean'")))
quid "46FB62310290"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "46FB62310291"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Context
|inv:
| self.condition.getType().upperMultiplicity = 1 and
| self.condition.getType().oclIsKindOf(ClassTypeDefinition) and
| self.condition.getType().oclAsType(ClassTypeDefinition).clazz.name = 'Boolean'
)
opExportControl "Public"
uid 0)))
(object Class "ConstraintForRightClass"
quid "4750233C0128"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4750234A02AF"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Context
|inv:
| self.constraints->forAll(c | c.constrainedType = self.for_)
)
opExportControl "Public"
uid 0)))))
(object Class "Multiplicity"
quid "47554DA003A9"
operations (list Operations
(object Operation "isMany"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context Multiplicity::isMany():Boolean
|body:
| self.upperMultiplicity > 1 or self.upperMultiplicity = -1
)))
quid "48A9EC770251"
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392"))
class_attributes (list class_attribute_list
(object ClassAttribute "lowerMultiplicity"
quid "4507C31E02D6"
documentation "The lower bounds of this multiplicity."
type "Integer"
quidu "3B538AB300B3"
exportControl "Public")
(object ClassAttribute "upperMultiplicity"
quid "4507C32D010B"
documentation "The upper bounds of this multiplicity. Unlimited is encoded as -1."
type "Integer"
quidu "3B538AB300B3"
exportControl "Public")
(object ClassAttribute "ordered"
quid "4574A6340159"
type "Boolean"
quidu "39A2BDA60392"
exportControl "Public")
(object ClassAttribute "unique"
quid "47554DC003A9"
type "Boolean"
quidu "39A2BDA60392"
exportControl "Public"))
abstract TRUE)
(object Class "SignatureImplementation"
quid "47836ECF037A"
documentation
|A signature can be implemented by a block (this would be a "method" in the classical sense) or, e.g., by an association navigation or by a link set manipulation statement.
operations (list Operations
(object Operation "getImplementedSignature"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SignatureImplementation::getImplementedSignature():Signature
|body:
| if self.oclIsKindOf(FunctionSignatureImplementation) then
| if self.oclAsType(FunctionSignatureImplementation).functionSignature->notEmpty() then
| self.oclAsType(FunctionSignatureImplementation).functionSignature
| else
| self.implements_
| endif
| else
| self.implements_
| endif
)))
quid "489D53A40232"
documentation "A block implements either a FunctionSignature or a MethodSignature. Two different associations connect the Block with the respective Signature subclasses. This operation is a convenience that chooses the one or the other, depending on which one is filled."
result "Signature"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "4432198602CB"))
abstract TRUE)
(object Class "LinkTraversal"
quid "47837252006D"
documentation "Navigates an association starting on the source object on which the implementation is invoked and navigating to the *end* specified."
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4783727003B9"
supplier "Logical View::data::classes::AssociationEndSignatureImplementation"
quidu "478372D00242"))
nestedClasses (list nestedClasses
(object Class "OutputTypeMatchEndType"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.violationMessageExpression"
value (value Text "'Signature has input or output does not match association end type'")))
quid "4784FC2201C5"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4784FC3A0271"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context LinkTraversal
|inv:
| self.implements_.input->isEmpty() and
| self.implements_.output.oclIsKindOf(ClassTypeDefinition) and
| self.implements_.output.oclAsType(ClassTypeDefinition).clazz = self.end.type.clazz
)
opExportControl "Public"
uid 0)))
(object Class "MustBeNavigable"
quid "48A152F80290"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "48A152F80291"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context LinkTraversal
|inv:
| self.end.navigable
)
opExportControl "Public"
uid 0)))))
(object Class "LinkAddition"
quid "47837252033C"
documentation "Adds a link to the association of which *end* is one end, such that the object on which the implementation is invoked is on the other end, and the parameters passed to this implementation are in the role denoted by *end*."
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "47837272003E"
supplier "Logical View::data::classes::LinkManipulationAtPosition"
quidu "4A6D631E01A5"))
nestedClasses (list nestedClasses
(object Class "AdditionInputTypeMatchEndType"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.violationMessageExpression"
value (value Text "'Signature has output or input does not match association end type'")))
quid "4784FC9E0109"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4784FC9E010A"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context LinkAddition
|inv:
| self.implements_.output->isEmpty() and
| self.implements_.input->size() = 1 and
| self.implements_.input->at(1).getType().oclIsKindOf(ClassTypeDefinition) and
| self.implements_.input->at(1).getType().oclAsType(ClassTypeDefinition).clazz = self.end.type.clazz
)
opExportControl "Public"
uid 0)))))
(object Class "LinkRemoval"
quid "47837254000F"
documentation "Removes all links from the object on which the implementation is invoked to those objects passed as parameters where the parameter objects are in the role denoted by *end*."
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4783727300FA"
supplier "Logical View::data::classes::LinkManipulationAtPosition"
quidu "4A6D631E01A5"))
nestedClasses (list nestedClasses
(object Class "RemovalTypeMatchEndType"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.violationMessageExpression"
value (value Text "'Signature has output or input does not match association end type'")))
quid "4784FCA20167"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4784FCCF037A"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context LinkRemoval
|inv:
| self.implements_.output->isEmpty() and
| self.implements_.input->size() = 1 and
| self.implements_.input->at(1).getType().oclIsKindOf(ClassTypeDefinition) and
| self.implements_.input->at(1).getType().oclAsType(ClassTypeDefinition).clazz = self.end.type.clazz
)
opExportControl "Public"
uid 0)))))
(object Class "AssociationEndSignatureImplementation"
quid "478372D00242"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4783730402FD"
supplier "Logical View::data::classes::SignatureImplementation"
quidu "47836ECF037A"))
abstract TRUE
nestedClasses (list nestedClasses
(object Class "OnlyOnOtherEndsClassOrClassConformingToItOrAdapterAdaptingToIt"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.violationMessageExpression"
value (value Text "'Implementation must be owned in other end class'")))
quid "47D65BD10261"
documentation "TODO what about association end-implemented signatures on type adapters? Should we support this?"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "47D65BDF0151"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context AssociationEndSignatureImplementation
|inv:
| (self.implements_.owner.oclIsKindOf(SapClass) and
| self.implements_.owner.oclAsType(SapClass).conformsTo(self.end.otherEnd().type.clazz))
| or (self.implements_.owner.oclIsKindOf(TypeAdapter) and
| self.implements_.owner.oclAsType(TypeAdapter).adapted.conformsTo(self.end.otherEnd().type.clazz))
|
)
opExportControl "Public"
uid 0)))))
(object Class "ClassTypeDefinition"
quid "4784F7E800AB"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "47B9A982030D"
supplier "Logical View::data::classes::TypeDefinition"
quidu "47B9A97A00CB"))
operations (list Operations
(object Operation "objectParametersConformTo"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context ClassTypeDefinition::objectParametersConformTo(ctd:ClassTypeDefinition):Boolean
|body:
| if self.effectiveObjectParameters()->size() = ctd.effectiveObjectParameters()->size() then
| self.clazz.converterBetweenParametrizations->notEmpty() or
| Sequence{1..self.effectiveObjectParameters()->size()}->forAll(i |
| self.effectiveObjectParameters()->at(i).evaluatesToEqualAs(ctd.effectiveObjectParameters()->at(i)))
| else
| false
| endif
)))
quid "49C0C5AE02EE"
parameters (list Parameters
(object Parameter "ctd"
quid "49C0C5BC0186"
type "ClassTypeDefinition"
quidu "4784F7E800AB"))
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "effectiveObjectParameters"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "*"))
(object Attribute
tool "MOF"
name "rose2mof.return.isOrdered"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context ClassTypeDefinition::effectiveObjectParameters():Sequence(Expression)
|body:
| self.objectParameters.value->flatten()->asSequence()->union(
| Sequence{(self.objectParameters->size()+1)..(self.clazz.formalObjectParameters->size())}->collect(i |
| self.clazz.formalObjectParameters->at(i).defaultValue->flatten()->asSequence()))->flatten()->asSequence()
))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "false")))
quid "49D37F7B030D"
result "Expression"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "450E63AB03A2"))
nestedClasses (list nestedClasses
(object Class "ActualObjectsParametersMatchSignature"
quid "49B15774036B"
documentation "Ensures that the objects used as actual object parameters for the class match the signature as defined by the formal object parameters of the class."
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "49B15774036C"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ClassTypeDefinition
|inv:
| let numberOfMandatoryParameters:Integer =
| self.clazz.formalObjectParameters->select(p|p.defaultValue->isEmpty())->size()
| in
| self.objectParameters->size() >= numberOfMandatoryParameters and
| self.objectParameters->size() <= self.clazz.formalObjectParameters->size() and
| Sequence{1..self.objectParameters->size()}->forAll(i:Integer|
| self.objectParameters->at(i).formalObjectParameter =
| self.clazz.formalObjectParameters->at(i))
)
opExportControl "Public"
uid 0)))))
(object Class "TypeDefinition"
quid "47B9A97A00CB"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "47B9A98500EA"
supplier "Logical View::data::classes::Multiplicity"
quidu "47554DA003A9"))
operations (list Operations
(object Operation "conformsTo"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context TypeDefinition::conformsTo(typeDef:TypeDefinition):Boolean
|body:
| if self.oclIsUndefined() then
| false
| else if self = typeDef then
| true
| else
| self.conformsToExcluding(typeDef, Sequence{}, Sequence{})
| endif
| endif
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "478630C203C8"
parameters (list Parameters
(object Parameter "typeDef"
quid "478630CC037A"
type "TypeDefinition"
quidu "47B9A97A00CB"))
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "conformsToExcluding"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context TypeDefinition::conformsToExcluding(td:TypeDefinition, excludingConforming:Sequence(SapClass), excludingTo:Sequence(SapClass)):Boolean
|body:
| if oclIsUndefined() then
| false
| else
| if self = td then
| true
| else
| self.multiplicityConformsTo(td) and
| self.conformsToIgnoringMultiplicityExcluding(td, excludingConforming, excludingTo)
| endif
| endif
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "478672C20310"
documentation "Same as conformsTo(Featured):Boolean but with the possibility to pass pairs of Featured elements that are to be considered conforming and thus don't need further exploration. This can be used to avoid endless recursions in conformance testing."
parameters (list Parameters
(object Parameter "td"
attributes (list Attribute_Set)
quid "478672C20311"
type "TypeDefinition"
quidu "47B9A97A00CB")
(object Parameter "excludingConforming"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "uml2mof.isOrdered"
value (value Text "true")))
quid "478672C20312"
type "SapClass"
quidu "4432171B031E")
(object Parameter "excludingTo"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "uml2mof.isOrdered"
value (value Text "true")))
quid "478672C20313"
type "SapClass"
quidu "4432171B031E"))
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "multiplicityConformsTo"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context TypeDefinition::multiplicityConformsTo(td:TypeDefinition):Boolean
|body:
| -- check for multiplicity conformance
| -- multiplicity of td must include multiplicity of td
| td.lowerMultiplicity <= self.lowerMultiplicity
| and
| (
| td.upperMultiplicity = -1
| or
| ( td.upperMultiplicity >= self.upperMultiplicity and self.upperMultiplicity <> -1 )
| )
|
| -- check for conformance of orderedness and uniqueness
| -- orderedness/uniqueness of td must be same or more relaxed than self's
| and
| (
| not self.isMany()
| or
| ( ( self.ordered = td.ordered ) and ( self.unique = td.unique ) )
| or
| ( self.ordered and self.unique )
| or
| ( not ( td.ordered or td.unique ) )
| )
)))
quid "48EA7C2E0372"
documentation
|Checks if this type definition's multiplicity conforms to td's multiplicity definitions. This is the case if all instances that conform to this type definition will also conform to td.
|
|Multiplicity conforms if td includes self's multiplicity, thus td's lower multiplicity is equal or smaller, and td's upper multiplicity is equal or larger than self's.
|
|Ordereness and uniquness conform if td has more relaxed requirements. Thus, they conform if they are equal, if td is neither ordered nor unique, or if self is ordered and unique
parameters (list Parameters
(object Parameter "td"
quid "48EA7CC001FB"
type "TypeDefinition"
quidu "47B9A97A00CB"))
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "conformsToIgnoringMultiplicityExcluding"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context TypeDefinition::conformsToIgnoringMultiplicityExcluding(td:TypeDefinition, excludingConforming:Sequence(SapClass), excludingTo:Sequence(SapClass)):Boolean
|body:
| if self = td then
| true
| else
| if self.oclIsKindOf(ClassTypeDefinition) then
| td.oclIsKindOf(ClassTypeDefinition) and
| self.oclAsType(ClassTypeDefinition).clazz.conformsToExcluding(
| td.oclAsType(ClassTypeDefinition).clazz, excludingConforming, excludingTo) and
| self.oclAsType(ClassTypeDefinition).objectParametersConformTo(td.oclAsType(ClassTypeDefinition))
| else
| if self.oclIsKindOf(FunctionSignatureTypeDefinition) then
| td.oclIsKindOf(FunctionSignatureTypeDefinition) and
| self.oclAsType(FunctionSignatureTypeDefinition).signature.conformsToExcluding(
| td.oclAsType(FunctionSignatureTypeDefinition).signature, excludingConforming, excludingTo)
| else
| td.oclIsKindOf(NestedTypeDefinition) and
| self.oclAsType(NestedTypeDefinition).type.conformsToExcluding(
| td.oclAsType(NestedTypeDefinition).type, excludingConforming, excludingTo)
| endif
| endif
| endif
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "48EA7D5903DF"
documentation "Same as conformsTo(Featured):Boolean but with the possibility to pass pairs of Featured elements that are to be considered conforming and thus don't need further exploration. This can be used to avoid endless recursions in conformance testing."
parameters (list Parameters
(object Parameter "td"
attributes (list Attribute_Set)
quid "48EA7D5903E0"
type "TypeDefinition"
quidu "47B9A97A00CB")
(object Parameter "excludingConforming"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "uml2mof.isOrdered"
value (value Text "true")))
quid "48EA7D5903E1"
type "SapClass"
quidu "4432171B031E")
(object Parameter "excludingTo"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "uml2mof.isOrdered"
value (value Text "true")))
quid "48EA7D5903E2"
type "SapClass"
quidu "4432171B031E"))
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "conformsToIgnoringMultiplicity"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context TypeDefinition::conformsToIgnoringMultiplicity(typeDef:TypeDefinition):Boolean
|body:
| if self = typeDef then
| true
| else
| self.conformsToIgnoringMultiplicityExcluding(typeDef, Sequence{}, Sequence{})
| endif
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "48EA7E0A0304"
parameters (list Parameters
(object Parameter "typeDef"
quid "48EA7E0A0305"
type "TypeDefinition"
quidu "47B9A97A00CB"))
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "getTypeUsage"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "*"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context TypeDefinition::getTypeUsage():Set(TypedElement)
|body:
| TypedElement.allInstances()->select(te | te.getType() = self)
))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true")))
quid "49062365016E"
result "TypedElement"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "4717B7BC031A")
(object Operation "getInnermost"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context TypeDefinition::getInnermost():TypeDefinition
|body:
| if self.oclIsKindOf(NestedTypeDefinition) then
| self.oclAsType(NestedTypeDefinition).type.getInnermost()
| else
| self
| endif
)))
quid "4AD9743F0213"
documentation "For nexted type definitions, navigates through to the inner type definition. For non-nested type definitions, that type definition is the result of this method."
result "TypeDefinition"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "47B9A97A00CB")
(object Operation "getNestingLevel"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context TypeDefinition::getNestingLevel():Integer
|body:
| if self.oclIsKindOf(NestedTypeDefinition) then
| self.oclAsType(NestedTypeDefinition).type.getNestingLevel() + 1
| else
| 0
| endif
)))
quid "4ADF29CE02AF"
result "Integer"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "3B538AB300B3")
(object Operation "getNamedValuesInScope"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "*"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context TypeDefinition::getNamedValuesInScope():Set(NamedValue)
|body:
| -- find owner of type definition and collect the named values in scope for the owner
| (let ownerSig:Signature = self.ownerSignature in
| if ownerSig->notEmpty() and ownerSig.oclIsKindOf(Signature) then
| ownerSig.oclAsType(Signature).getNamedValuesInScope()
| else
| Set{} -- some boundary case such as TupleElement or ValueSet not currently supported
| endif)->union(
|
| if self.ownerTypedElement->notEmpty() then
| if self.ownerTypedElement.oclIsKindOf(dataaccess::expressions::Expression) then
| self.ownerTypedElement.oclAsType(dataaccess::expressions::Expression).getNamedValuesInScope()
| else
| if self.ownerTypedElement.oclIsKindOf(NamedValue) then
| self.ownerTypedElement.oclAsType(NamedValue).getNamedValuesInScope()
| else
| Set{} -- some boundary case such as TupleElement or ValueSet not currently supported
| endif
| endif
| else
| Set{}
| endif)
)))
quid "4B84096A02BF"
documentation "Needs to find the owner of the type definition, then check if it's a statement such as a variable declaration, or a method signature (meaning the owner may contribute formal object parameters) or a function signature (meaning the function expression knows the NamedValues in scope), etc."
result "NamedValue"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "4522A56F0149"))
abstract TRUE)
(object Class "NestedTypeDefinition"
quid "47B9A98D0138"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "47B9A99B0177"
supplier "Logical View::data::classes::TypeDefinition"
quidu "47B9A97A00CB"))
class_attributes (list class_attribute_list
(object ClassAttribute "op"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.multiplicity"
value (value Text "0..1")))
quid "49CA318F03B9"
documentation
|Only for syntax mapping issues, hopefully disappearing again in the future. It holds the operator that syntactically introduced this nested type definition, such as "[" or "*".
type "String"
quidu "39A2BDA60394"
exportControl "Public"))
nestedClasses (list nestedClasses
(object Class "NestedIsAlwaysMany"
quid "4AD9FA7500DA"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4AD9FA830280"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context NestedTypeDefinition
|inv:
| self.isMany()
)
opExportControl "Public"
uid 0)))))
(object Class "FunctionSignatureTypeDefinition"
quid "47B9A9AD03B9"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "47B9A9C20109"
supplier "Logical View::data::classes::TypeDefinition"
quidu "47B9A97A00CB")))
(object Class "MethodSignature"
quid "47D67D15030D"
documentation "a signature of a method defined in a class"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "47D67D1D035D"
supplier "Logical View::data::classes::Signature"
quidu "4432198602CB")
(object Inheritance_Relationship
quid "47D6805A0300"
supplier "Logical View::modelmanagement::NamedElement"
quidu "45013C240030"))
operations (list Operations
(object Operation "isAbstract"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context MethodSignature::isAbstract():Boolean
|body:
| self.implementation->isEmpty()
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "45759A6F0348"
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")))
(object Class "FunctionSignature"
quid "47D67D190077"
documentation "signature definition for an anonymous function that has to be implemented by a block"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "47D67D2001B3"
supplier "Logical View::data::classes::Signature"
quidu "4432198602CB"))
operations (list Operations
(object Operation "isAbstract"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context FunctionSignature::isAbstract():Boolean
|body:
| self.implementation->isEmpty()
)))
quid "48EA1ACF00EA"
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "getImplementedAnonymousFunctionExpression"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "0..1"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context FunctionSignature::getImplementedAnonymousFunctionExpression():AnonymousFunctionExpr
|body:
| let candidates:Sequence(dataaccess::expressions::fp::AnonymousFunctionExpr) =
| self.typeDefinition.ownerTypedElement.oclAsType(dataaccess::expressions::fp::AnonymousFunctionExpr)->asSequence() in
| if candidates->isEmpty() then
| null
| else
| candidates->at(1)
| endif
)))
quid "4B84EBDF0167"
result "AnonymousFunctionExpr"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "47A0757E02EC")))
(object Class "LinkSetting"
quid "47DEB88201E2"
documentation "Replaces all links of the association of which the association end *end* is part and which connect to the object on which this implementation is invoked with their other end. The links are replaced by links from the object on which the implementation is invoked to the object(s) passed to this implementation as argument."
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "47DEB8A501DE"
supplier "Logical View::data::classes::ExtentModifyingAssociationEndSignatureImplementation"
quidu "49425BBA0251"))
nestedClasses (list nestedClasses
(object Class "InputTypeMatchEndType"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.violationMessageExpression"
value (value Text "'Signature\\'s output or input does not match association end type'")))
quid "47DFFCFF00DB"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "47DFFCFF00DC"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context LinkSetting
|inv:
| self.implements_.output->isEmpty() and
| self.implements_.input->size() = 1 and
| self.implements_.input->at(1).getType().oclIsKindOf(ClassTypeDefinition) and
| self.implements_.input->at(1).getType().oclAsType(ClassTypeDefinition).clazz = self.end.type.clazz
)
opExportControl "Public"
uid 0)))))
(object Class "TypeAdapter"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.requiresPartition"
value TRUE))
quid "47F112210022"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "48A0413400CB"
supplier "Logical View::data::classes::SignatureOwner"
quidu "48A0412B002E"))
operations (list Operations
(object Operation "conformsTo"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context TypeAdapter::conformsTo(type:SapClass):Boolean
|body:
| type.signaturesWithDelegation()->forAll(typeSig:MethodSignature |
| self.allSignatures()->exists(selfSig:MethodSignature |
| selfSig.conformsToExcluding(typeSig, Sequence{self.to}, Sequence{type})))
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "47F11B080137"
documentation "A class A conforms to a class B if for every signature that B has (either directly or by delegation, but not from any adapters), A has a conforming signature, either immediately declared in A or by delegation or through a type adapter."
parameters (list Parameters
(object Parameter "type"
quid "47F11B080138"
type "SapClass"
quidu "4432171B031E"))
result "Boolean"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|post:
| TODO; the set of operations and exposed association ends owned by this class plus those owned by the classes to which this class
|delegates, plus the operations and exposed association ends of any type adapter that adapts this class need to fulfill the set of signatures of and association ends expoed by the "type" class, including those of the classes to which "type" delegates, but *not* the operations owned by any type adapters attached to "type" because those are not supposed to affect the requirements for conforming to "type".
)
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "conformsToExcluding"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context TypeAdapter::conformsToExcluding(type:SapClass, excludingConforming:Sequence(SapClass), excludingTo:Sequence(SapClass)):Boolean
|body:
| Sequence{1..excludingConforming->size()}->exists(i|
| excludingConforming->asSequence()->at(i) = self.to and excludingTo->asSequence()->at(i) = type) or
| type.signaturesWithDelegation()->forAll(typeSig:MethodSignature |
| self.allSignatures()->exists(selfSig:MethodSignature |
| selfSig.conformsToExcluding(typeSig,
| excludingConforming->asSequence()->append(self.to),
| excludingTo->asSequence()->append(type))))
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "47F11B130043"
documentation "Same as conformsTo(Featured):Boolean but with the possibility to pass pairs of Featured elements that are to be considered conforming and thus don't need further exploration. This can be used to avoid endless recursions in conformance testing."
parameters (list Parameters
(object Parameter "type"
attributes (list Attribute_Set)
quid "47F11B130044"
type "SapClass"
quidu "4432171B031E")
(object Parameter "excludingConforming"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "uml2mof.isOrdered"
value (value Text "true")))
quid "47F11B130045"
type "SapClass"
quidu "4432171B031E")
(object Parameter "excludingTo"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "uml2mof.isOrdered"
value (value Text "true")))
quid "47F11B130046"
type "SapClass"
quidu "4432171B031E"))
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "allSignatures"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context TypeAdapter::allSignatures():Set(MethodSignature)
|body:
| self.allSignaturesExcluding(Set{})
|
))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "47F11EA202A6"
documentation "Computes all locally-defined signatures plus not conforming signatures offered by 'To' Class. "
result "MethodSignature"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "47D67D15030D")
(object Operation "allSignaturesExcluding"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context TypeAdapter::allSignaturesExcluding(excluding:Set(SapClass)):Set(MethodSignature)
|body:
| self.to.allSignaturesExcluding(excluding)->select(s |
| not self.ownedSignatures->exists(os | os.conformsTo(s)))->union(
| self.ownedSignatures)
))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "Data Modeler"
name "KeyList"
value ""))
quid "47F123AB0091"
documentation "Same as allSignatures() but with the possibility to to avoid endless recursions."
parameters (list Parameters
(object Parameter "excluding"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "0..*"))
(object Attribute
tool "MOF"
name "uml2mof.isUnique"
value (value Text "true")))
quid "47F123AB0092"
type "SapClass"
quidu "4432171B031E"))
result "MethodSignature"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "47D67D15030D"))
nestedClasses (list nestedClasses
(object Class "AllSignatureConforms"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.violationMessageExpression"
value (value Text "'All signatures must conform to TO class signatures'")))
quid "47F536E802AE"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "47F536E802AF"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context TypeAdapter
|inv:
| self.ownedSignatures->forAll(selfSig:MethodSignature |
| self.to.signaturesWithDelegation()->exists(toSig:MethodSignature |
| selfSig.conformsTo(toSig)))
)
opExportControl "Public"
uid 0)))
(object Class "SignaturesCannotBeAbstract"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.violationMessageExpression"
value (value Text "'Signatures can not be abstract'")))
quid "47F54150036A"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "47F54150036B"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context TypeAdapter
|inv:
| self.ownedSignatures->forAll(selfSig:MethodSignature | not selfSig.isAbstract())
)
opExportControl "Public"
uid 0)))
(object Class "IsFullAdaptationToTo"
quid "487CC4420119"
documentation "Requires the adapter to provide owned conforming signatures for all of to's signatures for which adapted does not have a conforming signature."
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text "")))
quid "487CC4B50128"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context TypeAdapter
|inv:
| self.to.signaturesWithDelegation()->forAll(toSig|
| self.adapted.signaturesWithDelegation()->exists(adaptedSig|
| adaptedSig.conformsTo(toSig))
| or self.ownedSignatures->exists(ownedSig|
| ownedSig.conformsTo(toSig)))
)
opExportControl "Public"
uid 0)))
(object Class "ValuesToValues_EntitiesToEntities"
quid "4982DADB0157"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4982DAED02AF"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context TypeAdapter
|inv:
| self.adapted.valueType = self.to.valueType
)
opExportControl "Public"
uid 0)))))
(object Class "Parameter"
quid "47F12A7E0062"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "48566FFF0196"
supplier "Logical View::data::classes::NamedValue"
quidu "4522A56F0149"))
nestedClasses (list nestedClasses
(object Class "DefaultValueType"
quid "49D2B3330167"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "49D2B3410242"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Parameter
|inv:
| self.defaultValue->notEmpty() implies self.defaultValue.getType().conformsTo(self.getType())
)
opExportControl "Public"
uid 0)))))
(object Class "NamedValue"
quid "4522A56F0149"
documentation "A value that can be used by name in the scope of a Block. Specializations are, e.g., Constant and Variable. Specializations may have different rules for initialization expressions."
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "45472E5E0375"
supplier "Logical View::modelmanagement::NamedElement"
quidu "45013C240030")
(object Inheritance_Relationship
quid "4717B85102FB"
supplier "Logical View::data::classes::TypedElement"
quidu "4717B7BC031A"))
operations (list Operations
(object Operation "getNamedValuesInScope"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "*"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context NamedValue::getNamedValuesInScope():Set(NamedValue)
|body:
| self.owner.getNamedValuesInScope()->union(
| if self.oclIsKindOf(Parameter) then
| self.oclAsType(Parameter).ownerSignature.getNamedValuesInScope()
| else
| if self.oclIsKindOf(behavioral::actions::Iterator) then
| self.oclAsType(behavioral::actions::Iterator).boundToFor.getNamedValuesInScope()->asSet()->union(
| self.oclAsType(behavioral::actions::Iterator)._iterate.getNamedValuesInScope()->asSet())
| else
| if self.oclIsKindOf(behavioral::actions::Constant) then
| self.oclAsType(behavioral::actions::Constant)._iterate.getNamedValuesInScope()
| else
| Set{} -- TODO further cases?
| endif
| endif
| endif
| )
|
)))
quid "4B84F6FD002E"
result "NamedValue"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "4522A56F0149"))
abstract TRUE)
(object Class "PlatformSpecificImplementation"
quid "489C71AE029F"
class_attributes (list class_attribute_list
(object ClassAttribute "targetPlatform"
quid "489C720F000F"
type "String"
quidu "39A2BDA60394"
exportControl "Public")
(object ClassAttribute "implementation"
quid "489CACBF03C8"
type "String"
quidu "39A2BDA60394"
exportControl "Public")))
(object Class "NativeImpl"
quid "489CAD05038A"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "489CAD2D0186"
supplier "Logical View::data::classes::SignatureImplementation"
quidu "47836ECF037A")))
(object Class "SignatureOwner"
quid "48A0412B002E"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "47F524E900A5"
supplier "Logical View::modelmanagement::NamedElement"
quidu "45013C240030")))
(object Class "ExtentModifyingAssociationEndSignatureImplementation"
quid "49425BBA0251"
documentation "Abstract base class for all association extent-manipulating signature implementations. Groups all constraints that apply to those."
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "49425BEE02FD"
supplier "Logical View::data::classes::AssociationEndSignatureImplementation"
quidu "478372D00242"))
abstract TRUE
nestedClasses (list nestedClasses
(object Class "MustNotModifyExtentIfEqualityRelevantForValueClass"
quid "49425C35031C"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "49425C5403D8"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ExtentModifyingAssociationEndSignatureImplementation
|inv:
| end.association.ends->forAll(ae:AssociationEnd |
| ae.contributesToEquality implies not ae.type.clazz.valueType)
)
opExportControl "Public"
uid 0)))
(object Class "MustNotImplementSideEffectFreeOperation"
quid "489D52CC0232"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "489D52CC0251"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ExtentModifyingAssociationEndSignatureImplementation
|inv:
| not self.implements_.sideEffectFree
)
opExportControl "Public"
uid 0)))))
(object Class "FunctionSignatureImplementation"
quid "4974995A0069"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4974996A0390"
supplier "Logical View::data::classes::SignatureImplementation"
quidu "47836ECF037A"))
operations (list Operations
(object Operation "isSideEffectFree"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context FunctionSignatureImplementation::isSideEffectFree():Boolean
|body:
| if self.oclIsKindOf(behavioral::actions::Block) then
| self.oclAsType(behavioral::actions::Block).localIsSideEffectFree()
| else
| if self.oclIsKindOf(dataaccess::analytics::CellSet) then
| self.oclAsType(dataaccess::analytics::CellSet).localIsSideEffectFree()
| else
| false
| endif
| endif
)))
quid "4A3B3771032C"
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")))
(object Class "ActualObjectParameter"
quid "49B1547F0167")
(object Class "ConverterBetweenParametrizations"
quid "49B15A3F03D8"
documentation "Specifies a method as converter method. This class is mostly used as a constraint container for such a construct."
nestedClasses (list nestedClasses
(object Class "MustHaveConcreteMethod"
quid "49B15C100290"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "49B15C2202BF"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ConverterBetweenParametrizations
|inv:
| not self.conversionMethod.isAbstract()
)
opExportControl "Public"
uid 0)))
(object Class "FormalObjectParametersConformToMethodParameters"
quid "49B195DE0193"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "49B195FA0120"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ConverterBetweenParametrizations
|inv:
| self.conversionMethod.input->size() = self.clazz.formalObjectParameters->size() and
| Sequence{1..self.conversionMethod.input->size()}->forAll(i |
| self.clazz.formalObjectParameters->at(i).conformsTo(self.conversionMethod.input->at(i)))
)
opExportControl "Public"
uid 0)))))
(object Class "LinkManipulationAtPosition"
quid "4A6D631E01A5"
documentation "An implementation that optionally specifies a position in an ordered link set telling where to apply the modification."
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4A6D63480280"
supplier "Logical View::data::classes::ExtentModifyingAssociationEndSignatureImplementation"
quidu "49425BBA0251"))
class_attributes (list class_attribute_list
(object ClassAttribute "at"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.multiplicity"
value (value Text "0..1")))
quid "4A6D63680261"
type "Integer"
quidu "3B538AB300B3"
exportControl "Public"))
abstract TRUE)
(object Class "InScope"
quid "4B85514B0119"
operations (list Operations
(object Operation "addNamedValuesWithNewNames"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true"))
(object Attribute
tool "MOF"
name "rose2mof.return.multiplicity"
value (value Text "*"))
(object Attribute
tool "MOF"
name "rose2mof.return.isUnique"
value (value Text "true"))
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context InScope::addNamedValuesWithNewNames(inner:Set(NamedValue), outer:Set(NamedValue)):Set(NamedValue)
|body:
| inner->union(outer->select(o | not inner->exists(i | i.name = o.name))->asSet())
)))
quid "4B83E9E9035B"
documentation
|Used to build up a scope of named values, proceeding "inside-out." The first argument is the already computed set of NamedValues, all of which end up in the resulting set of NamedValues. NamedValues from the second argument are added to the result set if the first NamedValue set does not contain any NamedValue with an equal name.
parameters (list Parameters
(object Parameter "inner"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "*"))
(object Attribute
tool "MOF"
name "uml2mof.isUnique"
value (value Text "true")))
quid "4B83EA7000DA"
type "NamedValue"
quidu "4522A56F0149")
(object Parameter "outer"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "uml2mof.multiplicity"
value (value Text "*"))
(object Attribute
tool "MOF"
name "uml2mof.isUnique"
value (value Text "true")))
quid "4B83EA7B00FA"
type "NamedValue"
quidu "4522A56F0149"))
result "NamedValue"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "4522A56F0149"))
abstract TRUE)
(object Association "FaultsOfSignature"
quid "443B531C0296"
documentation "Exception handling to be discussed, e.g., should multiple exceptions be supported for signatures?"
roles (list role_list
(object Role "faults"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "443B53200210"
label "faults"
supplier "Logical View::data::classes::SapClass"
quidu "4432171B031E"
client_cardinality (value cardinality "0..1")
Containment "By Value"
is_navigable TRUE)
(object Role "signaturesWithFault"
quid "443B53200224"
label "signaturesWithFault"
supplier "Logical View::data::classes::Signature"
quidu "4432198602CB"
client_cardinality (value cardinality "0..*")
is_navigable TRUE)))
(object Association "EndsOfAssociation"
quid "44EC565F0290"
roles (list role_list
(object Role "ends"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "44EC56620059"
label "ends"
supplier "Logical View::data::classes::AssociationEnd"
quidu "44EC55FB03B8"
client_cardinality (value cardinality "2")
Constraints "ordered"
Containment "By Value"
is_navigable TRUE)
(object Role "association"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "44EC5662005B"
label "association"
supplier "Logical View::data::classes::Association"
quidu "44321DA40150"
client_cardinality (value cardinality "1")
Containment "By Value"
is_navigable TRUE
is_aggregate TRUE)))
(object Association "DelegationToEnd"
quid "456DB5E0010E"
roles (list role_list
(object Role "from"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "456DB5E0037B"
label "from"
supplier "Logical View::data::classes::AssociationEnd"
quidu "44EC55FB03B8"
client_cardinality (value cardinality "1")
is_navigable TRUE
is_aggregate TRUE)
(object Role "delegation"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "456DB5E0037D"
label "delegation"
supplier "Logical View::data::classes::Delegation"
quidu "456DB5D50361"
client_cardinality (value cardinality "0..1")
Containment "By Value"
is_navigable TRUE)))
(object Association "$UNNAMED$0"
quid "46FB5B290213"
roles (list role_list
(object Role "for_"
quid "46FB5B2A01A5"
label "for_"
supplier "Logical View::data::classes::SapClass"
quidu "4432171B031E"
client_cardinality (value cardinality "1")
is_navigable TRUE)
(object Role "$UNNAMED$1"
quid "46FB5B2A0271"
supplier "Logical View::data::classes::Context"
quidu "46FB5A85031C"
client_cardinality (value cardinality "0..*"))))
(object Association "$UNNAMED$2"
quid "46FB601003B9"
roles (list role_list
(object Role "constraints"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "46FB601102EE"
label "constraints"
supplier "Logical View::data::constraints::Constraint"
quidu "450E61B602EE"
client_cardinality (value cardinality "0..*")
Containment "By Value"
is_navigable TRUE)
(object Role "theContext"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "46FB601102FD"
label "theContext"
supplier "Logical View::data::classes::Context"
quidu "46FB5A85031C"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE)))
(object Association "$UNNAMED$3"
quid "46FB6203031C"
roles (list role_list
(object Role "condition"
quid "46FB620402BF"
label "condition"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"
client_cardinality (value cardinality "1")
Containment "By Value"
is_navigable TRUE)
(object Role "$UNNAMED$4"
quid "46FB6204030D"
supplier "Logical View::data::classes::Context"
quidu "46FB5A85031C"
client_cardinality (value cardinality "0..1")
is_aggregate TRUE)))
(object Association "$UNNAMED$5"
quid "4783730C003E"
roles (list role_list
(object Role "end"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "4783730C01A5"
label "end"
supplier "Logical View::data::classes::AssociationEnd"
quidu "44EC55FB03B8"
client_cardinality (value cardinality "1")
is_navigable TRUE)
(object Role "signatureImplementations"
quid "4783730C01A7"
label "signatureImplementations"
supplier "Logical View::data::classes::AssociationEndSignatureImplementation"
quidu "478372D00242"
client_cardinality (value cardinality "0..*")
is_navigable TRUE)))
(object Association "$UNNAMED$6"
quid "4784F7F5005D"
roles (list role_list
(object Role "elementsOfType"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "4784F7F5005E"
label "elementsOfType"
supplier "Logical View::data::classes::ClassTypeDefinition"
quidu "4784F7E800AB"
client_cardinality (value cardinality "0..*")
is_navigable TRUE)
(object Role "clazz"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "4784F7F5005F"
label "clazz"
supplier "Logical View::data::classes::SapClass"
quidu "4432171B031E"
client_cardinality (value cardinality "1")
is_navigable TRUE)))
(object Association "$UNNAMED$7"
quid "4795A52A00EA"
roles (list role_list
(object Role "associations"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "4795A52A03A9"
label "associations"
supplier "Logical View::data::classes::Association"
quidu "44321DA40150"
client_cardinality (value cardinality "0..*")
Containment "By Value"
is_navigable TRUE)
(object Role "package_"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "4795A52A03B9"
label "package_"
supplier "Logical View::modelmanagement::Package"
quidu "452B7C8B00D8"
client_cardinality (value cardinality "1")
is_navigable TRUE
is_aggregate TRUE)))
(object Association "$UNNAMED$8"
quid "4795967B001F"
roles (list role_list
(object Role "package_"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "4795967B0020"
label "package_"
supplier "Logical View::modelmanagement::Package"
quidu "452B7C8B00D8"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE)
(object Role "classes"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "4795967B0021"
label "classes"
supplier "Logical View::data::classes::SapClass"
quidu "4432171B031E"
client_cardinality (value cardinality "0..*")
Containment "By Value"
is_navigable TRUE)))
(object Association "$UNNAMED$9"
quid "47B9A9960148"
roles (list role_list
(object Role "type"
quid "47B9A99700DA"
label "type"
supplier "Logical View::data::classes::TypeDefinition"
quidu "47B9A97A00CB"
client_cardinality (value cardinality "1")
is_navigable TRUE)
(object Role "$UNNAMED$10"
quid "47B9A99700DC"
supplier "Logical View::data::classes::NestedTypeDefinition"
quidu "47B9A98D0138"
client_cardinality (value cardinality "0..*"))))
(object Association "$UNNAMED$11"
quid "47B9ABAE00AB"
roles (list role_list
(object Role "type"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "47B9ABAF02AF"
label "type"
supplier "Logical View::data::classes::ClassTypeDefinition"
quidu "4784F7E800AB"
client_cardinality (value cardinality "1")
Containment "By Value"
is_navigable TRUE)
(object Role "associationEnd"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "47B9ABAF02BF"
label "associationEnd"
supplier "Logical View::data::classes::AssociationEnd"
quidu "44EC55FB03B8"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE)))
(object Association "OutputOfSignature"
quid "47B9EDFD0000"
roles (list role_list
(object Role "output"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "47B9EDFD0001"
label "output"
supplier "Logical View::data::classes::TypeDefinition"
quidu "47B9A97A00CB"
client_cardinality (value cardinality "0..1")
is_navigable TRUE)
(object Role "signaturesWithOutput"
quid "47B9EDFD0002"
label "signaturesWithOutput"
supplier "Logical View::data::classes::Signature"
quidu "4432198602CB"
client_cardinality (value cardinality "0..*")
is_navigable TRUE)))
(object Association "$UNNAMED$12"
quid "47CBF4180109"
documentation "An examples for this kind of ownership is a variable declaration owning the corresponding type definition"
roles (list role_list
(object Role "ownedTypeDefinition"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "47CBF418010A"
label "ownedTypeDefinition"
supplier "Logical View::data::classes::TypeDefinition"
quidu "47B9A97A00CB"
client_cardinality (value cardinality "0..1")
Containment "By Value"
is_navigable TRUE)
(object Role "ownerTypedElement"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "47CBF418010B"
label "ownerTypedElement"
supplier "Logical View::data::classes::TypedElement"
quidu "4717B7BC031A"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE)))
(object Association "$UNNAMED$13"
quid "47CBF46E03D8"
roles (list role_list
(object Role "ownedTypeDefinitions"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "47CBF46E03D9"
label "ownedTypeDefinitions"
supplier "Logical View::data::classes::TypeDefinition"
quidu "47B9A97A00CB"
client_cardinality (value cardinality "0..1")
Containment "By Value"
is_navigable TRUE)
(object Role "ownerSignature"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "47CBF46E03DA"
label "ownerSignature"
supplier "Logical View::data::classes::Signature"
quidu "4432198602CB"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE)))
(object Association "$UNNAMED$14"
quid "47CD54E4031C"
roles (list role_list
(object Role "ownedTypeDefinition"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "47CD54E60251"
label "ownedTypeDefinition"
supplier "Logical View::data::classes::TypeDefinition"
quidu "47B9A97A00CB"
client_cardinality (value cardinality "0..1")
Containment "By Value"
is_navigable TRUE)
(object Role "owningNestedTypeDefinition"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "47CD54E60261"
label "owningNestedTypeDefinition"
supplier "Logical View::data::classes::NestedTypeDefinition"
quidu "47B9A98D0138"
client_cardinality (value cardinality "0..1")
is_aggregate TRUE)))
(object Association "$UNNAMED$15"
quid "47D67F7201BB"
documentation "Concrete (non-abstract) operations must specify their implementing Block using this association."
roles (list role_list
(object Role "implements_"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "47D67F7201BC"
label "implements_"
supplier "Logical View::data::classes::MethodSignature"
quidu "47D67D15030D"
client_cardinality (value cardinality "0..1")
Containment "By Value"
is_navigable TRUE