Bug 484300 - View Proxy doesn't work for super classes

Initially searching for view models for all fitting eclasses.
Filtering the fitting equals view models, depending on the eclass
hierarchy.

Change-Id: Ie862d3aed75b180212746e5cd35153934d81d0c8
Signed-off-by: Eugen Neufeld <eneufeld@eclipsesource.com>
diff --git a/bundles/org.eclipse.emf.ecp.view.model.provider.xmi/src/org/eclipse/emf/ecp/view/model/provider/xmi/ViewModelFileExtensionsManager.java b/bundles/org.eclipse.emf.ecp.view.model.provider.xmi/src/org/eclipse/emf/ecp/view/model/provider/xmi/ViewModelFileExtensionsManager.java
index c0d785d..7344726 100644
--- a/bundles/org.eclipse.emf.ecp.view.model.provider.xmi/src/org/eclipse/emf/ecp/view/model/provider/xmi/ViewModelFileExtensionsManager.java
+++ b/bundles/org.eclipse.emf.ecp.view.model.provider.xmi/src/org/eclipse/emf/ecp/view/model/provider/xmi/ViewModelFileExtensionsManager.java
@@ -363,7 +363,16 @@
 
 	private Map<VView, ExtensionDescription> findBestFittingViews(EObject eObject,
 		final VViewModelProperties properties) {
-		final Map<VView, Set<ExtensionDescription>> viewMap = getViewMap(eObject);
+		final Map<VView, Set<ExtensionDescription>> viewMap = new LinkedHashMap<VView, Set<ExtensionDescription>>();
+		final Set<EClass> allEClass = new LinkedHashSet<EClass>();
+		allEClass.add(eObject.eClass());
+		allEClass.addAll(eObject.eClass().getEAllSuperTypes());
+		for (final EClass eClass : allEClass) {
+			final Map<VView, Set<ExtensionDescription>> classMap = map.get(eClass);
+			if (classMap != null) {
+				viewMap.putAll(classMap);
+			}
+		}
 
 		final Map<VView, ExtensionDescription> bestFitting = new LinkedHashMap<VView, ViewModelFileExtensionsManager.ExtensionDescription>();
 		int maxNumberFittingKeyValues = -1;
@@ -402,23 +411,26 @@
 				}
 			}
 		}
-		return bestFitting;
+		return getViewMap(bestFitting, eObject.eClass());
 	}
 
-	private Map<VView, Set<ExtensionDescription>> getViewMap(EObject eObject) {
-		final Map<VView, Set<ExtensionDescription>> viewMap = new LinkedHashMap<VView, Set<ExtensionDescription>>();
+	private Map<VView, ExtensionDescription> getViewMap(Map<VView, ExtensionDescription> fullMap, EClass viewModelFor) {
+		final Map<VView, ExtensionDescription> viewMap = new LinkedHashMap<VView, ExtensionDescription>();
 
 		final Set<EClass> checkedEClasses = new LinkedHashSet<EClass>();
 		Set<EClass> eClassesToGetViewModelsFor = new LinkedHashSet<EClass>();
-		eClassesToGetViewModelsFor.add(eObject.eClass());
+		eClassesToGetViewModelsFor.add(viewModelFor);
 
 		while (!eClassesToGetViewModelsFor.isEmpty()) {
 			/* loop over all current eClasses and add view models for the current eClass to the map */
 			for (final EClass eClass : eClassesToGetViewModelsFor) {
-				final Map<VView, Set<ExtensionDescription>> classMap = map.get(eClass);
-				if (classMap != null) {
-					viewMap.putAll(classMap);
+				final Map<VView, ExtensionDescription> classMap = new LinkedHashMap<VView, ExtensionDescription>();
+				for (final VView vView : fullMap.keySet()) {
+					if (eClass == vView.getRootEClass()) {
+						classMap.put(vView, fullMap.get(vView));
+					}
 				}
+				viewMap.putAll(classMap);
 				checkedEClasses.add(eClass);
 			}