Mercurial > hg > mpdl-group
comparison software/mpdl-services/mpiwg-mpdl-cms/src/de/mpg/mpiwg/berlin/mpdl/cms/transform/PageTransformer.java @ 23:e845310098ba
diverse Korrekturen
author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 27 Nov 2012 12:35:19 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
22:6a45a982c333 | 23:e845310098ba |
---|---|
1 package de.mpg.mpiwg.berlin.mpdl.cms.transform; | |
2 | |
3 import java.io.IOException; | |
4 import java.io.StringReader; | |
5 import java.io.StringWriter; | |
6 import java.net.URL; | |
7 | |
8 import javax.xml.transform.stream.StreamSource; | |
9 | |
10 import de.mpg.mpiwg.berlin.mpdl.cms.document.MetadataRecord; | |
11 import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException; | |
12 | |
13 import net.sf.saxon.s9api.Processor; | |
14 import net.sf.saxon.s9api.QName; | |
15 import net.sf.saxon.s9api.SaxonApiException; | |
16 import net.sf.saxon.s9api.Serializer; | |
17 import net.sf.saxon.s9api.XdmAtomicValue; | |
18 import net.sf.saxon.s9api.XdmValue; | |
19 import net.sf.saxon.s9api.XsltCompiler; | |
20 import net.sf.saxon.s9api.XsltExecutable; | |
21 import net.sf.saxon.s9api.XsltTransformer; | |
22 | |
23 public class PageTransformer { | |
24 private int counter = 0; | |
25 private Processor processor; | |
26 private XsltCompiler xsltCompiler; | |
27 private XsltTransformer pageTeiTransformer; | |
28 private XsltTransformer pageEchoTransformer; | |
29 private XsltTransformer pageArchimedesTransformer; | |
30 private XsltTransformer pageXhtmlTransformer; | |
31 private XsltTransformer pageXmlTransformer; | |
32 | |
33 public PageTransformer() throws ApplicationException { | |
34 init(); | |
35 } | |
36 | |
37 private void init() throws ApplicationException { | |
38 try { | |
39 processor = new Processor(false); | |
40 xsltCompiler = processor.newXsltCompiler(); | |
41 URL getFragmentXslUrl = PageTransformer.class.getResource("pageTei.xsl"); | |
42 StreamSource xslStreamSource = new StreamSource(getFragmentXslUrl.openStream()); | |
43 XsltExecutable xsltExecutable = xsltCompiler.compile(xslStreamSource); | |
44 pageTeiTransformer = xsltExecutable.load(); | |
45 getFragmentXslUrl = PageTransformer.class.getResource("pageEcho.xsl"); | |
46 xslStreamSource = new StreamSource(getFragmentXslUrl.openStream()); | |
47 xsltExecutable = xsltCompiler.compile(xslStreamSource); | |
48 pageEchoTransformer = xsltExecutable.load(); | |
49 getFragmentXslUrl = PageTransformer.class.getResource("pageArchimedes.xsl"); | |
50 xslStreamSource = new StreamSource(getFragmentXslUrl.openStream()); | |
51 xsltExecutable = xsltCompiler.compile(xslStreamSource); | |
52 pageArchimedesTransformer = xsltExecutable.load(); | |
53 getFragmentXslUrl = PageTransformer.class.getResource("pageXhtml.xsl"); | |
54 xslStreamSource = new StreamSource(getFragmentXslUrl.openStream()); | |
55 xsltExecutable = xsltCompiler.compile(xslStreamSource); | |
56 pageXhtmlTransformer = xsltExecutable.load(); | |
57 getFragmentXslUrl = PageTransformer.class.getResource("pageXml.xsl"); | |
58 xslStreamSource = new StreamSource(getFragmentXslUrl.openStream()); | |
59 xsltExecutable = xsltCompiler.compile(xslStreamSource); | |
60 pageXmlTransformer = xsltExecutable.load(); | |
61 } catch (SaxonApiException e) { | |
62 throw new ApplicationException(e); | |
63 } catch (IOException e) { | |
64 throw new ApplicationException(e); | |
65 } | |
66 } | |
67 | |
68 public String transform(String inputStr, MetadataRecord mdRecord, int page, String outputFormat) throws ApplicationException { | |
69 String pageFragment = null; | |
70 String schemaName = mdRecord.getSchemaName(); | |
71 if (schemaName != null) | |
72 schemaName = schemaName.toLowerCase(); | |
73 try { | |
74 XsltTransformer transformer = null; | |
75 if (schemaName != null && schemaName.equals("tei") && outputFormat.equals("html")) | |
76 transformer = pageTeiTransformer; | |
77 else if (schemaName != null && schemaName.equals("echo") && outputFormat.equals("html")) | |
78 transformer = pageEchoTransformer; | |
79 else if (schemaName != null && schemaName.equals("archimedes") && outputFormat.equals("html")) | |
80 transformer = pageArchimedesTransformer; | |
81 else if (schemaName != null && (schemaName.equals("html") || schemaName.equals("xhtml")) && outputFormat.equals("html")) | |
82 transformer = pageXhtmlTransformer; | |
83 else if (outputFormat.equals("xmlDisplay")) | |
84 transformer = pageXmlTransformer; | |
85 else | |
86 transformer = pageTeiTransformer; | |
87 StringReader inputStrReader = new StringReader(inputStr); | |
88 StreamSource xmlDoc = new StreamSource(inputStrReader); | |
89 Serializer serializer = new Serializer(); | |
90 serializer.setOutputWriter(new StringWriter()); | |
91 serializer.setOutputProperty(Serializer.Property.SAXON_STYLESHEET_VERSION, "2.0"); | |
92 serializer.setOutputProperty(Serializer.Property.METHOD, "xml"); | |
93 serializer.setOutputProperty(Serializer.Property.MEDIA_TYPE, "text/html"); | |
94 serializer.setOutputProperty(Serializer.Property.INDENT, "no"); | |
95 serializer.setOutputProperty(Serializer.Property.OMIT_XML_DECLARATION, "yes"); | |
96 serializer.setOutputProperty(Serializer.Property.ENCODING, "utf-8"); | |
97 transformer.setSource(xmlDoc); | |
98 transformer.setDestination(serializer); | |
99 String echoFiguresDir = mdRecord.getEchoFiguresDir(); | |
100 QName echoFiguresDirQName = new QName("echoFiguresDir"); | |
101 XdmValue echoFiguresDirXdmValue = new XdmAtomicValue(echoFiguresDir); | |
102 transformer.setParameter(echoFiguresDirQName, echoFiguresDirXdmValue); | |
103 String echoPageImgDir = mdRecord.getEchoPageImageDir(); | |
104 QName echoPageImgDirQName = new QName("echoPageImgDir"); | |
105 XdmValue echoPageImgDirXdmValue = new XdmAtomicValue(echoPageImgDir); | |
106 transformer.setParameter(echoPageImgDirQName, echoPageImgDirXdmValue); | |
107 transformer.transform(); | |
108 pageFragment = serializer.getOutputDestination().toString(); | |
109 } catch (Exception e) { | |
110 throw new ApplicationException(e); | |
111 } | |
112 counter++; | |
113 if (counter == 100) | |
114 init(); | |
115 return pageFragment; | |
116 } | |
117 | |
118 } |