1 package org.simantics.document.export;
3 import java.util.Collection;
4 import java.util.Collections;
7 import org.eclipse.core.runtime.IProgressMonitor;
8 import org.eclipse.mylyn.wikitext.core.parser.MarkupParser;
9 import org.eclipse.mylyn.wikitext.mediawiki.core.MediaWikiLanguage;
10 import org.osgi.service.prefs.Preferences;
11 import org.simantics.databoard.binding.mutable.Variant;
12 import org.simantics.databoard.type.RecordType;
13 import org.simantics.db.Resource;
14 import org.simantics.db.common.request.Queries;
15 import org.simantics.db.exception.DatabaseException;
16 import org.simantics.document.DocumentSettings;
17 import org.simantics.document.DocumentUtils;
18 import org.simantics.export.core.ExportContext;
19 import org.simantics.export.core.error.ExportException;
20 import org.simantics.export.core.intf.ExportClass;
21 import org.simantics.export.core.manager.Content;
22 import org.simantics.export.core.pdf.ExportPdfWriter;
23 import org.simantics.export.core.pdf.ExportPdfWriter.Page;
24 import org.simantics.utils.datastructures.MapList;
25 import org.simantics.utils.page.PageDesc;
27 import com.lowagie.text.DocumentException;
29 public class ExportWikiPdf implements ExportClass {
31 static RecordType wikiOptions = new RecordType();
33 MarkupParser markupParser;
34 MediaWikiLanguage language;
36 public ExportWikiPdf() {
37 markupParser = new MarkupParser();
38 language = new MediaWikiLanguage();
39 markupParser.setMarkupLanguage(language);
43 public RecordType options(ExportContext ctx, Collection<String> contentUris) throws ExportException {
48 public List<String> validate(String contentUri, ExportContext context, Variant options) {
49 return Collections.emptyList();
53 public void export(List<Content> contents, Object handle, ExportContext ctx, Variant options, IProgressMonitor monitor, MapList<Content, Content> attachmentMap) throws ExportException {
55 final ExportPdfWriter writer = (ExportPdfWriter) handle;
59 for(Content content : contents) {
61 Resource res = ctx.session.syncRequest( Queries.resource(content.url) );
63 StringBuilder wikiSb = new StringBuilder();
64 StringBuilder cssSb = new StringBuilder();
66 DocumentUtils du = new DocumentUtils();
67 du.getDocumentWikiTextRecursive(ctx.session, res, wikiSb, cssSb);
68 DocumentSettings settings = du.getDocumentSettings(ctx.session, res);
70 if ( wikiSb.length()>0 ) {
71 Page page = writer.createPage(PageDesc.A4);
72 du.print(ctx.session, res, wikiSb.toString(), cssSb.toString(), settings, page.pdfWriter, page.document);
77 } catch (DatabaseException e) {
78 throw new ExportException( e );
79 } catch (DocumentException e) {
80 throw new ExportException( e );
84 Content findClosestContent(List<Content> contents, String uri) {
85 Content result = null;
87 for ( Content c : contents ) {
88 if ( uri.startsWith(c.url) ) {
89 if ( c.url.length()>match ) {
90 match = c.url.length();
99 public void fillDefaultPrefs(ExportContext ctx, Variant options) throws ExportException {
103 public void savePref(Variant options, Preferences contentScopePrefs, Preferences workspaceScopePrefs) throws ExportException {
107 public void loadPref(Variant options, Preferences contentScopeNode, Preferences workspaceScopePrefs) throws ExportException {