Project

General

Profile

1
package eu.dnetlib.data.transform;
2

    
3
import java.io.StringReader;
4
import java.util.Map;
5
import java.util.Map.Entry;
6

    
7
import javax.xml.transform.Transformer;
8
import javax.xml.transform.TransformerFactory;
9

    
10
import org.apache.commons.collections.MapUtils;
11
import org.apache.commons.logging.Log;
12
import org.apache.commons.logging.LogFactory;
13
import org.dom4j.io.DocumentSource;
14
import org.dom4j.io.SAXReader;
15

    
16
public class XsltRowTransformerFactory {
17

    
18
	private static final Log log = LogFactory.getLog(XsltRowTransformerFactory.class); // NOPMD by marko on 11/24/08 5:02 PM
19

    
20
	public XsltRowTransformer getTransformer(final String xslt) {
21
		return doGetTransformer(xslt, null);
22
	}
23

    
24
	public XsltRowTransformer getTransformer(final String xslt, final Map<String, Object> params) {
25
		return doGetTransformer(xslt, params);
26
	}
27

    
28
	private XsltRowTransformer doGetTransformer(final String xslt, final Map<String, Object> params) {
29
		try {
30
			if ((xslt == null) || xslt.isEmpty()) return new XsltRowTransformer(null);
31

    
32
			final TransformerFactory factory = TransformerFactory.newInstance();
33

    
34
			if (log.isDebugEnabled()) {
35
				log.debug("using transformer factory: '" + factory.getClass().getCanonicalName() + "'");
36
			}
37

    
38
			final Transformer t = factory.newTransformer(new DocumentSource(new SAXReader().read(new StringReader(xslt))));
39
			if (!MapUtils.isEmpty(params)) {
40
				for (final Entry<String, Object> e : params.entrySet()) {
41
					log.debug(String.format("using xslt param: %s - %s", e.getKey(), e.getValue()));
42
					t.setParameter(e.getKey(), e.getValue());
43
				}
44
			}
45
			return new XsltRowTransformer(t);
46
		} catch (final Exception e) {
47
			throw new RuntimeException("Error generating transformer from xslt:\n" + xslt, e);
48
		}
49
	}
50

    
51
	public static XsltRowTransformer newInstance(final String xslt) {
52
		return new XsltRowTransformerFactory().getTransformer(xslt);
53
	}
54

    
55
	public static XsltRowTransformer newInstance(final String xslt, final Map<String, Object> params) {
56
		return new XsltRowTransformerFactory().getTransformer(xslt, params);
57
	}
58

    
59
}
(5-5/5)