Bug 540421 - [PapyrusReq] The tool shall display Upward and downward
traceability wihout links

Change-Id: I869683101176e5951567b1e962b0555798c25f32
diff --git a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/META-INF/MANIFEST.MF b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/META-INF/MANIFEST.MF
index 652af3d..3b69d3e 100644
--- a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/META-INF/MANIFEST.MF
+++ b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
  i;singleton:=true
 Export-Package: org.eclipse.papyrus.requirements.sysml14.common.ui
 Bundle-Name: %Bundle-Name
-Bundle-Version: 0.8.0.qualifier
+Bundle-Version: 0.9.0.qualifier
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.gmf.runtime.diagram.ui;bundle-version="1.6.0",
  org.eclipse.papyrus.emf.facet.efacet.core,
diff --git a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/plugin.xml b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/plugin.xml
index 31d68e9..6cc35d0 100644
--- a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/plugin.xml
+++ b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/plugin.xml
@@ -67,6 +67,12 @@
       <modeldeclaration
             file="resources/DisplaySatisfiedReq.custom">
       </modeldeclaration>
+      <modeldeclaration
+            file="resources/DownwardTracabilityClasses.custom">
+      </modeldeclaration>
+      <modeldeclaration
+            file="resources/UpwardTracabilityClasses.custom">
+      </modeldeclaration>
    </extension>
 
 </plugin>
diff --git a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/pom.xml b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/pom.xml
index 7c53a4b..7374cbb 100644
--- a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/pom.xml
+++ b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/pom.xml
@@ -30,5 +30,5 @@
 	<!-- POM Description -->
 	<artifactId>org.eclipse.papyrus.requirements.sysml14.common.ui</artifactId>
 	<packaging>eclipse-plugin</packaging>
-	<version>0.8.0-SNAPSHOT</version>
+	<version>0.9.0-SNAPSHOT</version>
 </project>
\ No newline at end of file
diff --git a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/resources/DownwardTracability.custom b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/resources/DownwardTracability.custom
index 7ad46b9..53ddbdd 100644
--- a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/resources/DownwardTracability.custom
+++ b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/resources/DownwardTracability.custom
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<custom:Customization xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:custom="http://www.eclipse.org/papyrus/emf/facet/custom/0.2.incubation/custom" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:efacet="http://www.eclipse.org/papyrus/emf/facet/efacet/0.2.incubation/efacet" xmlns:javaQuery="http://www.eclipse.org/papyrus/emf/facet/query/java/0.2.incubation/javaquery" name="DownwardTracability" documentation="Used to find element that trace from the current object" mustBeLoadedByDefault="true" rank="2">
+<custom:Customization xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:custom="http://www.eclipse.org/papyrus/emf/facet/custom/0.2.incubation/custom" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:efacet="http://www.eclipse.org/papyrus/emf/facet/efacet/0.2.incubation/efacet" xmlns:javaQuery="http://www.eclipse.org/papyrus/emf/facet/query/java/0.2.incubation/javaquery" name="DownwardTraceability" documentation="Used to find element that trace from the current object" rank="2">
   <eClassifiers xsi:type="custom:EClassCustomization" name="NamedElement">
     <extendedMetaclass href="http://www.eclipse.org/uml2/5.0.0/UML#//NamedElement"/>
-    <facetElements xsi:type="efacet:FacetReference" name="downwardTracability" upperBound="-1" volatile="true" transient="true" derived="true">
+    <facetElements xsi:type="efacet:FacetReference" name="DownwardTraceability" upperBound="-1" volatile="true" transient="true" derived="true">
       <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
       <query xsi:type="javaQuery:JavaQuery" implementationClassName="org.eclipse.papyrus.requirements.sysml14.common.ui.queries.DownwardTracabilityQuery"/>
     </facetElements>
