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