]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/AbstractImporter.java
XML Schema converter
[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.eclipse.core.runtime.IStatus;\r
6 import org.eclipse.core.runtime.Status;\r
7 import org.simantics.db.Resource;\r
8 import org.simantics.db.Session;\r
9 import org.simantics.db.WriteGraph;\r
10 import org.simantics.db.common.request.DelayedWriteRequest;\r
11 import org.simantics.db.common.request.WriteRequest;\r
12 import org.simantics.db.exception.DatabaseException;\r
13 import org.simantics.db.layer0.util.Layer0Utils;\r
14 import org.simantics.message.ILogger;\r
15 import org.simantics.message.MessageService;\r
16 \r
17 \r
18 public abstract class AbstractImporter {\r
19 \r
20         \r
21         private Session session;\r
22         private File file;\r
23         private ILogger logger;\r
24         \r
25         private static final boolean USE_DELAYED = false;\r
26         \r
27         public AbstractImporter(Session session, File file)  {\r
28                 this.session = session;\r
29                 this.file = file;\r
30         }\r
31         public Resource doImport() throws DatabaseException {\r
32                 return doImport(MessageService.getDefault());   \r
33         }\r
34         \r
35         public Resource doImport(ILogger logger) throws DatabaseException {\r
36                 this.logger = logger;\r
37                 if (USE_DELAYED) {\r
38                         ImportDelayedRequest req = new ImportDelayedRequest();\r
39                         session.syncRequest(req);\r
40                         return req.getResult();\r
41                 } else {\r
42                         ImportRequest req = new ImportRequest();\r
43                         session.syncRequest(req);\r
44                         return req.getResult();\r
45                 }\r
46         }\r
47         \r
48         public File getFile() {\r
49                 return file;\r
50         }\r
51         \r
52         public abstract void configure(XMLParser parser);\r
53         \r
54         private class ImportRequest extends WriteRequest {\r
55                 private Resource result;\r
56                 public ImportRequest() {\r
57                         super();\r
58                 }\r
59 \r
60                 @Override\r
61                 public void perform(WriteGraph graph) throws DatabaseException {\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