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 }