Log in Help
Print
Homereleasesgate-5.1-beta2-build3402-ALLpluginsOntologysrcgatecreoleontologyimplsesame 〉 ConnectSesameOntology.java
 
/*
 *  Copyright (c) 1998-2009, The University of Sheffield.
 *
 *  This file is part of GATE (see http://gate.ac.uk/), and is free
 *  software, licenced under the GNU Library General Public License,
 *  Version 2, June 1991 (in the distribution as file licence.html,
 *  and also available at http://gate.ac.uk/gate/licence.html).
 *
 *  Johann Petrak 2009-08-13
 *
 *  $Id: ConnectSesameOntology.java 11831 2009-10-29 15:23:09Z johann_p $
 */
package gate.creole.ontology.impl.sesame;

import gate.Gate;
import gate.Resource;
import gate.creole.ResourceInstantiationException;
import gate.creole.metadata.CreoleParameter;
import gate.creole.metadata.CreoleResource;

import gate.creole.ontology.OConstants;
import gate.creole.ontology.OURI;
import java.net.MalformedURLException;

import java.util.Set;
import org.apache.log4j.Logger;


/**
 * An ontology LR that allows to connect to a repository containing an
 * ontology. The repository may be located in a local directory or 
 * on a Sesame server. Note that the ontology API will only work as expected
 * and documented if the repository uses the same configuration as used
 * by the OWLIMOntology language resource (OWLIM with owl-max reasoning and
 * partialRDFS optimizations turned off). Other configurations may
 * produce incomplete or wrong results.
 *
 * @author Johann Petrak
 * 
 */
@CreoleResource(
    name = "ConnectSesameOntology",
    interfaceName = "gate.creole.ontology.Ontology",
    comment = "Connect to a repository containing and ontology",
    icon = "ontology",
    helpURL = "http://gate.ac.uk/userguide/sec:ontologies:ontoplugin:connect")
public class ConnectSesameOntology  extends OntologyLR
{
  private static final long serialVersionUID = 1L;

  /**
   *
   * @param theURL
   */
  @CreoleParameter(
     comment="The location of the repository, either a direcotry "+
       "or a Sesame server URL")
  public void setRepositoryLocation(java.net.URL theURL) {
    repositoryLocation = theURL;
  }
  public java.net.URL getRepositoryLocation() {
    return repositoryLocation;
  }
  protected java.net.URL repositoryLocation;

  /**
   *
   * @param id
   */
  @CreoleParameter(comment="The name of the repository to connect to")
  public void setRepositoryID(String id) {
    repositoryID = id;
  }
  public String getRepositoryID() {
    return repositoryID;
  }
  protected String repositoryID;

  private Logger logger;

  /**
   * Constructor
   */
  public ConnectSesameOntology() {
    super();
    logger = Logger.getLogger(this.getClass().getName());
  }

  /** Initialises this resource, and returns it. */
  @Override
  public Resource init() throws ResourceInstantiationException {
    if(getRepositoryLocation() == null) {
      throw new ResourceInstantiationException("repositoryURL must be set");
    }
    if(getRepositoryID() == null) {
      throw new ResourceInstantiationException("repositoryID must be set");
    }

    load();
    Gate.getCreoleRegister().addCreoleListener(this);
    return this;
  }

  /**
   * Loads this ontology.
   * @throws ResourceInstantiationException
   */
  public void load() throws ResourceInstantiationException {
    logger.debug("Initializing");
    OntologyServiceImplSesame owlimService = new OntologyServiceImplSesame(this);
    owlimService.connectToRepository(repositoryLocation,repositoryID);
    ontologyService = owlimService;
    Set<OURI> ouris = ontologyService.getOntologyURIs();
    if(ouris.size() == 1) {
      String uri = ouris.iterator().next().toString();
      if(!uri.endsWith("/") && !uri.endsWith("#")) {
        uri = uri + "#";
      }
      setDefaultNameSpace(uri);
      System.out.println("Default name space set to "+uri);
    } else if(ouris.size() == 0) {
      setDefaultNameSpace(OConstants.ONTOLOGY_DEFAULT_BASE_URI);
      System.err.println("Warning: no ontology URI found, setting default name space to: "+OConstants.ONTOLOGY_DEFAULT_BASE_URI);
    } else if(ouris.size() == 0) {
      System.err.println("Error: several ontology URIs found, could not set default name space");
    }
    logger.debug("Initializing complete");
  }


  public java.net.URL getSourceURL() {
    try {
      return new java.net.URL(getRepositoryLocation() + "/" + getRepositoryID());
    } catch (MalformedURLException ex) {
      return null;
    }
  }

}