package tk.eclipse.plugin.xmleditor.editors;
import jp.aonir.fuzzyxml.FuzzyXMLDocument;
import jp.aonir.fuzzyxml.FuzzyXMLElement;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaCore;
import tk.eclipse.plugin.htmleditor.IHyperlinkProvider;
import tk.eclipse.plugin.htmleditor.editors.HTMLHyperlinkInfo;
/**
* This provides hyperlink for the Java classname.
* <p>
* This provider can work for files which are in the java project.
*
* @author Naoki Takezoe
* @since 2.0.3
*/
public class ClassNameHyperLinkProvider implements IHyperlinkProvider {
private XMLEditor editor;
/**
* @param editor the target <code>XMLEditor</code>
*/
public void setEditor(XMLEditor editor){
this.editor = editor;
}
public HTMLHyperlinkInfo getHyperlinkInfo(IFile file, FuzzyXMLDocument doc,
FuzzyXMLElement element, String attrName, String attrValue,
int offset) {
if(file==null || editor==null){
return null;
}
IProject project = file.getProject();
IJavaProject javaProject = JavaCore.create(project);
if(javaProject==null){
return null;
}
String[] attrNames = this.editor.getClassNameAttributes();
for(int i=0;i<attrNames.length;i++){
if(attrName.equals(attrNames[i])){
IType type = findType(javaProject, attrValue);
if(type!=null){
HTMLHyperlinkInfo info = new HTMLHyperlinkInfo();
info.setObject(type);
info.setOffset(0);
info.setLength(attrValue.length());
return info;
}
}
}
return null;
}
private IType findType(IJavaProject project, String value){
try {
IType type = project.findType(value);
return type;
} catch(Exception ex){
return null;
}
}
}