]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/AbstractExporter.java
XML Elements are exported in the original order (if order is stored during import)
[simantics/interop.git] / org.simantics.xml.sax.base / src / org / simantics / xml / sax / base / AbstractExporter.java
index 14a3fca9f327c5dfd6e80f3e26e5ede095d7fba7..3464bda5c7865f11a32c7ae9a8f6716377258648 100644 (file)
@@ -1,8 +1,10 @@
 package org.simantics.xml.sax.base;\r
 \r
+import java.io.BufferedOutputStream;\r
 import java.io.File;\r
 import java.io.FileOutputStream;\r
 import java.io.IOException;\r
+import java.io.OutputStream;\r
 \r
 import javax.xml.stream.XMLOutputFactory;\r
 import javax.xml.stream.XMLStreamException;\r
@@ -23,6 +25,7 @@ public class AbstractExporter {
        private ILogger logger;\r
        private Resource root;\r
        private XMLWriter xmlWriter;\r
+       private boolean indentOutput = true;\r
        \r
        public AbstractExporter(Session session, File file , Resource root, XMLWriter xmlWriter)  {\r
                this.session = session;\r
@@ -41,6 +44,10 @@ public class AbstractExporter {
                this.xmlWriter = xmlWriter;\r
        }\r
        \r
+       public void setIndentOutput(boolean indentOutput) {\r
+               this.indentOutput = indentOutput;\r
+       }\r
+       \r
        public void doExport() throws DatabaseException {\r
                doExport(MessageService.getDefault());  \r
        }\r
@@ -50,24 +57,47 @@ public class AbstractExporter {
                session.syncRequest(req);\r
        }\r
        \r
+       private static XMLStreamWriter createIdentXMLStreamWriter(OutputStream textWriter) throws XMLStreamException {\r
+               XMLOutputFactory output = XMLOutputFactory.newInstance();\r
+               return new IndentingXMLStreamWriter(output.createXMLStreamWriter(textWriter, "UTF-8"));\r
+               //return new com.sun.xml.internal.txw2.output.IndentingXMLStreamWriter(output.createXMLStreamWriter(textWriter, "UTF-8"));\r
+       }\r
+       \r
+       private static XMLStreamWriter createXMLStreamWriter(OutputStream textWriter) throws XMLStreamException {\r
+               XMLOutputFactory output = XMLOutputFactory.newInstance();\r
+               return output.createXMLStreamWriter(textWriter, "UTF-8");\r
+       }\r
+       \r
        \r
        private class ExportRequest extends ReadRequest {\r
                @Override\r
                public void run(ReadGraph graph) throws DatabaseException {\r
                        XMLStreamWriter writer = null;\r
+                       OutputStream os = 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
+                               os = new BufferedOutputStream(new FileOutputStream(file));\r
+                               if (indentOutput)\r
+                                       writer =createIdentXMLStreamWriter(os);\r
+                               else\r
+                                       writer =createXMLStreamWriter(os);\r
+                               writer.writeStartDocument("UTF-8", "1.1");\r
+                               \r
                                xmlWriter.write(root, writer);\r
                                \r
                                writer.writeEndDocument();\r
+                               writer.flush();\r
                                writer.close();\r
+                               os.close();\r
                        } catch (IOException|XMLStreamException e) {\r
                                try {\r
                                        writer.close();\r
                                } catch (XMLStreamException err) {\r
                                        \r
+                               }\r
+                               try {\r
+                                        os.close();\r
+                               }catch (IOException err) {\r
+                                       \r
                                }\r
                                throw new DatabaseException(e);\r
                        } \r