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.db.service.XSupport;
\r
13 import org.simantics.message.ILogger;
\r
14 import org.simantics.message.MessageService;
\r
17 public abstract class AbstractImporter {
\r
20 private Session session;
\r
22 private ILogger logger;
\r
23 private XMLParser parser;
\r
25 private static final boolean USE_DELAYED = true;
\r
27 public AbstractImporter(Session session, File file) {
\r
28 this.session = session;
\r
32 public AbstractImporter(Session session, File file, XMLParser parser) {
\r
33 this.session = session;
\r
35 this.parser = parser;
\r
37 public Resource doImport() throws DatabaseException {
\r
38 return doImport(MessageService.getDefault());
\r
41 public Resource doImport(ILogger logger) throws DatabaseException {
\r
42 this.logger = logger;
\r
44 ImportDelayedRequest req = new ImportDelayedRequest();
\r
45 session.syncRequest(req);
\r
46 Resource dr = req.getResult();
\r
47 XSupport xs = session.getService(XSupport.class);
\r
48 Resource result = xs.convertDelayedResourceToResource(dr);
\r
51 ImportRequest req = new ImportRequest();
\r
52 session.syncRequest(req);
\r
53 return req.getResult();
\r
57 public File getFile() {
\r
61 public void configure(XMLParser parser){};
\r
64 private class ImportRequest extends WriteRequest {
\r
65 private Resource result;
\r
66 public ImportRequest() {
\r
71 public void perform(WriteGraph graph) throws DatabaseException {
\r
72 Layer0Utils.addCommentMetadata(graph, "Import file " + file.getName());
\r
73 graph.markUndoPoint();
\r
74 result = doImport(graph);
\r
77 public Resource getResult() {
\r
82 private class ImportDelayedRequest extends DelayedWriteRequest {
\r
83 private Resource result;
\r
84 public ImportDelayedRequest() {
\r
89 public void perform(WriteGraph graph) throws DatabaseException {
\r
90 result = doImport(graph);
\r
93 public Resource getResult() {
\r
98 private Resource doImport(WriteGraph graph) throws DatabaseException {
\r
99 Layer0Utils.setDependenciesIndexingDisabled(graph, true);
\r
102 if (parser == null) {
\r
103 parser = new XMLParser();
\r
104 parser.setGraph(graph);
\r
107 parser.setGraph(graph);
\r
110 parser.parse(file, logger);
\r
111 System.out.println(file.getAbsolutePath() + " imported");
\r
112 Resource root = parser.getRoot();
\r
113 if (root == null) {
\r
114 throw new DatabaseException(file.getAbsolutePath() + " import failed. File is corrupted, or is not given type");
\r
117 } catch (DatabaseException e) {
\r
119 } catch (Exception e) {
\r
120 throw new DatabaseException(e);
\r