Entity: RelationalTransformation 192 51 null * name String 3 false true false Entity: Property 284 166 null * name String 3 false false false lower int 3 false false false upper int 3 false false false Entity: Element 608 10 null * abstract name String 3 false true false Entity: Rule 647 91 Element * abstract Entity: Statement 882 85 null * abstract Entity: Relation 626 156 Rule * isTopLevel boolean 3 false false false Operation: conjoinSources Relation Expression doms Sequence(RelationDomain) bound Set(String) static query true (doms.size = 1 => result = doms.first.toSourceExpression(bound)) & (doms.size > 1 => BinaryExpression->exists( r | r.operator = "&" & r.type = Type.makePrimitiveType("boolean") & r.left = doms.first.toSourceExpression(bound) & r.right = Relation.conjoinSources(doms.tail,bound) & result = r ) ) Operation: toSourceExpression Relation Expression bound Set(String) query true result = Relation.conjoinSources(domain,bound) Operation: toTargetExpression Relation Expression bound Set(String) query true result = Relation.conjoinSources(domain,bound) Entity: RelationDomain 437 106 null * isCheckable boolean 3 false false false isEnforceable boolean 3 false false false Operation: toSourceExpression RelationDomain Expression bound Set(String) query true obj = Expression.makeBasicExpression(templateExpression.variable) & (isCheckable = true => result = templateExpression.toSourceExpression(obj,bound->including(templateExpression.variable.name))) & (isCheckable = false => BasicExpression->exists( betrue | betrue.data = "true" & result = betrue) ) Operation: toTargetExpression RelationDomain Expression bound Set(String) query true obj = Expression.makeBasicExpression(templateExpression.variable) & (isEnforceable = true => result = templateExpression.toTargetExpression(obj,bound->including(templateExpression.variable.name))) & (isEnforceable = false => BasicExpression->exists( betrue | betrue.data = "true" & result = betrue) ) Entity: Pattern 635 264 null * Operation: toExpression Pattern Expression query true result = Expression.conjoinAll(predicate->collect( e | e.toExpression() )) Entity: ObjectTemplateExp 409 229 Expression * Operation: templateItemSourceExpression ObjectTemplateExp Expression op String varbe Expression bound Set(String) query true objvar = Expression.makeBasicExpression(variable) & BinaryExpression->exists( eq | eq.operator = op & eq.left = objvar & eq.right = varbe & BinaryExpression->exists( conj | conj.operator = "&" & conj.left = eq & conj.right = toSourceExpression(objvar, bound->including(variable.name)) & result = conj)) Operation: toSourceExpression ObjectTemplateExp Expression contextObject Expression bound Set(String) query true obj = Expression.makeBasicExpression(variable) & entexp = Expression.makeBasicExpression(variable.type) & partsExp = Expression.conjoinAll(part.toSourceExpression(obj,bound)) & BinaryExpression->exists( inex | inex.operator = ":" & inex.left = obj & inex.right = entexp & BinaryExpression->exists( conj | conj.operator = "&" & conj.left = inex & conj.right = partsExp & result = conj)) Operation: toTargetExpression ObjectTemplateExp Expression contextObject Expression bound Set(String) query true obj = Expression.makeBasicExpression(variable) & entexp = Expression.makeBasicExpression(variable.type) & partsExp = Expression.conjoinAll(part.toSourceExpression(obj,bound)) & BinaryExpression->exists( inex | inex.operator = "->exists" & inex.left = entexp & inex.iteratorVariable = variable & BinaryExpression->exists( conj | conj.operator = "&" & conj.left = inex & conj.right = partsExp & inex.right = conj & result = inex)) Entity: Predicate 637 343 null * Operation: toExpression Predicate Expression query true result = conditionExpression Entity: PropertyTemplateItem 342 314 null * propertyName String 3 false false false Operation: toSourceExpression PropertyTemplateItem Expression contextObject Expression bound Set(String) query true varbe = Expression.makeBasicExpressionRef(contextObject,referredProperty) & (value : ObjectTemplateExp & referredProperty.lower = 1 & referredProperty.upper = 1 => result = value.templateItemSourceExpression("=",varbe,bound)) & (value : ObjectTemplateExp & (referredProperty.lower /= 1 or referredProperty.upper /= 1) => result = value.templateItemSourceExpression(":",varbe,bound)) & (value : BasicExpression & value.umlkind = "variable" & bound->excludes(value+"") & referredProperty.lower = 1 & referredProperty.upper = 1 => BinaryExpression->exists( eq | eq.operator = "=" & eq.left = value & eq.right = varbe & bound = bound@pre->including(value+"") & result = eq)) & (value : BasicExpression & value.umlkind = "variable" & bound->excludes(value+"") & (referredProperty.lower /= 1 or referredProperty.upper /= 1) => BinaryExpression->exists( inex | inex.operator = ":" & inex.left = value & inex.right = varbe & bound = bound@pre->including(value+"") & result = inex)) & ((referredProperty.lower /= 1 or referredProperty.upper /= 1) => BinaryExpression->exists( inexp | inexp.operator = ":" & inexp.left = value & inexp.right = varbe)) & (referredProperty.lower = 1 & referredProperty.upper = 1 => BinaryExpression->exists( eq | eq.operator = "=" & eq.left = varbe & eq.right = value & result = eq)) Entity: Expression 554 413 null * abstract Operation: makeBasicExpression Expression BasicExpression t Type query static true BasicExpression->exists( r | r.data = t.name & r.type = t & result = r ) Operation: makeBasicExpression Expression BasicExpression p Property query static true BasicExpression->exists( r | r.data = p.name & r.type = p.type & result = r ) Operation: makeBasicExpressionRef Expression BasicExpression obj Expression p Property query static true BasicExpression->exists( r | r.data = p.name & r.type = p.type & obj : r.objectRef & result = r ) Operation: conjoinAll Expression Expression s Sequence(Expression) query static true ( s.size = 0 => BasicExpression->exists( e | e.data = "true" & e.type = Type.makePrimitiveType("boolean") & result = e ) ) & ( s.size = 1 => result = s.first ) & ( s.size > 1 => BinaryExpression->exists( r | r.operator = "&" & r.type = Type.makePrimitiveType("boolean") & r.left = s.first & r.right = Expression.conjoinAll(s.tail) & result = r ) ) Entity: BehaviouralFeature 0 112 null * name String 3 false true false Entity: BasicExpression 403 596 Expression * data String 3 false false false umlkind String 3 false false false Entity: Constraint 707 640 null * id String 3 false true false Entity: NamedElement 1133 724 null * abstract name String 3 false true false Entity: Type 962 750 NamedElement * abstract Operation: makePrimitiveType Type PrimitiveType n String query static true PrimitiveType->exists( p | p.name = n & result = p ) Entity: PrimitiveType 768 767 Type * Entity: BinaryExpression 505 744 Expression * operator String 3 false false false Association: BinaryExpression Property -1 497 739 323 205 1 iteratorVariable null Association: PropertyTemplateItem Property -1 347 314 323 205 1 referredProperty null Entity: UseCase 1055 482 NamedElement * Association: RelationalTransformation Property -1 345 96 347 160 0 attributes null ordered Association: RelationalTransformation Element -1 442 87 608 32 0 elements null ordered Association: Relation Statement -1 698 94 878 105 1 where null Association: Relation Pattern -1 686 217 687 264 1 when null Association: Relation RelationDomain -1 630 108 533 110 0 domain null ordered Association: RelationDomain ObjectTemplateExp -1 519 139 553 222 1 templateExpression null Association: ObjectTemplateExp Property -1 397 239 323 205 1 variable null Association: ObjectTemplateExp PropertyTemplateItem -1 416 257 417 313 0 part null ordered Association: Pattern Predicate -1 715 286 764 337 0 predicate null ordered Association: Predicate Expression -1 637 370 585 423 1 conditionExpression null Association: PropertyTemplateItem Expression -1 529 362 548 440 1 value null Association: Predicate Property -1 769 373 279 181 0 variables null 767 535 199 535 199 181 Association: RelationalTransformation BehaviouralFeature 0 195 55 82 110 0 helpers null Association: BehaviouralFeature Property 1 156 133 287 169 0 parameters null Association: Expression Type 0 778 486 1000 752 1 type null 986 607 Association: BinaryExpression Expression 0 591 746 576 483 1 left null Association: BinaryExpression Expression 0 636 747 625 480 1 right null Association: UseCase Constraint 0 1059 504 819 643 0 orderedPostconditions null ordered Association: Constraint Expression 0 796 643 724 483 1 antecedent null Association: Constraint Expression 0 710 645 676 480 1 succedent null Association: UseCase BehaviouralFeature 0 1058 491 14 149 0 ownedOperation null 70 511 Association: BehaviouralFeature Expression 0 65 146 549 448 1 precondition null Association: BehaviouralFeature Expression 0 30 147 547 462 1 postcondition null Association: Property Type 0 300 203 966 753 1 type null 323 678 Association: BasicExpression Expression 0 425 599 548 480 -1 objectRef null 421 494 Generalisation: Element Rule 675 91 676 49 Generalisation: Rule Relation 679 158 678 115 Generalisation: Expression BasicExpression 526 598 552 467 Generalisation: Expression ObjectTemplateExp 409 229 552 467 Generalisation: NamedElement Type 1009 757 1135 750 Generalisation: Type PrimitiveType 885 774 964 760 Generalisation: Expression BinaryExpression 606 748 596 482 Generalisation: NamedElement UseCase 1124 504 1230 725 Association: UseCase Property 1 1061 484 288 203 0 ownedAttribute null 259 405 GeneralUseCase: qvt2umlrsds false Constraint: null true UseCase->exists( uc | uc.name = name & uc.ownedAttribute = attributes & uc.ownedOperation = helpers ) RelationalTransformation qvt2umlrsds false Constraint: uc = UseCase[name] r : Relation & r : elements & r.isTopLevel = true Constraint->exists( c | c.id = r.name & c : uc.orderedPostconditions ) RelationalTransformation qvt2umlrsds false Constraint: isTopLevel = true c = Constraint[name] c.antecedent = self.toSourceExpression(Set{}) & c.succedent = self.toTargetExpression(Set{}) Relation qvt2umlrsds false