Browse Source

Updated SText Hover Integration to parse user doc

Andreas Mülder 13 years ago
parent
commit
b6db1f94d1
18 changed files with 308 additions and 178 deletions
  1. 2 1
      plugins/org.yakindu.sct.generator.genmodel.ui/META-INF/MANIFEST.MF
  2. 13 5
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/SGenUiModule.java
  3. 0 5
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/contentassist/SGenProposalProvider.java
  4. 0 70
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/help/AbstractHelpSystemDocumentationProvider.java
  5. 0 63
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/help/GenModelEObjectHover.java
  6. 11 11
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/help/HelpSystemDocumentationProvider.java
  7. 4 1
      plugins/org.yakindu.sct.model.stext.ui/META-INF/MANIFEST.MF
  8. 35 0
      plugins/org.yakindu.sct.model.stext.ui/StextHoverStyleSheet.css
  9. 35 3
      plugins/org.yakindu.sct.model.stext.ui/src/org/yakindu/sct/model/stext/ui/STextUiModule.java
  10. 39 2
      plugins/org.yakindu.sct.model.stext.ui/src/org/yakindu/sct/model/stext/ui/contentassist/STextProposalProvider.java
  11. 118 0
      plugins/org.yakindu.sct.model.stext.ui/src/org/yakindu/sct/model/stext/ui/help/CustomCSSHelpHoverProvider.java
  12. 45 0
      plugins/org.yakindu.sct.model.stext.ui/src/org/yakindu/sct/model/stext/ui/help/STextUserHelpDocumentationProvider.java
  13. 0 4
      plugins/org.yakindu.sct.ui.integration.stext/src/org/yakindu/sct/ui/integration/stext/modules/StateUIModule.java
  14. 0 4
      plugins/org.yakindu.sct.ui.integration.stext/src/org/yakindu/sct/ui/integration/stext/modules/StatechartUIModule.java
  15. 0 4
      plugins/org.yakindu.sct.ui.integration.stext/src/org/yakindu/sct/ui/integration/stext/modules/TransitionUIModule.java
  16. 2 1
      test-plugins/org.yakindu.sct.generator.genmodel.test/META-INF/MANIFEST.MF
  17. 2 2
      test-plugins/org.yakindu.sct.generator.genmodel.test/src/org/yakindu/sct/generator/genmodel/test/HelpIntegrationTest.java
  18. 2 2
      test-plugins/org.yakindu.sct.generator.genmodel.test/src/org/yakindu/sct/generator/genmodel/test/util/SGenTestRuntimeModule.java

+ 2 - 1
plugins/org.yakindu.sct.generator.genmodel.ui/META-INF/MANIFEST.MF

@@ -29,7 +29,8 @@ Require-Bundle: org.yakindu.sct.generator.genmodel;visibility:=reexport,
  org.yakindu.base.types;bundle-version="1.0.0",
  org.eclipse.help;bundle-version="3.5.100",
  org.yakindu.sct.doc.user;bundle-version="1.0.0",
- org.eclipse.emf.mwe2.language.ui;bundle-version="2.0.1"
+ org.eclipse.emf.mwe2.language.ui;bundle-version="2.0.1",
+ de.itemis.xtext.utils.jface;bundle-version="1.0.0"
 Import-Package: org.apache.log4j,
  org.apache.commons.logging
 Bundle-RequiredExecutionEnvironment: J2SE-1.5

+ 13 - 5
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/SGenUiModule.java

@@ -8,12 +8,15 @@ import org.eclipse.xtext.documentation.IEObjectDocumentationProvider;
 import org.eclipse.xtext.ui.editor.contentassist.ITemplateProposalProvider;
 import org.eclipse.xtext.ui.editor.hover.DispatchingEObjectTextHover;
 import org.eclipse.xtext.ui.editor.hover.IEObjectHover;
+import org.eclipse.xtext.ui.editor.hover.IEObjectHoverProvider;
 import org.eclipse.xtext.ui.editor.syntaxcoloring.ISemanticHighlightingCalculator;
