/**
* <copyright>
* </copyright>
*
*
*/
package org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui;
/**
* A hyperlink detector returns hyperlink if the token, where the mouse cursor
* hovers, is a proxy.
*/
public class MtextHyperlinkDetector implements org.eclipse.jface.text.hyperlink.IHyperlinkDetector {
private org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextTextResource textResource;
/**
* Creates a hyperlink detector.
*
* @param resource the resource to use for calculating the locations.
*/
public MtextHyperlinkDetector(org.eclipse.emf.ecore.resource.Resource resource) {
textResource = (org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextTextResource) resource;
}
public org.eclipse.jface.text.hyperlink.IHyperlink[] detectHyperlinks(org.eclipse.jface.text.ITextViewer textViewer, org.eclipse.jface.text.IRegion region, boolean canShowMultipleHyperlinks) {
org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextLocationMap locationMap = textResource.getLocationMap();
java.util.List<org.eclipse.emf.ecore.EObject> elementsAtOffset = locationMap.getElementsAt(region.getOffset());
org.eclipse.emf.ecore.EObject resolvedEObject = null;
for (org.eclipse.emf.ecore.EObject eObject : elementsAtOffset) {
if (eObject.eIsProxy()) {
resolvedEObject = org.eclipse.emf.ecore.util.EcoreUtil.resolve(eObject, textResource);
if (resolvedEObject == eObject) {
continue;
}
int offset = locationMap.getCharStart(eObject);
int length = locationMap.getCharEnd(eObject) - offset + 1;
String text = null;
try {
text = textViewer.getDocument().get(offset, length);
} catch (org.eclipse.jface.text.BadLocationException e) {
}
// we skipt elements that are not contained in a resource, because we cannot jump
// to them anyway
if (resolvedEObject.eResource() != null) {
org.eclipse.jface.text.hyperlink.IHyperlink hyperlink = new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.MtextHyperlink(new org.eclipse.jface.text.Region(offset, length), resolvedEObject, text);
return new org.eclipse.jface.text.hyperlink.IHyperlink[] { hyperlink };
}
}
}
return null;
}
}