Project

General

Profile

1
package eu.dnetlib.msro.eagle.workflows.nodes.transform.editions;
2

    
3
import java.io.File;
4
import java.io.IOException;
5
import java.io.StringReader;
6
import java.util.Map;
7

    
8
import javax.xml.transform.stream.StreamSource;
9

    
10
import org.apache.commons.logging.Log;
11
import org.apache.commons.logging.LogFactory;
12
import org.dom4j.Document;
13
import org.dom4j.DocumentException;
14
import org.dom4j.Element;
15
import org.dom4j.Node;
16
import org.dom4j.io.SAXReader;
17

    
18
import eu.dnetlib.miscutils.functional.UnaryFunction;
19
import eu.dnetlib.miscutils.functional.xml.ApplyXslt;
20

    
21
public class EditionXsltUnaryFunction implements UnaryFunction<String, String> {
22
	private static final Log log = LogFactory.getLog(EditionXsltUnaryFunction.class);
23
	
24
	private ApplyXslt xslt;
25
	private SAXReader reader;
26
	
27
	public EditionXsltUnaryFunction(final String xsltPath, Map<String, String> xsltParams) throws IOException {
28
		
29
		this.xslt = new ApplyXslt(new StreamSource(new File(xsltPath)), xsltPath, xsltParams);
30
		this.reader = new SAXReader();
31
	}
32
	
33
	/**
34
	 * xPath the <metadata> node and applies xslt 2.0 transformation
35
	 */
36
	@Override
37
	public String evaluate(String input) {
38
		try {
39
			Document doc = reader.read(new StringReader(input));
40
			Node result = doc.selectSingleNode("//*[local-name()='metadata']/*");
41
			String edition = xslt.evaluate(result.asXML());
42
			result.detach();
43
			((Element) doc.selectSingleNode("//*[local-name()='metadata']")).add(reader.read(new StringReader(edition)).getRootElement());
44
			return doc.asXML();
45
		} catch (DocumentException e) {
46
			log.error("Problem creating dom4j document from \n" + input, e);
47
			throw new RuntimeException(e);
48
		}
49

    
50
	}
51
}
(2-2/2)