highlighting for Papyrus added
diff --git a/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/PapyrusStartup.class b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/PapyrusStartup.class
new file mode 100644
index 0000000..76e03c5
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/PapyrusStartup.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/managers/HighlightManager.class b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/managers/HighlightManager.class
new file mode 100644
index 0000000..873e73e
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/managers/HighlightManager.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorationFigure.class b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorationFigure.class
new file mode 100644
index 0000000..64bb262
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorationFigure.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorator$1.class b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorator$1.class
new file mode 100644
index 0000000..5d940f6
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorator$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorator$2.class b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorator$2.class
new file mode 100644
index 0000000..e576842
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorator$2.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorator$Style.class b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorator$Style.class
new file mode 100644
index 0000000..ba6c01d
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorator$Style.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorator.class b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorator.class
new file mode 100644
index 0000000..1950dee
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorator.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecoratorProvider.class b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecoratorProvider.class
new file mode 100644
index 0000000..d9f97ea
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecoratorProvider.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusHighlighting.class b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusHighlighting.class
new file mode 100644
index 0000000..b53a28d
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.papyrus/bin/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusHighlighting.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.papyrus/plugin.xml b/org.eclipse.emf.refactor.metrics.papyrus/plugin.xml
index abc72c5..51be4ef 100644
--- a/org.eclipse.emf.refactor.metrics.papyrus/plugin.xml
+++ b/org.eclipse.emf.refactor.metrics.papyrus/plugin.xml
@@ -1,6 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.4"?>
 <plugin>
+
+	<extension
+         point="org.eclipse.ui.startup">
+      <startup
+            class="org.eclipse.emf.refactor.metrics.papyrus.PapyrusStartup">
+      </startup>
+   </extension>
+
    <extension
          id="org.eclipse.emf.refactor.papyrus.menu"
          point="org.eclipse.ui.menus">
@@ -131,4 +139,21 @@
             commandId="org.eclipse.emf.refactor.metrics.papyrus.generateNewMetricCompositeCommand">
       </handler>
    </extension>
+   
+   <extension
+         point="org.eclipse.gmf.runtime.diagram.ui.decoratorProviders">
+      <decoratorProvider
+            class="org.eclipse.emf.refactor.metrics.papyrus.ui.PapyrusDecoratorProvider">
+         <Priority
+               name="Lowest">
+         </Priority>
+         <object
+               class="org.eclipse.gmf.runtime.notation.View(org.eclipse.gmf.runtime.notation)"
+               id="NODE">
+         </object>
+         <context
+               decoratorTargets="NODE">
+         </context>
+      </decoratorProvider>
+   </extension>
 </plugin>