diff --git a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/resources/DownwardTracabilityClasses.custom b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/resources/DownwardTracabilityClasses.custom
new file mode 100644
index 0000000..05def85
--- /dev/null
+++ b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/resources/DownwardTracabilityClasses.custom
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<custom:Customization xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:custom="http://www.eclipse.org/papyrus/emf/facet/custom/0.2.incubation/custom" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:efacet="http://www.eclipse.org/papyrus/emf/facet/efacet/0.2.incubation/efacet" xmlns:javaQuery="http://www.eclipse.org/papyrus/emf/facet/query/java/0.2.incubation/javaquery" name="DownwardTraceabilityClasses" documentation="Used to find element that trace from the current object" rank="2">
+  <eClassifiers xsi:type="custom:EClassCustomization" name="NamedElement">
+    <extendedMetaclass href="http://www.eclipse.org/uml2/5.0.0/UML#//NamedElement"/>
+    <facetElements xsi:type="efacet:FacetReference" name="DownwardTraceabilityClasses" upperBound="-1" volatile="true" transient="true" derived="true">
+      <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
+      <query xsi:type="javaQuery:JavaQuery" implementationClassName="org.eclipse.papyrus.requirements.sysml14.common.ui.queries.DownwardClassesQuery"/>
+    </facetElements>
+    <extendedFacets href="platform:/plugin/org.eclipse.papyrus.emf.facet.custom.ui/resources/customproperties.efacet#//CustomizedEObject"/>
+  </eClassifiers>
+</custom:Customization>
diff --git a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/resources/UpwardTracability.custom b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/resources/UpwardTracability.custom
index de11c04..7f9699d 100644
--- a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/resources/UpwardTracability.custom
+++ b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/resources/UpwardTracability.custom
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<custom:Customization xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:custom="http://www.eclipse.org/papyrus/emf/facet/custom/0.2.incubation/custom" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:efacet="http://www.eclipse.org/papyrus/emf/facet/efacet/0.2.incubation/efacet" xmlns:javaQuery="http://www.eclipse.org/papyrus/emf/facet/query/java/0.2.incubation/javaquery" name="UpwardTracability" documentation="Used to find element that trace from the current object" mustBeLoadedByDefault="true" rank="2">
+<custom:Customization xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:custom="http://www.eclipse.org/papyrus/emf/facet/custom/0.2.incubation/custom" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:efacet="http://www.eclipse.org/papyrus/emf/facet/efacet/0.2.incubation/efacet" xmlns:javaQuery="http://www.eclipse.org/papyrus/emf/facet/query/java/0.2.incubation/javaquery" name="UpwardTraceability" documentation="Used to find element that trace from the current object" rank="2">
   <eClassifiers xsi:type="custom:EClassCustomization" name="NamedElement">
     <extendedMetaclass href="http://www.eclipse.org/uml2/5.0.0/UML#//NamedElement"/>
-    <facetElements xsi:type="efacet:FacetReference" name="upwardTracability" upperBound="-1" volatile="true" transient="true" derived="true">
+    <facetElements xsi:type="efacet:FacetReference" name="UpwardTraceability" upperBound="-1" volatile="true" transient="true" derived="true">
       <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
       <query xsi:type="javaQuery:JavaQuery" implementationClassName="org.eclipse.papyrus.requirements.sysml14.common.ui.queries.UpwardTracabilityQuery"/>
     </facetElements>
