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