diff --git a/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/PapyrusStartup.java b/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/PapyrusStartup.java
new file mode 100644
index 0000000..ab2b1f4
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/PapyrusStartup.java
@@ -0,0 +1,15 @@
+package org.eclipse.emf.refactor.metrics.papyrus;
+
+import org.eclipse.emf.refactor.metrics.papyrus.ui.PapyrusHighlighting;
+import org.eclipse.emf.refactor.metrics.runtime.managers.RuntimeManager;
+import org.eclipse.ui.IStartup;
+
+public class PapyrusStartup implements IStartup {
+
+	@Override
+	public void earlyStartup() {
+		RuntimeManager.getInstance(new PapyrusHighlighting());
+		System.out.println("Started");
+	}
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/managers/HighlightManager.java b/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/managers/HighlightManager.java
new file mode 100644
index 0000000..cc43d67
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/managers/HighlightManager.java
@@ -0,0 +1,84 @@
+package org.eclipse.emf.refactor.metrics.papyrus.managers;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.metrics.runtime.core.Result;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.DecorationEditPolicy.DecoratorTarget;
+import org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecorator;
+import org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorTarget;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.View;
+
+
+public class HighlightManager {
+	
+	private static HighlightManager instance = null;	
+	private List<EObject> selected; 
+	private List<IDecorator> decorators = null;
+	private Map<EObject, IDecoratorTarget> decoratorTargets = null;
+	
+	private HighlightManager() {
+		selected = new ArrayList<EObject>();
+		decoratorTargets = new HashMap<EObject, IDecoratorTarget>();
+		decorators = new ArrayList<IDecorator>();
+	}
+	
+	public static HighlightManager getInstance() {
+		if(instance == null) {
+			instance = new HighlightManager();
+		}
+		return instance;
+	}
+	
+	public void highlight(Object selection) {
+		// clear former selected eObjects
+		selected.clear();
+		// set selected eObjects from selection
+		if (selection instanceof Result) {			
+			selected.addAll(((Result) selection).getContext());
+		}
+		// refresh each corresponding decorator
+		for (IDecorator decorator : decorators) {
+			decorator.refresh();
+		}
+	}
+
+	public void registerDecorator(IDecorator decorator, DecoratorTarget decoratorTarget) {
+		View view = (View) decoratorTarget.getAdapter(View.class);
+		if(decoratorTargets.containsKey(view.getElement())){
+			View parent = view;
+			boolean topMost = false;
+			if(!(parent instanceof Diagram)){
+				while(!((parent = (View) parent.eContainer()) instanceof Diagram)){
+					if(parent == decoratorTargets.get(view.getElement()).getAdapter(View.class)){
+						topMost = true;
+					}
+				}
+				if(!topMost){
+					decoratorTargets.put(view.getElement(), decoratorTarget);
+				}
+			}
+		} else {
+			decoratorTargets.put(view.getElement(), decoratorTarget);
+		}
+
+		decorators.add(decorator);
+	}
+
+	public void unregisterDecorator(IDecorator decorator) {
+		decorators.remove(decorator);
+	}
+
+	public IDecoratorTarget getPrefferedDecoratorTarget(EObject element) {
+		return decoratorTargets.get(element);
+	}
+
+	public List<EObject> getSelected() {
+		return selected;
+	}
+		
+}
diff --git a/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorationFigure.java b/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorationFigure.java
new file mode 100644
index 0000000..99aee93
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorationFigure.java
@@ -0,0 +1,25 @@
+package org.eclipse.emf.refactor.metrics.papyrus.ui;
+
+import org.eclipse.draw2d.Figure;
+import org.eclipse.draw2d.Graphics;
+import org.eclipse.draw2d.ToolbarLayout;
+import org.eclipse.swt.graphics.Color;
+
+public class PapyrusDecorationFigure extends Figure {
+	
+	private static final Color NICE_RED = new Color(null, 232, 72, 72);
+
+	public PapyrusDecorationFigure(){
+		setLayoutManager(new ToolbarLayout());
+		setOpaque(false);
+	}	
+	
+	@Override
+	public void paint(Graphics graphics) {
+		graphics.setForegroundColor(NICE_RED);
+		graphics.setLineWidth(4);
+		graphics.drawRectangle(getClientArea());
+		super.paint(graphics);
+	}
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorator.java b/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorator.java
new file mode 100644
index 0000000..0735eb9
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecorator.java
@@ -0,0 +1,155 @@
+package org.eclipse.emf.refactor.metrics.papyrus.ui;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.FigureCanvas;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.LayoutListener;
+import org.eclipse.draw2d.PolylineConnection;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.refactor.metrics.papyrus.managers.HighlightManager;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.GraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBroker;
+import org.eclipse.gmf.runtime.diagram.core.listener.NotificationListener;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.services.decorator.AbstractDecorator;
+import org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorTarget;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.swt.graphics.Color;
+//import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+
+public class PapyrusDecorator extends AbstractDecorator {
+	
+	private HighlightManager manager = HighlightManager.getInstance();
+	
+	private Map<PolylineConnection, Style> decoratedLines = null;
+	
+	private LayoutListener layoutListener = new LayoutListener() {		
+		@Override
+		public void setConstraint(IFigure child, Object constraint) {}
+		
+		@Override
+		public void remove(IFigure child) {}
+		
+		@Override
+		public void postLayout(IFigure container) {
+			refresh();
+		}
+		
+		@Override
+		public boolean layout(IFigure container) { return false; }
+		
+		@Override
+		public void invalidate(IFigure container) {}};
+	
+	private NotificationListener notificationListener = new NotificationListener() {
+		public void notifyChanged(Notification notification) {
+            refresh();
+        }};
+
+
+	public PapyrusDecorator(IDecoratorTarget decoratorTarget) {
+		super(decoratorTarget);
+		decoratedLines = new HashMap<PolylineConnection, Style>();
+	}
+
+	@Override
+	public void activate() {
+		IGraphicalEditPart gep = (IGraphicalEditPart) getDecoratorTarget().getAdapter(IGraphicalEditPart.class);
+		assert gep != null;
+		DiagramEventBroker.getInstance(gep.getEditingDomain()).addNotificationListener(gep.getNotationView(), 
+				NotationPackage.eINSTANCE.getDescriptionStyle_Description(), notificationListener);
+		
+		GraphicalEditPart editPart = (GraphicalEditPart) getDecoratorTarget().getAdapter(GraphicalEditPart.class);
+		editPart.getFigure().addLayoutListener(layoutListener);
+		
+		manager.registerDecorator(this, getDecoratorTarget());
+	}
+	
+	@Override
+	public void deactivate() {
+		removeDecoration();
+
+		IGraphicalEditPart gep = (IGraphicalEditPart) getDecoratorTarget().getAdapter(IGraphicalEditPart.class);
+		assert gep != null;
+		DiagramEventBroker.getInstance(gep.getEditingDomain()).removeNotificationListener(gep.getNotationView(), 
+				NotationPackage.eINSTANCE.getDescriptionStyle_Description(), notificationListener);
+		
+		GraphicalEditPart editPart = (GraphicalEditPart) getDecoratorTarget().getAdapter(GraphicalEditPart.class);
+		editPart.getFigure().removeLayoutListener(layoutListener);
+		
+		manager.unregisterDecorator(this);
+	}
+	
+	@Override
+	protected void removeDecoration() {
+		super.removeDecoration();	
+		for (PolylineConnection connection : decoratedLines.keySet()){
+			connection.setForegroundColor(decoratedLines.get(connection).color);
+			connection.setLineWidth(decoratedLines.get(connection).lineWidth);
+		}
+	}
+
+	@Override
+	public void refresh() {
+		System.out.println("Start REFRESH");
+		removeDecoration();
+		IGraphicalEditPart editPart = (IGraphicalEditPart) getDecoratorTarget().getAdapter(EditPart.class);
+		
+		View view = (View) getDecoratorTarget().getAdapter(View.class);
+		
+		if (manager.getPrefferedDecoratorTarget(view.getElement()) == getDecoratorTarget()){
+			if(selectionContains(view.getElement())) {
+				int x = editPart.getFigure().getBounds().x;
+				int y = editPart.getFigure().getBounds().y;
+				FigureCanvas canvas = (FigureCanvas) editPart.getViewer().getControl();
+				canvas.scrollSmoothTo(x, y);
+				if (view instanceof Node) {
+					IFigure figure = editPart.getFigure();
+					IFigure decoration = new PapyrusDecorationFigure();
+					decoration.setSize(figure.getSize());
+					setDecoration(getDecoratorTarget().addShapeDecoration(decoration, IDecoratorTarget.Direction.CENTER, 0, false));
+				} 
+				if (view instanceof Edge) {
+					PolylineConnection connection = (PolylineConnection) editPart.getFigure();
+					decoratedLines.put(connection, new Style(connection.getForegroundColor(), connection.getLineWidth()));
+					connection.setForegroundColor(ColorConstants.red);
+					connection.setLineWidth(2);
+				} 
+			}
+		}
+		System.out.println("End REFRESH");
+	}
+	
+	private boolean selectionContains(EObject element){
+		boolean contained = false;
+		if (element != null) {
+			for(EObject selected : manager.getSelected()){
+				String fragmentA = EcoreUtil.getURI(selected).fragment();
+				String fragmentB = EcoreUtil.getURI(element).fragment();
+				contained |= fragmentA.equals(fragmentB);
+			}
+		}
+		return contained;
+	}
+	
+	private static class Style {
+		
+		public Color color = null;
+		public int lineWidth = 0;
+	
+		public Style(Color c, int lw){
+			color = c;
+			lineWidth = lw;
+		}
+	}
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecoratorProvider.java b/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecoratorProvider.java
new file mode 100644
index 0000000..3948899
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusDecoratorProvider.java
@@ -0,0 +1,23 @@
+package org.eclipse.emf.refactor.metrics.papyrus.ui;
+
+import org.eclipse.gmf.runtime.common.core.service.AbstractProvider;
+import org.eclipse.gmf.runtime.common.core.service.IOperation;
+import org.eclipse.gmf.runtime.diagram.ui.services.decorator.CreateDecoratorsOperation;
+import org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorProvider;
+import org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorTarget;
+
+public class PapyrusDecoratorProvider extends AbstractProvider implements IDecoratorProvider {
+	
+	public static final String PAPYRUS_DECORATOR_KEY = "papyrus_decorator";
+
+	@Override
+	public boolean provides(IOperation operation) {
+		return (operation instanceof CreateDecoratorsOperation);
+	}
+
+	@Override
+	public void createDecorators(IDecoratorTarget decoratorTarget) {
+		decoratorTarget.installDecorator(PAPYRUS_DECORATOR_KEY, new PapyrusDecorator(decoratorTarget));
+	}
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusHighlighting.java b/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusHighlighting.java
new file mode 100644
index 0000000..9902901
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.papyrus/src/org/eclipse/emf/refactor/metrics/papyrus/ui/PapyrusHighlighting.java
@@ -0,0 +1,13 @@
+package org.eclipse.emf.refactor.metrics.papyrus.ui;
+
+import org.eclipse.emf.refactor.metrics.interfaces.IHighlighting;
+import org.eclipse.emf.refactor.metrics.papyrus.managers.HighlightManager;
+
+public class PapyrusHighlighting implements IHighlighting {
+
+	@Override
+	public void highlight(Object selection) {
+		HighlightManager.getInstance().highlight(selection);
+	}
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.runtime/META-INF/MANIFEST.MF b/org.eclipse.emf.refactor.metrics.runtime/META-INF/MANIFEST.MF
index 2350767..960e67c 100644
--- a/org.eclipse.emf.refactor.metrics.runtime/META-INF/MANIFEST.MF
+++ b/org.eclipse.emf.refactor.metrics.runtime/META-INF/MANIFEST.MF
@@ -16,3 +16,4 @@
 Export-Package: org.eclipse.emf.refactor.metrics.runtime.core,
  org.eclipse.emf.refactor.metrics.runtime.managers,
  org.eclipse.emf.refactor.metrics.runtime.ui
+Import-Package: org.eclipse.emf.common.ui.viewer
diff --git a/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/managers/RuntimeManager.class b/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/managers/RuntimeManager.class
index 25a2a31..f70d75a 100644
--- a/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/managers/RuntimeManager.class
+++ b/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/managers/RuntimeManager.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsView$1.class b/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsView$1.class
new file mode 100644
index 0000000..1c61f19
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsView$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsView$ColumnSortListener.class b/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsView$ColumnSortListener.class
index 9a0becd..f5e9a6c 100644
--- a/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsView$ColumnSortListener.class
+++ b/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsView$ColumnSortListener.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsView.class b/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsView.class
index f067fad..6950876 100644
--- a/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsView.class
+++ b/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsView.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsViewLabelProvider.class b/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsViewLabelProvider.class
index 80c48d4..f17da95 100644
--- a/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsViewLabelProvider.class
+++ b/org.eclipse.emf.refactor.metrics.runtime/bin/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsViewLabelProvider.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.runtime/src/org/eclipse/emf/refactor/metrics/runtime/managers/RuntimeManager.java b/org.eclipse.emf.refactor.metrics.runtime/src/org/eclipse/emf/refactor/metrics/runtime/managers/RuntimeManager.java
index cd10803..6f9ef96 100644
--- a/org.eclipse.emf.refactor.metrics.runtime/src/org/eclipse/emf/refactor/metrics/runtime/managers/RuntimeManager.java
+++ b/org.eclipse.emf.refactor.metrics.runtime/src/org/eclipse/emf/refactor/metrics/runtime/managers/RuntimeManager.java
@@ -4,20 +4,21 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.refactor.metrics.configuration.core.Configuration;
 import org.eclipse.emf.refactor.metrics.configuration.managers.ConfigurationManager;
+import org.eclipse.emf.refactor.metrics.interfaces.IHighlighting;
 import org.eclipse.emf.refactor.metrics.runtime.core.MetricCalculator;
 import org.eclipse.emf.refactor.metrics.runtime.core.Result;
 import org.eclipse.emf.refactor.metrics.runtime.ui.MetricResultsView;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
 
 public class RuntimeManager {
 	
@@ -25,6 +26,7 @@
 	private static LinkedList<Result> resultsViewInput;
 	private static TableViewer resultsViewer = null;
 	private static List<Action> additionalActions = new ArrayList<Action>();
+	private static List<IHighlighting> additionalHighlightings = new ArrayList<IHighlighting>();
 	
 	private static RuntimeManager instance;
 	
@@ -51,6 +53,16 @@
 		return instance;
 	}
 	
+	public static RuntimeManager getInstance(IHighlighting highlighting) {
+		if (instance == null) {
+			instance = new RuntimeManager();
+			additionalHighlightings.add(highlighting);
+		} else {
+			additionalHighlightings.add(highlighting);
+		}
+		return instance;
+	}
+	
 	public static void setResultsViewer(TableViewer viewer){
 		resultsViewer = viewer;
 	}
@@ -115,6 +127,7 @@
 		try{
 			page.showView(MetricResultsView.ID);
 			setAdditionalActionsToView(getMetricsView());
+			setAdditionalHightightingsToView(getMetricsView());
 		} catch (PartInitException e) {
 			e.printStackTrace();
 		}
@@ -136,6 +149,7 @@
 		MetricResultsView view = getMetricsView();
 		if (view != null) {
 			setAdditionalActionsToView(view);
+			setAdditionalHightightingsToView(getMetricsView());
 			return true;
 		}
 		return false;
@@ -148,4 +162,11 @@
 		}
 		view.addActionsToMenu();
 	}
+	
+	private static void setAdditionalHightightingsToView(MetricResultsView view) {
+		for (IHighlighting highlighting : additionalHighlightings) {
+			System.out.println("RuntimeManager: add highlighting '" + highlighting + "' to view!");
+			view.addHighlighting(highlighting);
+		}
+	}
 }
diff --git a/org.eclipse.emf.refactor.metrics.runtime/src/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsView.java b/org.eclipse.emf.refactor.metrics.runtime/src/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsView.java
index 307bca0..cc4a6bb 100644
--- a/org.eclipse.emf.refactor.metrics.runtime/src/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsView.java
+++ b/org.eclipse.emf.refactor.metrics.runtime/src/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsView.java
@@ -3,6 +3,13 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.refactor.metrics.interfaces.IHighlighting;
+import org.eclipse.emf.refactor.metrics.runtime.core.Result;
 import org.eclipse.emf.refactor.metrics.runtime.managers.RuntimeManager;
 import org.eclipse.emf.refactor.metrics.runtime.ui.actions.ClearAction;
 import org.eclipse.emf.refactor.metrics.runtime.ui.actions.SaveAction;
@@ -10,14 +17,24 @@
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
 import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.ViewPart;
 
@@ -45,6 +62,7 @@
 	private SaveAction saveAction;
 	private Action clearAction;
 	private List<Action> additionalActions = new ArrayList<Action>();
+	private List<IHighlighting> additionalHighlightings = new ArrayList<IHighlighting>();
 
 	public MetricResultsView() { }
 	
@@ -66,31 +84,84 @@
 				| SWT.V_SCROLL);
 		final Table table = viewer.getTable();
 		RuntimeManager.setResultsViewer(viewer);
-		column = new TableColumn(table, SWT.LEFT);
-		column.setText(TIME_COLUMN_LABEL);
-		column.setWidth(150);
-		column.addListener(SWT.Selection, new ColumnSortListener(column));
+		
 		column = new TableColumn(table, SWT.LEFT);
 		column.setText(CONTEXT_COLUMN_LABEL);
 		column.setWidth(200);
 		column.addListener(SWT.Selection, new ColumnSortListener(column));
+		
 		column = new TableColumn(table, SWT.LEFT);
 		column.setText(METRIC_COLUMN_LABEL);
-		column.setWidth(200);
+		column.setWidth(120);
 		column.addListener(SWT.Selection, new ColumnSortListener(column));
+		
 		column = new TableColumn(table, SWT.LEFT);
 		column.setText(DESCRIPTION_COLUMN_LABEL);
-		column.setWidth(300);
+		column.setWidth(360);
 		column.addListener(SWT.Selection, new ColumnSortListener(column));
+		
 		column = new TableColumn(table, SWT.LEFT);
 		column.setText(RESULT_COLUMN_LABEL);
-		column.setWidth(50);
+		column.setWidth(70);
 		column.addListener(SWT.Selection, new ColumnSortListener(column));
+		
+		column = new TableColumn(table, SWT.LEFT);
+		column.setText(TIME_COLUMN_LABEL);
+		column.setWidth(150);
+		column.addListener(SWT.Selection, new ColumnSortListener(column));
+		
 		table.setHeaderVisible(true);
 		table.setLinesVisible(true);
+		
 		viewer.setContentProvider(new MetricResultsViewContentProvider());
 		viewer.setLabelProvider(new MetricResultsViewLabelProvider());
 		viewer.setInput(RuntimeManager.getResultsViewInput());
+		viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				if(event.getSelection().isEmpty()) {
+					return;
+			    }
+				IWorkbenchWindow workbenchWindow= PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+				IEditorPart editorPart = workbenchWindow.getActivePage().getActiveEditor();
+				if (event.getSelection() instanceof IStructuredSelection) {
+					StructuredSelection ss = (StructuredSelection) event.getSelection();
+					Object selection = ss.getFirstElement();
+					doAdditionalHighlightings(selection);
+				}
+				System.out.println("editorPart: " + editorPart);
+				System.out.println("editorPart.class: " + editorPart.getClass());
+				if(editorPart != null && editorPart instanceof IViewerProvider) {
+					setSelectionInModel((IViewerProvider)editorPart, (IStructuredSelection)event.getSelection());
+				}				
+			}
+			
+			private void setSelectionInModel(IViewerProvider provider, IStructuredSelection selection){
+				ArrayList<EObject> eObjectList = new ArrayList<EObject>();
+				for(Object selectedObject : selection.toList()){
+					if(selectedObject instanceof Result){
+						for(EObject currentEObject : ((Result) selectedObject).getContext()) {
+							EObject modelInstanceObject = getModelObjectInstance(provider, currentEObject);
+							eObjectList.add(modelInstanceObject);
+						}
+					}
+				}
+				provider.getViewer().setSelection(new StructuredSelection(eObjectList));				
+			}
+			
+			private EObject getModelObjectInstance(IViewerProvider provider, EObject eObject) {
+				Viewer viewer = provider.getViewer();
+				TreeViewer treeViewer = (TreeViewer)viewer;
+				Tree tree = treeViewer.getTree();
+				TreeItem treeItem = tree.getItem(0);
+				Resource o = (Resource)treeItem.getData();
+				ResourceSet set = o.getResourceSet();
+				EObject ob = set.getEObject(EcoreUtil.getURI(eObject), true);
+				return ob;
+			}
+			
+		});
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(),"EMFMetrics.viewer");
 		makeActions();
 //		hookContextMenu();
