]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/AbstractImporter.java
Using XML ontology as base of converted XML schemas
[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                         Layer0Utils.addCommentMetadata(graph, "Import file " + file.getName());\r
61                         graph.markUndoPoint();\r
62                         result = doImport(graph);\r
63                 }\r
64                 \r
65                 public Resource getResult() {\r
66                         return result;\r
67                 }\r
68         }\r
69         \r
70         private class ImportDelayedRequest extends DelayedWriteRequest {\r
71                 private Resource result;\r
72                 public ImportDelayedRequest() {\r
73                         super();\r
74                 }\r
75 \r
76                 @Override\r
77                 public void perform(WriteGraph graph) throws DatabaseException {\r
78                         result = doImport(graph);\r
79                 }\r
80                 \r
81                 public Resource getResult() {\r
82                         return result;\r
83                 }\r
84         }\r
85         \r
86         private Resource doImport(WriteGraph graph) throws DatabaseException {\r
87                 Layer0Utils.setDependenciesIndexingDisabled(graph, true);\r
88                 try {\r
89                         XMLParser parser = new XMLParser(graph);\r
90                         configure(parser);\r
91                         parser.parse(file, logger);\r
92                         System.out.println(file.getAbsolutePath() + " imported");\r
93                         Resource root = parser.getRoot();\r
94                         if (root == null) {\r
95                                 throw new DatabaseException(file.getAbsolutePath() + " import failed. File is corrupted, or is not given type");\r
96                         }\r
97                         return root;\r
98                 } catch (DatabaseException e) {\r
99                         throw e;\r
100                 } catch (Exception e) {\r
101                         throw new DatabaseException(e);\r
102                 } \r
103         }\r
104 }\r