-import org.yakindu.sct.generator.genmodel.ui.help.GenModelEObjectHover;
-import org.yakindu.sct.generator.genmodel.ui.help.HelpSystemDocumentationProvider;
+import org.yakindu.sct.generator.genmodel.ui.help.SGenUserHelpDocumentationProvider;
 import org.yakindu.sct.generator.genmodel.ui.highlighting.SGenSemanticHighlightingCalculator;
 import org.yakindu.sct.generator.genmodel.ui.templates.SGenTemplateProposalProvider;
 
+import de.itemis.utils.jface.viewers.help.CrossRefObjectTextHover;
+import de.itemis.utils.jface.viewers.help.HelpHoverProvider;
+
 /**
  * Use this class to register components to be used within the IDE.
  */
@@ -28,16 +31,20 @@ public class SGenUiModule extends
 	}
 
 	public Class<? extends IEObjectDocumentationProvider> bindIEObjectDocumentationProvider() {
-		return HelpSystemDocumentationProvider.class;
+		return SGenUserHelpDocumentationProvider.class;
 	}
 	
 	public Class<? extends DispatchingEObjectTextHover> bindDispatchingEObjectTextHover(){
-		return GenModelEObjectHover.class;
+		return CrossRefObjectTextHover.class;
 	}
 
+	public Class<? extends IEObjectHoverProvider> bindIEObjectHoverProvider() {
+		return HelpHoverProvider.class;
+	}
+	
 	@Override
 	public Class<? extends IEObjectHover> bindIEObjectHover() {
-		return GenModelEObjectHover.class;
+		return CrossRefObjectTextHover.class;
 	}
 
 	@Override
@@ -46,5 +53,6 @@ public class SGenUiModule extends
 	}
 	
 	
+	
 
 }

+ 0 - 5
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/contentassist/SGenProposalProvider.java

@@ -17,7 +17,6 @@ import org.eclipse.xtext.Assignment;
 import org.eclipse.xtext.EcoreUtil2;
 import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
 import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
-import org.eclipse.xtext.ui.editor.hover.IEObjectHover;
 import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
 import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
 import org.yakindu.sct.model.sgen.GeneratorModel;
