Bug 515283 - [SysML 1.4] Validation 8.3.2.7 [6] wrongly implemented
- correct the validation rules by checking that source/target is owned
or inherited by the type
Change-Id: Ib560a9ecb7be1db7ac830419761edb2dcb30d1cd
Signed-off-by: Benoit Maggi <benoit.maggi@cea.fr>
diff --git a/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/rules/blocks/DirectedRelationshipPropertyPathSourceLastModelConstraint.java b/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/rules/blocks/DirectedRelationshipPropertyPathSourceLastModelConstraint.java
index c9a7b8b..82956de 100644
--- a/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/rules/blocks/DirectedRelationshipPropertyPathSourceLastModelConstraint.java
+++ b/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/rules/blocks/DirectedRelationshipPropertyPathSourceLastModelConstraint.java
@@ -17,7 +17,9 @@
import org.eclipse.emf.validation.AbstractModelConstraint;
import org.eclipse.emf.validation.IValidationContext;
import org.eclipse.papyrus.sysml14.blocks.DirectedRelationshipPropertyPath;
+import org.eclipse.uml2.uml.Classifier;
import org.eclipse.uml2.uml.DirectedRelationship;
+import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.Property;
import org.eclipse.uml2.uml.Type;
@@ -47,8 +49,16 @@
DirectedRelationship directedRelationship = directedRelationshipPropertyPath
.getBase_DirectedRelationship();
if (directedRelationship != null) {
- if (!type.getSourceDirectedRelationships().contains(directedRelationship)) {
- return context.createFailureStatus(context.getTarget());
+ EList<Element> sources = directedRelationship.getSources();
+ if (sources != null && !sources.isEmpty() && !type.getOwnedElements().contains(sources.get(0))){
+ if (type instanceof Classifier){
+ Classifier classifier = (Classifier) type;
+ if (!classifier.getInheritedMembers().contains(sources.get(0))){
+ return context.createFailureStatus(context.getTarget());
+ }
+ } else {
+ return context.createFailureStatus(context.getTarget());
+ }
}
}
}
diff --git a/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/rules/blocks/DirectedRelationshipPropertyPathTargetLastModelConstraint.java b/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/rules/blocks/DirectedRelationshipPropertyPathTargetLastModelConstraint.java
index fecf161..343fe5f 100644
--- a/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/rules/blocks/DirectedRelationshipPropertyPathTargetLastModelConstraint.java
+++ b/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/rules/blocks/DirectedRelationshipPropertyPathTargetLastModelConstraint.java
@@ -8,7 +8,7 @@
*
* Contributors:
* Benoit Maggi (CEA LIST) benoit.maggi@cea.fr - Initial API and implementation
- *
+ * Benoit Maggi (CEA LIST) benoit.maggi@cea.fr - Bug 515283
*****************************************************************************/
package org.eclipse.papyrus.sysml14.validation.rules.blocks;
@@ -17,7 +17,9 @@
import org.eclipse.emf.validation.AbstractModelConstraint;
import org.eclipse.emf.validation.IValidationContext;
import org.eclipse.papyrus.sysml14.blocks.DirectedRelationshipPropertyPath;
+import org.eclipse.uml2.uml.Classifier;
import org.eclipse.uml2.uml.DirectedRelationship;
+import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.Property;
import org.eclipse.uml2.uml.Type;
@@ -47,8 +49,16 @@
DirectedRelationship directedRelationship = directedRelationshipPropertyPath
.getBase_DirectedRelationship();
if (directedRelationship != null) {
- if (!type.getTargetDirectedRelationships().contains(directedRelationship)) {
- return context.createFailureStatus(context.getTarget());
+ EList<Element> targets = directedRelationship.getTargets();
+ if (targets != null && !targets.isEmpty() && !type.getOwnedElements().contains(targets.get(0))){
+ if (type instanceof Classifier){
+ Classifier classifier = (Classifier) type;
+ if (!classifier.getInheritedMembers().contains(targets.get(0))){
+ return context.createFailureStatus(context.getTarget());
+ }
+ } else {
+ return context.createFailureStatus(context.getTarget());
+ }
}
}
}