--- /dev/null
+package org.simantics.views.swt.client.impl;\r
+\r
+import java.io.IOException;\r
+\r
+import org.eclipse.jface.layout.GridDataFactory;\r
+import org.eclipse.jface.layout.GridLayoutFactory;\r
+import org.eclipse.mylyn.wikitext.core.parser.MarkupParser;\r
+import org.eclipse.swt.browser.Browser;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.simantics.Simantics;\r
+import org.simantics.browsing.ui.common.ErrorLogger;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.variable.Variable;\r
+import org.simantics.db.request.Read;\r
+import org.simantics.scl.runtime.function.Function1;\r
+import org.simantics.utils.FileUtils;\r
+import org.simantics.utils.datastructures.map.Tuple;\r
+import org.simantics.utils.ui.BundleUtils;\r
+import org.simantics.views.swt.client.base.SingleSWTViewNode;\r
+import org.simantics.wiki.ui.SimanticsDialect;\r
+import org.simantics.wiki.ui.language.MediaWikiLanguage;\r
+\r
+public class SWTWikiBrowser extends SingleSWTViewNode<Browser> {\r
+\r
+ private static final long serialVersionUID = 5826022972081217837L;\r
+ \r
+ public String document;\r
+ public Variable variable;\r
+ public Function1<String, Boolean> navigate;\r
+ public Variable edited;\r
+\r
+ private Tuple lastAppliedParametrization;\r
+\r
+ @Override\r
+ public void reset() {\r
+ super.reset();\r
+ lastAppliedParametrization = null;\r
+ }\r
+ \r
+ @Override\r
+ public void createControls(Composite parent) {\r
+\r
+ GridDataFactory.fillDefaults().grab(true, true).applyTo(parent);\r
+ GridLayoutFactory.fillDefaults().applyTo(parent);\r
+\r
+ control = new Browser(parent, style);\r
+ GridDataFactory.fillDefaults().grab(true, true).applyTo(control);\r
+\r
+ setProperties();\r
+\r
+ }\r
+\r
+ public void synchronizeVariable(Variable variable) {\r
+ \r
+ }\r
+ \r
+ public void synchronizeEdited(Variable edited) {\r
+ propertyCallback.apply("edited", edited);\r
+ }\r
+\r
+ public void synchronizeDocument(final String document) {\r
+ \r
+ if(document != null) {\r
+ \r
+ final Variable variable = SWTWikiBrowser.this.variable;\r
+ if (variable == null) {\r
+ return;\r
+ }\r
+\r
+ Tuple checkParam = new Tuple(document, variable);\r
+ if (checkParam.equals(lastAppliedParametrization))\r
+ return;\r
+ \r
+ lastAppliedParametrization = checkParam;\r
+\r
+ try {\r
+ \r
+ String markup = Simantics.getSession().syncRequest(new Read<String>() {\r
+ @Override\r
+ public String perform(ReadGraph graph) throws DatabaseException {\r
+ return SimanticsDialect.INSTANCE.apply(graph, variable, document);\r
+ }\r
+ });\r
+\r
+ MarkupParser markupParser = new MarkupParser();\r
+ MediaWikiLanguage language = new MediaWikiLanguage();\r
+ markupParser.setMarkupLanguage(language);\r
+ String htmlContent = markupParser.parseToHtml(markup);\r
+ if (htmlContent == null)\r
+ return;\r
+ \r
+ final Browser control = this.control;\r
+ if (control == null)\r
+ return;\r
+ control.setText(htmlContent);\r
+ \r
+ } catch (DatabaseException e) {\r
+ ErrorLogger.defaultLogError(e);\r
+ } \r
+ \r
+ }\r
+ }\r
+\r
+}\r