blob: 0775e0d774332eace03d0c577a24b4ca54e3cccd [file] [log] [blame]
import 'BaseCS.ecore'
import '/resource/org.eclipse.ocl.pivot/model/Pivot.ecore'
package basecs
context TypedElementCS
def : isRequired() : Boolean =
let typeMultiplicity = ownedType.ownedMultiplicity
in
if typeMultiplicity = null
then false
else
if typeMultiplicity.getUpper() = 1
then typeMultiplicity.getLower() = 1
else false
endif
endif
context TypedRefCS
def : isMultiple() : Boolean =
ownedMultiplicity.getUpper() > 1
def : multiplicityType(type : ocl::Type) : ocl::Type =
if not isMultiple()
then type
else
let ordered = if oclContainer().oclIsKindOf(TypedElementCS)
then oclContainer().oclAsType(TypedElementCS).qualifiers->includes('ordered')
else false
endif,
unique = if oclContainer().oclIsKindOf(TypedElementCS)
then oclContainer().oclAsType(TypedElementCS).qualifiers->includes('unique')
else false
endif,
superType = ocl::CollectionType {
name = 'Collection',
elementType = type,
superClasses = Set{OclAny} -- FIXME lookup
}
in
if unique
then
if ordered
then ocl::OrderedSetType {
name = 'OrderedSet',
elementType = type,
superClasses = Set{superType}
}
else ocl::SetType {
name = 'Set',
elementType = type,
superClasses = Set{superType}
}
endif
else
if ordered
then ocl::SequenceType {
name = 'Sequence',
elementType = type,
superClasses = Set{superType}
}
else ocl::BagType {
name = 'Bag',
elementType = type,
superClasses = Set{superType}
}
endif
endif
endif
context TypedTypeRefCS
def : specializeType(tBinding : ocl::TemplateBinding) : ocl::Class =
let type = referredType -- FIME type lookup
in ocl::Class {
name = type.name,
unspecializedElement = type,
ownedBindings = tBinding
}
context WildcardTypeRefCS
def : wildcardType() : ocl::WildcardType =
ocl::WildcardType {
name = '?'--,
-- lowerBound = OclAny FIXME lookup
-- upperBound = OclVoid FIXME lookup
}
def : wildcardTypeExtends(_extends : ocl::Class ) : ocl::WildcardType =
ocl::WildcardType {
name = '?',
lowerBound = _extends
-- upperBound = OclVoid FIXME lookup
}
def : wildcardTypeSuper(super : ocl::Class) : ocl::WildcardType =
ocl::WildcardType {
name = '?',
-- lowerBound = OclAny FIXME lookup
upperBound = super
}
endpackage