]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/AbstractImporter.java
Make it possible to customise element parsers before imports
[simantics/interop.git] / org.simantics.xml.sax.base / src / org / simantics / xml / sax / base / AbstractImporter.java
index 9e0d57dac8a0f6acb8aafbc3e99d8f07262fccf5..9a1765083b3dc13b768d28ef86c60c0be19d43f3 100644 (file)
@@ -9,6 +9,7 @@ import org.simantics.db.common.request.DelayedWriteRequest;
 import org.simantics.db.common.request.WriteRequest;\r
 import org.simantics.db.exception.DatabaseException;\r
 import org.simantics.db.layer0.util.Layer0Utils;\r
+import org.simantics.db.service.XSupport;\r
 import org.simantics.message.ILogger;\r
 import org.simantics.message.MessageService;\r
 \r
@@ -19,13 +20,20 @@ public abstract class AbstractImporter {
        private Session session;\r
        private File file;\r
        private ILogger logger;\r
+       private XMLParser parser;\r
        \r
-       private static final boolean USE_DELAYED = false;\r
+       private static final boolean USE_DELAYED = true;\r
        \r
        public AbstractImporter(Session session, File file)  {\r
                this.session = session;\r
                this.file = file;\r
        }\r
+       \r
+       public AbstractImporter(Session session, File file, XMLParser parser)  {\r
+               this.session = session;\r
+               this.file = file;\r
+               this.parser = parser;\r
+       }\r
        public Resource doImport() throws DatabaseException {\r
                return doImport(MessageService.getDefault());   \r
        }\r
@@ -35,7 +43,10 @@ public abstract class AbstractImporter {
                if (USE_DELAYED) {\r
                        ImportDelayedRequest req = new ImportDelayedRequest();\r
                        session.syncRequest(req);\r
-                       return req.getResult();\r
+                       Resource dr = req.getResult();\r
+                       XSupport xs = session.getService(XSupport.class);\r
+                       Resource result = xs.convertDelayedResourceToResource(dr);\r
+                       return result;\r
                } else {\r
                        ImportRequest req = new ImportRequest();\r
                        session.syncRequest(req);\r
@@ -47,7 +58,8 @@ public abstract class AbstractImporter {
                return file;\r
        }\r
        \r
-       public abstract void configure(XMLParser parser);\r
+       public void configure(XMLParser parser){};\r
+       \r
        \r
        private class ImportRequest extends WriteRequest {\r
                private Resource result;\r
@@ -57,6 +69,8 @@ public abstract class AbstractImporter {
 \r
                @Override\r
                public void perform(WriteGraph graph) throws DatabaseException {\r
+                       Layer0Utils.addCommentMetadata(graph, "Import file " + file.getName());\r
+                       graph.markUndoPoint();\r
                        result = doImport(graph);\r
                }\r
                \r
@@ -84,8 +98,15 @@ public abstract class AbstractImporter {
        private Resource doImport(WriteGraph graph) throws DatabaseException {\r
                Layer0Utils.setDependenciesIndexingDisabled(graph, true);\r
                try {\r
-                       XMLParser parser = new XMLParser(graph);\r
-                       configure(parser);\r
+                       \r
+                       if (parser == null) {\r
+                               parser = new XMLParser();\r
+                               parser.setGraph(graph);\r
+                               configure(parser);\r
+                       } else {\r
+                               parser.setGraph(graph);\r
+                       }\r
+                       \r
                        parser.parse(file, logger);\r
                        System.out.println(file.getAbsolutePath() + " imported");\r
                        Resource root = parser.getRoot();\r
@@ -99,4 +120,13 @@ public abstract class AbstractImporter {
                        throw new DatabaseException(e);\r
                } \r
        }\r
+       \r
+       public XMLElementParser getParser(String elementId) {\r
+               return parser.getParser(elementId);\r
+       }\r
+\r
+       public void setParser(String elementId, XMLElementParser p) {\r
+               parser.setParser(elementId, p);\r
+       }\r
+\r
 }\r