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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
1 package de.mpg.mpiwg.berlin.mpdl.xml.transform;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
2
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
3 import java.io.IOException;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
4 import java.io.StringWriter;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
5 import java.net.URL;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
6
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
7 import javax.xml.transform.stream.StreamSource;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
8
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
9 import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
10
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
11 import net.sf.saxon.s9api.Processor;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
12 import net.sf.saxon.s9api.QName;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
13 import net.sf.saxon.s9api.SaxonApiException;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
14 import net.sf.saxon.s9api.Serializer;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
15 import net.sf.saxon.s9api.XdmAtomicValue;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
16 import net.sf.saxon.s9api.XdmValue;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
17 import net.sf.saxon.s9api.XsltCompiler;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
18 import net.sf.saxon.s9api.XsltExecutable;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
19 import net.sf.saxon.s9api.XsltTransformer;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
20
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
21 public class FragmentTransformer {
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
22 private Processor processor;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
23 private XsltCompiler xsltCompiler;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
24 private XsltTransformer xsltFragmentTransformer;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
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
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
28 }
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
29
23
e845310098ba diverse Korrekturen
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents: 18
diff changeset
30 public FragmentTransformer(String xmlFileName) throws ApplicationException {
18
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
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
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
38 }
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
39
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
40 private void init() throws ApplicationException {
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
41 try {
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
42 processor = new Processor(false);
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
43 xsltCompiler = processor.newXsltCompiler();
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
44 URL getFragmentXslUrl = FragmentTransformer.class.getResource("getFragment.xsl");
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
45 StreamSource xslStreamSource = new StreamSource(getFragmentXslUrl.openStream());
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
46 XsltExecutable xsltExecutable = xsltCompiler.compile(xslStreamSource);
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
47 xsltFragmentTransformer = xsltExecutable.load();
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
48 } catch (SaxonApiException e) {
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
49 throw new ApplicationException(e);
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
50 } catch (IOException e) {
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
51 throw new ApplicationException(e);
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
52 }
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
53 }
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
54
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
55 public String getFragment(String xmlFileName, String ms1Name, int ms1Pos, String ms2Name, int ms2Pos) throws ApplicationException {
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
56 String pageFragment = null;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
57 try {
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
58 StreamSource xmlDoc = new StreamSource(xmlFileName);
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
59 Serializer serializer = new Serializer();
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
60 serializer.setOutputWriter(new StringWriter());
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
61 serializer.setOutputProperty(Serializer.Property.INDENT, "yes");
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
62 xsltFragmentTransformer.setSource(xmlDoc); // needs some time for bigger documents
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
63 xsltFragmentTransformer.setDestination(serializer);
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
64 QName ms1NameQName = new QName("ms1Name");
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
65 XdmValue ms1NameXdmValue = new XdmAtomicValue(ms1Name);
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
66 QName ms1PositionQName = new QName("ms1Position");
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
67 XdmValue ms1PositionXdmValue = new XdmAtomicValue(ms1Pos);
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
68 QName ms2NameQName = new QName("ms2Name");
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
69 XdmValue ms2NameXdmValue = new XdmAtomicValue(ms2Name);
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
70 QName ms2PositionQName = new QName("ms2Position");
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
71 XdmValue ms2PositionXdmValue = new XdmAtomicValue(ms2Pos);
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
72 xsltFragmentTransformer.setParameter(ms1NameQName, ms1NameXdmValue);
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
73 xsltFragmentTransformer.setParameter(ms1PositionQName, ms1PositionXdmValue);
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
74 xsltFragmentTransformer.setParameter(ms2NameQName, ms2NameXdmValue);
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
75 xsltFragmentTransformer.setParameter(ms2PositionQName, ms2PositionXdmValue);
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
76 xsltFragmentTransformer.transform(); // needs some time for bigger documents
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
77 pageFragment = serializer.getOutputDestination().toString();
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
78 } catch (Exception e) {
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
79 throw new ApplicationException(e);
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
80 }
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
81 return pageFragment;
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
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
dc5e9fcb3fdc Erstellung
Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
parents:
diff changeset
112 }