Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2010 Christoph Kulla 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 Contributors: Christoph Kulla - Initial API and implementation /
 
 package org.eclipse.xtext.ui.editor.hover.html;
 
 import static org.eclipse.xtext.util.Strings.*;
 
 import java.net.URL;
 
 import  org.eclipse.jface.action.Action;
 import  org.eclipse.jface.action.ToolBarManager;
 import  org.eclipse.jface.internal.text.html.BrowserInformationControl;
 import  org.eclipse.jface.internal.text.html.BrowserInformationControlInput;
 import  org.eclipse.jface.internal.text.html.BrowserInput;
 import  org.eclipse.jface.internal.text.html.HTMLPrinter;
 import  org.eclipse.jface.resource.JFaceResources;
 import  org.eclipse.jface.text.AbstractReusableInformationControlCreator;
 import  org.eclipse.jface.text.DefaultInformationControl;
 import  org.eclipse.jface.text.IInformationControl;
 import  org.eclipse.jface.text.IInformationControlCreator;
 import  org.eclipse.jface.text.IInformationControlExtension4;
 import  org.eclipse.jface.text.IInputChangedListener;
 import  org.eclipse.jface.text.IRegion;
 import  org.eclipse.jface.text.ITextViewer;
 import  org.eclipse.jface.viewers.ILabelProvider;
 import  org.eclipse.swt.SWT;
 import  org.eclipse.swt.graphics.FontData;
 import  org.eclipse.swt.widgets.Display;
 import  org.eclipse.swt.widgets.Shell;
 import  org.eclipse.ui.ISharedImages;
 import  org.eclipse.ui.PlatformUI;
 import  org.eclipse.ui.editors.text.EditorsUI;
 
Returns a html string as documentation. Delegates to another IEObjectDocumentationProvider and adds the objects type and label at the beginning.

Author(s):
Christoph Kulla - Initial contribution and API
Sven Efftinge
 
 public class DefaultEObjectHoverProvider implements IEObjectHoverProvider {
 
 	private ILabelProvider labelProvider;
 
 	@Inject 
 	
 
 	protected String getHoverInfoAsHtml(EObject o) {
 		if (!hasHover(o))
 			return null;
 		StringBuffer buffer = new StringBuffer();
 		buffer.append (getFirstLine(o));
 		String documentation = getDocumentation(o);
 		if (documentation!=null && documentation.length()>0) {
 			buffer.append("<p>");
 			buffer.append(documentation);
 			buffer.append("</p>");
 		}
 		return buffer.toString();
 	}
 	
 	protected XtextBrowserInformationControlInput getHoverInfo(EObject element, IRegion hoverRegion,
 		String html = getHoverInfoAsHtml(element);
 		if (html != null) {
 			StringBuffer buffer = new StringBuffer(html);
 			HTMLPrinter.insertPageProlog(buffer, 0, getStyleSheet());
 			HTMLPrinter.addPageEpilog(buffer);
 			html = buffer.toString();
 			return new XtextBrowserInformationControlInput(previouselementhtml);
 		}
 		return null;
	}
	protected boolean hasHover(EObject o) {
	}
	protected String getDocumentation(EObject o) {
	}
	protected String getFirstLine(EObject o) {
		String label = getLabel(o);
		return o.eClass().getName()+ ((label != null) ? " <b>"+label+"</b>" : "");
	}
	protected String getLabel (EObject o) {
		String text = getLabelProvider().getText(o);
		if(!isEmpty(text))
			return HTMLPrinter.convertToHTMLContent(text);
		else
			return null;
	}
	protected ILabelProvider getLabelProvider () {
	}
		return ;
	}
	@Inject(optional = true)
	@Named("org.eclipse.xtext.ui.editor.hover.XtextEditorHover.styleSheetFileName")
	private String styleSheetFileName = "/XtextHoverStyleSheet.css"//$NON-NLS-1$
	@Inject(optional = true)
	@Named("org.eclipse.xtext.ui.editor.hover.XtextEditorHover.font")
	private String fontSymbolicName = "org.eclipse.jdt.ui.javadocfont"//$NON-NLS-1$ 
	private static String fgStyleSheet;
	private IInformationControlCreator hoverControlCreator;
	private IInformationControlCreator presenterControlCreator;
	protected static final class BackAction extends Action {
			 = infoControl;
			ISharedImages images = PlatformUI.getWorkbench().getSharedImages();
			setImageDescriptor(images.getImageDescriptor(ISharedImages.IMG_TOOL_BACK));
			setDisabledImageDescriptor(images.getImageDescriptor(ISharedImages.IMG_TOOL_BACK_DISABLED));
		}
		public void run() {
			BrowserInformationControlInput previous = (BrowserInformationControlInput) .getInput()
					.getPrevious();
			if (previous != null) {
			}
		}
		public void update() {
			BrowserInformationControlInput current = .getInput();
			if (current != null && current.getPrevious() != null) {
				BrowserInput previous = current.getPrevious();
						new Object[] { previous.getInputName() }));
