Project

General

Profile

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

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

    
7
import org.apache.commons.logging.Log;
8
import org.apache.commons.logging.LogFactory;
9
import org.dom4j.Document;
10
import org.dom4j.DocumentException;
11
import org.dom4j.Element;
12
import org.dom4j.Node;
13
import org.dom4j.io.SAXReader;
14
import org.springframework.core.io.ClassPathResource;
15

    
16
import eu.dnetlib.miscutils.functional.UnaryFunction;
17
import eu.dnetlib.miscutils.functional.xml.ApplyXslt;
18

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

    
47
	}
48
}
(2-2/2)