Mercurial > hg > mpdl-group
annotate software/mpdl-services/mpiwg-mpdl-xml/src/de/mpg/mpiwg/berlin/mpdl/xml/transform/FragmentTransformer.java @ 23:e845310098ba
diverse Korrekturen
author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 27 Nov 2012 12:35:19 +0100 |
parents | dc5e9fcb3fdc |
children |
rev | line source |
---|---|
18 | 1 package de.mpg.mpiwg.berlin.mpdl.xml.transform; |
2 | |
3 import java.io.IOException; | |
4 import java.io.StringWriter; | |
5 import java.net.URL; | |
6 | |
7 import javax.xml.transform.stream.StreamSource; | |
8 | |
9 import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException; | |
10 | |
11 import net.sf.saxon.s9api.Processor; | |
12 import net.sf.saxon.s9api.QName; | |
13 import net.sf.saxon.s9api.SaxonApiException; | |
14 import net.sf.saxon.s9api.Serializer; | |
15 import net.sf.saxon.s9api.XdmAtomicValue; | |
16 import net.sf.saxon.s9api.XdmValue; | |
17 import net.sf.saxon.s9api.XsltCompiler; | |
18 import net.sf.saxon.s9api.XsltExecutable; | |
19 import net.sf.saxon.s9api.XsltTransformer; | |
20 | |
21 public class FragmentTransformer { | |
22 private Processor processor; | |
23 private XsltCompiler xsltCompiler; | |
24 private XsltTransformer xsltFragmentTransformer; | |
25 | |
23
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
26 public FragmentTransformer() throws ApplicationException { |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
27 init(); |
18 | 28 } |
29 | |
23
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
30 public FragmentTransformer(String xmlFileName) throws ApplicationException { |
18 | 31 init(); |
23
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
32 try { |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
33 StreamSource xmlDoc = new StreamSource(xmlFileName); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
34 xsltFragmentTransformer.setSource(xmlDoc); // needs some time for bigger documents |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
35 } catch (SaxonApiException e) { |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
36 throw new ApplicationException(e); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
37 } |
18 | 38 } |
39 | |
40 private void init() throws ApplicationException { | |
41 try { | |
42 processor = new Processor(false); | |
43 xsltCompiler = processor.newXsltCompiler(); | |
44 URL getFragmentXslUrl = FragmentTransformer.class.getResource("getFragment.xsl"); | |
45 StreamSource xslStreamSource = new StreamSource(getFragmentXslUrl.openStream()); | |
46 XsltExecutable xsltExecutable = xsltCompiler.compile(xslStreamSource); | |
47 xsltFragmentTransformer = xsltExecutable.load(); | |
48 } catch (SaxonApiException e) { | |
49 throw new ApplicationException(e); | |
50 } catch (IOException e) { | |
51 throw new ApplicationException(e); | |
52 } | |
53 } | |
54 | |
55 public String getFragment(String xmlFileName, String ms1Name, int ms1Pos, String ms2Name, int ms2Pos) throws ApplicationException { | |
56 String pageFragment = null; | |
57 try { | |
58 StreamSource xmlDoc = new StreamSource(xmlFileName); | |
59 Serializer serializer = new Serializer(); | |
60 serializer.setOutputWriter(new StringWriter()); | |
61 serializer.setOutputProperty(Serializer.Property.INDENT, "yes"); | |
62 xsltFragmentTransformer.setSource(xmlDoc); // needs some time for bigger documents | |
63 xsltFragmentTransformer.setDestination(serializer); | |
64 QName ms1NameQName = new QName("ms1Name"); | |
65 XdmValue ms1NameXdmValue = new XdmAtomicValue(ms1Name); | |
66 QName ms1PositionQName = new QName("ms1Position"); | |
67 XdmValue ms1PositionXdmValue = new XdmAtomicValue(ms1Pos); | |
68 QName ms2NameQName = new QName("ms2Name"); | |
69 XdmValue ms2NameXdmValue = new XdmAtomicValue(ms2Name); | |
70 QName ms2PositionQName = new QName("ms2Position"); | |
71 XdmValue ms2PositionXdmValue = new XdmAtomicValue(ms2Pos); | |
72 xsltFragmentTransformer.setParameter(ms1NameQName, ms1NameXdmValue); | |
73 xsltFragmentTransformer.setParameter(ms1PositionQName, ms1PositionXdmValue); | |
74 xsltFragmentTransformer.setParameter(ms2NameQName, ms2NameXdmValue); | |
75 xsltFragmentTransformer.setParameter(ms2PositionQName, ms2PositionXdmValue); | |
76 xsltFragmentTransformer.transform(); // needs some time for bigger documents | |
77 pageFragment = serializer.getOutputDestination().toString(); | |
78 } catch (Exception e) { | |
79 throw new ApplicationException(e); | |
80 } | |
81 return pageFragment; | |
82 } | |
23
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
83 |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
84 public String getFragment(String ms1Name, int ms1Pos, String ms2Name, int ms2Pos) throws ApplicationException { |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
85 String pageFragment = null; |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
86 try { |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
87 Serializer serializer = new Serializer(); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
88 serializer.setOutputWriter(new StringWriter()); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
89 serializer.setOutputProperty(Serializer.Property.INDENT, "yes"); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
90 xsltFragmentTransformer.setDestination(serializer); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
91 QName ms1NameQName = new QName("ms1Name"); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
92 XdmValue ms1NameXdmValue = new XdmAtomicValue(ms1Name); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
93 QName ms1PositionQName = new QName("ms1Position"); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
94 XdmValue ms1PositionXdmValue = new XdmAtomicValue(ms1Pos); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
95 QName ms2NameQName = new QName("ms2Name"); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
96 XdmValue ms2NameXdmValue = new XdmAtomicValue(ms2Name); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
97 QName ms2PositionQName = new QName("ms2Position"); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
98 XdmValue ms2PositionXdmValue = new XdmAtomicValue(ms2Pos); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
99 xsltFragmentTransformer.setParameter(ms1NameQName, ms1NameXdmValue); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
100 xsltFragmentTransformer.setParameter(ms1PositionQName, ms1PositionXdmValue); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
101 xsltFragmentTransformer.setParameter(ms2NameQName, ms2NameXdmValue); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
102 xsltFragmentTransformer.setParameter(ms2PositionQName, ms2PositionXdmValue); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
103 xsltFragmentTransformer.transform(); // needs some time for bigger documents |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
104 pageFragment = serializer.getOutputDestination().toString(); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
105 } catch (Exception e) { |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
106 throw new ApplicationException(e); |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
107 } |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
108 return pageFragment; |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
109 } |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
110 |
e845310098ba
diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
18
diff
changeset
|
111 |
18 | 112 } |