diff --git a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/resources/UpwardTracabilityClasses.custom b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/resources/UpwardTracabilityClasses.custom
new file mode 100644
index 0000000..72cfb7b
--- /dev/null
+++ b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/resources/UpwardTracabilityClasses.custom
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<custom:Customization xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:custom="http://www.eclipse.org/papyrus/emf/facet/custom/0.2.incubation/custom" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:efacet="http://www.eclipse.org/papyrus/emf/facet/efacet/0.2.incubation/efacet" xmlns:javaQuery="http://www.eclipse.org/papyrus/emf/facet/query/java/0.2.incubation/javaquery" name="UpwardTraceabilityClasses" documentation="Used to find element that trace from the current object" rank="2">
+  <eClassifiers xsi:type="custom:EClassCustomization" name="NamedElement">
+    <extendedMetaclass href="http://www.eclipse.org/uml2/5.0.0/UML#//NamedElement"/>
+    <facetElements xsi:type="efacet:FacetReference" name="UpwardTraceabilityClasses" upperBound="-1" volatile="true" transient="true" derived="true">
+      <eType xsi:type="ecore:EClass" href="http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
+      <query xsi:type="javaQuery:JavaQuery" implementationClassName="org.eclipse.papyrus.requirements.sysml14.common.ui.queries.UpwardClassesQuery"/>
+    </facetElements>
+    <extendedFacets href="platform:/plugin/org.eclipse.papyrus.emf.facet.custom.ui/resources/customproperties.efacet#//CustomizedEObject"/>
+  </eClassifiers>
+</custom:Customization>
diff --git a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/DownwardClassesQuery.java b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/DownwardClassesQuery.java
new file mode 100644
index 0000000..df4b442
--- /dev/null
+++ b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/DownwardClassesQuery.java
@@ -0,0 +1,85 @@
+/*****************************************************************************
+ * Copyright (c) 2016,2018 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * 
+ * 		Patrick Tessier (Patrick.tessier@cea.fr) CEA LIST
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.requirements.sysml14.common.ui.queries;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.papyrus.emf.facet.efacet.core.IFacetManager;
+import org.eclipse.papyrus.emf.facet.efacet.core.exception.DerivedTypedElementException;
+import org.eclipse.papyrus.emf.facet.query.java.core.IJavaQuery2;
+import org.eclipse.papyrus.emf.facet.query.java.core.IParameterValueList2;
+import org.eclipse.uml2.uml.Abstraction;
+import org.eclipse.uml2.uml.Dependency;
+import org.eclipse.uml2.uml.DirectedRelationship;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.NamedElement;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.resource.UMLResource;
+
+/**
+ * Req03: Papyrus Req  shall provides a means to display downward traceability in the model explorer
+ *
+ */
+public class DownwardClassesQuery implements IJavaQuery2<NamedElement,  Collection<EObject>> {
+	public Collection<EObject>  evaluate(final NamedElement context, 
+			final IParameterValueList2 parameterValues,
+			final IFacetManager facetManager)
+					throws DerivedTypedElementException {
+
+
+		ArrayList<EObject> result= new ArrayList<EObject>();
+		if( context  instanceof DirectedRelationship) {
+			result.addAll(((DirectedRelationship)context).getSources());
+		}
+		else {
+			ResourceSet resourceSet=context.eResource().getResourceSet();
+			for(int i=0; i< resourceSet.getResources().size();i++) {
+				Resource resource = (Resource) resourceSet.getResources().get(i);
+				if( resource instanceof UMLResource) {
+
+					for (Iterator<EObject> iteratorObject = resource.getAllContents(); iteratorObject.hasNext();) {
+						EObject ownedElement = (EObject) iteratorObject.next();
+						if( ownedElement instanceof  Abstraction) {
+							if(((DirectedRelationship)ownedElement).getTargets().contains(context)) {
+								DirectedRelationship directedRelationship=(DirectedRelationship) ownedElement;
+								result.addAll(directedRelationship.getSources());
+							}
+						}
+					}
+				}
+			}
+		}
+		return result;
+
+	}
+
+	/**
+	 * @param elem
+	 *            UML model element
+	 * @return the highest level Package of the element
+	 */
+	public static Package getToPackage(Element elememt) {
+		Package tmp = elememt.getNearestPackage();
+		while (tmp.getOwner() != null && (tmp.getOwner() instanceof Package)) {
+			tmp = (Package) tmp.getOwner();
+		}
+		return tmp;
+	}
+}
diff --git a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/DownwardTracabilityQuery.java b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/DownwardTracabilityQuery.java
index 3709011..75bebb1 100644
--- a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/DownwardTracabilityQuery.java
+++ b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/DownwardTracabilityQuery.java
@@ -25,6 +25,8 @@
 import org.eclipse.papyrus.emf.facet.efacet.core.exception.DerivedTypedElementException;
 import org.eclipse.papyrus.emf.facet.query.java.core.IJavaQuery2;
 import org.eclipse.papyrus.emf.facet.query.java.core.IParameterValueList2;
