]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/AbstractExporter.java
Initial support for XML export (order of Elements is not kept)
[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.File;\r
4 import java.io.FileOutputStream;\r
5 import java.io.IOException;\r
6 \r
7 import javax.xml.stream.XMLOutputFactory;\r
8 import javax.xml.stream.XMLStreamException;\r
9 import javax.xml.stream.XMLStreamWriter;\r
10 \r
11 import org.simantics.db.ReadGraph;\r
12 import org.simantics.db.Resource;\r
13 import org.simantics.db.Session;\r
14 import org.simantics.db.common.request.ReadRequest;\r
15 import org.simantics.db.exception.DatabaseException;\r
16 import org.simantics.message.ILogger;\r
17 import org.simantics.message.MessageService;\r
18 \r
19 public class AbstractExporter {\r
20         \r
21         private Session session;\r
22         private File file;\r
23         private ILogger logger;\r
24         private Resource root;\r
25         private XMLWriter xmlWriter;\r
26         \r
27         public AbstractExporter(Session session, File file , Resource root, XMLWriter xmlWriter)  {\r
28                 this.session = session;\r
29                 this.file = file;\r
30                 this.root = root;\r
31                 this.xmlWriter = xmlWriter;\r
32         }\r
33         \r
34         public AbstractExporter(Session session, File file , Resource root)  {\r
35                 this.session = session;\r
36                 this.file = file;\r
37                 this.root = root;\r
38         }\r
39         \r
40         public void setXmlWriter(XMLWriter xmlWriter) {\r
41                 this.xmlWriter = xmlWriter;\r
42         }\r
43         \r
44         public void doExport() throws DatabaseException {\r
45                 doExport(MessageService.getDefault());  \r
46         }\r
47         \r
48         public void doExport(ILogger logger) throws DatabaseException {\r
49                 ExportRequest req = new ExportRequest();\r
50                 session.syncRequest(req);\r
51         }\r
52         \r
53         \r
54         private class ExportRequest extends ReadRequest {\r
55                 @Override\r
56                 public void run(ReadGraph graph) throws DatabaseException {\r
57                         XMLStreamWriter writer = null;\r
58                         try {\r
59                                 XMLOutputFactory output = XMLOutputFactory.newInstance();\r
60                                 writer = output.createXMLStreamWriter(new FileOutputStream(file),"UTF-8");\r
61                                 writer.writeStartDocument("UTF-8", "1.0");\r
62                                 xmlWriter.write(root, writer);\r
63                                 \r
64                                 writer.writeEndDocument();\r
65                                 writer.close();\r
66                         } catch (IOException|XMLStreamException e) {\r
67                                 try {\r
68                                         writer.close();\r
69                                 } catch (XMLStreamException err) {\r
70                                         \r
71                                 }\r
72                                 throw new DatabaseException(e);\r
73                         } \r
74                         \r
75                         \r
76                 }\r
77         }\r
78 \r
79 }\r