]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/AbstractImporter.java
f47dd9395c90e2338236fb0508ac9572a856327c
[simantics/interop.git] / org.simantics.xml.sax.base / src / org / simantics / xml / sax / base / AbstractImporter.java
1 package org.simantics.xml.sax.base;\r
2 \r
3 import java.io.File;\r
4 \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
14 \r
15 \r
16 public abstract class AbstractImporter {\r
17 \r
18         \r
19         private Session session;\r
20         private File file;\r
21         private ILogger logger;\r
22         private XMLParser parser;\r
23         \r
24         private static final boolean USE_DELAYED = false;\r
25         \r
26         public AbstractImporter(Session session, File file)  {\r
27                 this.session = session;\r
28                 this.file = file;\r
29         }\r
30         \r
31         public AbstractImporter(Session session, File file, XMLParser parser)  {\r
32                 this.session = session;\r
33                 this.file = file;\r
34                 this.parser = parser;\r
35         }\r
36         public Resource doImport() throws DatabaseException {\r
37                 return doImport(MessageService.getDefault());   \r
38         }\r
39         \r
40         public Resource doImport(ILogger logger) throws DatabaseException {\r
41                 this.logger = logger;\r
42                 if (USE_DELAYED) {\r
43                         ImportDelayedRequest req = new ImportDelayedRequest();\r
44                         session.syncRequest(req);\r
45                         return req.getResult();\r
46                 } else {\r
47                         ImportRequest req = new ImportRequest();\r
48                         session.syncRequest(req);\r
49                         return req.getResult();\r
50                 }\r
51         }\r
52         \r
53         public File getFile() {\r
54                 return file;\r
55         }\r
56         \r
57         public void configure(XMLParser parser){};\r
58         \r
59         \r
60         private class ImportRequest extends WriteRequest {\r
61                 private Resource result;\r
62                 public ImportRequest() {\r
63                         super();\r
64                 }\r
65 \r
66                 @Override\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
71                 }\r
72                 \r
73                 public Resource getResult() {\r
74                         return result;\r
75                 }\r
76         }\r
77         \r
78         private class ImportDelayedRequest extends DelayedWriteRequest {\r
79                 private Resource result;\r
80                 public ImportDelayedRequest() {\r
81                         super();\r
82                 }\r
83 \r
84                 @Override\r
85                 public void perform(WriteGraph graph) throws DatabaseException {\r
86                         result = doImport(graph);\r
87                 }\r
88                 \r
89                 public Resource getResult() {\r
90                         return result;\r
91                 }\r
92         }\r
93         \r
94         private Resource doImport(WriteGraph graph) throws DatabaseException {\r
95                 Layer0Utils.setDependenciesIndexingDisabled(graph, true);\r
96                 try {\r
97                         \r
98                         if (parser == null) {\r
99                                 parser = new XMLParser();\r
100                                 parser.setGraph(graph);\r
101                                 configure(parser);\r
102                         } else {\r
103                                 parser.setGraph(graph);\r
104                         }\r
105                         \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
111                         }\r
112                         return root;\r
113                 } catch (DatabaseException e) {\r
114                         throw e;\r
115                 } catch (Exception e) {\r
116                         throw new DatabaseException(e);\r
117                 } \r
118         }\r
119 }\r