]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - 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
diff --git a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/AbstractExporter.java b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/AbstractExporter.java
new file mode 100644 (file)
index 0000000..14a3fca
--- /dev/null
@@ -0,0 +1,79 @@
+package org.simantics.xml.sax.base;\r
+\r
+import java.io.File;\r
+import java.io.FileOutputStream;\r
+import java.io.IOException;\r
+\r
+import javax.xml.stream.XMLOutputFactory;\r
+import javax.xml.stream.XMLStreamException;\r
+import javax.xml.stream.XMLStreamWriter;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.Session;\r
+import org.simantics.db.common.request.ReadRequest;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.message.ILogger;\r
+import org.simantics.message.MessageService;\r
+\r
+public class AbstractExporter {\r
+       \r
+       private Session session;\r
+       private File file;\r
+       private ILogger logger;\r
+       private Resource root;\r
+       private XMLWriter xmlWriter;\r
+       \r
+       public AbstractExporter(Session session, File file , Resource root, XMLWriter xmlWriter)  {\r
+               this.session = session;\r
+               this.file = file;\r
+               this.root = root;\r
+               this.xmlWriter = xmlWriter;\r
+       }\r
+       \r
+       public AbstractExporter(Session session, File file , Resource root)  {\r
+               this.session = session;\r
+               this.file = file;\r
+               this.root = root;\r
+       }\r
+       \r
+       public void setXmlWriter(XMLWriter xmlWriter) {\r
+               this.xmlWriter = xmlWriter;\r
+       }\r
+       \r
+       public void doExport() throws DatabaseException {\r
+               doExport(MessageService.getDefault());  \r
+       }\r
+       \r
+       public void doExport(ILogger logger) throws DatabaseException {\r
+               ExportRequest req = new ExportRequest();\r
+               session.syncRequest(req);\r
+       }\r
+       \r
+       \r
+       private class ExportRequest extends ReadRequest {\r
+               @Override\r
+               public void run(ReadGraph graph) throws DatabaseException {\r
+                       XMLStreamWriter writer = null;\r
+                       try {\r
+                               XMLOutputFactory output = XMLOutputFactory.newInstance();\r
+                               writer = output.createXMLStreamWriter(new FileOutputStream(file),"UTF-8");\r
+                               writer.writeStartDocument("UTF-8", "1.0");\r
+                               xmlWriter.write(root, writer);\r
+                               \r
+                               writer.writeEndDocument();\r
+                               writer.close();\r
+                       } catch (IOException|XMLStreamException e) {\r
+                               try {\r
+                                       writer.close();\r
+                               } catch (XMLStreamException err) {\r
+                                       \r
+                               }\r
+                               throw new DatabaseException(e);\r
+                       } \r
+                       \r
+                       \r
+               }\r
+       }\r
+\r
+}\r