]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/AbstractExporter.java
Make it possible to customise element parsers before imports
[simantics/interop.git] / org.simantics.xml.sax.base / src / org / simantics / xml / sax / base / AbstractExporter.java
1 package org.simantics.xml.sax.base;\r
2 \r
3 import java.io.BufferedOutputStream;\r
4 import java.io.File;\r
5 import java.io.FileOutputStream;\r
6 import java.io.IOException;\r
7 import java.io.OutputStream;\r
8 \r
9 import javax.xml.stream.XMLOutputFactory;\r
10 import javax.xml.stream.XMLStreamException;\r
11 import javax.xml.stream.XMLStreamWriter;\r
12 \r
13 import org.simantics.db.ReadGraph;\r
14 import org.simantics.db.Resource;\r
15 import org.simantics.db.Session;\r
16 import org.simantics.db.common.request.ReadRequest;\r
17 import org.simantics.db.exception.DatabaseException;\r
18 import org.simantics.message.ILogger;\r
19 import org.simantics.message.MessageService;\r
20 \r
21 public class AbstractExporter {\r
22         \r
23         private static String ENCODING = "UTF-8";\r
24         private static String XML_VERSION = "1.0";\r
25         \r
26         private Session session;\r
27         private File file;\r
28         private ILogger logger;\r
29         private Resource root;\r
30         private XMLWriter xmlWriter;\r
31         private boolean indentOutput = true;\r
32         \r
33         public AbstractExporter(Session session, File file , Resource root, XMLWriter xmlWriter)  {\r
34                 this.session = session;\r
35                 this.file = file;\r
36                 this.root = root;\r
37                 this.xmlWriter = xmlWriter;\r
38         }\r
39         \r
40         public AbstractExporter(Session session, File file , Resource root)  {\r
41                 this.session = session;\r
42                 this.file = file;\r
43                 this.root = root;\r
44         }\r
45         \r
46         public void setXmlWriter(XMLWriter xmlWriter) {\r
47                 this.xmlWriter = xmlWriter;\r
48         }\r
49         \r
50         public void setIndentOutput(boolean indentOutput) {\r
51                 this.indentOutput = indentOutput;\r
52         }\r
53         \r
54         public void doExport() throws DatabaseException {\r
55                 doExport(MessageService.getDefault());  \r
56         }\r
57         \r
58         public void doExport(ILogger logger) throws DatabaseException {\r
59                 ExportRequest req = new ExportRequest();\r
60                 session.syncRequest(req);\r
61         }\r
62         \r
63         private static XMLStreamWriter createIdentXMLStreamWriter(OutputStream textWriter) throws XMLStreamException {\r
64                 XMLOutputFactory output = XMLOutputFactory.newInstance();\r
65                 return new IndentingXMLStreamWriter(output.createXMLStreamWriter(textWriter, ENCODING));\r
66                 //return new com.sun.xml.internal.txw2.output.IndentingXMLStreamWriter(output.createXMLStreamWriter(textWriter, "UTF-8"));\r
67         }\r
68         \r
69         private static XMLStreamWriter createXMLStreamWriter(OutputStream textWriter) throws XMLStreamException {\r
70                 XMLOutputFactory output = XMLOutputFactory.newInstance();\r
71                 return output.createXMLStreamWriter(textWriter, ENCODING);\r
72         }\r
73         \r
74         \r
75         private class ExportRequest extends ReadRequest {\r
76                 @Override\r
77                 public void run(ReadGraph graph) throws DatabaseException {\r
78                         XMLStreamWriter writer = null;\r
79                         OutputStream os = null;\r
80                         try {\r
81                                 os = new BufferedOutputStream(new FileOutputStream(file));\r
82                                 if (indentOutput)\r
83                                         writer =createIdentXMLStreamWriter(os);\r
84                                 else\r
85                                         writer =createXMLStreamWriter(os);\r
86                                 writer.writeStartDocument(ENCODING, XML_VERSION);\r
87                                 \r
88                                 xmlWriter.write(root, writer);\r
89                                 \r
90                                 writer.writeEndDocument();\r
91                                 writer.flush();\r
92                                 writer.close();\r
93                                 os.close();\r
94                         } catch (IOException|XMLStreamException e) {\r
95                                 try {\r
96                                         writer.close();\r
97                                 } catch (XMLStreamException err) {\r
98                                         \r
99                                 }\r
100                                 try {\r
101                                          os.close();\r
102                                 }catch (IOException err) {\r
103                                         \r
104                                 }\r
105                                 throw new DatabaseException(e);\r
106                         } \r
107                         \r
108                         \r
109                 }\r
110         }\r
111 \r
112 }\r