Project

General

Profile

1 34342 nikon.gasp
package eu.dnetlib.validator.service.impls.listeners;
2 19683 nikon.gasp
3
import java.io.StringWriter;
4
import java.util.List;
5
import java.util.Map;
6
7
import javax.xml.transform.OutputKeys;
8
import javax.xml.transform.Transformer;
9
import javax.xml.transform.TransformerConfigurationException;
10
import javax.xml.transform.TransformerException;
11
import javax.xml.transform.TransformerFactory;
12
import javax.xml.transform.TransformerFactoryConfigurationError;
13
import javax.xml.transform.dom.DOMSource;
14
import javax.xml.transform.stream.StreamResult;
15
16
import org.apache.log4j.Logger;
17
import org.apache.velocity.Template;
18
import org.apache.velocity.VelocityContext;
19
import org.apache.velocity.app.VelocityEngine;
20
import org.apache.velocity.exception.ParseErrorException;
21
import org.apache.velocity.exception.ResourceNotFoundException;
22
import org.apache.velocity.runtime.RuntimeConstants;
23
import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
24
import org.w3c.dom.Node;
25
import org.w3c.dom.NodeList;
26
27
public class RecordXMLBuilder {
28
29
	private static Logger logger = Logger.getLogger(RecordXMLBuilder.class);
30
31
	private VelocityEngine ve = null;
32
33
	public void init() throws Exception {
34
		this.ve = new VelocityEngine();
35
		this.ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
36
		this.ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
37
		this.ve.setProperty("runtime.log.logsystem.class", "org.apache.velocity.runtime.log.NullLogSystem");
38
		this.ve.init();
39
	}
40
41
	public String buildXml(List<Map<String, String>> veloList, Object record, Map<String, String> recordValidationResult) {
42
		logger.debug("Building XML file for record");
43
		String xmlRetString = null;
44
45
		try {
46
47
			VelocityContext context = new VelocityContext();
48
			NodeList list = ((Node) record).getChildNodes();
49
	        Node recordNode = null;
50
	        for(int i = 0; i < list.getLength(); i++)
51
	        {
52
	            Node node = list.item(i);
53
	            if(node.getNodeName().equals("root"))
54
	            {
55
	            	logger.debug("root found");
56
	            	list = node.getChildNodes();
57
	            	for(i = 0; i < list.getLength(); i++)
58
			        {
59
			            node = list.item(i);
60 31252 nikon.gasp
			            logger.debug("node name: " + node.getNodeName());
61
			            logger.debug("node local name: " + node.getLocalName());
62 30662 nikon.gasp
			            if(node.getNodeName().contains("record"))
63 19683 nikon.gasp
			            {
64
			            	recordNode = node;
65
		                	logger.debug("record found");
66
		                	break;
67
			            }
68
			        }
69
	            }
70
	        }
71
	        Transformer transformer;
72
			transformer = TransformerFactory.newInstance().newTransformer();
73
			transformer.setOutputProperty(OutputKeys.INDENT, "yes");
74 19954 nikon.gasp
			transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
75 30662 nikon.gasp
//			transformer.setOutputProperty(OutputKeys.VERSION, "no");
76 19683 nikon.gasp
77 19954 nikon.gasp
78
79 19683 nikon.gasp
			StreamResult result = new StreamResult(new StringWriter());
80
			DOMSource source = new DOMSource(recordNode);
81
82
			transformer.transform(source, result);
83
84
			String xmlString = result.getWriter().toString();
85 19954 nikon.gasp
//			logger.debug("xmlstring: " + xmlString);
86 19683 nikon.gasp
			context.put("recordFull", xmlString);
87
			context.put("ruleList", veloList);
88
			context.put("record", recordValidationResult);
89 34342 nikon.gasp
			Template t = this.ve.getTemplate("/eu/dnetlib/validator/service/listeners/xml.vm");
90 19683 nikon.gasp
91
			StringWriter writer = new StringWriter();
92
93
			t.merge(context, writer);
94
			xmlRetString = writer.toString();
95
96
		} catch (TransformerConfigurationException e) {
97
			logger.error("Error while building XML file", e);
98
		} catch (TransformerFactoryConfigurationError e) {
99
			logger.error("Error while building XML file", e);
100
		} catch (TransformerException e) {
101
			logger.error("Error while building XML file", e);
102
		} catch (ResourceNotFoundException e) {
103
			logger.error("Error while building XML file", e);
104
		} catch (ParseErrorException e) {
105
			logger.error("Error while building XML file", e);
106
		} catch (Exception e) {
107
			logger.error("Error while building XML file", e);
108
		}
109
110
        return xmlRetString;
111
	}
112
}