/*
* 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: CreateSesameOntology.java 11600 2009-10-13 17:13:22Z 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 java.io.File;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import org.apache.log4j.Logger;
/**
* An ontology LR that creates a repository based on a config template file.
* The repository will be created with the specified ID at the given
* repository location, which can either be a directory or the URL
* of a sesame server.
* The template should contain a template variable "id" which will be
* replaced by the repository ID.
* <p>
* NOTE: Any Sesame repository can be created this way, but the functionality
* of the GATE ontology API depends on an OWLIM repository with owl-max
* reasoning and partialRDFS optimizations turned off.
* <p>
* After creation the owl.rdfs and rdf-schema.rdf files will be imported
* into the newly created repository.
*
* @author Johann Petrak
*/
@CreoleResource(
name = "CreateSesameOntology",
interfaceName = "gate.creole.ontology.Ontology",
comment = "Create a ontology from a Sesame configuration file for a repository",
icon = "ontology",
helpURL = "http://gate.ac.uk/userguide/sec:ontologies:ontoplugin:create")
public class CreateSesameOntology extends OntologyLR
{
private static final long serialVersionUID = 1L;
/**
*
* @param id
*/
@CreoleParameter(comment="The name of the repository to create")
public void setRepositoryID(String id) {
repositoryID = id;
}
public String getRepositoryID() {
return repositoryID;
}
protected String repositoryID;
@CreoleParameter(
comment="The location of the repository, either a direcotry "+
"or a Sesame server URL")
public void setRepositoryLocation(java.net.URL loc) {
repositoryLocation = loc;
}
public java.net.URL getRepositoryLocation() {
return repositoryLocation;
}
protected java.net.URL repositoryLocation;
/**
*
* @param url
*/
@CreoleParameter(comment="The URL of the configuration file to use")
public void setConfigFile(java.net.URL url) {
configFileURL = url;
}
public java.net.URL getConfigFile() {
return configFileURL;
}
protected java.net.URL configFileURL;
private Logger logger;
/**
* Constructor
* @throws ResourceInstantiationException
*/
public CreateSesameOntology() throws ResourceInstantiationException {
super();
logger = Logger.getLogger(this.getClass().getName());
}
/** Initialises this resource, and returns it.
* @return
*/
public Resource init() throws ResourceInstantiationException {
if(getRepositoryID() == null) {
throw new ResourceInstantiationException("repositoryID must be set");
}
if(getRepositoryLocation() == null) {
throw new ResourceInstantiationException("repositoryLocation must be set");
}
if(getConfigFile() == null) {
throw new ResourceInstantiationException("configFile must be set");
}
load();
Gate.getCreoleRegister().addCreoleListener(this);
return this;
}
/**
* Loads this ontology.
*/
public void load() throws ResourceInstantiationException {
File configFile;
try {
configFile = new File(getConfigFile().toURI());
} catch (URISyntaxException e) {
throw new ResourceInstantiationException("Problem with config file URL: "+getConfigFile(),e);
}
if(!configFile.exists()) {
throw new ResourceInstantiationException("Not found: "+getConfigFile());
}
OntologyServiceImplSesame oService = new OntologyServiceImplSesame(this);
oService.createManagedRepository(
getRepositoryLocation(),
getRepositoryID(),getConfigFile());
ontologyService = oService;
loadSystemImports();
}
public java.net.URL getSourceURL() {
try {
return new java.net.URL(getRepositoryLocation()+"/"+getRepositoryID());
} catch (MalformedURLException ex) {
return null;
}
}
}