blob: 20b3eb015468a3fb372a4d14e875af8270c0d921 [file] [log] [blame]
(object Petal
version 50
_written "Rose 8.3.0407.2800"
charSet 0)
(object Class_Category "dataaccess"
is_unit TRUE
is_loaded TRUE
quid "453E0CD8006C"
stereotype "metamodel"
exportControl "Public"
logical_models (list unit_reference_list
(object Class_Category "expressions"
quid "45191D730367"
documentation "Specifies an expression language that allows its users for form expressions over objects and values, producing other objects and values."
exportControl "Public"
logical_models (list unit_reference_list
(object Class "Expression"
quid "450E63AB03A2"
documentation "An expression that evaluates to an object."
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4717B87503E5"
label "l"
supplier "Logical View::data::classes::TypedElement"
quidu "4717B7BC031A")
(object Inheritance_Relationship
quid "4B85517B009C"
supplier "Logical View::data::classes::InScope"
quidu "4B85514B0119"))
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 Expression::isSideEffectFree():Boolean
|body:
| let parametersAndSignatureAreSideEffectFree:Boolean =
| self.oclIsKindOf(SignatureCallExpression) implies
| (self.oclAsType(SignatureCallExpression).parameters->forAll(p|p.isSideEffectFree())
| and self.oclAsType(SignatureCallExpression).getSignature().sideEffectFree)
| in
| if self.oclIsKindOf(ObjectBasedExpression) then
| self.oclAsType(ObjectBasedExpression).object.isSideEffectFree() and
| if self.oclIsKindOf(SignatureCallExpression) then
| parametersAndSignatureAreSideEffectFree
| else
| if self.oclIsKindOf(Replace) then
| self.oclAsType(Replace).with.isSideEffectFree()
| else
| if self.oclIsKindOf(ExpressionWithArgument) and self.oclAsType(ExpressionWithArgument).argument->notEmpty() then
| self.oclAsType(ExpressionWithArgument).argument.isSideEffectFree()
| else
| true
| endif
| endif
| endif
| else if self.oclIsKindOf(FunctionCallExpression) then
| parametersAndSignatureAreSideEffectFree and self.oclAsType(FunctionCallExpression).calledBlock.isSideEffectFree()
| else if self.oclIsKindOf(Equals) then
| self.oclAsType(Equals).left.isSideEffectFree() and self.oclAsType(Equals).right.isSideEffectFree()
| else if self.oclIsKindOf(ObjectCreationExpression) then
| self.oclAsType(ObjectCreationExpression).classToInstantiate.valueType
| else if self.oclIsKindOf(dataaccess::analytics::DimensionExpression) then
| self.oclAsType(dataaccess::analytics::DimensionExpression).dimensionParameter.ownerSignature.sideEffectFree
| else if self.oclIsKindOf(Ternary) then
| self.oclAsType(Ternary).condition.isSideEffectFree() and
| self.oclAsType(Ternary).trueExpr.isSideEffectFree() and
| self.oclAsType(Ternary).falseExpr.isSideEffectFree()
| else if self.oclIsKindOf(dataaccess::expressions::collectionexpressions::CollectionExpression) then
| self.oclAsType(dataaccess::expressions::collectionexpressions::CollectionExpression).source.isSideEffectFree() and
| if self.oclIsKindOf(dataaccess::expressions::collectionexpressions::Iterate) then
| (self.oclAsType(dataaccess::expressions::collectionexpressions::Iterate).accumulator.initExpression->notEmpty() implies
| self.oclAsType(dataaccess::expressions::collectionexpressions::Iterate).accumulator.initExpression.isSideEffectFree()) and
| self.oclAsType(dataaccess::expressions::collectionexpressions::Iterate).iteratorExpression.isSideEffectFree()
| else
| true
| endif
| else if self.oclIsKindOf(dataaccess::expressions::literals::ObjectLiteral) then
| self.oclAsType(dataaccess::expressions::literals::ObjectLiteral).propertyValues.value->forAll(v|v.isSideEffectFree())
| else if self.oclIsKindOf(persistence::expressions::All) or self.oclIsKindOf(Replace) or self.oclIsKindOf(This) or self.oclIsKindOf(VariableExpression) or
| self.oclIsKindOf(dataaccess::expressions::literals::Literal) or self.oclIsKindOf(dataaccess::expressions::fp::AnonymousFunctionExpr) then
| true
| else if self.oclIsKindOf(dataaccess::query::Selection) then
| self.oclAsType(dataaccess::query::Selection).object.isSideEffectFree()
| else
| false
| endif
| endif
| endif
| endif
| endif
| endif
| endif
| endif
| endif
| endif
)))
quid "489D64AF0399"
documentation "Tells if this expression is side effect-free. An expression has a side effect if it invokes a method or a function that is not described as side effect-free. It is important to note that this has to be checked recursively for nested expressions."
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "evaluatesToEqualAs"
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 Expression::evaluatesToEqualAs(e:Expression):Boolean
|body:
| if self=e then
| true
| else
| if self.oclIsKindOf(dataaccess::expressions::literals::NumberLiteral) and e.oclIsKindOf(dataaccess::expressions::literals::NumberLiteral) then
| self.oclAsType(dataaccess::expressions::literals::NumberLiteral).literal=e.oclAsType(dataaccess::expressions::literals::NumberLiteral).literal
| else
| if self.oclIsKindOf(dataaccess::expressions::literals::StringLiteral) and e.oclIsKindOf(dataaccess::expressions::literals::StringLiteral) then
| self.oclAsType(dataaccess::expressions::literals::StringLiteral).literal=e.oclAsType(dataaccess::expressions::literals::StringLiteral).literal
| else
| if self.oclIsKindOf(dataaccess::expressions::literals::ObjectLiteral) and e.oclIsKindOf(dataaccess::expressions::literals::ObjectLiteral) then
| self.oclAsType(dataaccess::expressions::literals::ObjectLiteral).isEqualTo(e.oclAsType(dataaccess::expressions::literals::ObjectLiteral))
| else
| if self.oclIsKindOf(VariableExpression) and e.oclIsKindOf(VariableExpression) then
| self.oclAsType(VariableExpression).variable = e.oclAsType(VariableExpression).variable
| else
| false
| endif
| endif
| endif
| endif
| endif
)))
quid "49C0CF0601F4"
documentation "A conservative estimation that returns true if provably this and the passed expression will evaluate to equal objects. false means that the two expressions may evaluate to different results, not excluding that they can still have equal results; it's just not (yet) provable here."
parameters (list Parameters
(object Parameter "e"
quid "49C0CF0E0167"
type "Expression"
quidu "450E63AB03A2"))
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392")
(object Operation "getUsedAliases"
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 Expression::getUsedAliases():Set(behavioral::actions::Iterator)
|body:
| if self.oclIsKindOf(VariableExpression) then
| if self.oclAsType(VariableExpression).variable.oclIsKindOf(behavioral::actions::Iterator) then
| self.oclAsType(VariableExpression).variable.oclAsType(behavioral::actions::Iterator)->select(i | i.fromClause->notEmpty())->asSet()
| else
| Set{}
| endif
| else
| if self.oclIsKindOf(Replace) then
| self.oclAsType(Replace).object.getUsedAliases()->union(
| self.oclAsType(Replace).steps.filterFunction.getUsedAliases()->flatten()->asSet())->union(
| self.oclAsType(Replace).with.getUsedAliases())
| else
| if self.oclIsKindOf(dataaccess::query::Selection) then
| self.oclAsType(dataaccess::query::Selection).object.getUsedAliases()->union(
| self.oclAsType(dataaccess::query::Selection).selectionExpr.getUsedAliases())
| else
| if self.oclIsKindOf(ObjectBasedExpression) then
| let objectAliases:Set(behavioral::actions::Iterator) = self.oclAsType(ObjectBasedExpression).object.getUsedAliases() in
| if self.oclIsKindOf(MethodCallExpression) then
| objectAliases->union(self.oclAsType(MethodCallExpression).parameters.getUsedAliases()->flatten()->asSet())
| else
| objectAliases
| endif
| else
| if self.oclIsKindOf(Equals) then
| self.oclAsType(Equals).left.getUsedAliases()->union(self.oclAsType(Equals).right.getUsedAliases())
| else
| if self.oclIsKindOf(FunctionCallExpression) then
| self.oclAsType(FunctionCallExpression).calledBlock.getUsedAliases()->union(
| self.oclAsType(FunctionCallExpression).parameters.getUsedAliases()->flatten()->asSet())
| else
| if self.oclIsKindOf(Ternary) then
| let sat:Ternary = self.oclAsType(Ternary) in
| sat.condition.getUsedAliases()->union(sat.trueExpr.getUsedAliases())->union(sat.falseExpr.getUsedAliases())
| else
| if self.oclIsKindOf(dataaccess::expressions::collectionexpressions::CollectionExpressionWithArgument) then
| self.oclAsType(dataaccess::expressions::collectionexpressions::CollectionExpressionWithArgument).argument.getUsedAliases()->union(
| self.oclAsType(dataaccess::expressions::collectionexpressions::CollectionExpressionWithArgument).source.getUsedAliases())
| else
| if self.oclIsKindOf(dataaccess::expressions::collectionexpressions::Iterate) then
| self.oclAsType(dataaccess::expressions::collectionexpressions::Iterate).iteratorExpression.getUsedAliases()->union(
| self.oclAsType(dataaccess::expressions::collectionexpressions::Iterate).accumulator.initExpression.getUsedAliases())->union(
| self.oclAsType(dataaccess::expressions::collectionexpressions::Iterate).source.getUsedAliases())
| else
| if self.oclIsKindOf(dataaccess::query::OqlQuery) then
| self.oclAsType(dataaccess::query::OqlQuery).fromClauses.fromExpression.getUsedAliases()->flatten()->asSet()->union(
| self.oclAsType(dataaccess::query::OqlQuery).condition.getUsedAliases())
| else
| Set{}
| endif
| endif
| endif
| endif
| endif
| endif
| endif
| endif
| endif
| endif
)))
quid "4B277D73000F"
documentation "Computes the Iterator objects that are defined by a FromClause of an OqlQuery and that are used in a VariableExpression somewhere inside this expression. Needs to handle all side effect-free expression types. By the current definition, this excludes, e.g., ObjectCreationExpression and therefore its initializers method call expressions."
result "Iterator"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "47A719D200EA")
(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 Expression::getNamedValuesInScope():Set(NamedValue)
|body:
| self.addNamedValuesWithNewNames(
|
| -- First, collect those NamedValues defined immediately for this expression:
| -- an iterate's body expression sees the iterators and the accumulator
| let accumulator:Set(data::classes::NamedValue)=self.inIterator.accumulator->asSet() in
| let iterators:Set(data::classes::NamedValue)=self.inIterator.iterators->asSet() in
| -- an OQL "from" clause sees all aliases left of it
| let oqlAliases:Set(data::classes::NamedValue)=(if self.fromClause->notEmpty() then
| let fromClauses:OrderedSet(dataaccess::query::FromClause) = self.fromClause.fromClauseOfOqlQuery.fromClauses in
| let fcIndex:Integer = fromClauses->indexOf(self.fromClause) in
| Sequence{1..-1+fcIndex}->collect(i | fromClauses->at(i).alias)->asSet()
| else
| Set{}
| endif)->union(
| -- an OQL "where" clause sees all aliases defined by any of the OQL expression's "from" entries
| self.conditionOfOqlQuery.fromClauses.alias->asSet()) in
| -- a Selection defines an implicit iterator for its filter expression
| let selectionIterator:Set(data::classes::NamedValue)=self.selection.iterator->asSet() in
| -- a GroupBy's mapExpression sees all dimension iterators and the groupedFacts iterator
| let groupByMapExpressionIterators:Set(data::classes::NamedValue)=self.mapExpressionOfGroupBy.groupedFacts->asSet()->union(
| self.mapExpressionOfGroupBy.dimensions.iterator->asSet()) in
| -- a GroupBy's dimension expression sees the facts iterator
| let groupByDimensionFactIterator:Set(data::classes::NamedValue)=self.dimension.groupBy.fact->asSet() in
|
| accumulator->union(iterators)->union(oqlAliases)->union(selectionIterator)->union(groupByMapExpressionIterators)->
| union(groupByDimensionFactIterator),
|
| -- Then, add those defined by owning structures such as owning statements or owning expressions
| -- an expression that is used by an ExpressionStatement or as condition in a Conditional sees all named values that the statement sees
| if self.actualObjectParameter.owningClassTypeDefinition->notEmpty() then
| self.actualObjectParameter.owningClassTypeDefinition.getNamedValuesInScope()
| else
| if self.initExpressionFor.namedValueDeclaration->notEmpty() then
| self.initExpressionFor.namedValueDeclaration.getNamedValuesInScope()
| else
| if self.expressionStatement->notEmpty() then
| self.expressionStatement.getNamedValuesInScope()
| else
| if self.conditional->notEmpty() then
| if self.conditional.oclIsKindOf(behavioral::actions::ConditionalStatement) then
| self.conditional.oclAsType(behavioral::actions::ConditionalStatement).getNamedValuesInScope()
| else
| self.conditional.oclAsType(ConditionalExpression).getNamedValuesInScope()
| endif
| else
| if self.argumentOf->notEmpty() and self.argumentOf.oclIsKindOf(behavioral::actions::StatementWithArgument) then
| self.argumentOf.oclAsType(behavioral::actions::StatementWithArgument).getNamedValuesInScope()
| else
| -- add all variables in scope for owning expressions
| let oe:Expression = self.getOwningExpression() in
| if oe->isEmpty() then
| Set{}
| else
| oe.getNamedValuesInScope()
| endif
| endif
| endif
| endif
| endif
| endif
| )
)))
quid "4B83E38F033C"
result "NamedValue"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "4522A56F0149")
(object Operation "getOwningExpression"
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 Expression::getOwningExpression():Expression
|body:
| let objectBasedExpressions:Set(Expression)=self.objectBasedExpression->asSet() in
| let argumentsOf:Set(Expression)=self.argumentOf->select(ao | ao.oclIsKindOf(Expression)).oclAsType(ExpressionWithArgument)->asSet() in
| let equals:Set(Expression)=self.leftOfEquals->asSet()->union(self.rightOfEquals->asSet()) in
| let blocksOfFunctionCallExpression:Set(Expression)=self.blockOfFunctionCallExpression->asSet() in
| let signatureCalls:Set(Expression)=self.usedAsArgumentInSignatureCall->asSet() in
| let creationExpression:Set(Expression)=if self.oclIsKindOf(MethodCallExpression) then
| self.oclAsType(MethodCallExpression).creationExpression->asSet()
| else
| Set{}
| endif in
| let ternary:Set(Expression)=self.trueOfTernary->asSet()->union(self.falseOfTernary->asSet()) in
| let conditional:Set(Expression)=if self.conditional->notEmpty() and self.conditional.oclIsKindOf(ConditionalExpression) then
| self.conditional.oclAsType(ConditionalExpression)->asSet()
| else
| Set{}
| endif in
| let replace:Set(Expression)=self.withOfReplace->asSet()->union(self.navigationStep.replace->asSet()) in
| let oqlQuery:Set(Expression)=self.conditionOfOqlQuery->asSet()->union(self.fromClause.fromClauseOfOqlQuery->asSet()) in
| let selection:Set(Expression)=self.selection->asSet() in
| let objectLiteral:Set(Expression)=self.valueInit.objectLiteral->asSet() in
| let iterator:Set(Expression)=self.inIterator->asSet() in
| let collectionExpression:Set(Expression)=self.collectionExpression->asSet() in
| let all:Set(Expression)=self.all->asSet() in
| let valueInitInObjectLiteral:Set(Expression)=self.valueInit.objectLiteral->asSet() in
| let dimensionExpression:Set(Expression)=self.cellSetOfDimensionExpression->asSet()->union(
| self.factsOfDimensionExpression->asSet()) in
| let groupByExpression:Set(Expression)=self.dimension.groupBy->asSet()->union(
| self.mapExpressionOfGroupBy->asSet()) in
|
| objectBasedExpressions->union(argumentsOf)->union(equals)->union(blocksOfFunctionCallExpression)->union(
| signatureCalls)->union(creationExpression)->union(ternary)->union(conditional)->union(replace)->union(
| oqlQuery)->union(selection)->union(objectLiteral)->union(iterator)->union(collectionExpression)->union(
| all)->union(valueInitInObjectLiteral)->union(dimensionExpression)->union(groupByExpression)->any(true)
)))
quid "4B83F58702BF"
documentation
|If this expression is composed by another expression, determines the composing expression. Otherwise, an empty result is returned.
|
|The issue with this operation is that each time a new inbound composite relatioship is added to Expression, this operation needs to be extended accordingly.
result "Expression"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "450E63AB03A2")
(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 Expression::getOwningClass():SapClass
|body:
| let oe:Expression = self.getOwningExpression() in
| if oe->notEmpty() then
| oe.getOwningClass()
| else
| if self.expressionStatement->notEmpty() then
| self.expressionStatement.getOwningClass()
| else
| if self.conditional->notEmpty() and self.conditional.oclIsKindOf(behavioral::actions::Statement) then
| self.conditional.oclAsType(behavioral::actions::ConditionalStatement).getOwningClass()
| else
| if self.argumentOf->notEmpty() and self.argumentOf.oclIsKindOf(behavioral::actions::StatementWithArgument) then
| self.argumentOf.oclAsType(behavioral::actions::StatementWithArgument).getOwningClass()
| else
| if self.initExpressionFor.namedValueDeclaration->notEmpty() then
| self.initExpressionFor.namedValueDeclaration.getOwningClass()
| else
| null
| endif
| endif
| endif
| endif
| endif
)))
quid "4B84EE28030D"
result "SapClass"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "4432171B031E"))
abstract TRUE)
(object Class "VariableExpression"
quid "4522AC6A022F"
documentation
|The variable referenced by this type of expression must be visible within the scope where this expression occurs.
|
|TODO: How to determine the block containing this VariableExpression? This will be important to determine if the variable is visible.
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4545FDBE01AE"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"))
nestedClasses (list nestedClasses
(object Class "VariableExpressionType"
quid "4522AE490300"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4522AE420101"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context VariableExpression
|inv:
| self.getType().conformsTo(self.variable.getType())
)
opExportControl "Public"
uid 0)))))
(object Class "MethodCallExpression"
quid "4522E05D00A8"
documentation
|The MethodCallExpression executes an implementation of the signature using the "parameters" expressions as arguments on the object evaluated by the "object" expression. For that, first the "object" expression is evaluated. the parameter expressions (if provided) are evaluated and then passed to the implementation.
|
|The object expression must evaluate to a single value, i.e., a TypeDefinition with upperMultiplicity = 1.
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "47BC30F40203"
supplier "Logical View::dataaccess::expressions::ObjectBasedExpression"
quidu "453E0FC80335")
(object Inheritance_Relationship
quid "47F3B83200B9"
supplier "Logical View::dataaccess::expressions::SignatureCallExpression"
quidu "47F3B80500BD"))
class_attributes (list class_attribute_list
(object ClassAttribute "asynchronous"
quid "4549FF6500B0"
documentation "An operation may be invoked asynchronously. If the operation returns a value, it is ignored, as are any exceptions raised by the operation. An OperationExpression with this attribute set to true has itself no type and therefore cannot reasonably be used in a side effect-free expression but only as a statement."
type "Boolean"
quidu "39A2BDA60392"
exportControl "Public"))
nestedClasses (list nestedClasses
(object Class "ObjectMustSupportOperation"
quid "4548A9B600A7"
documentation "TODO: What does applying a signature call expression to a value with multiplicity >1 mean? Invoke on all elements within?"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4548A9C503C0"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context MethodCallExpression
|inv:
| self.object.getType().getInnermost().oclIsKindOf(data::classes::ClassTypeDefinition) and
| self.object.getType().getInnermost().oclAsType(data::classes::ClassTypeDefinition).clazz.conformsTo(self.methodSignature.owner.oclAsType(data::classes::SapClass))
)
opExportControl "Public"
uid 0)))
(object Class "OutputMultiplicities"
quid "48A9EB710138"
documentation
|Requires an upper multiplicity on the expression's type at least as great as the product of the upper multiplicities of the "this" (multi-)object and the signature output.
|
|Similarly, for the lower multiplicities the minimum multiplicity must allow for the product of the respective two lower multiplicities or fewer.
|
|Make sure that a MethodCallExpression's type is always non-unique in case the object expression has upper multiplicity >1. Rationale: the method implementation may be non-injective, mapping two different objects to equal/same results. In this case the results would get messed up and could probably not be associated appropriately anymore with the source objects.
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "48A9EB820222"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context MethodCallExpression
|inv:
| (self.object.getType().isMany() implies (self.getType().isMany() and not self.getType().unique)) and
| (self.object.getType().lowerMultiplicity = 0 implies (self.getType()->isEmpty() or self.getType().lowerMultiplicity = 0))
)
opExportControl "Public"
uid 0)))))
(object Class "ObjectBasedExpression"
quid "453E0FC80335"
documentation
|A specific type of expression that is evaluated in the context of a specific object. Another expression is used to determine this object. An example for such an expression would be association navigation, where the object where the navigation starts has to be specified by the "object" expression.
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "453E0FF30001"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"))
abstract TRUE)
(object Class "ObjectCreationExpression"
quid "454BA26C0254"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "454BA274017C"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"))
nestedClasses (list nestedClasses
(object Class "CannotInstantiateAbstractClass"
quid "454BA2AC006C"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "454BA2B70224"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ObjectCreationExpression
|inv:
| not self.classToInstantiate.isAbstract()
)
opExportControl "Public"
uid 0)))
(object Class "ExpressionType"
quid "4759551601E4"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4759552102CE"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ObjectCreationExpression
|inv:
| self.getType().oclIsKindOf(data::classes::ClassTypeDefinition) and
| self.getType().oclAsType(data::classes::ClassTypeDefinition).clazz = self.classToInstantiate and
| self.getType().lowerMultiplicity = 1 and
| self.getType().upperMultiplicity = 1
)
opExportControl "Public"
uid 0)))
(object Class "HasToOwnTypeDefinition"
quid "47862616005D"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "47862623004E"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ObjectCreationExpression
|inv:
| self.ownedTypeDefinition->notEmpty()
)
opExportControl "Public"
uid 0)))
(object Class "CannotInstantiateValueClass"
quid "4A08420603CA"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4A084218022C"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ObjectCreationExpression
|inv:
| not self.classToInstantiate.valueType
)
opExportControl "Public"
uid 0)))
(object Class "NoDuplicateInitializers"
quid "4B1CF9F603B4"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4B1CFA1102B9"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ObjectCreationExpression
|inv:
| self.initializers->forAll( a, b | a <> b implies a.methodSignature <> b.methodSignature )
)
opExportControl "Public"
uid 0)))))
(object Class "FunctionCallExpression"
quid "45473F620076"
documentation
|An expression that is computed by first evaluating "calledBlock" and invoking the resulting block passing the "argument" expression. The value returned by the block constitutes the value of this expression. If the block terminates with a fault, the evaluation of this expression terminates with this fault.
|
|The type of the object computed by the "parameters" expression must conform to the input parameter types of the signature called.
|
|If the calledBock evaluates to more than one callable function, all functions will be called. Invocation ordering depends on the side effect-freeness of the signatures called.
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "47F3B84601D1"
supplier "Logical View::dataaccess::expressions::SignatureCallExpression"
quidu "47F3B80500BD"))
nestedClasses (list nestedClasses
(object Class "ResultType"
quid "4786256B0109"
documentation
|Invoking a object whose type is defined by a FunctionSignatureTypeDefinition produces an object whose type definition at its core has the type definition of the signature's output, but probably with a different multiplicity, perhaps nested, according to the following rules.
|
|If the FunctionSignatureTypeDefinition has an upper multiplicity of 1, all resulting multiplicity properties are equal to those of the signature's output type definition except for the lower multiplicity which is forced to 0 if that of the FunctionSignatureTypeDefinition is 0.
|
|If the FunctionSignatureTypeDefinition has an upper multiplicity greater than 1, the resulting type definition is a NestedTypeDefinition with exactly the multiplicity properties of the FunctionSignatureTypeDefinition, where the inner type is exactly that of the signature's output.
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "47862574000F"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context FunctionCallExpression
|inv:
| let fstd:data::classes::FunctionSignatureTypeDefinition = self.calledBlock.getType().getInnermost().oclAsType(data::classes::FunctionSignatureTypeDefinition) in
|
| if fstd.isMany() then
| -- calling multiple functions; test is somewhat fuzzy because it doesn't test condormance of nesting structure exactly
| self.getType().isMany() and not self.getType().unique and
| fstd.signature.output.getInnermost().conformsTo(self.getType().getInnermost()) and
| (fstd.lowerMultiplicity = 0 implies (self.getType()->isEmpty() or self.getType().lowerMultiplicity = 0))
| else
| -- calling a single function
| fstd.signature.output.conformsTo(self.getType()) and
| (fstd.lowerMultiplicity = 0 implies (self.getType()->isEmpty() or self.getType().lowerMultiplicity = 0))
| endif
|
|
)
opExportControl "Public"
uid 0)))
(object Class "CalledBlockMustBeFunction"
quid "4AD977480271"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4AD9775401D4"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context FunctionCallExpression
|inv:
| self.calledBlock.getType().getInnermost().oclIsKindOf(data::classes::FunctionSignatureTypeDefinition)
)
opExportControl "Public"
uid 0)))))
(object Class "WithArgument"
quid "4577E587019C"
abstract TRUE)
(object Class "This"
quid "45A9433E03D2"
documentation
|Statically, the This expression has the type that owns its occurrence. This means, in order to determine this, the getType implementation needs to ascend the composition hierarchy until it finds a Class somewhere. The problem, again, is that an OCL expression cannot manufacture the result required becauce currently TypeDefinition is still an "entity type," meaning a MOF class whose instances have ID and an explicit life cycle.
|
|Therefore, currently This has to own its type definition, unfortunately.
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "45A94345036E"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2")))
(object Class "Equals"
quid "475958230399"
documentation
|compares two or more values/objects. Entity type instances are compared based on their identity. Value type instances are compared by their value. The type of an Equals expression is Boolean.
|
|The getType() implementation can only infer the type once TypeDefinition is a value type, values of which can be constructed in an OCL expression.
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4759582D007D"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"))
nestedClasses (list nestedClasses
(object Class "ConformaceOneWayOrAnother"
quid "4B06B6950157"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4B06B69E0203"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Equals
|inv:
| self.left.getType().conformsTo(self.right.getType()) or
| self.right.getType().conformsTo(self.left.getType())
)
opExportControl "Public"
uid 0)))))
(object Class "AssociationEndNavigationExpression"
quid "478620130157"
documentation
|Navigates from the "object" across the "toEnd"'s association to the "toEnd". The expression evaluates to the objects at the "toEnd" that are associated with the "object" based on the end's association.
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4786201B036B"
supplier "Logical View::dataaccess::expressions::ObjectBasedExpression"
quidu "453E0FC80335"))
nestedClasses (list nestedClasses
(object Class "ObjectTypeMustMatch"
quid "478620BF032C"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "478620D90271"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context AssociationEndNavigationExpression
|inv:
| self.object.getType().conformsToIgnoringMultiplicity(self.toEnd.otherEnd().type)
)
opExportControl "Public"
uid 0)))
(object Class "ResultType"
quid "478621470399"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4786214F036B"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context AssociationEndNavigationExpression
|inv:
| self.getType() = self.toEnd.type
)
opExportControl "Public"
uid 0)))
(object Class "EndMustBeNavigable"
quid "4873524B034B"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "487352570290"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context AssociationEndNavigationExpression
|inv:
| self.toEnd.navigable
)
opExportControl "Public"
uid 0)))))
(object Class "SignatureCallExpression"
quid "47F3B80500BD"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "47F3B890000D"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"))
operations (list Operations
(object Operation "getSignature"
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 SignatureCallExpression::getSignature():Signature
|body:
| if self.oclIsKindOf(FunctionCallExpression) then
| self.oclAsType(FunctionCallExpression).calledBlock->collect(getType().getInnermost().oclAsType(data::classes::FunctionSignatureTypeDefinition).signature)->any(true)
| else
| self.oclAsType(MethodCallExpression).methodSignature
| endif
)))
quid "4939043400CB"
documentation "For FunctionCallExpression, this retrieves the signature from the type of the calledBlock expression which is required to be a FunctionSignatureTypeDefinition. For MethodCallExpression, it obtains the signature by navigating to the methodSignature role."
result "Signature"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "4432198602CB")
(object Operation "getMultiplicityOfCallTarget"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context SignatureCallExpression::getMultiplicityOfCallTarget():Multiplicity
|body:
| if self.oclIsKindOf(FunctionCallExpression) then
| self.oclAsType(FunctionCallExpression).calledBlock.getType()
| else
| self.oclAsType(MethodCallExpression).object.getType()
| endif
))
(object Attribute
tool "MOF"
name "rose2mof.isQuery"
value (value Text "true")))
quid "4AD4791F02AF"
result "Multiplicity"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "47554DA003A9"))
abstract TRUE
nestedClasses (list nestedClasses
(object Class "ParametersTypesMustMatchSignatureParametersTypes"
quid "47F3BCCA0255"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "47F3BCFB017B"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context SignatureCallExpression
|inv:
| let numberOfMandatoryParameters:Integer =
| self.getSignature().input->select(p|p.defaultValue->isEmpty())->size()
| in
| self.parameters->size() >= numberOfMandatoryParameters and
| self.parameters->size() <= self.getSignature().input->size() and
| self.parameters->forAll(parameter |
| parameter.getType().conformsTo(self.getSignature().input->at(self.parameters->indexOf(parameter)).getType()) )
)
opExportControl "Public"
uid 0)))
(object Class "CallTypeMustMatchSignatureOutput"
quid "48A9EA3E0213"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "48A9EA540128"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context SignatureCallExpression
|inv:
| if self.getSignature().output.oclIsUndefined() then
| self.getType().oclIsUndefined()
| else
| if self.getMultiplicityOfCallTarget().isMany() and self.getSignature().output.isMany() then
| let ntd:data::classes::NestedTypeDefinition = self.getType().oclAsType(data::classes::NestedTypeDefinition) in
| self.getType().oclIsKindOf(data::classes::NestedTypeDefinition) and
| ntd.unique = false and
| ntd.ordered = self.getMultiplicityOfCallTarget().ordered and
| ntd.lowerMultiplicity = self.getMultiplicityOfCallTarget().lowerMultiplicity and
| ntd.upperMultiplicity = self.getMultiplicityOfCallTarget().upperMultiplicity and
| self.getSignature().output.conformsTo(ntd.type)
| else
| let target:data::classes::Multiplicity = self.getMultiplicityOfCallTarget() in
| let output:data::classes::TypeDefinition = self.getSignature().output in
| ( output.isMany() implies self.getType().unique = output.unique ) and
| ( ( output.isMany() or target.isMany() ) implies ( self.getType().ordered = (output.ordered or target.ordered) ) ) and
| ( self.getType().lowerMultiplicity = (output.lowerMultiplicity * target.lowerMultiplicity)) and
| ( self.getType().upperMultiplicity = (if output.isMany() or target.isMany() then
| -1
| else
| output.upperMultiplicity * target.upperMultiplicity
| endif)) and
| self.getType().conformsToIgnoringMultiplicity(output)
| endif
| endif
)
opExportControl "Public"
uid 0)))))
(object Class "ObjectCount"
quid "48E9DE8C030D"
documentation
|Computes the Number 1 for single objects, and the number of objects in a multi-valued object otherwise.
|
|Type inference in getType() can be done once TypeDefinition is a value type that can be constructed in OCL.
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "48E9DEC500AB"
supplier "Logical View::dataaccess::expressions::ObjectBasedExpression"
quidu "453E0FC80335"))
nestedClasses (list nestedClasses
(object Class "TypeIsNumber"
quid "48E9DFA5007D"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "48E9DFC0038A"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ObjectCount
|inv:
| self.getType().oclIsKindOf(data::classes::ClassTypeDefinition) and
| self.getType().oclAsType(data::classes::ClassTypeDefinition).clazz.name = 'Number'
)
opExportControl "Public"
uid 0)))
(object Class "MultiplicityIsOne"
quid "48E9DFB5035B"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "48E9DFC5000F"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ObjectCount
|inv:
| self.getType().upperMultiplicity = 1 and
| self.getType().lowerMultiplicity = 1
)
opExportControl "Public"
uid 0)))))
(object Class "Replace"
quid "499C2988038A"
documentation
|An abstract-syntactical convenience to construct a value from an existing one, replacing a component somewhere in the possibly deep structure that the value has.
|
|The replacement always produces a value of the same type as the source value. It can provide a navigation path, following associations, staying withing values, with the last path component being allowed to end at an entity or a value class. Each path segment may add a constraint which makes sense specifically for multiplicities greater than one.
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "499C2A7A004E"
supplier "Logical View::dataaccess::expressions::ObjectBasedExpression"
quidu "453E0FC80335"))
nestedClasses (list nestedClasses
(object Class "SourceObjectIsOfValueType"
quid "499C2A90033C"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "499C2A9C02DE"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Replace
|inv:
| self.object.getType().oclIsKindOf(data::classes::ClassTypeDefinition) and
| self.object.getType().oclAsType(data::classes::ClassTypeDefinition).clazz.valueType
)
opExportControl "Public"
uid 0)))
(object Class "WithTypeConformsToLastStepsType"
quid "499D6B0F0399"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "499D6B2901B5"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Replace
|inv:
| self.with.getType().conformsTo(self.steps->at(self.steps->size()).to.type)
)
opExportControl "Public"
uid 0)))))
(object Class "NavigationStep"
quid "499D4031000F"
nestedClasses (list nestedClasses
(object Class "FromEndAttachesToOutputOfPreviousStep"
quid "499D5D4403B9"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "499D5D900109"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context NavigationStep
|inv:
| let i:Integer = self.replace.steps->indexOf(self) in
| let t:data::classes::ClassTypeDefinition = if i=1 then
| self.replace.object.getType().oclAsType(data::classes::ClassTypeDefinition)
| else
| self.replace.steps->at(-1 + i).to.type
| endif
| in
|
| self.to.otherEnd().type.clazz.conformsTo(t.clazz)
)
opExportControl "Public"
uid 0)))
(object Class "FilterFunctionExpressionHasFunctionType"
quid "499D8ECA002E"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "499D8EDC0128"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context NavigationStep
|inv:
| self.filterFunction->notEmpty() implies self.filterFunction.getType().oclIsKindOf(data::classes::FunctionSignatureTypeDefinition)
)
opExportControl "Public"
uid 0)))
(object Class "FromEndMustBeEqualityRelevant"
quid "499E87D601C5"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "499E87E3008C"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context NavigationStep
|inv:
| to.otherEnd().contributesToEquality
)
opExportControl "Public"
uid 0)))))
(object Class "Head"
quid "49BFCF80001E"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "49BFCFE2021E"
supplier "Logical View::dataaccess::expressions::ObjectBasedExpression"
quidu "453E0FC80335"))
nestedClasses (list nestedClasses
(object Class "IsOrdered"
quid "49BFD86F023A"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "49BFD8850380"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Head
|inv:
| self.object.getType().ordered
)
opExportControl "Public"
uid 0)))))
(object Class "Tail"
quid "49BFCF9E020B"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "49BFCFDF0087"
supplier "Logical View::dataaccess::expressions::ObjectBasedExpression"
quidu "453E0FC80335"))
nestedClasses (list nestedClasses
(object Class "IsOrdered"
quid "49BFD8380366"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "49BFD85002D8"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Tail
|inv:
| self.object.getType().ordered
)
opExportControl "Public"
uid 0)))))
(object Class "AsList"
quid "49BFD73E033E"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "49BFD7480223"
supplier "Logical View::dataaccess::expressions::ObjectBasedExpression"
quidu "453E0FC80335")))
(object Class "Conditional"
quid "45471B4401F7"
documentation "Some statement depending on a Boolean expression"
abstract TRUE
nestedClasses (list nestedClasses
(object Class "ConditionMustBeBoolean"
quid "45471BB2005B"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "45471BBF0303"
documentation "TODO: Check upper multiplicity of condition expression to be 1?"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Conditional
|inv:
| self.condition.getType().upperMultiplicity = 1 and
| self.condition.getType().oclIsKindOf(data::classes::ClassTypeDefinition) and
| self.condition.getType().oclAsType(data::classes::ClassTypeDefinition).clazz.name = 'Boolean'
)
opExportControl "Public"
uid 0)))))
(object Class "Ternary"
quid "4A389707002E"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4A38971503A9"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2")
(object Inheritance_Relationship
quid "4B8523D403B9"
supplier "Logical View::dataaccess::expressions::ConditionalExpression"
quidu "4B8523C90167"))
nestedClasses (list nestedClasses
(object Class "TrueAndFalseExprsConformToResultType"
quid "4A38997702EE"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4A3899A9029F"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Ternary
|inv:
| self.trueExpr.getType().conformsTo(self.getType()) or
| self.falseExpr.getType().conformsTo(self.getType())
)
opExportControl "Public"
uid 0)))))
(object Class "ContentEquals"
quid "4B06A82B0109"
documentation "Compares two entity objects by the content of those associations marked as equality relevant for the entity."
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4B06A83500CB"
supplier "Logical View::dataaccess::expressions::Equals"
quidu "475958230399"))
nestedClasses (list nestedClasses
(object Class "ContentEqualsOnlyForEntities"
quid "4B06A8560213"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4B06A861036B"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ContentEquals
|inv:
| self.left.getType().getInnermost().oclIsKindOf(data::classes::ClassTypeDefinition) and
| self.right.getType().getInnermost().oclIsKindOf(data::classes::ClassTypeDefinition) and
| not self.left.getType().getInnermost().oclAsType(data::classes::ClassTypeDefinition).clazz.valueType and
| not self.right.getType().getInnermost().oclAsType(data::classes::ClassTypeDefinition).clazz.valueType
)
opExportControl "Public"
uid 0)))))
(object Class "ExpressionWithArgument"
quid "4B8504AE03C8"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4B8504B6036B"
supplier "Logical View::dataaccess::expressions::WithArgument"
quidu "4577E587019C")
(object Inheritance_Relationship
quid "4B8520070109"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"))
abstract TRUE)
(object Class "ConditionalExpression"
quid "4B8523C90167"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4B8523D800BB"
supplier "Logical View::dataaccess::expressions::Conditional"
quidu "45471B4401F7")
(object Inheritance_Relationship
quid "4B8523FD005D"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"))
abstract TRUE)
(object Class "Map"
quid "4B8D1E5103B9"
documentation "A map expression operates on a (multi-)object (therefore it is an ObjectBaseExpression) and subjects each element of this (multi-)object as argument to the function expected as argument (therefore, it is an ExpressionWithArgument). The single multiplicity of the object expression must conform to the single input argument of the function signature of the FunctionSignatureTypeDefinition defining the type of the argument."
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4B8D1E60034B"
supplier "Logical View::dataaccess::expressions::ExpressionWithArgument"
quidu "4B8504AE03C8")
(object Inheritance_Relationship
quid "4B8D1E61032C"
supplier "Logical View::dataaccess::expressions::ObjectBasedExpression"
quidu "453E0FC80335"))
nestedClasses (list nestedClasses
(object Class "ObjectTypeMustConformToFunctionArgument"
quid "4B8D1F31002E"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4B8D23C000CB"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Map
|inv:
| let fstd:data::classes::TypeDefinition = self.argument.getType() in
| let sig:data::classes::Signature = fstd.oclAsType(data::classes::FunctionSignatureTypeDefinition).signature in
| let t:data::classes::TypeDefinition = self.object.getType() in
| let argT:data::classes::TypeDefinition = sig.input->at(1).getType() in
| -- if multiplicities match including multiplicities, that's ok
| t.conformsTo(argT) or
| -- otherwise, pick single multiplicity from object and try again
| t.conformsToIgnoringMultiplicity(argT) or
| (t.oclIsKindOf(data::classes::NestedTypeDefinition) and t.oclAsType(data::classes::NestedTypeDefinition).type.conformsTo(argT))
)
opExportControl "Public"
uid 0)))
(object Class "ArgumentMustBeSingleArgumentFunctionWithNonVoidOutput"
quid "4B8D1F720222"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4B8D1F8700AB"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Map
|inv:
| let fstd:data::classes::TypeDefinition = self.argument.getType() in
| fstd.oclIsKindOf(data::classes::FunctionSignatureTypeDefinition) and
| (let sig:data::classes::Signature = fstd.oclAsType(data::classes::FunctionSignatureTypeDefinition).signature in
| (sig.output->notEmpty() and
| sig.input->size() = 1))
)
opExportControl "Public"
uid 0)))
(object Class "MapFunctionMustBeSideEffectFree"
quid "4B8D38680222"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4B8D387402DE"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Map
|inv:
| self.argument.getType().oclAsType(data::classes::FunctionSignatureTypeDefinition).signature.sideEffectFree
)
opExportControl "Public"
uid 0)))))
(object Association "$UNNAMED$0"
quid "4522AE0D02E6"
roles (list role_list
(object Role "variable"
quid "4522AE0E00C0"
label "variable"
supplier "Logical View::data::classes::NamedValue"
quidu "4522A56F0149"
client_cardinality (value cardinality "1")
is_navigable TRUE)
(object Role "$UNNAMED$1"
quid "4522AE0E00CB"
supplier "Logical View::dataaccess::expressions::VariableExpression"
quidu "4522AC6A022F")))
(object Association "$UNNAMED$2"
quid "453649650215"
roles (list role_list
(object Role "object"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "4536496701B4"
label "object"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"
client_cardinality (value cardinality "1")
Containment "By Value"
is_navigable TRUE)
(object Role "objectBasedExpression"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "4536496701C8"
label "objectBasedExpression"
supplier "Logical View::dataaccess::expressions::ObjectBasedExpression"
quidu "453E0FC80335"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE)))
(object Association "$UNNAMED$3"
quid "454BA28B0154"
roles (list role_list
(object Role "classToInstantiate"
quid "454BA28C00A2"
label "classToInstantiate"
supplier "Logical View::data::classes::SapClass"
quidu "4432171B031E"
client_cardinality (value cardinality "1")
is_navigable TRUE)
(object Role "$UNNAMED$4"
quid "454BA28C0156"
supplier "Logical View::dataaccess::expressions::ObjectCreationExpression"
quidu "454BA26C0254")))
(object Association "$UNNAMED$5"
quid "4577E58D0258"
roles (list role_list
(object Role "argumentOf"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "4577E58D0259"
label "argumentOf"
supplier "Logical View::dataaccess::expressions::WithArgument"
quidu "4577E587019C"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE)
(object Role "argument"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "4577E58D025A"
label "argument"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"
client_cardinality (value cardinality "0..1")
Containment "By Value"
is_navigable TRUE)))
(object Association "$UNNAMED$6"
quid "45473F690329"
roles (list role_list
(object Role "calledBlock"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "45473F6A0302"
label "calledBlock"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"
client_cardinality (value cardinality "1")
Containment "By Value"
is_navigable TRUE)
(object Role "blockOfFunctionCallExpression"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "45473F6A0316"
label "blockOfFunctionCallExpression"
supplier "Logical View::dataaccess::expressions::FunctionCallExpression"
quidu "45473F620076"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE)))
(object Association "$UNNAMED$7"
quid "4759584301D4"
roles (list role_list
(object Role "left"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "4759584402DE"
label "left"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"
client_cardinality (value cardinality "1")
Containment "By Value"
is_navigable TRUE)
(object Role "leftOfEquals"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "4759584402FD"
label "leftOfEquals"
supplier "Logical View::dataaccess::expressions::Equals"
quidu "475958230399"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE)))
(object Association "$UNNAMED$8"
quid "4786205D0261"
roles (list role_list
(object Role "toEnd"
quid "4786205E00AB"
label "toEnd"
supplier "Logical View::data::classes::AssociationEnd"
quidu "44EC55FB03B8"
client_cardinality (value cardinality "1")
is_navigable TRUE)
(object Role "$UNNAMED$9"
quid "4786205E00BB"
supplier "Logical View::dataaccess::expressions::AssociationEndNavigationExpression"
quidu "478620130157"
client_cardinality (value cardinality "0..*"))))
(object Association "SignatureCallParameters"
quid "47F3B8AB019D"
roles (list role_list
(object Role "parameters"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "47F3B8AC0339"
label "parameters"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"
client_cardinality (value cardinality "0..n")
Constraints "ordered"
Containment "By Value"
is_navigable TRUE)
(object Role "usedAsArgumentInSignatureCall"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "47F3B8AC036B"
label "usedAsArgumentInSignatureCall"
supplier "Logical View::dataaccess::expressions::SignatureCallExpression"
quidu "47F3B80500BD"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE)))
(object Association "SignatureCallToSignature"
quid "4939041D0109"
roles (list role_list
(object Role "$UNNAMED$10"
quid "4939041D010A"
supplier "Logical View::dataaccess::expressions::MethodCallExpression"
quidu "4522E05D00A8"
client_cardinality (value cardinality "0..n"))
(object Role "methodSignature"
quid "4939041D010B"
label "methodSignature"
supplier "Logical View::data::classes::MethodSignature"
quidu "47D67D15030D"
client_cardinality (value cardinality "1")
is_navigable TRUE)))
(object Association "$UNNAMED$11"
quid "497656FD0205"
roles (list role_list
(object Role "right"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "49765700006E"
label "right"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"
client_cardinality (value cardinality "1")
Containment "By Value"
is_navigable TRUE)
(object Role "rightOfEquals"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "49765700009D"
label "rightOfEquals"
supplier "Logical View::dataaccess::expressions::Equals"
quidu "475958230399"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE)))
(object Association "$UNNAMED$12"
quid "499D40450261"
roles (list role_list
(object Role "steps"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "499D404600CB"
label "steps"
supplier "Logical View::dataaccess::expressions::NavigationStep"
quidu "499D4031000F"
client_cardinality (value cardinality "1..*")
Constraints "ordered"
Containment "By Value"
is_navigable TRUE)
(object Role "replace"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "499D404600CD"
label "replace"
supplier "Logical View::dataaccess::expressions::Replace"
quidu "499C2988038A"
client_cardinality (value cardinality "1")
is_navigable TRUE
is_aggregate TRUE)))
(object Association "$UNNAMED$13"
quid "499D416E03A9"
documentation
|If the opposite assoication end to which the step navigates connects only to a class *conforming* to the output of the previous step, this implicitly means a type filtering: only those instances will pass whose type conforms to the class to which *to*'s other end connects.
|
|For example, if an Address value class has a property of type Province, and there are classes ProvinceWithLanguage that conforms to Province and has a property *language*, a navigation step to the "language" end will eliminate all provinces whose type does not conform to ProvinceWithLanguage.
roles (list role_list
(object Role "to"
quid "499D416F01F4"
label "to"
supplier "Logical View::data::classes::AssociationEnd"
quidu "44EC55FB03B8"
client_cardinality (value cardinality "1")
is_navigable TRUE)
(object Role "$UNNAMED$14"
quid "499D416F0213"
supplier "Logical View::dataaccess::expressions::NavigationStep"
quidu "499D4031000F"
client_cardinality (value cardinality "0..*"))))
(object Association "$UNNAMED$15"
quid "499D5BB500FA"
documentation "If specified, the expression must evaluate to a function such that the association end's (to) type definition conforms to the function's single input argument's type definition and the output is a single Boolean object."
roles (list role_list
(object Role "filterFunction"
quid "499D5BB701A5"
label "filterFunction"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"
client_cardinality (value cardinality "0..1")
Containment "By Value"
is_navigable TRUE)
(object Role "navigationStep"
quid "499D5BB70203"
label "navigationStep"
supplier "Logical View::dataaccess::expressions::NavigationStep"
quidu "499D4031000F"
client_cardinality (value cardinality "0..1")
is_aggregate TRUE)))
(object Association "$UNNAMED$16"
quid "499D69C401C5"
roles (list role_list
(object Role "with"
quid "499D69C7029F"
label "with"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"
client_cardinality (value cardinality "1")
Containment "By Value"
is_navigable TRUE)
(object Role "withOfReplace"
quid "499D69C702DE"
label "withOfReplace"
supplier "Logical View::dataaccess::expressions::Replace"
quidu "499C2988038A"
client_cardinality (value cardinality "0..1")
is_aggregate TRUE)))
(object Association "$UNNAMED$17"
quid "4A3897E603B9"
roles (list role_list
(object Role "falseExpr"
quid "4A3897E7030D"
label "falseExpr"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"
client_cardinality (value cardinality "1")
Containment "By Value"
is_navigable TRUE)
(object Role "falseOfTernary"
quid "4A3897E7035B"
label "falseOfTernary"
supplier "Logical View::dataaccess::expressions::Ternary"
quidu "4A389707002E"
client_cardinality (value cardinality "0..1")
is_aggregate TRUE)))
(object Association "$UNNAMED$18"
quid "4A3897E80280"
roles (list role_list
(object Role "trueExpr"
quid "4A3897EA02EE"
label "trueExpr"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"
client_cardinality (value cardinality "1")
Containment "By Value"
is_navigable TRUE)
(object Role "trueOfTernary"
quid "4A3897EA034B"
label "trueOfTernary"
supplier "Logical View::dataaccess::expressions::Ternary"
quidu "4A389707002E"
client_cardinality (value cardinality "0..1")
is_aggregate TRUE)))
(object Association "$UNNAMED$19"
quid "45471B920394"
roles (list role_list
(object Role "condition"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "45471B930205"
label "condition"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"
client_cardinality (value cardinality "1")
Containment "By Value"
is_navigable TRUE)
(object Role "conditional"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "45471B93020F"
label "conditional"
supplier "Logical View::dataaccess::expressions::Conditional"
quidu "45471B4401F7"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE)))
(object Association "$UNNAMED$20"
quid "4B1CF92F02A0"
roles (list role_list
(object Role "initializers"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "4B1CF930036B"
label "initializers"
supplier "Logical View::dataaccess::expressions::MethodCallExpression"
quidu "4522E05D00A8"
client_cardinality (value cardinality "0..*")
Containment "By Value"
is_navigable TRUE)
(object Role "creationExpression"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "4B1CF930036D"
label "creationExpression"
supplier "Logical View::dataaccess::expressions::ObjectCreationExpression"
quidu "454BA26C0254"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE)))
(object Class_Category "literals"
quid "4717D1DA0359"
exportControl "Public"
logical_models (list unit_reference_list
(object Class "Literal"
quid "454746D10018"
documentation
|A literal of any primitive type, such as "This is a string" or 123 or an enumeration literal or a literal denoting a value of an implicit anonymous class, or a block, or a literal that denotes a (potentially anonymous) class.
|
|The exact type of a literal may not always be possible to decide completely, particularly when it comes to constrained types over primitive types. This can only come in through "post types" and type inference, e.g., in an assignment statement where the type of the lvalue is known.
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "454746F00167"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"))
class_attributes (list class_attribute_list
(object ClassAttribute "literal"
quid "45D9808702F7"
documentation "Represents the value of this literal as a string. Final interpretation has to happen by the type of the literal expression. For string literals this is particularly straightforward. For numbers and dates, specific formats as defined by the respective types may apply."
type "String"
quidu "39A2BDA60394"
exportControl "Public")))
(object Class "BinaryLiteral"
quid "4717D1FE0387"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4717D2310193"
supplier "Logical View::dataaccess::expressions::literals::Literal"
quidu "454746D10018")))
(object Class "StringLiteral"
quid "4717D20103C6"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4717D2330126"
supplier "Logical View::dataaccess::expressions::literals::Literal"
quidu "454746D10018")))
(object Class "NumberLiteral"
quid "4717D202026E"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4717D2340378"
supplier "Logical View::dataaccess::expressions::literals::Literal"
quidu "454746D10018")))
(object Class "TimePointLiteral"
quid "4717D2030107"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4717D23602FB"
supplier "Logical View::dataaccess::expressions::literals::Literal"
quidu "454746D10018")))
(object Class "BooleanLiteral"
quid "4717D204001C"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4717D2380397"
supplier "Logical View::dataaccess::expressions::literals::Literal"
quidu "454746D10018")))
(object Class "ObjectLiteral"
quid "4717D20502BC"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4974A3CE030D"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"))
operations (list Operations
(object Operation "isEqualTo"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.OperationCodeOcl"
value (value Text
|context ObjectLiteral::isEqualTo(o:ObjectLiteral):Boolean
|body:
| self.valueClass = o.valueClass and
| self.propertyValues->size() = o.propertyValues->size() and
| self.propertyValues->forAll(pv | o.propertyValues->exists(opv | opv.forEnd = pv.forEnd and opv.value.evaluatesToEqualAs(pv.value)))
)))
quid "4A0D2FFB01C5"
parameters (list Parameters
(object Parameter "o"
quid "4A0D30030280"
type "ObjectLiteral"
quidu "4717D20502BC"))
result "Boolean"
concurrency "Sequential"
opExportControl "Public"
uid 0
quidu "39A2BDA60392"))
nestedClasses (list nestedClasses
(object Class "ObjectLiteralsForValueClassesOnly"
quid "4974924900EA"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4974926102BF"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ObjectLiteral
|inv:
| self.valueClass.valueType
)
opExportControl "Public"
uid 0)))
(object Class "ObjectLiteralPropertiesOnRightClass"
quid "4974927802DE"
documentation
|The "for" association end of all "propertyValues" ValueInit elements must with their opposite ends connect to the class provided as "valueClass" for this ObjectLiteral.
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "497492DF0203"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ObjectLiteral
|inv:
| self.propertyValues->forAll(vi|vi.forEnd.otherEnd().type.clazz = self.valueClass)
)
opExportControl "Public"
uid 0)))
(object Class "ValuesMustBeProvidedForAllMandatoryProperties"
quid "4A0E960C0028"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4A0E962702F5"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ObjectLiteral
|inv:
| self.valueClass.getEqualityRelevantAssociationEnds()->select(ae | ae.otherEnd().type.lowerMultiplicity > 0)->forAll(ae |
| self.propertyValues->exists(pv | pv.forEnd.otherEnd() = ae))
)
opExportControl "Public"
uid 0)))))
(object Class "ValueInit"
quid "4974918A0232"
documentation "Provides an initialization value for an association end whose other end is attached to a value class. The expression's type must conform to the association end's type."
nestedClasses (list nestedClasses
(object Class "ValueInitTypeConforms"
quid "4B26673A01D4"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4B26674403B9"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context ValueInit
|inv:
| self.value.getType().conformsTo(self.forEnd.type)
)
opExportControl "Public"
uid 0)))))
(object Association "$UNNAMED$21"
quid "497490F800AB"
roles (list role_list
(object Role "valueClass"
quid "497490F90222"
label "valueClass"
supplier "Logical View::data::classes::SapClass"
quidu "4432171B031E"
client_cardinality (value cardinality "1")
is_navigable TRUE)
(object Role "objectLiteral"
quid "497490F903D8"
label "objectLiteral"
supplier "Logical View::dataaccess::expressions::literals::ObjectLiteral"
quidu "4717D20502BC"
client_cardinality (value cardinality "0..*"))))
(object Association "$UNNAMED$22"
quid "497491CD01B5"
roles (list role_list
(object Role "propertyValues"
quid "497491CE0157"
label "propertyValues"
supplier "Logical View::dataaccess::expressions::literals::ValueInit"
quidu "4974918A0232"
client_cardinality (value cardinality "0..*")
Containment "By Value"
is_navigable TRUE)
(object Role "objectLiteral"
quid "497491CE0159"
label "objectLiteral"
supplier "Logical View::dataaccess::expressions::literals::ObjectLiteral"
quidu "4717D20502BC"
client_cardinality (value cardinality "0..1")
is_aggregate TRUE)))
(object Association "$UNNAMED$23"
quid "497491EE003E"
roles (list role_list
(object Role "forEnd"
quid "497491EE0251"
label "forEnd"
supplier "Logical View::data::classes::AssociationEnd"
quidu "44EC55FB03B8"
client_cardinality (value cardinality "1")
is_navigable TRUE)
(object Role "valueInit"
quid "497491EE0290"
label "valueInit"
supplier "Logical View::dataaccess::expressions::literals::ValueInit"
quidu "4974918A0232"
client_cardinality (value cardinality "0..*"))))
(object Association "$UNNAMED$24"
quid "497492170138"
roles (list role_list
(object Role "value"
quid "49749219005D"
label "value"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"
client_cardinality (value cardinality "1")
Containment "By Value"
is_navigable TRUE)
(object Role "valueInit"
quid "4974921900FA"
label "valueInit"
supplier "Logical View::dataaccess::expressions::literals::ValueInit"
quidu "4974918A0232"
client_cardinality (value cardinality "0..1")
is_aggregate TRUE))))
logical_presentations (list unit_reference_list
(object ClassDiagram "Literals"
quid "45D9805A01B2"
title "Literals"
zoom 100
max_height 28350
max_width 21600
origin_x 0
origin_y 0
items (list diagram_item_list
(object ClassView "Class" "Logical View::dataaccess::expressions::literals::Literal" @1
ShowCompartmentStereotypes TRUE
IncludeAttribute TRUE
IncludeOperation TRUE
location (884, 695)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object ItemLabel
Parent_View @1
location (737, 614)
fill_color 13434879
nlines 1
max_width 294
justify 0
label "Literal")
icon_style "Icon"
line_color 3342489
fill_color 13434879
quidu "454746D10018"
width 312
height 186
annotation 8
autoResize TRUE)
(object ClassView "Class" "Logical View::dataaccess::expressions::literals::BinaryLiteral" @2
ShowCompartmentStereotypes TRUE
IncludeAttribute TRUE
IncludeOperation TRUE
location (189, 1151)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object ItemLabel
Parent_View @2
location (59, 1100)
fill_color 13434879
nlines 1
max_width 260
justify 0
label "BinaryLiteral")
icon_style "Icon"
line_color 3342489
fill_color 13434879
quidu "4717D1FE0387"
width 278
height 126
annotation 8
autoResize TRUE)
(object ClassView "Class" "Logical View::dataaccess::expressions::literals::StringLiteral" @3
ShowCompartmentStereotypes TRUE
IncludeAttribute TRUE
IncludeOperation TRUE
location (487, 1151)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object ItemLabel
Parent_View @3
location (362, 1100)
fill_color 13434879
nlines 1
max_width 250
justify 0
label "StringLiteral")
icon_style "Icon"
line_color 3342489
fill_color 13434879
quidu "4717D20103C6"
width 268
height 126
annotation 8
autoResize TRUE)
(object ClassView "Class" "Logical View::dataaccess::expressions::literals::NumberLiteral" @4
ShowCompartmentStereotypes TRUE
IncludeAttribute TRUE
IncludeOperation TRUE
location (800, 1151)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object ItemLabel
Parent_View @4
location (656, 1100)
fill_color 13434879
nlines 1
max_width 288
justify 0
label "NumberLiteral")
icon_style "Icon"
line_color 3342489
fill_color 13434879
quidu "4717D202026E"
width 306
height 126
annotation 8
autoResize TRUE)
(object ClassView "Class" "Logical View::dataaccess::expressions::literals::TimePointLiteral" @5
ShowCompartmentStereotypes TRUE
IncludeAttribute TRUE
IncludeOperation TRUE
location (1136, 1150)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object ItemLabel
Parent_View @5
location (977, 1099)
fill_color 13434879
nlines 1
max_width 318
justify 0
label "TimePointLiteral")
icon_style "Icon"
line_color 3342489
fill_color 13434879
quidu "4717D2030107"
width 336
height 126
annotation 8
autoResize TRUE)
(object ClassView "Class" "Logical View::dataaccess::expressions::literals::BooleanLiteral" @6
ShowCompartmentStereotypes TRUE
IncludeAttribute TRUE
IncludeOperation TRUE
location (1478, 1154)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object ItemLabel
Parent_View @6
location (1331, 1103)
fill_color 13434879
nlines 1
max_width 294
justify 0
label "BooleanLiteral")
icon_style "Icon"
line_color 3342489
fill_color 13434879
quidu "4717D204001C"
width 312
height 126
annotation 8
autoResize TRUE)
(object InheritTreeView "" @7
location (884, 944)
line_color 3342489
fill_color 13434879
supplier @1
vertices (list Points
(884, 944)
(884, 788)))
(object InheritView "" @8
stereotype TRUE
line_color 3342489
quidu "4717D2330126"
client @3
supplier @1
vertices (list Points
(488, 1088)
(488, 944))
line_style 3
origin_attachment (488, 1088)
terminal_attachment (488, 944)
drawSupplier @7)
(object InheritView "" @9
stereotype TRUE
line_color 3342489
quidu "4717D2340378"
client @4
supplier @1
vertices (list Points
(800, 1088)
(800, 944))
line_style 3
origin_attachment (800, 1088)
terminal_attachment (800, 944)
drawSupplier @7)
(object InheritView "" @10
stereotype TRUE
line_color 3342489
quidu "4717D23602FB"
client @5
supplier @1
vertices (list Points
(1134, 1087)
(1134, 944))
line_style 3
origin_attachment (1134, 1087)
terminal_attachment (1134, 944)
drawSupplier @7)
(object InheritView "" @11
stereotype TRUE
line_color 3342489
quidu "4717D2380397"
client @6
supplier @1
vertices (list Points
(1478, 1091)
(1478, 944))
line_style 3
origin_attachment (1478, 1091)
terminal_attachment (1478, 944)
drawSupplier @7)
(object InheritView "" @12
stereotype TRUE
line_color 3342489
quidu "4717D2310193"
client @2
supplier @1
vertices (list Points
(294, 1087)
(294, 944))
line_style 3
origin_attachment (294, 1087)
terminal_attachment (294, 944)
drawSupplier @7)
(object NoteView @13
location (676, 1935)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object ItemLabel
Parent_View @13
location (314, 1869)
fill_color 13434879
nlines 2
max_width 689
label
|TODO: What about a "null" literal? What should its semantics be?
)
line_color 3342489
fill_color 13434879
width 749
height 144)
(object NoteView @14
location (713, 1592)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object ItemLabel
Parent_View @14
location (125, 1398)
fill_color 13434879
nlines 7
max_width 1140
label "TODO: What about a multi-value literal? Something like [] (list) and {} (set) perhaps? Since literals have to be written in some order, unordered literals are not necessary. Unordered types could also be made conform to ordered types and therefore be assignment-compatible. The type could be derived from the common type (or common adapter chain end) of the literals contained.")
line_color 3342489
fill_color 13434879
width 1200
height 400)
(object ClassView "Class" "Logical View::dataaccess::expressions::Expression" @15
ShowCompartmentStereotypes TRUE
IncludeAttribute TRUE
IncludeOperation TRUE
location (938, 241)
font (object Font
size 10
face "Arial"
bold FALSE
italics TRUE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object ItemLabel
Parent_View @15
location (671, 12)
fill_color 13434879
nlines 1
max_width 534
justify 0
label "Expression")
icon_style "Icon"
line_color 3342489
fill_color 13434879
quidu "450E63AB03A2"
width 552
height 482
annotation 8
autoResize TRUE)
(object InheritTreeView "" @16
location (938, 572)
line_color 3342489
fill_color 13434879
supplier @15
vertices (list Points
(938, 572)
(938, 482)))
(object InheritView "" @17
stereotype TRUE
line_color 3342489
quidu "454746F00167"
client @1
supplier @15
vertices (list Points
(884, 602)
(884, 572))
line_style 3
origin_attachment (884, 602)
terminal_attachment (884, 572)
drawSupplier @16)
(object ClassView "Class" "Logical View::dataaccess::expressions::literals::ObjectLiteral" @18
ShowCompartmentStereotypes TRUE
IncludeAttribute TRUE
IncludeOperation TRUE
location (1800, 1154)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object ItemLabel
Parent_View @18
location (1666, 1073)
fill_color 13434879
nlines 1
max_width 268
justify 0
label "ObjectLiteral")
icon_style "Icon"
line_color 3342489
fill_color 13434879
quidu "4717D20502BC"
width 286
height 186
annotation 8
autoResize TRUE)
(object InheritView "" @19
stereotype TRUE
line_color 3342489
quidu "4974A3CE030D"
client @18
supplier @15
vertices (list Points
(1781, 1060)
(1781, 572))
line_style 3
origin_attachment (1781, 1060)
terminal_attachment (1781, 572)
drawSupplier @16)
(object ClassView "Class" "Logical View::dataaccess::expressions::literals::ValueInit" @20
ShowCompartmentStereotypes TRUE
IncludeAttribute TRUE
IncludeOperation TRUE
location (2485, 1168)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object ItemLabel
Parent_View @20
location (2386, 1117)
fill_color 13434879
nlines 1
max_width 198
justify 0
label "ValueInit")
icon_style "Icon"
line_color 3342489
fill_color 13434879
quidu "4974918A0232"
width 216
height 126
annotation 8
autoResize TRUE)
(object AssociationViewNew "$UNNAMED$22" @21
location (2160, 1169)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
stereotype TRUE
line_color 3342489
quidu "497491CD01B5"
roleview_list (list RoleViews
(object RoleView "propertyValues" @22
Parent_View @21
location (382, 213)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object SegLabel @23
Parent_View @22
location (2203, 1130)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 1
anchor_loc 1
nlines 1
max_width 302
justify 0
label "+propertyValues"
pctDist 0.198020
height 40
orientation 0)
stereotype TRUE
line_color 3342489
quidu "497491CE0157"
client @21
supplier @20
vertices (list Points
(2160, 1169)
(2377, 1169))
line_style 3
origin_attachment (2160, 1169)
terminal_attachment (2377, 1169)
label (object SegLabel @24
Parent_View @22
location (2315, 1217)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 2
anchor_loc 1
nlines 1
max_width 15
justify 0
label "0..*"
pctDist 0.720524
height 48
orientation 1))
(object RoleView "objectLiteral" @25
Parent_View @21
location (382, 213)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object SegLabel @26
Parent_View @25
location (2091, 1214)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 1
anchor_loc 1
nlines 1
max_width 249
justify 0
label "+objectLiteral"
pctDist 0.322751
height 45
orientation 0)
stereotype TRUE
line_color 3342489
quidu "497491CE0159"
client @21
supplier @18
vertices (list Points
(2160, 1169)
(1943, 1169))
line_style 3
origin_attachment (2160, 1169)
terminal_attachment (1943, 1169)
label (object SegLabel @27
Parent_View @25
location (1985, 1131)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 2
anchor_loc 1
nlines 1
max_width 15
justify 0
label "0..1"
pctDist 0.805970
height 39
orientation 1))))
(object AssociationViewNew "$UNNAMED$24" @28
location (2302, 175)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
stereotype TRUE
line_color 3342489
quidu "497492170138"
roleview_list (list RoleViews
(object RoleView "value" @29
Parent_View @28
location (-85, -790)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object SegLabel @30
Parent_View @29
location (1301, 137)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 1
anchor_loc 1
nlines 1
max_width 132
justify 0
label "+value"
pctDist 0.919598
height 39
orientation 1)
stereotype TRUE
line_color 3342489
quidu "49749219005D"
client @28
supplier @15
vertices (list Points
(2302, 175)
(1214, 175))
line_style 3
origin_attachment (2302, 175)
terminal_attachment (1214, 175)
label (object SegLabel @31
Parent_View @29
location (1250, 229)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 2
anchor_loc 1
nlines 1
max_width 15
justify 0
label "1"
pctDist 0.966834
height 54
orientation 0))
(object RoleView "valueInit" @32
Parent_View @28
location (-85, -790)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object SegLabel @33
Parent_View @32
location (2357, 944)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 1
anchor_loc 1
nlines 1
max_width 180
justify 0
label "+valueInit"
pctDist 0.852941
height 103
orientation 1)
stereotype TRUE
line_color 3342489
quidu "4974921900FA"
client @28
supplier @20
vertices (list Points
(2302, 175)
(2459, 175)
(2459, 1105))
line_style 3
origin_attachment (2302, 175)
terminal_attachment (2459, 1105)
label (object SegLabel @34
Parent_View @32
location (2394, 1031)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 2
anchor_loc 1
nlines 1
max_width 15
justify 0
label "0..1"
pctDist 0.931985
height 66
orientation 1))))
(object ClassView "Class" "Logical View::data::classes::SapClass" @35
ShowCompartmentStereotypes TRUE
SuppressAttribute TRUE
SuppressOperation TRUE
IncludeAttribute TRUE
IncludeOperation TRUE
location (1798, 1560)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object ItemLabel
Parent_View @35
location (1687, 1510)
fill_color 13434879
nlines 1
max_width 222
justify 0
label "SapClass")
icon_style "Icon"
line_color 3342489
fill_color 13434879
quidu "4432171B031E"
width 240
height 124
annotation 8
autoResize TRUE)
(object AssociationViewNew "$UNNAMED$21" @36
location (1797, 1372)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
stereotype TRUE
line_color 3342489
quidu "497490F800AB"
roleview_list (list RoleViews
(object RoleView "valueClass" @37
Parent_View @36
location (19, 416)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object SegLabel @38
Parent_View @37
location (1937, 1462)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 1
anchor_loc 1
nlines 1
max_width 230
justify 0
label "+valueClass"
pctDist 0.723404
height 140
orientation 0)
stereotype TRUE
line_color 3342489
quidu "497490F90222"
client @36
supplier @35
vertices (list Points
(1797, 1372)
(1797, 1498))
line_style 3
origin_attachment (1797, 1372)
terminal_attachment (1797, 1498)
label (object SegLabel @39
Parent_View @37
location (1753, 1466)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 2
anchor_loc 1
nlines 1
max_width 15
justify 0
label "1"
pctDist 0.744681
height 45
orientation 1))
(object RoleView "objectLiteral" @40
Parent_View @36
location (19, 416)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object SegLabel @41
Parent_View @40
location (1647, 1281)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 1
anchor_loc 1
nlines 1
max_width 249
justify 0
label "+objectLiteral"
pctDist 0.728000
height 150
orientation 0)
stereotype TRUE
line_color 3342489
quidu "497490F903D8"
client @36
supplier @18
vertices (list Points
(1797, 1372)
(1797, 1247))
line_style 3
origin_attachment (1797, 1372)
terminal_attachment (1797, 1247)
label (object SegLabel @42
Parent_View @40
location (1851, 1275)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 2
anchor_loc 1
nlines 1
max_width 15
justify 0
label "0..*"
pctDist 0.778571
height 54
orientation 1))))
(object ClassView "Class" "Logical View::data::classes::AssociationEnd" @43
ShowCompartmentStereotypes TRUE
SuppressAttribute TRUE
IncludeAttribute TRUE
IncludeOperation TRUE
location (2618, 1562)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object ItemLabel
Parent_View @43
location (2224, 1481)
fill_color 13434879
nlines 1
max_width 789
justify 0
label "AssociationEnd")
icon_style "Icon"
line_color 3342489
fill_color 13434879
quidu "44EC55FB03B8"
width 807
height 187
annotation 8)
(object AssociationViewNew "$UNNAMED$23" @44
location (2487, 1350)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
stereotype TRUE
line_color 3342489
quidu "497491EE003E"
roleview_list (list RoleViews
(object RoleView "forEnd" @45
Parent_View @44
location (0, 385)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object SegLabel @46
Parent_View @45
location (2575, 1439)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 1
anchor_loc 1
nlines 1
max_width 142
justify 0
label "+forEnd"
pctDist 0.743802
height 88
orientation 0)
stereotype TRUE
line_color 3342489
quidu "497491EE0251"
client @44
supplier @43
vertices (list Points
(2487, 1350)
(2487, 1469))
line_style 3
origin_attachment (2487, 1350)
terminal_attachment (2487, 1469)
label (object SegLabel @47
Parent_View @45
location (2440, 1439)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 2
anchor_loc 1
nlines 1
max_width 15
justify 0
label "1"
pctDist 0.743802
height 48
orientation 1))
(object RoleView "valueInit" @48
Parent_View @44
location (0, 385)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object SegLabel @49
Parent_View @48
location (2383, 1267)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 1
anchor_loc 1
nlines 1
max_width 180
justify 0
label "+valueInit"
pctDist 0.697479
height 104
orientation 0)
stereotype TRUE
line_color 3342489
quidu "497491EE0290"
client @44
supplier @20
vertices (list Points
(2487, 1350)
(2487, 1231))
line_style 3
origin_attachment (2487, 1350)
terminal_attachment (2487, 1231)
label (object SegLabel @50
Parent_View @48
location (2535, 1262)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 2
anchor_loc 1
nlines 1
max_width 15
justify 0
label "0..*"
pctDist 0.735537
height 48
orientation 1))))
(object ClassView "Class" "Logical View::data::classes::ClassTypeDefinition" @51
ShowCompartmentStereotypes TRUE
IncludeAttribute TRUE
IncludeOperation TRUE
location (2084, 2176)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object ItemLabel
Parent_View @51
location (1789, 2047)
fill_color 13434879
nlines 1
max_width 590
justify 0
label "ClassTypeDefinition")
icon_style "Icon"
line_color 3342489
fill_color 13434879
quidu "4784F7E800AB"
width 608
height 282
annotation 8
autoResize TRUE)
(object AssociationViewNew "" @52
location (1849, 1828)
stereotype TRUE
line_color 3342489
quidu "4784F7F5005D"
roleview_list (list RoleViews
(object RoleView "clazz" @53
Parent_View @52
location (-213, -150)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object SegLabel @54
Parent_View @53
location (1746, 1667)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 1
anchor_loc 1
nlines 1
max_width 136
justify 0
label "+clazz"
pctDist 0.781553
height 104
orientation 0)
stereotype TRUE
line_color 3342489
quidu "4784F7F5005F"
client @52
supplier @35
vertices (list Points
(1849, 1828)
(1849, 1621))
line_style 3
origin_attachment (1849, 1828)
terminal_attachment (1849, 1621)
label (object SegLabel @55
Parent_View @53
location (1889, 1673)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 2
anchor_loc 1
nlines 1
max_width 15
justify 0
label "1"
pctDist 0.747573
height 40
orientation 1))
(object RoleView "elementsOfType" @56
Parent_View @52
location (-213, -150)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object SegLabel @57
Parent_View @56
location (1658, 1992)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 1
anchor_loc 1
nlines 1
max_width 320
justify 0
label "+elementsOfType"
pctDist 0.796117
height 192
orientation 1)
stereotype TRUE
line_color 3342489
quidu "4784F7F5005E"
client @52
supplier @51
vertices (list Points
(1849, 1828)
(1849, 2035))
line_style 3
origin_attachment (1849, 1828)
terminal_attachment (1849, 2035)
label (object SegLabel @58
Parent_View @56
location (1909, 1990)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 2
anchor_loc 1
nlines 1
max_width 15
justify 0
label "0..*"
pctDist 0.786408
height 60
orientation 0))))
(object AssociationViewNew "" @59
location (2302, 1845)
stereotype TRUE
line_color 3342489
quidu "47B9ABAE00AB"
roleview_list (list RoleViews
(object RoleView "associationEnd" @60
Parent_View @59
location (240, -133)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object SegLabel @61
Parent_View @60
location (2474, 1753)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 1
anchor_loc 1
nlines 1
max_width 304
justify 0
label "+associationEnd"
pctDist 0.489583
height 172
orientation 1)
stereotype TRUE
line_color 3342489
quidu "47B9ABAF02BF"
client @59
supplier @43
vertices (list Points
(2302, 1845)
(2302, 1655))
line_style 3
origin_attachment (2302, 1845)
terminal_attachment (2302, 1655)
label (object SegLabel @62
Parent_View @60
location (2368, 1701)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 2
anchor_loc 1
nlines 1
max_width 15
justify 0
label "0..1"
pctDist 0.760417
height 66
orientation 1))
(object RoleView "type" @63
Parent_View @59
location (240, -133)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
label (object SegLabel @64
Parent_View @63
location (2388, 1948)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 1
anchor_loc 1
nlines 1
max_width 108
justify 0
label "+type"
pctDist 0.549223
height 86
orientation 0)
stereotype TRUE
line_color 3342489
quidu "47B9ABAF02AF"
client @59
supplier @51
vertices (list Points
(2302, 1845)
(2302, 2035))
line_style 3
origin_attachment (2302, 1845)
terminal_attachment (2302, 2035)
label (object SegLabel @65
Parent_View @63
location (2345, 2000)
font (object Font
size 10
face "Arial"
bold FALSE
italics FALSE
underline FALSE
strike FALSE
color 0
default_color TRUE)
anchor 2
anchor_loc 1
nlines 1
max_width 15
justify 0
label "1"
pctDist 0.818653
height 43
orientation 0))))))))
(object Class_Category "collectionExpressions"
quid "4759564F00AB"
exportControl "Public"
logical_models (list unit_reference_list
(object Class "Including"
quid "475956720213"
documentation
|Produces a new value which includes the *argument* object. If the *argument* object was already included in the *source* and the multiplicity of the *source* has the *unique* attribute set to *true*, the *what* object will not be added a second time and the resulting expression will be equal to the *source* expression's value.
|
|If the *source* expression had multiplicity 1, the resulting expression's multiplicity is *, regardless of whether an object actually gets added.
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4ADF36F5002E"
supplier "Logical View::dataaccess::expressions::collectionExpressions::CollectionExpressionWithArgument"
quidu "4ADF36A4001F")))
(object Class "Excluding"
quid "47595673001F"
documentation
|Produces a new value which includes one less occurrence of the *argument* object than *source* or no occurrence if *source* did not contain an occurrence.
|
|If the *source* expression had multiplicity a..b, the resulting expression's multiplicity is Max(a-1, 0)..b, regardless of whether an object actually gets removed.
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4ADF36FA0119"
supplier "Logical View::dataaccess::expressions::collectionExpressions::CollectionExpressionWithArgument"
quidu "4ADF36A4001F")))
(object Class "IncludingAt"
quid "475956750280"
documentation "Like Including, produced a new value based on the *source* value that includes the *argument* object. In addition, *IncludingAt* specifies the position where to include the *argument* object. The multiplicity of source and resulting value have ordered=true. If *source* already includes an object equal to *argument* and the *source* multiplicity has unique=true, that element will afterwards be at the requested position or at the end of the resulting value if the *at* position is greater or equal the *source*'s cardinality."
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "47B5ABF60203"
supplier "Logical View::dataaccess::expressions::collectionExpressions::WithPosition"
quidu "47B5ABDC038A")
(object Inheritance_Relationship
quid "47B9FCA403D8"
supplier "Logical View::dataaccess::expressions::collectionExpressions::Including"
quidu "475956720213")))
(object Class "Iterate"
quid "47595676008C"
documentation
|Given the number of iterators variables, assigns all possible tuples of values from the source expression to the iterators (combinatorial product). In particular, if only only one iterator variable is provided, this variable will "loop" through the values in the source expression. If the source expression has an ordered multiplicity, the iteration order corresponds with that order. Otherwise, iteration order is arbitrary and undefined.
|
|For each combination of iterator variable values, the iteratorExpression will be evaluated. The result of each evaluation is assigned to the accumulator variable.
|
|The iteratorExpression can use all iterators variables as well as the accumulator if one is declared, and of course all other variables in scope as well (block variables, etc.). If an accumulator is declared, an initial value must be provided for it.
|
|The result of the Iterate expression is the value that the accumulator has when the iteration terminates or the value of the last iteratorExpression evaluation if no accumulator has been provided. By this rationale, the type of the Iterate expression equals the type of the iteratorExpression.
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "47595F5801A5"
supplier "Logical View::dataaccess::expressions::collectionExpressions::CollectionExpression"
quidu "47595F60033C"))
nestedClasses (list nestedClasses
(object Class "AccumulatorTypeEqualsExpressionType"
quid "47B5BE680167"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "47B5BE7C01C5"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context Iterate
|inv:
| self.accumulator->notEmpty() implies
| (self.accumulator.ownedTypeDefinition->notEmpty() implies
| self.accumulator.ownedTypeDefinition.conformsTo(self.iteratorExpression.getType()))
)
opExportControl "Public"
uid 0)))))
(object Class "CollectionExpression"
quid "47595F60033C"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "47595F6A036B"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"))
abstract TRUE)
(object Class "ExcludingAt"
quid "47B5ABAC0232"
documentation
|Like Excluding, but useful if multiple occurrences of the *argument* value exist. This expression removes the occurrence at the position specified by *at*. For this purpose, the argument value must have ordered=true, and so will the resulting value. If at position *at* there is no object that equals *argument* or the *at* position is outside the valid bounds, the resulting expression equals the *source* expression.
|
|If the argument is a multi-object (cardinality > 1), it needs to be ordered, and the argument's object sequence needs to exist at the position specified by *at*. If only a subsequence prefix is matched at position *at*, only that subsequence prefix will be excluded.
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "47B5ABF800DA"
supplier "Logical View::dataaccess::expressions::collectionExpressions::WithPosition"
quidu "47B5ABDC038A")
(object Inheritance_Relationship
quid "47B5AC13007D"
supplier "Logical View::dataaccess::expressions::collectionExpressions::Excluding"
quidu "47595673001F")))
(object Class "WithPosition"
quid "47B5ABDC038A"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "493E4C4F03C8"
supplier "Logical View::dataaccess::expressions::ExpressionWithArgument"
quidu "4B8504AE03C8"))
class_attributes (list class_attribute_list
(object ClassAttribute "at"
quid "47595959002E"
documentation "a position in an object with upper multiplicity >1 and ordered=true."
type "Integer"
quidu "3B538AB300B3"
exportControl "Public"))
abstract TRUE
nestedClasses (list nestedClasses
(object Class "SourceMustBeOrdered"
quid "493E4C61031C"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "493E4C7A034B"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context WithPosition
|inv:
| self.argument.getType().ordered
)
opExportControl "Public"
uid 0)))))
(object Class "CollectionExpressionWithArgument"
quid "4ADF36A4001F"
superclasses (list inheritance_relationship_list
(object Inheritance_Relationship
quid "4ADF36D201A5"
supplier "Logical View::dataaccess::expressions::ExpressionWithArgument"
quidu "4B8504AE03C8")
(object Inheritance_Relationship
quid "4ADF36E80271"
supplier "Logical View::dataaccess::expressions::collectionExpressions::CollectionExpression"
quidu "47595F60033C"))
abstract TRUE
nestedClasses (list nestedClasses
(object Class "ArgumentTypeMustConformToCollectionExpressionType"
quid "4ADF362100EA"
stereotype "constraint"
operations (list Operations
(object Operation "OCL"
quid "4ADF364A002E"
concurrency "Sequential"
semantics (object Semantic_Info
PDL
|context CollectionExpressionWithArgument
|inv:
| let snl : Integer = source.getType().getNestingLevel() in let anl : Integer = argument.getType().getNestingLevel() in
| if snl = anl then
| source.getType().conformsToIgnoringMultiplicity(argument.getType())
| else
| if snl = (anl + 1) then
| source.getType().oclAsType(data::classes::NestedTypeDefinition).type.conformsToIgnoringMultiplicity(argument.getType())
| else
| if (snl + 1) = anl then
| source.getType().conformsToIgnoringMultiplicity(argument.getType().oclAsType(data::classes::NestedTypeDefinition).type)
| else
| false
| endif
| endif
| endif
)
opExportControl "Public"
uid 0)))))
(object Association "SourceOfCollectionExpression"
quid "47595F91004E"
roles (list role_list
(object Role "source"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "47595F930196"
label "source"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"
client_cardinality (value cardinality "1")
Containment "By Value"
is_navigable TRUE)
(object Role "collectionExpression"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 202)))
quid "47595F9301C5"
label "collectionExpression"
supplier "Logical View::dataaccess::expressions::collectionExpressions::CollectionExpression"
quidu "47595F60033C"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE)))
(object Association "IterateIterator"
quid "4759625301D4"
roles (list role_list
(object Role "iterators"
quid "4759625303C8"
label "iterators"
supplier "Logical View::behavioral::actions::Iterator"
quidu "47A719D200EA"
client_cardinality (value cardinality "1..*")
Containment "By Value"
is_navigable TRUE)
(object Role "iterate"
quid "4759625303D8"
label "iterate"
supplier "Logical View::dataaccess::expressions::collectionExpressions::Iterate"
quidu "47595676008C"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE)))
(object Association "IterateAccumulator"
quid "47596322030D"
documentation "Conceptually, the accumulator is not a constant in the usual sense. It changes its value with each iteration. However, syntactically, it shares all properties with a constant such as requiring an initialization expression and not being assignable otherwise."
roles (list role_list
(object Role "accumulator"
quid "475963230109"
label "accumulator"
supplier "Logical View::behavioral::actions::Constant"
quidu "47A717EE033C"
client_cardinality (value cardinality "0..1")
Containment "By Value"
is_navigable TRUE)
(object Role "iterate"
quid "475963230119"
label "iterate"
supplier "Logical View::dataaccess::expressions::collectionExpressions::Iterate"
quidu "47595676008C"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE)))
(object Association "$UNNAMED$25"
quid "47596342006D"
roles (list role_list
(object Role "iteratorExpression"
attributes (list Attribute_Set
(object Attribute
tool "MOF"
name "sap2mof.store"
value ("RoleStoreKindSet" 203)))
quid "475963450186"
label "iteratorExpression"
supplier "Logical View::dataaccess::expressions::Expression"
quidu "450E63AB03A2"
client_cardinality (value cardinality "1")
Containment "By Value"
is_navigable TRUE)
(object Role "inIterator"
quid "475963450196"
label "inIterator"
supplier "Logical View::dataaccess::expressions::collectionExpressions::Iterate"
quidu "47595676008C"
client_cardinality (value cardinality "0..1")
is_navigable TRUE
is_aggregate TRUE))))
logical_presentations (list unit_reference_list
(object ClassDiagram "Collection Expressions"
quid "475956590232"
title "Collection Expressions"
zoom 100
max_height 28350