19 package org.sleuthkit.autopsy.coreutils;
 
   22 import java.io.FileInputStream;
 
   23 import java.io.FileNotFoundException;
 
   24 import java.io.FileOutputStream;
 
   25 import java.io.IOException;
 
   26 import java.io.OutputStreamWriter;
 
   27 import java.io.UnsupportedEncodingException;
 
   28 import java.nio.file.Paths;
 
   29 import java.util.logging.Level;
 
   30 import javax.xml.XMLConstants;
 
   31 import javax.xml.parsers.DocumentBuilder;
 
   32 import javax.xml.parsers.DocumentBuilderFactory;
 
   33 import javax.xml.parsers.ParserConfigurationException;
 
   34 import javax.xml.transform.OutputKeys;
 
   35 import javax.xml.transform.Result;
 
   36 import javax.xml.transform.Transformer;
 
   37 import javax.xml.transform.TransformerConfigurationException;
 
   38 import javax.xml.transform.TransformerException;
 
   39 import javax.xml.transform.TransformerFactory;
 
   40 import javax.xml.transform.dom.DOMResult;
 
   41 import javax.xml.transform.dom.DOMSource;
 
   42 import javax.xml.transform.stream.StreamResult;
 
   43 import javax.xml.validation.Schema;
 
   44 import javax.xml.validation.SchemaFactory;
 
   45 import javax.xml.validation.Validator;
 
   46 import org.w3c.dom.Document;
 
   47 import org.xml.sax.SAXException;
 
   65     public static Document 
