]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/AbstractImporter.java
Create version neutral wrapper class for converted XML schema ontology classes
[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         \r
23         private static final boolean USE_DELAYED = false;\r
24         \r
25         public AbstractImporter(Session session, File file)  {\r
26                 this.session = session;\r
27                 this.file = file;\r
28         }\r
29         public Resource doImport() throws DatabaseException {\r
30                 return doImport(MessageService.getDefault());   \r
31         }\r
32         \r
33         public Resource doImport(ILogger logger) throws DatabaseException {\r
34                 this.logger = logger;\r
35                 if (USE_DELAYED) {\r
36                         ImportDelayedRequest req = new ImportDelayedRequest();\r
37                         session.syncRequest(req);\r
38                         return req.getResult();\r
39                 } else {\r
40                         ImportRequest req = new ImportRequest();\r
41                         session.syncRequest(req);\r
42                         return req.getResult();\r
43                 }\r
44         }\r
45         \r
46         public File getFile() {\r
47                 return file;\r
48         }\r
49         \r
50         public abstract void configure(XMLParser parser);\r
51         \r
52         private class ImportRequest extends WriteRequest {\r
53                 private Resource result;\r
54                 public ImportRequest() {\r
55                         super();\r
56                 }\r
57 \r
58                 @Override\r
59                 public void perform(WriteGraph graph) throws DatabaseException {\r
60                         result = doImport(graph);\r
61                 }\r
62                 \r
63                 public Resource getResult() {\r
64                         return result;\r
65                 }\r
66         }\r
67         \r
68         private class ImportDelayedRequest extends DelayedWriteRequest {\r
69                 private Resource result;\r
70                 public ImportDelayedRequest() {\r
71                         super();\r
72                 }\r
73 \r
74                 @Override\r
75                 public void perform(WriteGraph graph) throws DatabaseException {\r
76                         result = doImport(graph);\r
77                 }\r
78                 \r
79                 public Resource getResult() {\r
80                         return result;\r
81                 }\r
82         }\r
83         \r
84         private Resource doImport(WriteGraph graph) throws DatabaseException {\r
85                 Layer0Utils.setDependenciesIndexingDisabled(graph, true);\r
86                 try {\r
87                         XMLParser parser = new XMLParser(graph);\r
88                         configure(parser);\r
89                         parser.parse(file, logger);\r
90                         System.out.println(file.getAbsolutePath() + " imported");\r
91                         Resource root = parser.getRoot();\r
92                         if (root == null) {\r
93                                 throw new DatabaseException(file.getAbsolutePath() + " import failed. File is corrupted, or is not given type");\r
94                         }\r
95                         return root;\r
96                 } catch (DatabaseException e) {\r
97                         throw e;\r
98                 } catch (Exception e) {\r
99                         throw new DatabaseException(e);\r
100                 } \r
101         }\r
102 }\r