X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.document%2Fsrc%2Forg%2Fsimantics%2Fdocument%2Fexport%2FExportWikiPdf.java;fp=bundles%2Forg.simantics.document%2Fsrc%2Forg%2Fsimantics%2Fdocument%2Fexport%2FExportWikiPdf.java;h=1737638f6653f3569f8248ae92992039e5b3f7a1;hp=0000000000000000000000000000000000000000;hb=969bd23cab98a79ca9101af33334000879fb60c5;hpb=866dba5cd5a3929bbeae85991796acb212338a08 diff --git a/bundles/org.simantics.document/src/org/simantics/document/export/ExportWikiPdf.java b/bundles/org.simantics.document/src/org/simantics/document/export/ExportWikiPdf.java new file mode 100644 index 000000000..1737638f6 --- /dev/null +++ b/bundles/org.simantics.document/src/org/simantics/document/export/ExportWikiPdf.java @@ -0,0 +1,110 @@ +package org.simantics.document.export; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.mylyn.wikitext.core.parser.MarkupParser; +import org.eclipse.mylyn.wikitext.mediawiki.core.MediaWikiLanguage; +import org.osgi.service.prefs.Preferences; +import org.simantics.databoard.binding.mutable.Variant; +import org.simantics.databoard.type.RecordType; +import org.simantics.db.Resource; +import org.simantics.db.common.request.Queries; +import org.simantics.db.exception.DatabaseException; +import org.simantics.document.DocumentSettings; +import org.simantics.document.DocumentUtils; +import org.simantics.export.core.ExportContext; +import org.simantics.export.core.error.ExportException; +import org.simantics.export.core.intf.ExportClass; +import org.simantics.export.core.manager.Content; +import org.simantics.export.core.pdf.ExportPdfWriter; +import org.simantics.export.core.pdf.ExportPdfWriter.Page; +import org.simantics.utils.datastructures.MapList; +import org.simantics.utils.page.PageDesc; + +import com.lowagie.text.DocumentException; + +public class ExportWikiPdf implements ExportClass { + + static RecordType wikiOptions = new RecordType(); + + MarkupParser markupParser; + MediaWikiLanguage language; + + public ExportWikiPdf() { + markupParser = new MarkupParser(); + language = new MediaWikiLanguage(); + markupParser.setMarkupLanguage(language); + } + + @Override + public RecordType options(ExportContext ctx, Collection contentUris) throws ExportException { + return wikiOptions; + } + + @Override + public List validate(String contentUri, ExportContext context, Variant options) { + return Collections.emptyList(); + } + + @Override + public void export(List contents, Object handle, ExportContext ctx, Variant options, IProgressMonitor monitor, MapList attachmentMap) throws ExportException { + + final ExportPdfWriter writer = (ExportPdfWriter) handle; + + try { + + for(Content content : contents) { + + Resource res = ctx.session.syncRequest( Queries.resource(content.url) ); + + StringBuilder wikiSb = new StringBuilder(); + StringBuilder cssSb = new StringBuilder(); + + DocumentUtils du = new DocumentUtils(); + du.getDocumentWikiTextRecursive(ctx.session, res, wikiSb, cssSb); + DocumentSettings settings = du.getDocumentSettings(ctx.session, res); + + if ( wikiSb.length()>0 ) { + Page page = writer.createPage(PageDesc.A4); + du.print(ctx.session, res, wikiSb.toString(), cssSb.toString(), settings, page.pdfWriter, page.document); + } + + } + + } catch (DatabaseException e) { + throw new ExportException( e ); + } catch (DocumentException e) { + throw new ExportException( e ); + } + } + + Content findClosestContent(List contents, String uri) { + Content result = null; + int match = -1; + for ( Content c : contents ) { + if ( uri.startsWith(c.url) ) { + if ( c.url.length()>match ) { + match = c.url.length(); + result = c; + } + } + } + return result; + } + + @Override + public void fillDefaultPrefs(ExportContext ctx, Variant options) throws ExportException { + } + + @Override + public void savePref(Variant options, Preferences contentScopePrefs, Preferences workspaceScopePrefs) throws ExportException { + } + + @Override + public void loadPref(Variant options, Preferences contentScopeNode, Preferences workspaceScopePrefs) throws ExportException { + } + +}