package org.objectstyle.wolips.wodclipse.core.document;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
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.bindings.wod.IWodBinding;
import org.objectstyle.wolips.bindings.wod.IWodElement;
import org.objectstyle.wolips.bindings.wod.TypeCache;
import org.objectstyle.wolips.locate.LocateException;
import org.objectstyle.wolips.wodclipse.core.Activator;
import org.objectstyle.wolips.wodclipse.core.completion.WodCompletionUtils;
import org.objectstyle.wolips.wodclipse.core.completion.WodParserCache;
public class WodBindingValueHyperlink implements IHyperlink {
private IWodElement _element;
private IWodBinding _binding;
private TypeCache _cache;
private IRegion _region;
private String _bindingValue;
private IType _componentType;
public WodBindingValueHyperlink(IWodElement element, IWodBinding binding, IRegion region, String bindingValue, IType componentType, TypeCache cache) {
_element = element;
_binding = binding;
_region = region;
_bindingValue = bindingValue;
_componentType = componentType;
_cache = cache;
}
public IRegion getHyperlinkRegion() {
return _region;
}
public String getTypeLabel() {
return null;
}
public String getHyperlinkText() {
return null;
}
public void open() {
try {
WodCompletionUtils.openBinding(_bindingValue, _binding, _componentType, false);
}
catch (Exception ex) {
Activator.getDefault().log(ex);
}
}
public static WodBindingValueHyperlink toBindingValueHyperlink(IWodElement wodElement, String bindingName, WodParserCache cache) throws JavaModelException, CoreException, LocateException {
WodBindingValueHyperlink hyperlink = null;
IWodBinding wodBinding = wodElement.getBindingNamed(bindingName);
if (wodBinding != null && wodBinding.isKeyPath()) {
Position valuePosition = wodBinding.getValuePosition();
if (valuePosition != null) {
Region elementRegion = new Region(valuePosition.getOffset(), valuePosition.getLength());
IType componentType = cache.getComponentType();
if (componentType != null) {
hyperlink = new WodBindingValueHyperlink(wodElement, wodBinding, elementRegion, wodBinding.getValue(), componentType, WodParserCache.getTypeCache());
}
}
}
return hyperlink;
}
}