@@ -184,4 +255,14 @@
 		}
 	}
 
+	public void addHighlighting(IHighlighting highlighting) {
+		additionalHighlightings.add(highlighting);
+	}
+	
+	protected void doAdditionalHighlightings(Object selection) {
+		for (IHighlighting highlighting : additionalHighlightings) {
+			highlighting.highlight(selection);
+		}
+	}
+
 }
diff --git a/org.eclipse.emf.refactor.metrics.runtime/src/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsViewLabelProvider.java b/org.eclipse.emf.refactor.metrics.runtime/src/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsViewLabelProvider.java
index 896a085..8ffaa9e 100644
--- a/org.eclipse.emf.refactor.metrics.runtime/src/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsViewLabelProvider.java
+++ b/org.eclipse.emf.refactor.metrics.runtime/src/org/eclipse/emf/refactor/metrics/runtime/ui/MetricResultsViewLabelProvider.java
@@ -18,9 +18,9 @@
 
 	public String getColumnText(Object obj, int index) {
 		switch(index){
-		case 0:
+		case 4:
 			return ((Result)obj).getTimeStamp();
-		case 1:
+		case 0:
 			EObject contextElement = ((Result)obj).getContext().get(0);
 			String name = getEObjectLabel(contextElement);
 			String contextString = ((Result)obj).getMetric().getContext();
@@ -30,11 +30,11 @@
 				return s[s.length -1] + " " + name;
 			else
 				return name;
-		case 2:
+		case 1:
 			return ((Result)obj).getMetric().getName();
-		case 3:
+		case 2:
 			return ((Result)obj).getMetric().getDescription();
-		case 4:
+		case 3:
 			Double value = ((Result)obj).getResultValue();
 			if (value.isNaN()) return "NaN";
 			BigDecimal myDec = new BigDecimal(value);