/* * This software is Copyright 2005,2006,2007,2008 Langdale Consultants. * Langdale Consultants can be contacted at: http://www.langdale.com.au */ package au.com.langdale.cimtoole.project; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.sql.SQLException; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import com.hp.hpl.jena.db.DBConnection; import com.hp.hpl.jena.db.IDBConnection; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.rdf.model.ModelMaker; /** * A task to import an RDF/XML document into the project * as an HSQL (or other) RDB using Jena utilities and conventions. */ public class RDBImporter implements IWorkspaceRunnable { private String source; private IProject project; private String name; private Model model; private IProgressMonitor monitor; private static final String DB_DRIVER = "org.hsqldb.jdbcDriver"; // path of driver class private static final String DB_URL = "jdbc:hsqldb:file:"; // URL of database private static final String DB_USER = "sa"; // database user id private static final String DB_PASSWD = ""; // database password private static final String DB = "HSQL"; // database type public RDBImporter(String source, IProject project, String name) { super(); this.source = source; this.project = project; this.name = name; } public void run(IProgressMonitor monitor) throws CoreException { this.monitor = monitor; try { Class.forName (DB_DRIVER); } catch (ClassNotFoundException e) { throw Info.error("the database driver is not available: " + DB_DRIVER, e); } IFolder instances = Info.getInstanceFolder(project); String dburl = DB_URL + instances.getFile(name).getLocation().toOSString(); // Create database connection IDBConnection conn = new DBConnection ( dburl, DB_USER, DB_PASSWD, DB ); try { try { conn.getConnection().setAutoCommit(false); } catch (SQLException e) { throw Info.error("error setting up database connection " + name, e); } // create or open the default model ModelMaker maker = ModelFactory.createModelRDBMaker(conn) ; model = maker.createDefaultModel(); // load it up with the source document load(); } finally { // Close the database connection try { conn.close(); } catch (SQLException e) { throw Info.error("error closing database " + name, e); } // tell eclipse we made some files instances.refreshLocal(1, monitor); } } // TODO: use ARP and collect parse errors private void load() throws CoreException { InputStream input; try { input = new BufferedInputStream ( new FileInputStream(source)); } catch (FileNotFoundException e) { throw Info.error("error opeing source file " + source, e); } model.begin(); model.read(input, new File(source).toURI().toASCIIString()); model.commit(); model.close(); } }