+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