1
22
23 package com.liferay.portlet.journal.util;
24
25 import com.liferay.portal.kernel.util.ByteArrayMaker;
26 import com.liferay.portal.kernel.util.GetterUtil;
27 import com.liferay.portal.kernel.util.LocaleUtil;
28 import com.liferay.portal.kernel.util.StringPool;
29 import com.liferay.portlet.journal.TransformException;
30
31 import java.io.StringReader;
32 import java.io.UnsupportedEncodingException;
33
34 import java.util.Locale;
35 import java.util.Map;
36
37 import javax.xml.transform.Transformer;
38 import javax.xml.transform.TransformerConfigurationException;
39 import javax.xml.transform.TransformerException;
40 import javax.xml.transform.TransformerFactory;
41 import javax.xml.transform.stream.StreamResult;
42 import javax.xml.transform.stream.StreamSource;
43
44
50 public class JournalXslUtil {
51
52 public static String transform(
53 Map<String, String> tokens, String languageId, String xml,
54 String script)
55 throws TransformException, UnsupportedEncodingException {
56
57 ByteArrayMaker bam = new ByteArrayMaker();
58
59 long companyId = GetterUtil.getLong(tokens.get("company_id"));
60 Locale locale = LocaleUtil.fromLanguageId(languageId);
61
62 JournalXslErrorListener errorListener = new JournalXslErrorListener(
63 companyId, locale);
64
65 try {
66 StreamSource xmlSource = new StreamSource(new StringReader(xml));
67 StreamSource scriptSource = new StreamSource(
68 new StringReader(script));
69
70 TransformerFactory transformerFactory =
71 TransformerFactory.newInstance();
72
73 transformerFactory.setURIResolver(
74 new URIResolver(tokens, languageId));
75 transformerFactory.setErrorListener(errorListener);
76
77 Transformer transformer =
78 transformerFactory.newTransformer(scriptSource);
79
80 transformer.transform(xmlSource, new StreamResult(bam));
81 }
82 catch (TransformerConfigurationException tce) {
83 throw new TransformException(errorListener.getMessageAndLocation());
84 }
85 catch (TransformerException te) {
86 throw new TransformException(errorListener.getMessageAndLocation());
87 }
88
89 return bam.toString(StringPool.UTF8);
90 }
91
92 }