/*******************************************************************************
* Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
*******************************************************************************/
package com.cisco.yangide.editor.editors.text.hover;
import org.eclipse.jface.text.DefaultTextHover;
import org.eclipse.jface.text.IInformationControlCreator;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextHoverExtension;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.ui.IEditorPart;
import com.cisco.yangide.core.YangCorePlugin;
import com.cisco.yangide.core.YangModelException;
import com.cisco.yangide.core.dom.ASTNode;
import com.cisco.yangide.core.dom.Module;
import com.cisco.yangide.editor.editors.YangEditor;
import com.cisco.yangide.editor.editors.text.YangMarkerAnnotation;
import com.cisco.yangide.editor.editors.text.YangSyntaxAnnotation;
import com.cisco.yangide.editor.editors.text.help.HelpCompositionUtils;
/**
* @author Konstantin Zaitsev
* @date Jul 23, 2014
*/
public class YangTextHover extends DefaultTextHover implements ITextHoverExtension {
private IInformationControlCreator hoverControlCreator;
private IInformationControlCreator presenterCtrlCreator;
private IEditorPart editor;
public YangTextHover(ISourceViewer sourceViewer) {
super(sourceViewer);
}
/**
* @param editor the editor to set
*/
public void setEditor(IEditorPart editor) {
this.editor = editor;
}
/**
* @return the editor
*/
public IEditorPart getEditor() {
return editor;
}
@Override
public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
@SuppressWarnings("deprecation")
String info = super.getHoverInfo(textViewer, hoverRegion);
if (info != null) {
return HelpCompositionUtils.wrapHtmlText(info, null);
}
String hoverInfo = null;
YangEditor editor = (YangEditor) getEditor();
if (editor != null) {
try {
Module module = editor.getModule();
if (module != null) {
ASTNode node = module.getNodeAtPosition(hoverRegion.getOffset());
hoverInfo = HelpCompositionUtils.getNodeHelp(node);
}
} catch (YangModelException e) {
YangCorePlugin.log(e);
}
}
return hoverInfo;
}
@Override
public IInformationControlCreator getHoverControlCreator() {
if (presenterCtrlCreator == null) {
presenterCtrlCreator = new PresenterControlCreator();
}
if (hoverControlCreator == null) {
hoverControlCreator = new HoverControlCreator(presenterCtrlCreator);
}
return hoverControlCreator;
}
@Override
protected boolean isIncluded(Annotation annotation) {
return YangSyntaxAnnotation.TYPE.equals(annotation.getType())
|| YangMarkerAnnotation.TYPE.equals(annotation.getType());
}
}