| <?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> |