1 package org.simantics.xml.sax.base;
\r
5 import org.simantics.db.Resource;
\r
6 import org.simantics.db.Session;
\r
7 import org.simantics.db.WriteGraph;
\r
8 import org.simantics.db.common.request.DelayedWriteRequest;
\r
9 import org.simantics.db.common.request.WriteRequest;
\r
10 import org.simantics.db.exception.DatabaseException;
\r
11 import org.simantics.db.layer0.util.Layer0Utils;
\r
12 import org.simantics.message.ILogger;
\r
13 import org.simantics.message.MessageService;
\r
16 public abstract class AbstractImporter {
\r
19 private Session session;
\r
21 private ILogger logger;
\r
22 private XMLParser parser;
\r
24 private static final boolean USE_DELAYED = false;
\r
26 public AbstractImporter(Session session, File file) {
\r
27 this.session = session;
\r
31 public AbstractImporter(Session session, File file, XMLParser parser) {
\r
32 this.session = session;
\r
34 this.parser = parser;
\r
36 public Resource doImport() throws DatabaseException {
\r
37 return doImport(MessageService.getDefault());
\r
40 public Resource doImport(ILogger logger) throws DatabaseException {
\r
41 this.logger = logger;
\r
43 ImportDelayedRequest req = new ImportDelayedRequest();
\r
44 session.syncRequest(req);
\r
45 return req.getResult();
\r
47 ImportRequest req = new ImportRequest();
\r
48 session.syncRequest(req);
\r
49 return req.getResult();
\r
53 public File getFile() {
\r
57 public void configure(XMLParser parser){};
\r
60 private class ImportRequest extends WriteRequest {
\r
61 private Resource result;
\r
62 public ImportRequest() {
\r
67 public void perform(WriteGraph graph) throws DatabaseException {
\r
68 Layer0Utils.addCommentMetadata(graph, "Import file " + file.getName());
\r
69 graph.markUndoPoint();
\r
70 result = doImport(graph);
\r
73 public Resource getResult() {
\r
78 private class ImportDelayedRequest extends DelayedWriteRequest {
\r
79 private Resource result;
\r
80 public ImportDelayedRequest() {
\r
85 public void perform(WriteGraph graph) throws DatabaseException {
\r
86 result = doImport(graph);
\r
89 public Resource getResult() {
\r
94 private Resource doImport(WriteGraph graph) throws DatabaseException {
\r
95 Layer0Utils.setDependenciesIndexingDisabled(graph, true);
\r
98 if (parser == null) {
\r
99 parser = new XMLParser();
\r
100 parser.setGraph(graph);
\r
103 parser.setGraph(graph);
\r
106 parser.parse(file, logger);
\r
107 System.out.println(file.getAbsolutePath() + " imported");
\r
108 Resource root = parser.getRoot();
\r
109 if (root == null) {
\r
110 throw new DatabaseException(file.getAbsolutePath() + " import failed. File is corrupted, or is not given type");
\r
113 } catch (DatabaseException e) {
\r
115 } catch (Exception e) {
\r
116 throw new DatabaseException(e);
\r