createDocument() throws ParserConfigurationException {
 
   66         DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
 
   67         DocumentBuilder builder = builderFactory.newDocumentBuilder();
 
   68         return builder.newDocument();
 
   85     public static <T> Document 
loadDocument(String docPath, Class<T> clazz, String schemaResourceName) 
throws IOException, ParserConfigurationException, SAXException {
 
  102     public static Document 
loadDocument(String docPath) 
throws ParserConfigurationException, SAXException, IOException {
 
  103         DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
 
  104         DocumentBuilder builder = builderFactory.newDocumentBuilder();
 
  105         Document doc = builder.parse(
new FileInputStream(docPath));
 
  119     public static <T> 
void validateDocument(
final Document doc, Class<T> clazz, String schemaResourceName) 
throws SAXException, IOException {
 
  122         SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
 
  123         Schema schema = schemaFactory.newSchema(schemaFile);
 
  124         Validator validator = schema.newValidator();
 
  125         validator.validate(
new DOMSource(doc), 
new DOMResult());
 
  142     public static void saveDocument(
final Document doc, String encoding, String docPath) 
throws TransformerConfigurationException, FileNotFoundException, UnsupportedEncodingException, TransformerException, IOException {
 
  143         TransformerFactory xf = TransformerFactory.newInstance();
 
  144         xf.setAttribute(
"indent-number", 1); 
 
  145         Transformer xformer = xf.newTransformer();
 
  146         xformer.setOutputProperty(OutputKeys.METHOD, 
"xml"); 
 
  147         xformer.setOutputProperty(OutputKeys.INDENT, 
"yes"); 
 
  148         xformer.setOutputProperty(OutputKeys.ENCODING, encoding);
 
  149         xformer.setOutputProperty(OutputKeys.STANDALONE, 
"yes"); 
 
  150         xformer.setOutputProperty(OutputKeys.VERSION, 
"1.0");
 
  151         File file = 
new File(docPath);
 
  152         try (FileOutputStream stream = 
new FileOutputStream(file)) {
 
  153             Result out = 
new StreamResult(
new OutputStreamWriter(stream, encoding));
 
  154             xformer.transform(
new DOMSource(doc), out);
 
  177     public static <T> 
boolean xmlIsValid(DOMSource xmlfile, Class<T> clazz, String schemaFile) {
 
  181             SchemaFactory schm = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
 
  183                 Schema schema = schm.newSchema(schemaLoc);
 
  184                 Validator validator = schema.newValidator();
 
  185                 DOMResult result = 
new DOMResult();
 
  186                 validator.validate(xmlfile, result);
 
  188             } 
catch (SAXException e) {
 
  189                 Logger.
getLogger(clazz.getName()).log(Level.WARNING, 
"Unable to validate XML file.", e); 
 
  192         } 
catch (IOException e) {
 
  193             Logger.
getLogger(clazz.getName()).log(Level.WARNING, 
"Unable to load XML file [" + xmlfile.toString() + 
"] of type [" + schemaFile + 
"]", e); 
 
  216     public static <T> 
boolean xmlIsValid(Document doc, Class<T> clazz, String type) {
 
  217         DOMSource dms = 
new DOMSource(doc);
 
  228     public static <T> Document 
loadDoc(Class<T> clazz, String xmlPath) {
 
  229         DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
 
  232             DocumentBuilder builder = builderFactory.newDocumentBuilder();
 
  233             ret = builder.parse(
new FileInputStream(xmlPath));
 
  234         } 
catch (ParserConfigurationException e) {
 
  235             Logger.
getLogger(clazz.getName()).log(Level.SEVERE, 
"Error loading XML file " + xmlPath + 
" : can't initialize parser.", e); 
 
  236         } 
catch (SAXException e) {
 
  237             Logger.
getLogger(clazz.getName()).log(Level.SEVERE, 
"Error loading XML file " + xmlPath + 
" : can't parse XML.", e); 
 
  238         } 
catch (IOException e) {
 
  240             Logger.
getLogger(clazz.getName()).log(Level.SEVERE, 
"Error loading XML file " + xmlPath + 
" : can't read file.", e); 
 
  253     public static <T> Document 
loadDoc(Class<T> clazz, String xmlPath, String xsdPath) {
 
  254         Document ret = 
loadDoc(clazz, xmlPath);
 
  256             Logger.
getLogger(clazz.getName()).log(Level.WARNING, 
"Error loading XML file: could not validate against [{0}], results may not be accurate", xsdPath); 
 
  270     public static <T> 
boolean saveDoc(Class<T> clazz, String xmlPath, String encoding, 
final Document doc) {
 
  271         TransformerFactory xf = TransformerFactory.newInstance();
 
  272         xf.setAttribute(
"indent-number", 1); 
 
  273         boolean success = 
false;
 
  275             Transformer xformer = xf.newTransformer();
 
  276             xformer.setOutputProperty(OutputKeys.METHOD, 
"xml"); 
 
  277             xformer.setOutputProperty(OutputKeys.INDENT, 
"yes"); 
 
  278             xformer.setOutputProperty(OutputKeys.ENCODING, encoding);
 
  279             xformer.setOutputProperty(OutputKeys.STANDALONE, 
"yes"); 
 
  280             xformer.setOutputProperty(OutputKeys.VERSION, 
"1.0");
 
  281             File file = 
new File(xmlPath);
 
  282             try (FileOutputStream stream = 
new FileOutputStream(file)) {
 
  283                 Result out = 
new StreamResult(
new OutputStreamWriter(stream, encoding));
 
  284                 xformer.transform(
new DOMSource(doc), out);
 
  289         } 
catch (UnsupportedEncodingException e) {
 
  290             Logger.
getLogger(clazz.getName()).log(Level.SEVERE, 
"Should not happen", e); 
 
  291         } 
catch (TransformerConfigurationException e) {
 
  292             Logger.
getLogger(clazz.getName()).log(Level.SEVERE, 
"Error writing XML file", e); 
 
  293         } 
catch (TransformerException e) {
 
  294             Logger.
getLogger(clazz.getName()).log(Level.SEVERE, 
"Error writing XML file", e); 
 
  295         } 
catch (FileNotFoundException e) {
 
  296             Logger.
getLogger(clazz.getName()).log(Level.SEVERE, 
"Error writing XML file: cannot write to file: " + xmlPath, e); 
 
  297         } 
catch (IOException e) {
 
  298             Logger.
getLogger(clazz.getName()).log(Level.SEVERE, 
"Error writing XML file: cannot write to file: " + xmlPath, e); 
 
static< T > Document loadDoc(Class< T > clazz, String xmlPath)
static Document createDocument()
static< T > Document loadDoc(Class< T > clazz, String xmlPath, String xsdPath)
static< T > boolean xmlIsValid(Document doc, Class< T > clazz, String type)
static< T > void validateDocument(final Document doc, Class< T > clazz, String schemaResourceName)
static< T > Document loadDocument(String docPath, Class< T > clazz, String schemaResourceName)
static< T > boolean xmlIsValid(DOMSource xmlfile, Class< T > clazz, String schemaFile)
static Document loadDocument(String docPath)
static void saveDocument(final Document doc, String encoding, String docPath)
synchronized static Logger getLogger(String name)
static< T > boolean saveDoc(Class< T > clazz, String xmlPath, String encoding, final Document doc)