package org.objectstyle.wolips.wodclipse.core.document; import org.eclipse.core.resources.IFile; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.ui.JavaUI; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.Position; import org.eclipse.jface.text.Region; import org.eclipse.jface.text.hyperlink.IHyperlink; import org.objectstyle.wolips.baseforuiplugins.utils.WorkbenchUtilities; import org.objectstyle.wolips.bindings.utils.BindingReflectionUtils; import org.objectstyle.wolips.bindings.wod.IWodElement; import org.objectstyle.wolips.bindings.wod.TypeCache; import org.objectstyle.wolips.locate.LocatePlugin; import org.objectstyle.wolips.locate.result.LocalizedComponentsLocateResult; import org.objectstyle.wolips.wodclipse.core.Activator; import org.objectstyle.wolips.wodclipse.core.completion.WodParserCache; public class WodElementTypeHyperlink implements IHyperlink { private IJavaProject _javaProject; private TypeCache _cache; private IRegion _region; private String _elementType; public WodElementTypeHyperlink(IRegion region, String elementType, IJavaProject javaProject, TypeCache cache) { _region = region; _elementType = elementType; _javaProject = javaProject; _cache = cache; } public IRegion getHyperlinkRegion() { return _region; } public String getTypeLabel() { return null; } public String getHyperlinkText() { return null; } public void open() { try { IType type = BindingReflectionUtils.findElementType(_javaProject, _elementType, false, _cache); if (type != null) { IJavaElement element = type.getPrimaryElement(); if (element != null) { JavaUI.revealInEditor(JavaUI.openInEditor(element), element); LocalizedComponentsLocateResult componentsLocateResults = LocatePlugin.getDefault().getLocalizedComponentsLocateResult(element.getResource()); if (componentsLocateResults != null) { IFile wodFile = componentsLocateResults.getFirstWodFile(); if (wodFile != null) { WorkbenchUtilities.open(wodFile, "org.objectstyle.wolips.componenteditor.ComponentEditor"); } } } } } catch (Exception ex) { Activator.getDefault().log(ex); } } public static WodElementTypeHyperlink toElementTypeHyperlink(IWodElement wodElement, WodParserCache cache) { WodElementTypeHyperlink hyperlink = null; Position typePosition = wodElement.getElementTypePosition(); if (typePosition != null) { Region elementRegion = new Region(typePosition.getOffset(), typePosition.getLength()); hyperlink = new WodElementTypeHyperlink(elementRegion, wodElement.getElementType(), cache.getJavaProject(), WodParserCache.getTypeCache()); } return hyperlink; } }