]> git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.app.core/src/org/argeo/app/docbook/Dbk4Converter.java
d3957d9a944e8e85abacdfcfdf17afbcaa2b7d78
[gpl/argeo-suite.git] / org.argeo.app.core / src / org / argeo / app / docbook / Dbk4Converter.java
1 package org.argeo.app.docbook;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.ByteArrayOutputStream;
5 import java.io.File;
6 import java.io.IOException;
7 import java.io.InputStream;
8
9 import javax.jcr.ImportUUIDBehavior;
10 import javax.jcr.Node;
11 import javax.jcr.RepositoryException;
12 import javax.xml.parsers.DocumentBuilder;
13 import javax.xml.parsers.DocumentBuilderFactory;
14 import javax.xml.parsers.ParserConfigurationException;
15 import javax.xml.transform.Result;
16 import javax.xml.transform.Source;
17 import javax.xml.transform.Templates;
18 import javax.xml.transform.Transformer;
19 import javax.xml.transform.TransformerConfigurationException;
20 import javax.xml.transform.TransformerException;
21 import javax.xml.transform.TransformerFactory;
22 import javax.xml.transform.dom.DOMSource;
23 import javax.xml.transform.stream.StreamResult;
24 import javax.xml.transform.stream.StreamSource;
25
26 import org.apache.xalan.processor.TransformerFactoryImpl;
27 import org.argeo.jcr.JcrException;
28 import org.w3c.dom.Document;
29 import org.xml.sax.InputSource;
30 import org.xml.sax.SAXException;
31
32 /** Convert from DocBook v4 to DocBook v5, using the official XSL. */
33 public class Dbk4Converter {
34 private final Templates templates;
35
36 public Dbk4Converter() {
37 try (InputStream in = getClass().getResourceAsStream("db4-upgrade.xsl")) {
38 Source xsl = new StreamSource(in);
39 TransformerFactory transformerFactory = new TransformerFactoryImpl();
40 templates = transformerFactory.newTemplates(xsl);
41 } catch (IOException | TransformerConfigurationException e) {
42 throw new RuntimeException("Cannot initialise DocBook v4 converter", e);
43 }
44 }
45
46 public void importXml(Node baseNode, InputStream in) throws IOException {
47 try (ByteArrayOutputStream out = new ByteArrayOutputStream();) {
48 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
49 factory.setXIncludeAware(true);
50 factory.setNamespaceAware(true);
51 DocumentBuilder docBuilder = factory.newDocumentBuilder();
52 Document doc = docBuilder.parse(new InputSource(in));
53 Source xmlInput = new DOMSource(doc);
54
55 // ContentHandler contentHandler = baseNode.getSession().getImportContentHandler(baseNode.getPath(),
56 // ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING);
57
58 Transformer transformer = templates.newTransformer();
59 Result xmlOutput = new StreamResult(out);
60 transformer.transform(xmlInput, xmlOutput);
61 try (InputStream dbk5in = new ByteArrayInputStream(out.toByteArray())) {
62 baseNode.getSession().importXML(baseNode.getPath(), dbk5in,
63 ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING);
64 }
65 } catch (RepositoryException e) {
66 throw new JcrException("Cannot import XML to " + baseNode, e);
67 } catch (TransformerException | SAXException | ParserConfigurationException e) {
68 throw new RuntimeException("Cannot import DocBook v4 to " + baseNode, e);
69 }
70
71 }
72
73 public static void main(String[] args) {
74 try {
75
76 Source xsl = new StreamSource(new File("/usr/share/xml/docbook5/stylesheet/upgrade/db4-upgrade.xsl"));
77 TransformerFactory transformerFactory = new TransformerFactoryImpl();
78 Templates templates = transformerFactory.newTemplates(xsl);
79
80 File inputDir = new File(args[0]);
81 File outputDir = new File(args[1]);
82
83 for (File inputFile : inputDir.listFiles()) {
84 Result xmlOutput = new StreamResult(new File(outputDir, inputFile.getName()));
85
86 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
87 factory.setXIncludeAware(true);
88 factory.setNamespaceAware(true);
89 DocumentBuilder docBuilder = factory.newDocumentBuilder();
90 Document doc = docBuilder.parse(inputFile);
91 Source xmlInput = new DOMSource(doc);
92 Transformer transformer = templates.newTransformer();
93 transformer.transform(xmlInput, xmlOutput);
94 }
95 } catch (Throwable e) {
96 e.printStackTrace();
97 }
98 }
99
100 }