@@ -29,10 +28,6 @@ import org.yakindu.sct.model.sgen.GeneratorModel;
  */
 public class SGenProposalProvider extends AbstractSGenProposalProvider {
 
-	@Override
-	public IEObjectHover getHover() {
-		return super.getHover();
-	}
 
 	@Override
 	public void completeGeneratorEntry_ContentType(EObject model,

+ 0 - 70
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/help/AbstractHelpSystemDocumentationProvider.java

@@ -1,70 +0,0 @@
-/**
- * Copyright (c) 2012 committers of YAKINDU 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
- * Contributors:
- * 	committers of YAKINDU - initial API and implementation
- * 
- */
-package org.yakindu.sct.generator.genmodel.ui.help;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.util.Locale;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.help.IContext;
-import org.eclipse.help.IHelpResource;
-import org.eclipse.help.internal.context.ContextFileProvider;
-import org.eclipse.xtext.documentation.IEObjectDocumentationProvider;
-
-/**
- * 
- * @author andreas muelder - Initial contribution and API
- * 
- */
-@SuppressWarnings("restriction")
-public abstract class AbstractHelpSystemDocumentationProvider implements
-		IEObjectDocumentationProvider {
-
-	protected abstract String getContextId();
-
-	protected String parseHelpContent() {
-		ContextFileProvider provider = new ContextFileProvider();
-		IContext context = provider.getContext(getContextId(), Locale
-				.getDefault().toString());
-		IHelpResource[] relatedTopics = context.getRelatedTopics();
-		Assert.isTrue(relatedTopics != null && relatedTopics.length == 1);
-		IHelpResource helpResource = relatedTopics[0];
-		BufferedReader in = null;
-		try {
-			String href = helpResource.getHref().substring(1);
-			URL url = new URL("platform:/plugin/" + href);
-			InputStream inputStream = url.openConnection().getInputStream();
-			in = new BufferedReader(new InputStreamReader(inputStream));
-			StringBuilder builder = new StringBuilder();
-			String inputLine;
-			while ((inputLine = in.readLine()) != null) {
-				builder.append(inputLine);
-			}
-			return builder.toString();
-		} catch (Exception e) {
-			e.printStackTrace();
-		} finally {
-			try {
-				if (in != null) {
-					in.close();
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-		return null;
-	}
-
-}

+ 0 - 63
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/help/GenModelEObjectHover.java

@@ -1,63 +0,0 @@
-/**
- * Copyright (c) 2012 committers of YAKINDU 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
- * Contributors:
- * 	committers of YAKINDU - initial API and implementation
- * 
- */
-package org.yakindu.sct.generator.genmodel.ui.help;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.text.IInformationControlCreator;
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.ITextViewer;
-import org.eclipse.xtext.resource.IGlobalServiceProvider;
-import org.eclipse.xtext.ui.editor.hover.DispatchingEObjectTextHover;
-import org.eclipse.xtext.ui.editor.hover.IEObjectHover;
-import org.eclipse.xtext.ui.editor.hover.IEObjectHoverProvider;
-import org.eclipse.xtext.ui.editor.hover.IEObjectHoverProvider.IInformationControlCreatorProvider;
-
-import com.google.inject.Inject;
-
-/**
- * Initially copied from {@link DispatchingEObjectTextHover}. This
- * implementation bypasses the {@link IGlobalServiceProvider} because there is a
- * check to the resource file extensions for cross references.
- * 
- * @author andreas muelder - Initial contribution and API
- * 
- */
-public class GenModelEObjectHover extends DispatchingEObjectTextHover implements
-		IEObjectHover {
-
-	private IInformationControlCreatorProvider lastCreatorProvider;
-	@Inject
-	private IEObjectHoverProvider hoverProvider;
-
-	@Override
-	public Object getHoverInfo(EObject first, ITextViewer textViewer,
-			IRegion hoverRegion) {
-		IInformationControlCreatorProvider creatorProvider = hoverProvider
-				.getHoverInfo(first, textViewer, hoverRegion);
-		if (creatorProvider == null)
-			return null;
-		this.lastCreatorProvider = creatorProvider;
-		return lastCreatorProvider.getInfo();
-	}
-
-	@Override
-	public IInformationControlCreator getHoverControlCreator() {
-		return this.lastCreatorProvider == null ? null : lastCreatorProvider
-				.getHoverControlCreator();
-	}
-
-	@Override
-	@Deprecated
-	public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
-		final Object hoverInfo2 = getHoverInfo2(textViewer, hoverRegion);
-		return hoverInfo2 != null ? hoverInfo2.toString() : null;
-	}
-}

+ 11 - 11
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/help/HelpSystemDocumentationProvider.java

@@ -16,21 +16,20 @@ import org.yakindu.sct.model.sgen.FeatureConfiguration;
 import org.yakindu.sct.model.sgen.FeatureParameter;
 import org.yakindu.sct.model.sgen.FeatureType;
 
+import de.itemis.utils.jface.viewers.help.AbstractUserHelpDocumentationProvider;
+
 /**
  * 
  * @author andreas muelder - Initial contribution and API
  * 
  */
-public class HelpSystemDocumentationProvider extends
-		AbstractHelpSystemDocumentationProvider implements
+public class SGenUserHelpDocumentationProvider extends
+		AbstractUserHelpDocumentationProvider implements
 		IEObjectDocumentationProvider {
 
-	public static final String EMPTY_DOCUMENTATION = "";
+	private static final String PLUGIN_ID = "org.yakindu.sct.ui.editor";
+	private static final String CONTEXT_ID = "sgen_feature";
 
-	@Override
-	protected String getContextId() {
-		return "org.yakindu.sct.ui.editor.sc_genmodel_features";
-	}
 
 	public String getDocumentation(EObject o) {
 		if (o instanceof FeatureConfiguration) {
@@ -53,11 +52,12 @@ public class HelpSystemDocumentationProvider extends
 	}
 
 	protected String getFeatureTypeDocumentation(String name) {
-		String helpContent = parseHelpContent();
-		int beginIndex = helpContent.indexOf("<h4 id=\"" + name + "\">");
-		int endIndex = helpContent.indexOf("<!-- End " + name + " -->");
+		name = CONTEXT_ID + "_" + name.toLowerCase();
+		String userHelp = getHelp(PLUGIN_ID + "." + CONTEXT_ID);
+		int beginIndex = userHelp.indexOf("<!-- Start " + name + " -->");
+		int endIndex = userHelp.indexOf("<!-- End " + name + " -->");
 		if (beginIndex >= 0 && endIndex >= 0 && endIndex > beginIndex) {
-			return helpContent.substring(beginIndex, endIndex);
+			return userHelp.substring(beginIndex, endIndex);
 		}
 		return EMPTY_DOCUMENTATION;
 	}

+ 4 - 1
plugins/org.yakindu.sct.model.stext.ui/META-INF/MANIFEST.MF

@@ -15,7 +15,10 @@ Require-Bundle: org.yakindu.sct.model.stext;visibility:=reexport,
  org.antlr.runtime,
  org.eclipse.xtext.common.types.ui,
  org.yakindu.sct.model.sgraph,
- org.yakindu.sct.model.stext.edit;bundle-version="1.0.0"
+ org.yakindu.sct.model.stext.edit;bundle-version="1.0.0",
+ org.eclipse.help;bundle-version="3.5.100",
+ org.yakindu.sct.doc.user;bundle-version="1.0.0",
+ de.itemis.xtext.utils.jface;bundle-version="1.0.0"
 Import-Package: org.apache.log4j,
  org.apache.commons.logging
 Bundle-RequiredExecutionEnvironment: J2SE-1.5

+ 35 - 0
plugins/org.yakindu.sct.model.stext.ui/StextHoverStyleSheet.css

@@ -0,0 +1,35 @@
+/* Font definitions */
+html         { font-family: verdana; font-size: 9pt; font-style: normal; font-weight: normal; }
+body, h1, h2, h3, h4, h5, h6, p, table, td, caption, th, ul, ol, dl, li, dd, dt { font-size: 1em; }
+pre          { font-family: monospace; }
+
+/* Margins */
+body	     { overflow: auto; margin-top: 0px; margin-bottom: 0.5em; margin-left: 0.3em; margin-right: 0px; }
+h1           { margin-top: 0.3em; margin-bottom: 0.04em; }	
+h2           { margin-top: 2em; margin-bottom: 0.25em; }
+h3           { margin-top: 1.7em; margin-bottom: 0.25em; }
+h4           { margin-top: 2em; margin-bottom: 0.3em;  }
+h5           { margin-top: 0px; margin-bottom: 0px; }
+p            { margin-top: 1em; margin-bottom: 1em; }
+pre          { margin-left: 0.6em; }
+ul	         { margin-top: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 1em;}
+li	         { margin-top: 0px; margin-bottom: 0px; } 
+li p	     { margin-top: 0px; margin-bottom: 0px; } 
+ol	         { margin-top: 0px; margin-bottom: 1em; margin-left: 1em; padding-left: 1em; }
+dl	         { margin-top: 0px; margin-bottom: 1em; }
+dt	         { margin-top: 0px; margin-bottom: 0px; font-weight: bold; }
+dd	         { margin-top: 0px; margin-bottom: 0px; }
+
+/* Styles and colors */
+body {background-color:#FBFDFF;}
+a:link	     { color: #0000FF; }
+a:hover	     { color: #000080; }
+a:visited    { text-decoration: underline; }
+a.header:link    { text-decoration: none; color: InfoText }
+a.header:visited { text-decoration: none; color: InfoText }
+a.header:hover   { text-decoration: underline; color: #000080; }
+h4           { font-style: italic; }
+strong	     { font-weight: bold; }
+em	         { font-style: italic; }
+var	         { font-style: italic; }
+th	         { font-weight: bold; }

+ 35 - 3
plugins/org.yakindu.sct.model.stext.ui/src/org/yakindu/sct/model/stext/ui/STextUiModule.java

@@ -1,11 +1,19 @@
-/*
- * generated by Xtext
- */
 package org.yakindu.sct.model.stext.ui;
 
 import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.xtext.documentation.IEObjectDocumentationProvider;
 import org.eclipse.xtext.ui.editor.contentassist.antlr.ParserBasedContentAssistContextFactory.StatefulFactory;
+import org.eclipse.xtext.ui.editor.hover.DispatchingEObjectTextHover;
+import org.eclipse.xtext.ui.editor.hover.IEObjectHover;
+import org.eclipse.xtext.ui.editor.hover.IEObjectHoverProvider;
 import org.yakindu.sct.model.stext.ui.contentassist.STextStatefulFactory;
+import org.yakindu.sct.model.stext.ui.help.CustomCSSHelpHoverProvider;
+import org.yakindu.sct.model.stext.ui.help.STextUserHelpDocumentationProvider;
+
+import com.google.inject.Binder;
+import com.google.inject.name.Names;
+
+import de.itemis.utils.jface.viewers.help.CrossRefObjectTextHover;
 
 /**
  * Use this class to register components to be used within the IDE.
@@ -22,4 +30,28 @@ public class STextUiModule extends
 	public Class<? extends StatefulFactory> bindStatefulFactory() {
 		return STextStatefulFactory.class;
 	}
+
+	public Class<? extends IEObjectDocumentationProvider> bindIEObjectDocumentationProvider() {
+		return STextUserHelpDocumentationProvider.class;
+	}
+
+	public Class<? extends DispatchingEObjectTextHover> bindDispatchingEObjectTextHover() {
+		return CrossRefObjectTextHover.class;
+	}
+
+	public Class<? extends IEObjectHoverProvider> bindIEObjectHoverProvider() {
+		return CustomCSSHelpHoverProvider.class;
+	}
+
+	@Override
+	public Class<? extends IEObjectHover> bindIEObjectHover() {
+		return CrossRefObjectTextHover.class;
+	}
+
+	@Override
+	public void configure(Binder binder) {
+		super.configure(binder);
+		binder.bind(String.class).annotatedWith(Names.named("stylesheet"))
+				.toInstance("/StextHoverStyleSheet.css");
+	}
 }

+ 39 - 2
plugins/org.yakindu.sct.model.stext.ui/src/org/yakindu/sct/model/stext/ui/contentassist/STextProposalProvider.java

@@ -20,18 +20,19 @@ import org.eclipse.jface.text.contentassist.ICompletionProposal;
 import org.eclipse.xtext.EnumLiteralDeclaration;
 import org.eclipse.xtext.Keyword;
 import org.eclipse.xtext.RuleCall;
+import org.eclipse.xtext.XtextFactory;
 import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal;
 import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
 import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
 import org.yakindu.base.types.Operation;
 import org.yakindu.sct.model.stext.services.STextGrammarAccess;
+import org.yakindu.sct.model.stext.stext.ElementReferenceExpression;
 import org.yakindu.sct.model.stext.stext.FeatureCall;
 import org.yakindu.sct.model.stext.stext.InterfaceScope;
 import org.yakindu.sct.model.stext.stext.InternalScope;
 import org.yakindu.sct.model.stext.stext.SimpleScope;
 import org.yakindu.sct.model.stext.stext.StatechartSpecification;
 import org.yakindu.sct.model.stext.stext.TransitionReaction;
-import org.yakindu.sct.model.stext.stext.ElementReferenceExpression;
 import org.yakindu.sct.model.stext.stext.VariableDefinition;
 
 import com.google.inject.Inject;
@@ -128,7 +129,9 @@ public class STextProposalProvider extends AbstractSTextProposalProvider {
 		}
 
 		if (!keywords.contains(keyword)) {
-			super.completeKeyword(keyword, contentAssistContext, acceptor);
+			super.completeKeyword(keyword, contentAssistContext,
+					new AcceptorDelegate(acceptor));
+
 		}
 	}
 
@@ -236,4 +239,38 @@ public class STextProposalProvider extends AbstractSTextProposalProvider {
 		ConfigurableCompletionProposal castedProposal = (ConfigurableCompletionProposal) proposal;
 		castedProposal.setPriority(castedProposal.getPriority() + delta);
 	}
+
+	/**
+	 * The acceptor delegate creates a Dummy EObject of type Keyword for the
+	 * User Help Hover integration
+	 * 
+	 */
+	public class AcceptorDelegate implements ICompletionProposalAcceptor {
+
+		private final ICompletionProposalAcceptor delegate;
+
+		public AcceptorDelegate(ICompletionProposalAcceptor delegate) {
+			this.delegate = delegate;
+		}
+
+		@Override
+		public void accept(ICompletionProposal proposal) {
+			if (proposal instanceof ConfigurableCompletionProposal) {
+				Keyword keyword = XtextFactory.eINSTANCE.createKeyword();
+				keyword.setValue(proposal.getDisplayString());
+				((ConfigurableCompletionProposal) proposal)
+						.setAdditionalProposalInfo(keyword);
+				((ConfigurableCompletionProposal) proposal)
+						.setHover(STextProposalProvider.this.getHover());
+			}
+			delegate.accept(proposal);
+		}
+
+		@Override
+		public boolean canAcceptMoreProposals() {
+			return delegate.canAcceptMoreProposals();
+		}
+
+	}
+
 }

+ 118 - 0
plugins/org.yakindu.sct.model.stext.ui/src/org/yakindu/sct/model/stext/ui/help/CustomCSSHelpHoverProvider.java

@@ -0,0 +1,118 @@
+/**
+ * Copyright (c) 2012 committers of YAKINDU 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
+ * Contributors:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
+package org.yakindu.sct.model.stext.ui.help;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+
+import org.eclipse.jface.internal.text.html.BrowserInformationControl;
+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.swt.widgets.Shell;
+import org.eclipse.ui.editors.text.EditorsUI;
+import org.yakindu.sct.model.stext.ui.internal.STextActivator;
+
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
+
+import de.itemis.utils.jface.viewers.help.HelpHoverProvider;
+
+/**
+ * Overrides the loadStylesheet method to load a custom stylesheet from this
+ * plugin. The HoverControlCreator is overridden too, because we don't want to
+ * have the status line visible. (Not possible to set the bg color of the status
+ * line)
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+@SuppressWarnings("restriction")
+public class CustomCSSHelpHoverProvider extends HelpHoverProvider {
+
+	@Inject
+	@Named("stylesheet")
+	private String styleSheetFileName;
+
+	private HoverControlCreator hoverControlCreator;
+
+	protected String loadStyleSheet() {
+		URL styleSheetURL = STextActivator.getInstance().getBundle()
+				.getEntry(styleSheetFileName); //$NON-NLS-1$
+		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 IInformationControlCreator getHoverControlCreator() {
+		if (hoverControlCreator == null)
+			hoverControlCreator = new HoverControlCreator(
+					getInformationPresenterControlCreator());
+		return hoverControlCreator;
+	}
+
+	public final class HoverControlCreator extends
+			AbstractReusableInformationControlCreator {
+
+		private final IInformationControlCreator fInformationPresenterControlCreator;
+
+		public HoverControlCreator(
+				IInformationControlCreator informationPresenterControlCreator) {
+			fInformationPresenterControlCreator = informationPresenterControlCreator;
+		}
+
+		@Override
+		public IInformationControl doCreateInformationControl(Shell parent) {
+			String tooltipAffordanceString = EditorsUI
+					.getTooltipAffordanceString();
+			if (BrowserInformationControl.isAvailable(parent)) {
+				String font = "org.eclipse.jdt.ui.javadocfont";
+				BrowserInformationControl iControl = new BrowserInformationControl(
+						parent, font, false) {
+					@Override
+					public IInformationControlCreator getInformationPresenterControlCreator() {
+						return fInformationPresenterControlCreator;
+					}
+				};
+				addLinkListener(iControl);
+				return iControl;
+			} else {
+				return new DefaultInformationControl(parent,
+						tooltipAffordanceString);
+			}
+		}
+
+	}
+}

+ 45 - 0
plugins/org.yakindu.sct.model.stext.ui/src/org/yakindu/sct/model/stext/ui/help/STextUserHelpDocumentationProvider.java

@@ -0,0 +1,45 @@
+/**
+ * Copyright (c) 2012 committers of YAKINDU 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
+ * Contributors:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
+package org.yakindu.sct.model.stext.ui.help;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.Keyword;
+import org.eclipse.xtext.documentation.IEObjectDocumentationProvider;
+
+import de.itemis.utils.jface.viewers.help.AbstractUserHelpDocumentationProvider;
+
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+public class STextUserHelpDocumentationProvider extends
+		AbstractUserHelpDocumentationProvider implements
+		IEObjectDocumentationProvider {
+
+	private static final String PLUGIN_ID = "org.yakindu.sct.ui.editor";
+	private static final String CONTEXT_ID = "stext_keyword";
+
+	
+	public String getDocumentation(EObject o) {
+		if (o instanceof Keyword) {
+			String name = CONTEXT_ID + "_" + ((Keyword) o).getValue();
+			String helpContent = getHelp(PLUGIN_ID + "." + CONTEXT_ID);
+			int beginIndex = helpContent.indexOf("<!-- Start " + name + " -->");
+			int endIndex = helpContent.indexOf("<!-- End " + name + " -->");
+			if (beginIndex >= 0 && endIndex >= 0 && endIndex > beginIndex) {
+				return helpContent.substring(beginIndex, endIndex);
+			}
+		}
+		return EMPTY_DOCUMENTATION;
+	}
+
+}

+ 0 - 4
plugins/org.yakindu.sct.ui.integration.stext/src/org/yakindu/sct/ui/integration/stext/modules/StateUIModule.java

@@ -12,7 +12,6 @@ package org.yakindu.sct.ui.integration.stext.modules;
 
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.eclipse.xtext.ui.editor.contentassist.antlr.IContentAssistParser;
-import org.eclipse.xtext.ui.editor.hover.ProblemAnnotationHover;
 import org.yakindu.sct.model.stext.ui.STextUiModule;
 import org.yakindu.sct.ui.integration.stext.parsers.StateContentAssistParser;
 /**
@@ -31,7 +30,4 @@ public class StateUIModule extends STextUiModule{
 	public Class<? extends IContentAssistParser> bindIContentAssistParser() {
 		return StateContentAssistParser.class;
 	}
-	public Class<? extends org.eclipse.jface.text.ITextHover> bindITextHover() {
-		return ProblemAnnotationHover.class;
-	}
 }

+ 0 - 4
plugins/org.yakindu.sct.ui.integration.stext/src/org/yakindu/sct/ui/integration/stext/modules/StatechartUIModule.java

@@ -12,7 +12,6 @@ package org.yakindu.sct.ui.integration.stext.modules;
 
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.eclipse.xtext.ui.editor.contentassist.antlr.IContentAssistParser;
-import org.eclipse.xtext.ui.editor.hover.ProblemAnnotationHover;
 import org.yakindu.sct.model.stext.ui.STextUiModule;
 import org.yakindu.sct.ui.integration.stext.parsers.StatechartContentAssistParser;
 /**
@@ -31,7 +30,4 @@ public class StatechartUIModule extends STextUiModule {
 		return StatechartContentAssistParser.class;
 	}
 
-	public Class<? extends org.eclipse.jface.text.ITextHover> bindITextHover() {
-		return ProblemAnnotationHover.class;
-	}
 }

+ 0 - 4
plugins/org.yakindu.sct.ui.integration.stext/src/org/yakindu/sct/ui/integration/stext/modules/TransitionUIModule.java

@@ -2,7 +2,6 @@ package org.yakindu.sct.ui.integration.stext.modules;
 
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.eclipse.xtext.ui.editor.contentassist.antlr.IContentAssistParser;
-import org.eclipse.xtext.ui.editor.hover.ProblemAnnotationHover;
 import org.yakindu.sct.model.stext.ui.STextUiModule;
 import org.yakindu.sct.ui.integration.stext.parsers.TransitionContentAssistParser;
 
@@ -22,7 +21,4 @@ public class TransitionUIModule extends STextUiModule {
 		return TransitionContentAssistParser.class;
 	}
 	
-	public Class<? extends org.eclipse.jface.text.ITextHover> bindITextHover() {
-		return ProblemAnnotationHover.class;
-	}
 }

+ 2 - 1
test-plugins/org.yakindu.sct.generator.genmodel.test/META-INF/MANIFEST.MF

@@ -11,4 +11,5 @@ Require-Bundle: org.eclipse.xtext.junit4;bundle-version="2.0.1",
  org.yakindu.sct.generator.java;bundle-version="1.0.0",
  org.yakindu.sct.generator.c;bundle-version="1.0.0",
  org.yakindu.sct.generator.cpp;bundle-version="1.0.0",
- org.yakindu.sct.doc.user;bundle-version="1.0.0"
+ org.yakindu.sct.doc.user;bundle-version="1.0.0",
+ de.itemis.xtext.utils.jface;bundle-version="1.0.0"

+ 2 - 2
test-plugins/org.yakindu.sct.generator.genmodel.test/src/org/yakindu/sct/generator/genmodel/test/HelpIntegrationTest.java

@@ -27,7 +27,7 @@ import org.yakindu.sct.generator.core.extensions.LibraryExtensions;
 import org.yakindu.sct.generator.core.extensions.LibraryExtensions.LibraryDescriptor;
 import org.yakindu.sct.generator.genmodel.resource.FeatureResourceDescription;
 import org.yakindu.sct.generator.genmodel.test.util.SGenInjectorProvider;
-import org.yakindu.sct.generator.genmodel.ui.help.HelpSystemDocumentationProvider;
+import org.yakindu.sct.generator.genmodel.ui.help.SGenUserHelpDocumentationProvider;
 import org.yakindu.sct.model.sgen.SGenPackage;
 
 import com.google.common.collect.Iterables;
@@ -126,7 +126,7 @@ public class HelpIntegrationTest {
 			String documentation = documentationProvider
 					.getDocumentation(eObjectOrProxy);
 			if (documentation == null
-					|| HelpSystemDocumentationProvider.EMPTY_DOCUMENTATION
+					|| SGenUserHelpDocumentationProvider.EMPTY_DOCUMENTATION
 							.equals(documentation)) {
 				missingDocumentation.add(desc.getName().toString());
 			}

+ 2 - 2
test-plugins/org.yakindu.sct.generator.genmodel.test/src/org/yakindu/sct/generator/genmodel/test/util/SGenTestRuntimeModule.java

@@ -13,7 +13,7 @@ package org.yakindu.sct.generator.genmodel.test.util;
 import org.eclipse.xtext.documentation.IEObjectDocumentationProvider;
 import org.eclipse.xtext.scoping.IScopeProvider;
 import org.yakindu.sct.generator.genmodel.SGenRuntimeModule;
-import org.yakindu.sct.generator.genmodel.ui.help.HelpSystemDocumentationProvider;
+import org.yakindu.sct.generator.genmodel.ui.help.SGenUserHelpDocumentationProvider;
 
 /**
  * 
@@ -28,6 +28,6 @@ public class SGenTestRuntimeModule extends SGenRuntimeModule {
 	}
 	
 	public Class<? extends IEObjectDocumentationProvider> bindIEObjectDocumentationProvider() {
-		return HelpSystemDocumentationProvider.class;
+		return SGenUserHelpDocumentationProvider.class;
 	}
 }