--- /dev/null
+package org.simantics.document.export;\r
+\r
+import java.util.Collection;\r
+import java.util.Collections;\r
+import java.util.List;\r
+\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.mylyn.wikitext.core.parser.MarkupParser;\r
+import org.eclipse.mylyn.wikitext.mediawiki.core.MediaWikiLanguage;\r
+import org.osgi.service.prefs.Preferences;\r
+import org.simantics.databoard.binding.mutable.Variant;\r
+import org.simantics.databoard.type.RecordType;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.request.Queries;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.document.DocumentSettings;\r
+import org.simantics.document.DocumentUtils;\r
+import org.simantics.export.core.ExportContext;\r
+import org.simantics.export.core.error.ExportException;\r
+import org.simantics.export.core.intf.ExportClass;\r
+import org.simantics.export.core.manager.Content;\r
+import org.simantics.export.core.pdf.ExportPdfWriter;\r
+import org.simantics.export.core.pdf.ExportPdfWriter.Page;\r
+import org.simantics.utils.datastructures.MapList;\r
+import org.simantics.utils.page.PageDesc;\r
+\r
+import com.lowagie.text.DocumentException;\r
+\r
+public class ExportWikiPdf implements ExportClass {\r
+\r
+ static RecordType wikiOptions = new RecordType();\r
+ \r
+ MarkupParser markupParser;\r
+ MediaWikiLanguage language;\r
+ \r
+ public ExportWikiPdf() {\r
+ markupParser = new MarkupParser();\r
+ language = new MediaWikiLanguage();\r
+ markupParser.setMarkupLanguage(language);\r
+ }\r
+ \r
+ @Override\r
+ public RecordType options(ExportContext ctx, Collection<String> contentUris) throws ExportException {\r
+ return wikiOptions;\r
+ }\r
+\r
+ @Override\r
+ public List<String> validate(String contentUri, ExportContext context, Variant options) {\r
+ return Collections.emptyList();\r
+ }\r
+\r
+ @Override\r
+ public void export(List<Content> contents, Object handle, ExportContext ctx, Variant options, IProgressMonitor monitor, MapList<Content, Content> attachmentMap) throws ExportException {\r
+ \r
+ final ExportPdfWriter writer = (ExportPdfWriter) handle;\r
+ \r
+ try {\r
+ \r
+ for(Content content : contents) {\r
+ \r
+ Resource res = ctx.session.syncRequest( Queries.resource(content.url) );\r
+ \r
+ StringBuilder wikiSb = new StringBuilder();\r
+ StringBuilder cssSb = new StringBuilder();\r
+\r
+ DocumentUtils du = new DocumentUtils();\r
+ du.getDocumentWikiTextRecursive(ctx.session, res, wikiSb, cssSb);\r
+ DocumentSettings settings = du.getDocumentSettings(ctx.session, res);\r
+\r
+ if ( wikiSb.length()>0 ) {\r
+ Page page = writer.createPage(PageDesc.A4);\r
+ du.print(ctx.session, res, wikiSb.toString(), cssSb.toString(), settings, page.pdfWriter, page.document);\r
+ }\r
+\r
+ }\r
+\r
+ } catch (DatabaseException e) {\r
+ throw new ExportException( e ); \r
+ } catch (DocumentException e) {\r
+ throw new ExportException( e ); \r
+ }\r
+ }\r
+ \r
+ Content findClosestContent(List<Content> contents, String uri) {\r
+ Content result = null;\r
+ int match = -1;\r
+ for ( Content c : contents ) {\r
+ if ( uri.startsWith(c.url) ) {\r
+ if ( c.url.length()>match ) {\r
+ match = c.url.length();\r
+ result = c;\r
+ }\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+\r
+ @Override\r
+ public void fillDefaultPrefs(ExportContext ctx, Variant options) throws ExportException {\r
+ }\r
+\r
+ @Override\r
+ public void savePref(Variant options, Preferences contentScopePrefs, Preferences workspaceScopePrefs) throws ExportException {\r
+ }\r
+\r
+ @Override\r
+ public void loadPref(Variant options, Preferences contentScopeNode, Preferences workspaceScopePrefs) throws ExportException {\r
+ }\r
+ \r
+}\r