else {
				setEnabled(false);
			}
		}
	}
	protected static final class ForwardAction extends Action {
			 = infoControl;
			ISharedImages images = PlatformUI.getWorkbench().getSharedImages();
			setImageDescriptor(images.getImageDescriptor(ISharedImages.IMG_TOOL_FORWARD));
			setDisabledImageDescriptor(images.getImageDescriptor(ISharedImages.IMG_TOOL_FORWARD_DISABLED));
		}
		public void run() {
			BrowserInformationControlInput next = (BrowserInformationControlInput) .getInput().getNext();
			if (next != null) {
			}
		}
		public void update() {
			BrowserInformationControlInput current = .getInput();
			if (current != null && current.getNext() != null) {
						new Object[] { current.getNext().getInputName() }));
else {
				setEnabled(false);
			}
		}
	}
	// This part is responsible for display the hover content in the 
	// JavaDoc view. A corresponding XtextDoc view is not available yet.
	// Therefore this code is disabled for later use.
	//	private static final class ShowInJavadocViewAction extends Action {
	//		private final BrowserInformationControl fInfoControl;
	//
	//		public ShowInJavadocViewAction(BrowserInformationControl infoControl) {
	//			fInfoControl= infoControl;
	//			setText(JavaHoverMessages.JavadocHover_showInJavadoc);
	//			setImageDescriptor(JavaPluginImages.DESC_OBJS_JAVADOCTAG); //TODO: better image
	//		}
	//
	//		/*
	//		 * @see org.eclipse.jface.action.Action#run()
	//		 */
	//		@Override
	//		public void run() {
	//			JavadocBrowserInformationControlInput infoInput= (JavadocBrowserInformationControlInput) fInfoControl.getInput(); //TODO: check cast
	//			fInfoControl.notifyDelayedInputChange(null);
	//			fInfoControl.dispose(); //FIXME: should have protocol to hide, rather than dispose
	//			try {
	//				JavadocView view= (JavadocView) JavaPlugin.getActivePage().showView(JavaUI.ID_JAVADOC_VIEW);
	//				view.setInput(infoInput);
	//			} catch (PartInitException e) {
	//				JavaPlugin.log(e);
	//			}
	//		}
	//	}
Action that opens the current hover input element.

Since:
2.3
	protected class OpenDeclarationAction extends Action {
			 = infoControl;
		}
		/*
		 * @see org.eclipse.jface.action.Action#run()
		 */
		public void run() {
				if ( != null)
			}
		}
	}
	}

Noreference:
This method is not intended to be referenced by clients.
Nooverride:
This method is not intended to be re-implemented or extended by clients.
	protected void addLinkListener(final BrowserInformationControl control) {
	}

