<detailskey="NoSelfMerge$message"value="'A \'ComponentInstance\' shall not be merged with itself, i.e. the source and target \'ComponentInstance\'s specified by means of the \'ComponentReference\'s shall be different. ' + self.toString()"/>
<detailskey="ComponentMergeType$message"value="'The \'ComponentInstance\' specified by means of the target \'ComponentReference\'s shall have a \'ComponentType\' which conforms to the \'ComponentType\' of the source \'ComponentReference\'. ' + self.toString()"/>
<detailskey="NoSelfMerge"value="Tuple { message : String = 'A \'ComponentInstance\' shall not be merged with itself, i.e. the source and target \'ComponentInstance\'s specified by means of the \'ComponentReference\'s shall be different. ' + self.toString(), status : Boolean = not (self.component.component = self.target.component and
self.component.configuration = self.target.configuration)
}.status"/>
<detailskey="ComponentMergeType"value="Tuple { message : String = 'The \'ComponentInstance\' specified by means of the target \'ComponentReference\'s shall have a \'ComponentType\' which conforms to the \'ComponentType\' of the source \'ComponentReference\'. ' + self.toString(), status : Boolean = self.target.component.type.conformsTo(self.component.component.type)
}.status"/>
<detailskey="AliasMandatoryName"value="not self.name.oclIsUndefined() and self.name.size() > 0"/>
<detailskey="AliasMandatoryName$message"value="'The \'name\' property of the \'ComponentAlias\' shall be set and it shall not be an empty String.' + self.toString()"/>
<detailskey="AliasMandatoryName"value="Tuple { message : String = 'The \'name\' property of the \'ComponentAlias\' shall be set and it shall not be an empty String.' + self.toString(), status : Boolean = not self.name.oclIsUndefined() and self.name.size() > 0
}.status"/>
<detailskey="MultiplePICS$message"value="'A \'Comment\' with body containing an \'and\' or \'or\' shall be attached to the \'PICSReference\' as a Boolean operand if there are two or more \'PICSReference\'s and it is not the first \'PICSReference\'.' + self.toString()"/>
<detailskey="MultiplePICS"value="Tuple { message : String = 'A \'Comment\' with body containing an \'and\' or \'or\' shall be attached to the \'PICSReference\' as a Boolean operand if there are two or more \'PICSReference\'s and it is not the first \'PICSReference\'.' + self.toString(), status : Boolean = self.getTestObjective().picsReference->size() < 2
or self.getTestObjective().picsReference->forAll(p |
self.getTestObjective().picsReference->at(1) = p
or (not p.comment->isEmpty()
and (p.comment->first()._'body' = 'and'
or p.comment->first()._'body' = 'or')))
}.status"/>
<detailskey="EntityOrComponentInstance"value="(not self.entity.oclIsUndefined() and self.component.oclIsUndefined())
or (self.entity.oclIsUndefined() and not self.component.oclIsUndefined())"/>
<detailskey="EntityOrComponentInstance$message"value="'There shall be a reference to an \'Entity\' or a \'ComponentInstance\' but not both.' + self.toString()"/>
<detailskey="EntityOrComponentInstance"value="Tuple { message : String = 'There shall be a reference to an \'Entity\' or a \'ComponentInstance\' but not both.' + self.toString(), status : Boolean = (not self.entity.oclIsUndefined() and self.component.oclIsUndefined())
or (self.entity.oclIsUndefined() and not self.component.oclIsUndefined())
}.status"/>
<detailskey="DataReferenceContents$message"value="'Only effectively static \'DataUse\'s may be used directly or indirectly in \'ParameterBinding\'s of the \'DataUse\' within a \'DataReference\'.' + self.toString()"/>
<detailskey="CompatibleDataTypeInDataReference$message"value="'Only compatible \'DataType\'s may be used directly when \'ComponentInstance\'s are referenced within a top-level \'DataReference\'.' + self.toString()"/>
<detailskey="DataReferenceContents"value="Tuple { message : String = 'Only effectively static \'DataUse\'s may be used directly or indirectly in \'ParameterBinding\'s of the \'DataUse\' within a \'DataReference\'.' + self.toString(), status : Boolean = self.content.isEffectivelyStatic()
and self.content.argument->forAll(a | a.dataUse.isEffectivelyStatic())
and self.content.argument->closure(a |
a.dataUse.argument)->forAll(a|a.dataUse.isEffectivelyStatic())
}.status"/>
<detailskey="CompatibleDataTypeInDataReference"value="Tuple { message : String = 'Only compatible \'DataType\'s may be used directly when \'ComponentInstance\'s are referenced within a top-level \'DataReference\'.' + self.toString(), status : Boolean = self.container().oclIsTypeOf(EventOccurrenceSpecification) implies (
self.container().oclAsType(EventOccurrenceSpecification).oppositeEntityReference
->including(self.container().oclAsType(EventOccurrenceSpecification).entityReference)
->collect(e | e.component)->excluding(null)->isEmpty()
or
self.container().oclAsType(EventOccurrenceSpecification).oppositeEntityReference
->including(self.container().oclAsType(EventOccurrenceSpecification).entityReference)
->collect(e | e.component)->excluding(null)
->collect(c | c.type.allGates())
->collect(g | g.type.allDataTypes())
->exists(d | self.content.resolveDataType().conformsTo(d))
)
}.status"/>
<detailskey="ContentOrValue"value="self.content->isEmpty() or self.value.oclIsUndefined()"/>
<detailskey="ContentOrValue$message"value="'Either nested \'Content\'s or \'Value\' may be specified within \'Content\', but not both.' + self.toString()"/>
<detailskey="CollectionLikeContent"value="(not self.comment->isEmpty() and self.comment->last()._body = 'including') implies
(self.content->isEmpty() or self.content->forAll(c | c.value.oclIsUndefined()))"/>
<detailskey="CollectionLikeContent$message"value="'If the \'including\' qualifier is used, directly contained \'Content\'s shall not contain a \'Value\'.' + self.toString()"/>
<detailskey="ContentOrValue"value="Tuple { message : String = 'Either nested \'Content\'s or \'Value\' may be specified within \'Content\', but not both.' + self.toString(), status : Boolean = self.content->isEmpty() or self.value.oclIsUndefined()
}.status"/>
<detailskey="CollectionLikeContent"value="Tuple { message : String = 'If the \'including\' qualifier is used, directly contained \'Content\'s shall not contain a \'Value\'.' + self.toString(), status : Boolean = (not self.comment->isEmpty() and self.comment->last()._body = 'including') implies
(self.content->isEmpty() or self.content->forAll(c | c.value.oclIsUndefined()))
}.status"/>
<detailskey="CollectionLikeContentLiteralValue"value="(not self.comment->isEmpty() and self.comment->last()._body = 'including') implies
(self.content->isEmpty() or self.content->forAll(c | c.value.oclIsUndefined()))"/>
<detailskey="CollectionLikeContentLiteralValue$message"value="'If the \'including\' qualifier is used, directly contained \'Content\'s shall not contain a \'Value\'.' + self.toString()"/>
<detailskey="CollectionLikeContentLiteralValue"value="Tuple { message : String = 'If the \'including\' qualifier is used, directly contained \'Content\'s shall not contain a \'Value\'.' + self.toString(), status : Boolean = (not self.comment->isEmpty() and self.comment->last()._body = 'including') implies
(self.content->isEmpty() or self.content->forAll(c | c.value.oclIsUndefined()))
}.status"/>
<detailskey="VisibleContent$message"value="'Only \'Content\' defined within previous \'EventOccurrence\'s of the containing \'StructuredTestObjective\' may be referenced.' + self.toString()"/>
<detailskey="VisibleContent"value="Tuple { message : String = 'Only \'Content\' defined within previous \'EventOccurrence\'s of the containing \'StructuredTestObjective\' may be referenced.' + self.toString(), status : Boolean = self.getTestObjective().contains(self.content)
and self.getTestObjective().indexOf(self.content) < self.getTestObjective().indexOf(self)
}.status"/>
<detailskey="VisibleValue$message"value="'Only \'LiteralValue\'s defined within previous \'EventOccurrence\'s of the containing \'StructuredTestObjective\' may be referenced.' + self.toString()"/>
<detailskey="VisibleValue"value="Tuple { message : String = 'Only \'LiteralValue\'s defined within previous \'EventOccurrence\'s of the containing \'StructuredTestObjective\' may be referenced.' + self.toString(), status : Boolean = self.getTestObjective().contains(self.content)
and self.getTestObjective().indexOf(self.content) < self.getTestObjective().indexOf(self)
}.status"/>
<detailskey="RepetitionOrInterval"value="self.repetitions.oclIsUndefined() or self.interval.oclIsUndefined()"/>
<detailskey="RepetitionOrInterval$message"value="'At most one of the optional properties \'repetitions\' or \'interval\' shall be defined.' + self.toString()"/>
<detailskey="RepetitionCount"value="true --This constraint cannot be expressed in OCL"/>
<detailskey="RepetitionCount$message"value="'The expression assigned to the \'repetitions\' property shall evaluate to a positive and countable \'Value\'.' + self.toString()"/>
<detailskey="RepetitionInterval"value="true --This constraint cannot be expressed in OCL"/>
<detailskey="RepetitionInterval$message"value="'The expression assigned to the \'repetitions\' property shall evaluate to a positive and countable \'Value\'' + self.toString()"/>
<detailskey="RepetitionOrInterval"value="Tuple { message : String = 'At most one of the optional properties \'repetitions\' or \'interval\' shall be defined.' + self.toString(), status : Boolean = self.repetitions.oclIsUndefined() or self.interval.oclIsUndefined()
}.status"/>
<detailskey="RepetitionCount"value="Tuple { message : String = 'The expression assigned to the \'repetitions\' property shall evaluate to a positive and countable \'Value\'.' + self.toString(), status : Boolean = true --This constraint cannot be expressed in OCL
}.status"/>
<detailskey="RepetitionInterval"value="Tuple { message : String = 'The expression assigned to the \'repetitions\' property shall evaluate to a positive and countable \'Value\'' + self.toString(), status : Boolean = true --This constraint cannot be expressed in OCL
}.status"/>
<detailskey="EntityTemplateOccurrenceConsistency$message"value="'If \'EntityBinding\'s are provided, the \'Entity\'s or \'ComponentInstance\'s referenced in the \'templateEntity\' properties shall also be referenced by one of the \'EntityReferences\' in the \'EventOccurrenceSpecification\' of the \'EventSpecificationTemplate\' referenced in the \'EventTemplateOccurrence\'.' + self.toString()"/>
<detailskey="EntityTemplateOccurrenceConsistency"value="Tuple { message : String = 'If \'EntityBinding\'s are provided, the \'Entity\'s or \'ComponentInstance\'s referenced in the \'templateEntity\' properties shall also be referenced by one of the \'EntityReferences\' in the \'EventOccurrenceSpecification\' of the \'EventSpecificationTemplate\' referenced in the \'EventTemplateOccurrence\'.' + self.toString(), status : Boolean = self.entityBinding->forAll(b |
(not b.templateEntity.entity.oclIsUndefined()
and (b.templateEntity.entity =
self.eventTemplate.eventSpecification.entityReference.entity))
or (not b.templateEntity.component.oclIsUndefined()
and (b.templateEntity.component =
self.eventTemplate.eventSpecification.entityReference.component)
or self.eventTemplate.eventSpecification.oppositeEntityReference->exists(e |
(not b.templateEntity.entity.oclIsUndefined()
and (e.entity = b.templateEntity.entity))
or (not b.templateEntity.component.oclIsUndefined()
and (e.component = b.templateEntity.component)))))
}.status"/>
<detailskey="VariantBindingValues$message"value="'If the \'value\' property references a \'LiteralValue\' or \'Content\' element, the referenced element shall be contained in the \'StructuredTestObjective\' containing the \'VariantBinding\'.' + self.toString()"/>
<detailskey="VariantBindingValues"value="Tuple { message : String = 'If the \'value\' property references a \'LiteralValue\' or \'Content\' element, the referenced element shall be contained in the \'StructuredTestObjective\' containing the \'VariantBinding\'.' + self.toString(), status : Boolean = (self.value.oclIsTypeOf(LiteralValueReference) implies
self.value.oclAsType(LiteralValueReference).content.getTestObjective() = self.getTestObjective())
and
(self.value.oclIsTypeOf(ContentReference) implies
self.value.oclAsType(ContentReference).content.getTestObjective() = self.getTestObjective())
}.status"/>