]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document/src/org/simantics/document/export/ExportWikiPdf.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document / src / org / simantics / document / export / ExportWikiPdf.java
1 package org.simantics.document.export;\r
2 \r
3 import java.util.Collection;\r
4 import java.util.Collections;\r
5 import java.util.List;\r
6 \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
26 \r
27 import com.lowagie.text.DocumentException;\r
28 \r
29 public class ExportWikiPdf implements ExportClass {\r
30 \r
31         static RecordType wikiOptions = new RecordType();\r
32         \r
33         MarkupParser markupParser;\r
34         MediaWikiLanguage language;\r
35         \r
36         public ExportWikiPdf() {\r
37                 markupParser = new MarkupParser();\r
38                 language = new MediaWikiLanguage();\r
39                 markupParser.setMarkupLanguage(language);\r
40         }\r
41         \r
42         @Override\r
43         public RecordType options(ExportContext ctx, Collection<String> contentUris) throws ExportException {\r
44                 return wikiOptions;\r
45         }\r
46 \r
47         @Override\r
48         public List<String> validate(String contentUri, ExportContext context, Variant options) {\r
49                 return Collections.emptyList();\r
50         }\r
51 \r
52         @Override\r
53         public void export(List<Content> contents, Object handle, ExportContext ctx, Variant options, IProgressMonitor monitor, MapList<Content, Content> attachmentMap) throws ExportException {\r
54                 \r
55                 final ExportPdfWriter writer = (ExportPdfWriter) handle;\r
56                 \r
57                 try {\r
58                         \r
59                         for(Content content : contents) {\r
60                                 \r
61                                 Resource res = ctx.session.syncRequest( Queries.resource(content.url) );\r
62                         \r
63                                 StringBuilder wikiSb = new StringBuilder();\r
64                                 StringBuilder cssSb = new StringBuilder();\r
65 \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
69 \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
73                                 }\r
74 \r
75                         }\r
76 \r
77                 } catch (DatabaseException e) {\r
78                         throw new ExportException( e ); \r
79                 } catch (DocumentException e) {\r
80                         throw new ExportException( e ); \r
81                 }\r
82         }\r
83         \r
84         Content findClosestContent(List<Content> contents, String uri) {\r
85                 Content result = null;\r
86                 int match = -1;\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
91                                         result = c;\r
92                                 }\r
93                         }\r
94                 }\r
95                 return result;\r
96         }\r
97 \r
98         @Override\r
99         public void fillDefaultPrefs(ExportContext ctx, Variant options) throws ExportException {\r
100         }\r
101 \r
102         @Override\r
103         public void savePref(Variant options, Preferences contentScopePrefs, Preferences workspaceScopePrefs) throws ExportException {\r
104         }\r
105 \r
106         @Override\r
107         public void loadPref(Variant options, Preferences contentScopeNode, Preferences workspaceScopePrefs) throws ExportException {\r
108         }\r
109         \r
110 }\r