Since:
2.3
	protected void addLinkListener(final IXtextBrowserInformationControl control) {
			public void handleXtextdocViewLink(URI linkTarget) {
				// TODO: enable when XtextDoc view available
				//				control.notifyDelayedInputChange(null);
				//				control.setVisible(false);
				//				control.dispose(); //FIXME: should have protocol to hide, rather than dispose
				//				try {
				//					JavadocView view= (JavadocView) JavaPlugin.getActivePage().showView(JavaUI.ID_JAVADOC_VIEW);
				//					view.setInput(linkTarget);
				//				} catch (PartInitException e) {
				//					JavaPlugin.log(e);
				//				}
			}
			public void handleInlineXtextdocLink(URI linkTarget) {
					control.notifyDelayedInputChange(hoverInfo);
				else
					control.setInput(hoverInfo);
			}
			public void handleDeclarationLink(URI linkTarget) {
				control.dispose(); //FIXME: should have protocol to hide, rather than dispose
				if ( != null)
					.open(linkTargettrue);
			}
			public boolean handleExternalLink(URL url, Display display) {
				control.dispose(); //FIXME: should have protocol to hide, rather than dispose
				// open external links in real browser:
				OpenBrowserUtil.openExternal(urldisplay);
				return true;
			}
			public void handleTextSet() {
			}
				return rs.getEObject(uritrue);
			}
		}));
	}
	public class PresenterControlCreator extends AbstractReusableInformationControlCreator {
		public IInformationControl doCreateInformationControl(Shell parent) {
			if (BrowserInformationControl.isAvailable(parent)) {
				ToolBarManager tbm = new ToolBarManager(SWT.FLAT);
				String font = "org.eclipse.jdt.ui.javadocfont"// FIXME: mPreferenceConstants.APPEARANCE_JAVADOC_FONT;
				configureControl(controltbmfont);
				return control;
else {
				return new DefaultInformationControl(parent,true);
			}
		}

Since:
2.3
		protected void configureControl(final IXtextBrowserInformationControl control, ToolBarManager tbmString font){
				final BackAction backAction = new BackAction(control);
				backAction.setEnabled(false);
				tbm.add(backAction);
				final ForwardAction forwardAction = new ForwardAction(control);
				tbm.add(forwardAction);
				forwardAction.setEnabled(false);
				//				final ShowInJavadocViewAction showInJavadocViewAction= new ShowInJavadocViewAction(iControl);
				//				tbm.add(showInJavadocViewAction);
				final OpenDeclarationAction openDeclarationAction = new OpenDeclarationAction(control);
				tbm.add(openDeclarationAction);
				//				final SimpleSelectionProvider selectionProvider= new SimpleSelectionProvider();
				IInputChangedListener inputChangeListener = new IInputChangedListener() {
					public void inputChanged(Object newInput) {
						backAction.update();
						forwardAction.update();
						if (newInput == null) {
							//							selectionProvider.setSelection(new StructuredSelection());
else if (newInput instanceof XtextBrowserInformationControlInput) {
							//							XtextBrowserInformationControlInput input= (XtextBrowserInformationControlInput) newInput;
							//							Object inputElement = input.getInputElement();
							//							selectionProvider.setSelection(new StructuredSelection(inputElement));
							//							boolean isJavaElementInput= inputElement instanceof IJavaElement;
							//							showInJavadocViewAction.setEnabled(isJavaElementInput);
							openDeclarationAction.setEnabled(true);
						}
					}
				};
				control.addInputChangeListener(inputChangeListener);
				tbm.update(true);
		}
	}
	public class HoverControlCreator extends AbstractReusableInformationControlCreator {
		private final IInformationControlCreator fInformationPresenterControlCreator;
		public HoverControlCreator(IInformationControlCreator informationPresenterControlCreator) {
			 = informationPresenterControlCreator;
		}
		/*
		 * @see org.eclipse.jdt.internal.ui.text.java.hover.AbstractReusableInformationControlCreator#doCreateInformationControl(org.eclipse.swt.widgets.Shell)
		 */
		public IInformationControl doCreateInformationControl(Shell parent) {
			String tooltipAffordanceString = EditorsUI.getTooltipAffordanceString();
			if (BrowserInformationControl.isAvailable(parent)) {
				String font = "org.eclipse.jdt.ui.javadocfont"// FIXME: PreferenceConstants.APPEARANCE_JAVADOC_FONT;
						tooltipAffordanceString) {
					/*
					 * @see org.eclipse.jface.text.IInformationControlExtension5#getInformationPresenterControlCreator()
					 */
					public IInformationControlCreator getInformationPresenterControlCreator() {
					}
				};
				addLinkListener(iControl);
				return iControl;
else {
				return new DefaultInformationControl(parenttooltipAffordanceString);
			}
		}
		/*
		 * @see org.eclipse.jdt.internal.ui.text.java.hover.AbstractReusableInformationControlCreator#canReuse(org.eclipse.jface.text.IInformationControl)
		 */
		public boolean canReuse(IInformationControl control) {
			if (!super.canReuse(control))
				return false;
			if (control instanceof IInformationControlExtension4) {
				String tooltipAffordanceString = EditorsUI.getTooltipAffordanceString();
				((IInformationControlExtension4) control).setStatusText(tooltipAffordanceString);
			}
			return true;
		}
	}
	public IInformationControlCreator getInformationPresenterControlCreator() {
	}
	public IInformationControlCreator getHoverControlCreator() {
		if ( == null)
	}
	protected String getStyleSheet() {
		if ( == null)
		if (css != null) {
			FontData fontData = JFaceResources.getFontRegistry().getFontData()[0];
			css = HTMLPrinter.convertTopLevelFont(cssfontData);
		}
		return css;
	}

Loads and returns the hover style sheet.

Returns:
the style sheet, or null if unable to load
	protected String loadStyleSheet() {
		URL styleSheetURL = Activator.getDefault().getBundle().getEntry(); 
		if (styleSheetURL != null) {
			BufferedReader reader = null;
			try {
				reader = new BufferedReader(new InputStreamReader(styleSheetURL.openStream()));
				StringBuffer buffer = new StringBuffer(1500);
				String line = reader.readLine();
				while (line != null) {
					buffer.append(line);
					buffer.append('\n');
					line = reader.readLine();
				}
				return buffer.toString();
catch (IOException ex) {
				return ""//$NON-NLS-1$
finally {
				try {
					if (reader != null)
						reader.close();
catch (IOException e) {
				}
			}
		}
		return null;
	}
	public IInformationControlCreatorProvider getHoverInfo(final EObject objectfinal ITextViewer viewerfinal IRegion region) {
			public IInformationControlCreator getHoverControlCreator() {
			}
			public Object getInfo() {
				return getHoverInfo(objectregionnull);
			}
			public IInformationControlCreator getInformationPresenterControlCreator() {
			}};
	}
New to GrepCode? Check out our FAQ X