blob: 347e9a1d6ce49c0dba801524e71e7738e48f4e5d [file] [log] [blame]
import 'QVTtemplate.ecore'
package qvttemplate
context CollectionTemplateExp
inv MemberTypeisCollectionElementType:
member->forAll(type?.conformsTo(referredCollectionType.elementType))
inv RestTypeisCollectionType:
rest <> null implies
rest.type = referredCollectionType
inv TypeisCollectionType:
type = referredCollectionType
context ObjectTemplateExp
inv PartPropertyIsUnique:
part->isUnique(resolvedProperty)
inv TypeisObjectType:
type = referredClass
context PropertyTemplateItem
def:resolvedProperty : ocl::Property[1] =
if isOpposite then referredProperty.opposite else referredProperty endif
inv CompatibleClassForProperty(objContainer.referredClass.name + ' must conform to ' + resolvedProperty.owningClass?.name):
objContainer.referredClass.conformsTo(resolvedProperty.owningClass)
inv CompatibleTypeForObjectValue(value.type?.name + ' must conform to ' + resolvedProperty.type?.name + ' or vice-versa'):
not resolvedProperty.type.oclIsKindOf(ocl::CollectionType) implies
let propertyType = resolvedProperty.type in
let valueType = value.type in
valueType?.conformsTo(propertyType)
or propertyType?.conformsTo(valueType)
inv CompatibleTypeForCollectionElementValue(value.type?.name + ' must conform to ' + resolvedProperty.type.oclAsType(ocl::CollectionType).elementType.name + ' or vice-versa'):
resolvedProperty.type.oclIsKindOf(ocl::CollectionType)
and not value.type.oclIsKindOf(ocl::CollectionType) implies
let propertyType = resolvedProperty.type.oclAsType(ocl::CollectionType).elementType in
let valueType = value.type in
valueType?.conformsTo(propertyType)
or propertyType.conformsTo(valueType)
inv CompatibleTypeForCollectionValue(value.type.oclAsType(ocl::CollectionType).elementType.name + ' must conform to ' + resolvedProperty.type.oclAsType(ocl::CollectionType).elementType.name + ' or vice-versa'):
resolvedProperty.type.oclIsKindOf(ocl::CollectionType)
and value.type.oclIsKindOf(ocl::CollectionType) implies
let propertyType = resolvedProperty.type.oclAsType(ocl::CollectionType).elementType in
let valueType = value.type.oclAsType(ocl::CollectionType).elementType in
-- Tuple {
-- message : String = valueType.conformsTo(propertyType) or propertyType.conformsTo(valueType),
/*status : Boolean =*/ valueType.conformsTo(propertyType) or propertyType.conformsTo(valueType)
-- }.status
context TemplateExp
inv WhereIsBoolean:
where <> null implies
where.type = Boolean
endpackage