Package org.activerdf.wrapper.sesame2

Source Code of org.activerdf.wrapper.sesame2.WrapperForSesame2

package org.activerdf.wrapper.sesame2;

import java.io.File;

// the new stuff

import org.openrdf.sail.Sail;
import org.openrdf.sail.NotifyingSail;
import org.openrdf.repository.Repository;
import org.openrdf.repository.sail.SailRepository;
import org.openrdf.sail.memory.MemoryStore;
import org.openrdf.sail.nativerdf.NativeStore;
import org.openrdf.sail.rdbms.RdbmsStore;
import org.openrdf.repository.http.HTTPRepository;
import org.openrdf.sail.inferencer.fc.ForwardChainingRDFSInferencer;
import org.openrdf.sail.inferencer.fc.DirectTypeHierarchyInferencer;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.repository.RepositoryException;
import org.openrdf.model.Resource;
import org.openrdf.rio.RDFFormat;


/**
  * construct a wrapper for a sesame2 repository.
  * many sesame2 classes use an initialize method, which clashes with the
  * ruby naming requirement, to name the constructor initialize.
  * Because of this it is currently not possible to construct such objects from jruby
  * but instead emberasing wrappers, such as this have to be used.
  *
  * check http://jira.codehaus.org/browse/JRUBY-45 to see if bug still exists.
*/
public class WrapperForSesame2 {

  protected RepositoryConnection sesameConnection;

  protected Repository sesameRepository;

  /**
    * the constructor. it does nothing.
    * all the real work has to be done by the callConstrcutor methods, because JRuby currently
    * cant manage custom class loaders _and_ constructors with arguments.. yes, its sad.
    */
  public WrapperForSesame2() {
    // do nothing
  }

  /*
   * Initialize the Wrapper with a NativeStore as a backend.
   * @param File dir Data file that the native store will use.
   * @param String indexes If not null, the store will use the given indexes to speed up queries
   * @param boolean inferencing If true (and not null), it will activate rdfs inferencing
   */
  public RepositoryConnection initWithNative(File dir, String indexes, boolean inferencing) {
    Sail sailStack;
   
    if(indexes == null) {
      sailStack = new NativeStore(dir);
    } else {
      sailStack = new NativeStore(dir, indexes);
    }
   
    return initFromSail(sailStack, inferencing);
  }

  /*
   * Initialize the Wrapper with a MemoryStore as a backend
   * @param boolean inferencing If true (and not null), it will activate rdfs inferencing
   */
  public RepositoryConnection initWithMemory(boolean inferencing) {
    return initFromSail(new MemoryStore(), inferencing);
  }
 
  /*
   * Initialize the Wrapper with a RDBMS as a backend
   * @param driver JDBC driver to use
   * @param url JDBC connect URL
   * @param user Username for the database, or null
   * @param password Password for the database user, or null
   */
  public RepositoryConnection initWithRDBMS(String driver, String url, String user, String password, boolean inferencing) {
    Sail sailStack;
   
    if(user == null) {
      sailStack = new RdbmsStore(driver, url);
    } else {
      sailStack = new RdbmsStore(driver, url, user, password);
    }
   
    return initFromSail(sailStack, inferencing);
  }
 
  /*
   * Initialize th Wrapper with a connection to a remote HTTP repository
   */
  public RepositoryConnection initWithHttp(String url, String user, String password) throws RepositoryException {
    HTTPRepository httpRepository = new HTTPRepository(url);
    if(user != null) {
      httpRepository.setUsernameAndPassword(user, password);
    }
    httpRepository.initialize();
    sesameRepository = httpRepository;
    sesameConnection = sesameRepository.getConnection();
    return sesameConnection;
  }

  /**
    * @return the sesame connection of the sesame repository associated with this wrapper.
    */
  public RepositoryConnection getSesameConnection() {
    return sesameConnection;
  }

  /**
    * Load data from file. This is a thin wrapper on the
    * add method of the connection, creating only the File object for
    * it to work on. And yes, we throw everything and let the Ruby
    * side deal with it.
    */
  public boolean load(String file, String baseUri, RDFFormat dataFormat, Resource... contexts) throws Exception {
    sesameConnection.add(new File(file), baseUri, dataFormat, contexts);
    return true;
  }
 
 
  protected RepositoryConnection initFromSail(Sail sailStack, boolean inferencing) {
    if (inferencing) {
      if(sailStack instanceof NotifyingSail) {
        sailStack = new ForwardChainingRDFSInferencer((NotifyingSail) sailStack);
        sailStack = new DirectTypeHierarchyInferencer((NotifyingSail) sailStack);
      } else {
        throw new RuntimeException("Cannot create inferencing: Incompatible Sail type.");
      }
    }


    try {
      sesameRepository = new SailRepository(sailStack);
      sesameRepository.initialize();
      sesameConnection = sesameRepository.getConnection();
      sesameConnection.setAutoCommit(true);
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
    return sesameConnection;
  }

}
TOP

Related Classes of org.activerdf.wrapper.sesame2.WrapperForSesame2

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.