blob: 175bd56c21b8baaed3797d9a7bd618f45ff4c8a6 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="org.eclipse.emf.validation.constraintProviders">
<category
id="org.eclipse.papyrus.moka.fuml.validation.normative"
mandatory="false"
name="Moka fUML">
</category>
<category
id="org.eclipse.papyrus.moka.fuml.validation.nonnormative"
mandatory="false"
name="Moka Non-normative">
</category>
<constraintProvider
cache="true"
mode="Batch">
<package
namespaceUri="http://www.eclipse.org/uml2/5.0.0/UML">
</package>
<constraints
categories="org.eclipse.papyrus.moka.fuml.validation.normative">
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlAssociationOwnsMemberEndsConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_association_owns_memberEnds"
lang="java"
mode="Batch"
name="fuml_association_owns_memberEnds"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
An association must own all its memberEnds.
self.memberEnd->symmetricDifference(self.ownedEnd)->isEmpty()
</description>
<target
class="Association">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlAssociationNoDerivationConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_association_no_derivation"
lang="java"
mode="Batch"
name="fuml_association_no_derivation"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
isDerived must be false
not self.isDerived
</description>
<target
class="Association">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlBehavioralFeatureSequentialityConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_behavioral_feature_sequentiality"
lang="java"
mode="Batch"
name="fuml_behavioral_feature_sequentiality"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
concurrency must be sequential
self.concurrency = CallConcurrencyKind::sequential
</description>
<target
class="BehavioralFeature">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlClassAbstractClassConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_class_abstract_class"
lang="java"
mode="Batch"
name="fuml_class_abstract_class"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
Only an abstract class may have abstract behavioral features.
self.member->select(oclIsKindOf(BehavioralFeature))->exists(isAbstract) implies self.isAbstract
</description>
<target
class="Class">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlClassActiveClassSpecializationConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_class_active_class_specialization"
lang="java"
mode="Batch"
name="fuml_class_active_class_specialization"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
Only an active class may specialize an active class.
self.parents()->exist(isActive) implies self.isActive
</description>
<target
class="Class">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlClassAbstractBehavioralFeatureConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_class_abstract_behavioral_feature"
lang="java"
mode="Batch"
name="fuml_class_abstract_behavioral_feature"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
Only an abstract class may have abstract behavioral features.
self.member->select(oclIsKindOf(BehavioralFeature))->exists(isAbstract) implies self.isAbstract
</description>
<target
class="Class">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlFeatureNonStaticConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_feature_non_static"
lang="java"
mode="Batch"
name="fuml_feature_non_static"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
isStatic must be false
not self.isStatic
</description>
<target
class="Feature">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlInstanceSpecificationPossibleClassifiersConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_instance_specification_possible_classifiers"
lang="java"
mode="Batch"
name="fuml_instance_specification_possible_classifiers"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
Either all the classifiers are classes, or there is one classifier that is a data type
self.classifier->forAll(oclIsKindOf(Class)) or
self.classifier->size() = 1 and self.classifier->forAll(oclIsKindOf(DataType))
</description>
<target
class="InstanceSpecification">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlMultiplicityElementRequiredLowerAndUpperConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_multiplicity_element_required_lower_and_upper"
lang="java"
mode="Batch"
name="fuml_multiplicity_element_required_lower_and_upper"
severity="WARNING"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
upperValue must be a LiteralUnlimitedNatural and lowerValue must be a LiteralInteger. Both are required.
self.upperValue->notEmpty() and
self.upperValue->asSequence()->first().oclIsKindOf(LiteralUnlimitedNatural) and
self.lowerValue->notEmpty() and
self.lowerValue->asSequence()->first().oclIsKindOf(LiteralInteger)
</description>
<target
class="MultiplicityElement">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlOperationHasAtMostOneMethodConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_operation_has_at_most_one_method"
lang="java"
mode="Batch"
name="fuml_operation_has_at_most_one_method"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
If an operation is abstract it must have no method. Otherwise it must have exactly one method.
(self.isAbstract and self.method->isEmpty()) xor (not self.isAbstract and self.method->size() = 1)
</description>
<target
class="Operation">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlParameterNotExceptionNotStreamingConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_parameter_not_exception_not_streaming"
lang="java"
mode="Batch"
name="fuml_parameter_not_exception_not_streaming"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
isException and isStream must be false
not self.isException and not self.isStream
</description>
<target
class="Parameter">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlPropertyNoDerivationConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_property_no_derivation"
lang="java"
mode="Batch"
name="fuml_property_no_derivation"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
isDerived and isDerivedUnion must be false
not self.isDerived and not self.isDerivedUnion
</description>
<target
class="Property">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlReentrantBehaviorConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_behavior_reentrant"
lang="java"
mode="Batch"
name="fuml_behavior_reentrant"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
In this specification, a fUML instance model must have Behavior.isReentrant
self.isReentrant
</description>
<target
class="Behavior">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlOpaqueActionEmptyBodyAndLanguageConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_opaque_behavior_empty_body_and_language"
lang="java"
mode="Batch"
name="fuml_opaque_behavior_empty_body_and_language"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
body and language must be empty
self.language->isEmpty() and self.body->isEmpty()
</description>
<target
class="OpaqueBehavior">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlOpaqueBehaviorInactiveConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_opaque_behavior_inactive"
lang="java"
mode="Batch"
name="fuml_opaque_behavior_inactive"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
An opaque behavior cannot be active.
not self.isActive
</description>
<target
class="OpaqueBehavior">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlReceptionNoMethodConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_reception_no_method"
lang="java"
mode="Batch"
name="fuml_reception_no_method"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
A reception must not have an associated method.
self.method->isEmpty()
</description>
<target
class="Reception">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlReceptionNotAbstractConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_reception_not_abstract"
lang="java"
mode="Batch"
name="fuml_reception_not_abstract"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
A reception may not be abstract.
not self.isAbstract
</description>
<target
class="Reception">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlActivityNoClassifierBehaviorConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_activity_no_classifier_behavior"
lang="java"
mode="Batch"
name="fuml_activity_no_classifier_behavior"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
An activity may be active, but cannot have a classifier behavior.
self.classifierBehavior->isEmpty()
</description>
<target
class="Activity">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlActivityNotSingleExecutionConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_activity_not_single_execution"
lang="java"
mode="Batch"
name="fuml_activity_not_single_execution"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
isSingleExecution must be false.
not self.isExecution
</description>
<target
class="Activity">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlActivityEdgeAllowedGuardsConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_activity_edge_allowed_guards"
lang="java"
mode="Batch"
name="fuml_activity_edge_allowed_guards"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
A guard is only allowed if the source of the edge is a DecisionNode.
self.guard->notEmpty() implies self.source.oclIsKindOf(DecisionNode)
</description>
<target
class="ActivityEdge">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlJoinNodeNotCombineDuplicateConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_join_node_not_combine_duplicate"
lang="java"
mode="Batch"
name="fuml_join_node_not_combine_duplicate"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
isCombineDuplicate must be false
not self.isCombineDuplicate
</description>
<target
class="JoinNode">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlObjectFlowNotMultiConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_object_flow_not_multi"
lang="java"
mode="Batch"
name="fuml_object_flow_not_multi"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
isMulticast and isMultireceive must be false
not self.isMulticast and not self.isMultireceive
</description>
<target
class="ObjectFlow">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlObjectNodeFifoOrderingConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_object_node_fifo_ordering"
lang="java"
mode="Batch"
name="fuml_object_node_fifo_ordering"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
ordering must be FIFO
self.ordering = ObjectNodeOrderingKind::FIFO
</description>
<target
class="ObjectNode">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlObjectNodeNotControlTypeConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_object_node_not_control_type"
lang="java"
mode="Batch"
name="fuml_object_node_not_control_type"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
isControlType must be false
not self.isControlType
</description>
<target
class="ObjectNode">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlLoopNodeNoSetupPartsConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_loop_node_no_setup_part"
lang="java"
mode="Batch"
name="fuml_loop_node_no_setup_part"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
no setupParts in fUML
self.setupPart->isEmpty()
</description>
<target
class="LoopNode">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlExpansionRegionNoCrossingEdgesConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_expansion_region_no_crossing_edges"
lang="java"
mode="Batch"
name="fuml_expansion_region_no_crossing_edges"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
Edges may not cross into or out of an expansion region.
self.edge->forAll(self.node->includes(source) and self.node->includes(target))
</description>
<target
class="ExpansionRegion">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlExpansionRegionModeCannotBeStreamConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_expansion_region_mode_cannot_be_stream"
lang="java"
mode="Batch"
name="fuml_expansion_region_mode_cannot_be_stream"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
mode cannot be stream
self.mode != ExpansionKind::stream
</description>
<target
class="ExpansionRegion">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlExpansionRegionNoOutputPinsConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fUML_ExpansionRegion_no_output_pins"
lang="java"
mode="Batch"
name="fUML_ExpansionRegion_no_output_pins"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
An expansion region may not have output pins.
self.output->isEmpty()
</description>
<target
class="ExpansionRegion">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlCallBehaviorActionIsSynchronousConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_call_behavior_action_is_synchronous"
lang="java"
mode="Batch"
name="fuml_call_behavior_action_is_synchronous"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
isSynchronous must be true
self.isSynchronous
</description>
<target
class="CallBehaviorAction">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlCallBehaviorActionInactiveBehaviorConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_call_behavior_action_inactive_behavior"
lang="java"
mode="Batch"
name="fuml_call_behavior_action_inactive_behavior"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
The behavior may not be active.
not self.behavior.isActive
</description>
<target
class="CallBehaviorAction">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlCallBehaviorActionProperContextConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_call_behavior_action_proper_context"
lang="java"
mode="Batch"
name="fuml_call_behavior_action_proper_context"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
If the behavior has a context, it must be the same as the context of the enclosing activity or a (direct or indirect)
superclass of it.
self.behavior.context->notEmpty() implies
self.context->union(self.context.allParents())->includes(self.behavior.context)
</description>
<target
class="CallBehaviorAction">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlCallOperationActionIsSynchronousConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_call_operation_action_is_synchronous"
lang="java"
mode="Batch"
name="fuml_call_operation_action_is_synchronous"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
isSynchronous must be true
self.isSynchronous
</description>
<target
class="CallOperationAction">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlSendSignalActionTargetSignalReceptionConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_send_signal_action_target_signal_reception"
lang="java"
mode="Batch"
name="fuml_send_signal_action_target_signal_reception"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
The target input pin must have a type that has a reception for the signal.
self.target.type.oclAsType(Classifier).allFeatures()->select(oclIsKindOf(Reception))->exists(f:Feature|self.
signal.conformsTo(f.oclAsType(Reception).signal))
</description>
<target
class="SendSignalAction">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlCreateObjectActionIsClassConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_create_object_action_is_class"
lang="java"
mode="Batch"
name="fuml_create_object_action_is_class"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
The given classifier must be a class.
self.classifier.oclIsKindOf(Class)
</description>
<target
class="CreateObjectAction">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlAcceptEventActionActiveContextConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_accept_event_action_active_context"
lang="java"
mode="Batch"
name="fuml_accept_event_action_active_context"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
The context of the containing activity of the accept event action must be an active class.
self.context.oclAsType(Class).isActive
</description>
<target
class="AcceptEventAction">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlAcceptEventOnlySignalEventTriggersConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_accept_event_only_signal_event_triggers"
lang="java"
mode="Batch"
name="fuml_accept_event_only_signal_event_triggers"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
All triggers must be for signal events.
self.trigger.event->forAll(oclIsKindOf(SignalEvent))
</description>
<target
class="AcceptEventAction">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlAcceptEventReceiveAllTriggeringSignalsConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_accept_event_receive_all_triggering_signals"
lang="java"
mode="Batch"
name="fuml_accept_event_receive_all_triggering_signals"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
The context class must have receptions for all triggering signals.
let cls:Class = self.context.oclAsType(Class) in
let classes:Bag(Class) = cls.allParents()->select(oclIsKindOf(Class))->collect(oclAsType(Class))->union(cls->asBag()) in
classes.ownedReception.signal->includesAll(self.trigger.event->collect(oclAsType(SignalEvent)).signal)
</description>
<target
class="AcceptEventAction">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlAcceptCallActionCallEventOperationsConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_accept_call_action_call_event_operations"
lang="java"
mode="Batch"
name="fuml_accept_call_action_call_event_operations"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
The operations of the call events on the triggers of an accept call action must be owned or inherited by the context class of
the action.
let cls: Class = self.context.oclAsType(Class) in
let classes:Bag(Class) = cls.allParents()->select(oclIsKindOf(Class))->collect(oclAsType(Class))->union(cls->asBag()) in
classes.ownedOperation→includesAll(self.trigger.event→collect(oclAsType(CallEvent)).operation)
</description>
<target
class="AcceptCallAction">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlAcceptEventNoAcceptEventActionInTestsConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_accept_event_no_accept_event_action_in_tests"
lang="java"
mode="Batch"
name="fuml_accept_event_no_accept_event_action_in_tests"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
An accept event action may not be contained directly or indirectly in the test part of a clause or loop node.
self->closure(inStructuredNode.oclAsType(ActivityNode))->forAll(n |
let s : StructuredActivityNode = n.inStructuredNode in
s->notEmpty() implies
(s.ocllsTypeOf(ConditionalNode) implies s.oclAsType(ConditionalNode).clause.test->
excludes(n.oclAsType(ExecutableNode)) and
s.ocllsTypeOf(LoopNode) implies s.oclAsType(LoopNode).test->excludes(n.oclAsType(ExecutableNode))))
</description>
<target
class="AcceptEventAction">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlReadExtentActionIsClassConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_read_extent_action_is_class"
lang="java"
mode="Batch"
name="fuml_read_extent_action_is_class"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
The classifier must be a class.
self.classifier.oclIsKindOf(Class)
</description>
<target
class="ReadExtentAction">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlReclassifyObjectActionOldNewClassesConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_reclassify_object_action_old_new_classes"
lang="java"
mode="Batch"
name="fuml_reclassify_object_action_old_new_classes"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
All the old and new classifiers must be classes.
self.oldClassifier->forAll(oclIsKindOf(Class)) and self.newClassifier->forAll(oclIsKindOf(Class))
</description>
<target
class="ReclassifyObjectAction">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.FumlStartObjectBehaviorActionIsAsynchronousConstraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.fuml_start_object_behavior_action_is_asynchronous"
lang="java"
mode="Batch"
name="fuml_start_object_behavior_action_is_asynchronous"
severity="ERROR"
statusCode="1">
<message>
[Moka][fuml] {0}
</message>
<description>
isSynchronous must be false.
not self.isSynchronous
</description>
<target
class="StartObjectBehaviorAction">
</target>
</constraint>
</constraints>
<constraints
categories="org.eclipse.papyrus.moka.fuml.validation.nonnormative">
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.ActiveClassHasClassifierBehavior_Constraint"
id="org.eclipse.papyrus.moka.fuml.validation.constraint.active_class_shall_have_a_classifier_behavior"
lang="java"
mode="Batch"
name="active_class_shall_have_a_classifier_behavior"
severity="ERROR"
statusCode="1">
<message>
[Moka] {0}
</message>
<description>
An active class shall have a classifier behavior
</description>
<target
class="Class">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.ArgumentAndResultPinsOfCallActions_Constraint"
id="org.eclipse.papyrus.moka.fuml.validation.argument_and_result_pins_of_call_actions"
lang="java"
mode="Batch"
name="argument_and_result_pins_of_call_actions"
severity="ERROR"
statusCode="1">
<message>
[Moka] {0}
</message>
<description>
Argument / result pins of call actions shall match parameters of invoked Operation/Behavior, or sent Signal
</description>
<target
class="CallAction">
</target>
</constraint>
<constraint
class="org.eclipse.papyrus.moka.fuml.validation.constraints.NoDelegationConnectorOnNonBehaviorPort_Constraint"
id="org.eclipse.papyrus.moka.fuml.validation.no_delegation_connectors_on_behavior_port"
lang="java"
mode="Batch"
name="no_delegation_connectors_on_behavior_port"
severity="WARNING"
statusCode="1">
<message>
[Moka] {0}
</message>
<description>
Non-behavior ports shall have delegation connectors
</description>
<target
class="Port">
</target>
</constraint>
</constraints>
</constraintProvider>
</extension>
<extension
point="org.eclipse.emf.validation.constraintBindings">
<clientContext
id="org.eclipse.papyrus.moka.fuml.validation.context">
<selector
class="org.eclipse.papyrus.moka.fuml.validation.ElementSelector">
</selector>
</clientContext>
<binding
context="org.eclipse.papyrus.moka.fuml.validation.context">
<category
ref="org.eclipse.papyrus.moka.fuml.validation.normative">
</category>
<category
ref="org.eclipse.papyrus.moka.fuml.validation.nonnormative">
</category>
</binding>
</extension>
</plugin>