]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/AbstractImporter.java
XML Schema converter
[simantics/interop.git] / org.simantics.xml.sax.base / src / org / simantics / xml / sax / base / AbstractImporter.java
diff --git a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/AbstractImporter.java b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/AbstractImporter.java
new file mode 100644 (file)
index 0000000..af5c2c3
--- /dev/null
@@ -0,0 +1,104 @@
+package org.simantics.xml.sax.base;\r
+\r
+import java.io.File;\r
+\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.Session;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.common.request.DelayedWriteRequest;\r
+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.message.ILogger;\r
+import org.simantics.message.MessageService;\r
+\r
+\r
+public abstract class AbstractImporter {\r
+\r
+       \r
+       private Session session;\r
+       private File file;\r
+       private ILogger logger;\r
+       \r
+       private static final boolean USE_DELAYED = false;\r
+       \r
+       public AbstractImporter(Session session, File file)  {\r
+               this.session = session;\r
+               this.file = file;\r
+       }\r
+       public Resource doImport() throws DatabaseException {\r
+               return doImport(MessageService.getDefault());   \r
+       }\r
+       \r
+       public Resource doImport(ILogger logger) throws DatabaseException {\r
+               this.logger = logger;\r
+               if (USE_DELAYED) {\r
+                       ImportDelayedRequest req = new ImportDelayedRequest();\r
+                       session.syncRequest(req);\r
+                       return req.getResult();\r
+               } else {\r
+                       ImportRequest req = new ImportRequest();\r
+                       session.syncRequest(req);\r
+                       return req.getResult();\r
+               }\r
+       }\r
+       \r
+       public File getFile() {\r
+               return file;\r
+       }\r
+       \r
+       public abstract void configure(XMLParser parser);\r
+       \r
+       private class ImportRequest extends WriteRequest {\r
+               private Resource result;\r
+               public ImportRequest() {\r
+                       super();\r
+               }\r
+\r
+               @Override\r
+               public void perform(WriteGraph graph) throws DatabaseException {\r
+                       result = doImport(graph);\r
+               }\r
+               \r
+               public Resource getResult() {\r
+                       return result;\r
+               }\r
+       }\r
+       \r
+       private class ImportDelayedRequest extends DelayedWriteRequest {\r
+               private Resource result;\r
+               public ImportDelayedRequest() {\r
+                       super();\r
+               }\r
+\r
+               @Override\r
+               public void perform(WriteGraph graph) throws DatabaseException {\r
+                       result = doImport(graph);\r
+               }\r
+               \r
+               public Resource getResult() {\r
+                       return result;\r
+               }\r
+       }\r
+       \r
+       private Resource doImport(WriteGraph graph) throws DatabaseException {\r
+               Layer0Utils.setDependenciesIndexingDisabled(graph, true);\r
+               try {\r
+                       XMLParser parser = new XMLParser(graph);\r
+                       configure(parser);\r
+                       parser.parse(file, logger);\r
+                       System.out.println(file.getAbsolutePath() + " imported");\r
+                       Resource root = parser.getRoot();\r
+                       if (root == null) {\r
+                               throw new DatabaseException(file.getAbsolutePath() + " import failed. File is corrupted, or is not given type");\r
+                       }\r
+                       return root;\r
+               } catch (DatabaseException e) {\r
+                       throw e;\r
+               } catch (Exception e) {\r
+                       throw new DatabaseException(e);\r
+               } \r
+       }\r
+}\r