package org.simantics.xml.sax.base; import java.io.File; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.simantics.db.Resource; import org.simantics.db.Session; import org.simantics.db.WriteGraph; import org.simantics.db.common.request.DelayedWriteRequest; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.util.Layer0Utils; import org.simantics.message.ILogger; import org.simantics.message.MessageService; public abstract class AbstractImporter { private Session session; private File file; private ILogger logger; private static final boolean USE_DELAYED = false; public AbstractImporter(Session session, File file) { this.session = session; this.file = file; } public Resource doImport() throws DatabaseException { return doImport(MessageService.getDefault()); } public Resource doImport(ILogger logger) throws DatabaseException { this.logger = logger; if (USE_DELAYED) { ImportDelayedRequest req = new ImportDelayedRequest(); session.syncRequest(req); return req.getResult(); } else { ImportRequest req = new ImportRequest(); session.syncRequest(req); return req.getResult(); } } public File getFile() { return file; } public abstract void configure(XMLParser parser); private class ImportRequest extends WriteRequest { private Resource result; public ImportRequest() { super(); } @Override public void perform(WriteGraph graph) throws DatabaseException { result = doImport(graph); } public Resource getResult() { return result; } } private class ImportDelayedRequest extends DelayedWriteRequest { private Resource result; public ImportDelayedRequest() { super(); } @Override public void perform(WriteGraph graph) throws DatabaseException { result = doImport(graph); } public Resource getResult() { return result; } } private Resource doImport(WriteGraph graph) throws DatabaseException { Layer0Utils.setDependenciesIndexingDisabled(graph, true); try { XMLParser parser = new XMLParser(graph); configure(parser); parser.parse(file, logger); System.out.println(file.getAbsolutePath() + " imported"); Resource root = parser.getRoot(); if (root == null) { throw new DatabaseException(file.getAbsolutePath() + " import failed. File is corrupted, or is not given type"); } return root; } catch (DatabaseException e) { throw e; } catch (Exception e) { throw new DatabaseException(e); } } }