+import org.eclipse.uml2.uml.Abstraction;
+import org.eclipse.uml2.uml.Dependency;
 import org.eclipse.uml2.uml.DirectedRelationship;
 import org.eclipse.uml2.uml.Element;
 import org.eclipse.uml2.uml.NamedElement;
@@ -47,18 +49,20 @@
 			result.addAll(((DirectedRelationship)context).getSources());
 		}
 		else {
-
 			ResourceSet resourceSet=context.eResource().getResourceSet();
-			for (Iterator<Resource> iteratorResource = resourceSet.getResources().iterator(); iteratorResource.hasNext();) {
-				Resource resource = (Resource) iteratorResource.next();
+			
+			for(int i=0; i< resourceSet.getResources().size();i++) {
+				Resource resource = (Resource) resourceSet.getResources().get(i);
 				if( resource instanceof UMLResource) {
-
 					for (Iterator<EObject> iteratorObject = resource.getAllContents(); iteratorObject.hasNext();) {
 						EObject ownedElement = (EObject) iteratorObject.next();
 						if(ownedElement instanceof DirectedRelationship) {
-							if(((DirectedRelationship)ownedElement).getTargets().contains(context)) {
-								result.add(ownedElement);
+							if( ownedElement instanceof  Abstraction) {
+								if(((DirectedRelationship)ownedElement).getTargets().contains(context)) {
+									result.add(ownedElement);
+								}
 							}
+
 						}
 					}
 				}
diff --git a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/GetComplexName.java b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/GetComplexName.java
index 0e81660..70d720c 100644
--- a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/GetComplexName.java
+++ b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/GetComplexName.java
@@ -63,7 +63,7 @@
 		}
 
 		if ((source instanceof org.eclipse.uml2.uml.Class) && (appStereotype != null) && (isRequirementStereotype(appStereotype))) {
-			return "" + source.getValue(appStereotype, I_SysMLStereotype.REQUIREMENT_ID_ATT) + ": " + source.getName();
+			return "" + source.getValue(appStereotype, I_SysMLStereotype.REQUIREMENT_ID_ATT) + ": " +  source.getValue(appStereotype, I_SysMLStereotype.REQUIREMENT_TEXT_ATT);
 		}
 		// Delegate to UML2 Edit providers to get localized and inferred names where applicable
 		return labelProvider.getText(source);
diff --git a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/UpwardClassesQuery.java b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/UpwardClassesQuery.java
new file mode 100644
index 0000000..6ce6600
--- /dev/null
+++ b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/UpwardClassesQuery.java
@@ -0,0 +1,84 @@
+/*****************************************************************************
+ * Copyright (c) 2016,2018 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * 
+ * 		Patrick Tessier (Patrick.tessier@cea.fr) CEA LIST
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.requirements.sysml14.common.ui.queries;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.papyrus.emf.facet.efacet.core.IFacetManager;
+import org.eclipse.papyrus.emf.facet.efacet.core.exception.DerivedTypedElementException;
+import org.eclipse.papyrus.emf.facet.query.java.core.IJavaQuery2;
+import org.eclipse.papyrus.emf.facet.query.java.core.IParameterValueList2;
+import org.eclipse.uml2.uml.Abstraction;
+import org.eclipse.uml2.uml.Dependency;
+import org.eclipse.uml2.uml.DirectedRelationship;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.NamedElement;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.resource.UMLResource;
+
+/**
+ * Req02:Papyrus Req  shall provides a means to display upward traceability in the model explorer
+ *
+ */
+public class UpwardClassesQuery implements IJavaQuery2<NamedElement,  Collection<EObject>> {
+
+
+
+	public Collection<EObject>  evaluate(final NamedElement context, 
+			final IParameterValueList2 parameterValues,
+			final IFacetManager facetManager)
+					throws DerivedTypedElementException {
+
+
+		ArrayList<EObject> result= new ArrayList<EObject>();
+		ResourceSet resourceSet=context.eResource().getResourceSet();
+		for(int i=0; i< resourceSet.getResources().size();i++) {
+			Resource resource = (Resource) resourceSet.getResources().get(i);
+			if( resource instanceof UMLResource) {
+
+				for (Iterator<EObject> iteratorObject = resource.getAllContents(); iteratorObject.hasNext();) {
+					EObject ownedElement = (EObject) iteratorObject.next();
+					if(ownedElement instanceof DirectedRelationship) {
+						if( ownedElement instanceof  Abstraction) {
+							if(((DirectedRelationship)ownedElement).getSources().contains(context)) {
+								result.addAll(((DirectedRelationship)ownedElement).getTargets());
+							}
+						}
+					}
+				}
+			}
+		}
+		return result;
+
+	}
+
+	/**
+	 * @param elem
+	 *            UML model element
+	 * @return the highest level Package of the element
+	 */
+	public static Package getToPackage(Element elememt) {
+		Package tmp = elememt.getNearestPackage();
+		while (tmp.getOwner() != null && (tmp.getOwner() instanceof Package)) {
+			tmp = (Package) tmp.getOwner();
+		}
+		return tmp;
+	}
+}
diff --git a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/UpwardTracabilityQuery.java b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/UpwardTracabilityQuery.java
index ab7f2ae..a4e19c9 100644
--- a/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/UpwardTracabilityQuery.java
+++ b/plugins/sysml14/gui/org.eclipse.papyrus.requirements.sysml14.common.ui/src/org/eclipse/papyrus/requirements/sysml14/common/ui/queries/UpwardTracabilityQuery.java
@@ -25,6 +25,8 @@
 import org.eclipse.papyrus.emf.facet.efacet.core.exception.DerivedTypedElementException;
 import org.eclipse.papyrus.emf.facet.query.java.core.IJavaQuery2;
 import org.eclipse.papyrus.emf.facet.query.java.core.IParameterValueList2;
+import org.eclipse.uml2.uml.Abstraction;
+import org.eclipse.uml2.uml.Dependency;
 import org.eclipse.uml2.uml.DirectedRelationship;
 import org.eclipse.uml2.uml.Element;
 import org.eclipse.uml2.uml.NamedElement;
@@ -36,9 +38,9 @@
  *
  */
 public class UpwardTracabilityQuery implements IJavaQuery2<NamedElement,  Collection<EObject>> {
-	
-	
-	
+
+
+
 	public Collection<EObject>  evaluate(final NamedElement context, 
 			final IParameterValueList2 parameterValues,
 			final IFacetManager facetManager)
@@ -52,15 +54,17 @@
 		else {
 
 			ResourceSet resourceSet=context.eResource().getResourceSet();
-			for (Iterator<Resource> iteratorResource = resourceSet.getResources().iterator(); iteratorResource.hasNext();) {
-				Resource resource = (Resource) iteratorResource.next();
+			for(int i=0; i< resourceSet.getResources().size();i++) {
+				Resource resource = (Resource) resourceSet.getResources().get(i);
 				if( resource instanceof UMLResource) {
 
 					for (Iterator<EObject> iteratorObject = resource.getAllContents(); iteratorObject.hasNext();) {
 						EObject ownedElement = (EObject) iteratorObject.next();
 						if(ownedElement instanceof DirectedRelationship) {
-							if(((DirectedRelationship)ownedElement).getSources().contains(context)) {
-								result.add(ownedElement);
+							if( ownedElement instanceof  Abstraction) {
+								if(((DirectedRelationship)ownedElement).getSources().contains(context)) {
+									result.add(ownedElement);
+								}
 							}
 						}
 					}