You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by en...@apache.org on 2011/04/01 14:08:31 UTC
svn commit: r1087671 [3/13] - in /incubator/stanbol/trunk/ontologymanager:
./ ontonet/ ontonet/.settings/ ontonet/src/ ontonet/src/main/
ontonet/src/main/java/ ontonet/src/main/java/org/
ontonet/src/main/java/org/apache/ ontonet/src/main/java/org/apach...
Added: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ONManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ONManagerImpl.java?rev=1087671&view=auto
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ONManagerImpl.java (added)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ONManagerImpl.java Fri Apr 1 12:08:25 2011
@@ -0,0 +1,574 @@
+package org.apache.stanbol.ontologymanager.ontonet.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Dictionary;
+
+import org.apache.clerezza.rdf.core.access.TcManager;
+import org.apache.clerezza.rdf.core.access.WeightedTcProvider;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.stanbol.ontologymanager.ontonet.api.DuplicateIDException;
+import org.apache.stanbol.ontologymanager.ontonet.api.ONManager;
+import org.apache.stanbol.ontologymanager.ontonet.api.io.BlankOntologySource;
+import org.apache.stanbol.ontologymanager.ontonet.api.io.OntologyInputSource;
+import org.apache.stanbol.ontologymanager.ontonet.api.io.RootOntologyIRISource;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.CoreOntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.CustomOntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.NoSuchScopeException;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyIndex;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyScope;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyScopeFactory;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpaceFactory;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.ScopeRegistry;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.UnmodifiableOntologySpaceException;
+import org.apache.stanbol.ontologymanager.ontonet.api.session.SessionManager;
+import org.apache.stanbol.ontologymanager.ontonet.impl.io.ClerezzaOntologyStorage;
+import org.apache.stanbol.ontologymanager.ontonet.impl.io.InMemoryOntologyStorage;
+import org.apache.stanbol.ontologymanager.ontonet.impl.ontology.OntologyIndexImpl;
+import org.apache.stanbol.ontologymanager.ontonet.impl.ontology.OntologyScopeFactoryImpl;
+import org.apache.stanbol.ontologymanager.ontonet.impl.ontology.OntologySpaceFactoryImpl;
+import org.apache.stanbol.ontologymanager.ontonet.impl.ontology.ScopeRegistryImpl;
+import org.apache.stanbol.ontologymanager.ontonet.impl.registry.model.impl.RegistryLoaderImpl;
+import org.apache.stanbol.ontologymanager.ontonet.impl.session.SessionManagerImpl;
+import org.apache.stanbol.ontologymanager.ontonet.impl.session.ScopeSessionSynchronizer;
+import org.osgi.service.component.ComponentContext;
+import org.semanticweb.owlapi.apibinding.OWLManager;
+import org.semanticweb.owlapi.io.FileDocumentSource;
+import org.semanticweb.owlapi.io.IRIDocumentSource;
+import org.semanticweb.owlapi.io.OWLOntologyDocumentSource;
+import org.semanticweb.owlapi.io.StreamDocumentSource;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLDataFactory;
+import org.semanticweb.owlapi.model.OWLOntology;
+import org.semanticweb.owlapi.model.OWLOntologyCreationException;
+import org.semanticweb.owlapi.model.OWLOntologyManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The running context of a KReS Ontology Network Manager instance. From this object it is possible to obtain
+ * factories, indices, registries and what have you.
+ *
+ * @author alessandro
+ *
+ */
+@Component(immediate = true, metatype = true)
+@Service(ONManager.class)
+// @Property(name="service.ranking",intValue=5)
+public class ONManagerImpl implements ONManager {
+
+ public static final String _ALIAS_DEFAULT = "/ontology";
+ public static final String _CONFIG_FILE_PATH_DEFAULT = "";
+ public static final String _KRES_NAMESPACE_DEFAULT = "http://kres.iksproject.eu/";
+
+ // @Property(value = _ALIAS_DEFAULT)
+ public static final String ALIAS = "org.apache.stanbol.ontologyNetworkManager.alias";
+
+ @Property(value = _CONFIG_FILE_PATH_DEFAULT)
+ public static String CONFIG_FILE_PATH = "org.apache.stanbol.ontologyNetworkManager.config_ont";
+
+ @Property(value = _KRES_NAMESPACE_DEFAULT)
+ public static String KRES_NAMESPACE = "kres.namespace";
+
+ @SuppressWarnings("unused")
+ private String alias = _ALIAS_DEFAULT;
+ private String configPath = _CONFIG_FILE_PATH_DEFAULT;
+ private String kresNs = _KRES_NAMESPACE_DEFAULT;
+
+ // private static ONManagerImpl me = new ONManagerImpl();
+ //
+ // public static ONManagerImpl get() {
+ // return me;
+ // }
+
+ // private ComponentContext ce;
+
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ private OntologyIndex oIndex;
+
+ private OntologyScopeFactory ontologyScopeFactory;
+
+ private OntologySpaceFactory ontologySpaceFactory;
+
+ private OWLOntologyManager owlCacheManager;
+
+ private OWLDataFactory owlFactory;
+
+ private RegistryLoaderImpl registryLoader;
+
+ private ScopeRegistry scopeRegistry;
+
+ private SessionManager sessionManager;
+
+ @Reference
+ private TcManager tcm;
+
+ @Reference
+ private WeightedTcProvider wtcp;
+
+ private ClerezzaOntologyStorage storage;
+
+ /*
+ * The identifiers (not yet parsed as IRIs) of the ontology scopes that should be activated.
+ */
+ private String[] toActivate = new String[] {};
+
+ /**
+ * This default constructor is <b>only</b> intended to be used by the OSGI environment with Service
+ * Component Runtime support.
+ * <p>
+ * DO NOT USE to manually create instances - the ReengineerManagerImpl instances do need to be configured!
+ * YOU NEED TO USE {@link #ONManagerImpl(TcManager, WeightedTcProvider, Dictionary)} or its overloads, to
+ * parse the configuration and then initialise the rule store if running outside an OSGI environment.
+ */
+ public ONManagerImpl() {
+ super();
+ owlFactory = OWLManager.getOWLDataFactory();
+ owlCacheManager = OWLManager.createOWLOntologyManager();
+
+ // These depend on one another
+ scopeRegistry = new ScopeRegistryImpl();
+ oIndex = new OntologyIndexImpl(this);
+
+ // Defer the call to the bindResources() method to the activator.
+ }
+
+ protected void bindResources(TcManager tcm, WeightedTcProvider wtcp) {
+ // At this stage we know if tcm and wtcp have been provided or not.
+
+ /*
+ * With the current implementation of OntologyStorage, we cannot live with either component being
+ * null. So create the object only if both are not null.
+ */
+ if (tcm != null && wtcp != null) storage = new ClerezzaOntologyStorage(tcm, wtcp);
+ // Manage this in-memory, so it won't have to be null.
+ else {
+ storage = new InMemoryOntologyStorage();
+ }
+
+ // Now create everything that depends on the Storage object.
+
+ // These may require the OWL cache manager
+ ontologySpaceFactory = new OntologySpaceFactoryImpl(scopeRegistry, storage);
+ ontologyScopeFactory = new OntologyScopeFactoryImpl(scopeRegistry, ontologySpaceFactory);
+ ontologyScopeFactory.addScopeEventListener(oIndex);
+
+ // This requires the OWL cache manager
+ registryLoader = new RegistryLoaderImpl(this);
+
+ // TODO : assign dynamically in case the FISE persistence store is not
+ // available.
+ // storage = new FISEPersistenceStorage();
+
+ sessionManager = new SessionManagerImpl(IRI.create("http://kres.iks-project.eu/"),
+ getScopeRegistry(), storage);
+ sessionManager.addSessionListener(new ScopeSessionSynchronizer(this));
+ }
+
+ /**
+ * To be invoked by non-OSGi environments.
+ *
+ * @param tcm
+ * @param wtcp
+ * @param configuration
+ */
+ public ONManagerImpl(TcManager tcm, WeightedTcProvider wtcp, Dictionary<String,Object> configuration) {
+ this();
+ // Assume this.tcm and this.wtcp were not filled in by OSGi-DS.
+ this.tcm = tcm;
+ this.wtcp = wtcp;
+ try {
+ activate(configuration);
+ } catch (IOException e) {
+ log.error("Unable to access servlet context.", e);
+ }
+ }
+
+ /**
+ * Used to configure an instance within an OSGi container.
+ *
+ * @throws IOException
+ */
+ @SuppressWarnings("unchecked")
+ @Activate
+ protected void activate(ComponentContext context) throws IOException {
+ log.info("in " + ONManagerImpl.class + " activate with context " + context);
+ if (context == null) {
+ throw new IllegalStateException("No valid" + ComponentContext.class + " parsed in activate!");
+ }
+ activate((Dictionary<String,Object>) context.getProperties());
+ }
+
+ /**
+ * Called within both OSGi and non-OSGi environments.
+ *
+ * @param configuration
+ * @throws IOException
+ */
+ protected void activate(Dictionary<String,Object> configuration) throws IOException {
+// if (storage == null) storage = new OntologyStorage(this.tcm, this.wtcp);
+
+ bindResources(this.tcm, this.wtcp);
+
+ String tfile = (String) configuration.get(CONFIG_FILE_PATH);
+ if (tfile != null) this.configPath = tfile;
+ String tns = (String) configuration.get(KRES_NAMESPACE);
+ if (tns != null) this.kresNs = tns;
+
+ // configPath = (String) configuration.get(CONFIG_FILE_PATH);
+
+ /*
+ * If there is no configuration file, just start with an empty scope set
+ */
+ if (configPath != null && !configPath.trim().isEmpty()) {
+ OWLOntology oConf = null;
+ OWLOntologyManager tempMgr = OWLManager.createOWLOntologyManager();
+ OWLOntologyDocumentSource oConfSrc = null;
+
+ try {
+ log.debug("Try to load the configuration ontology from a local bundle relative path");
+ InputStream is = this.getClass().getResourceAsStream(configPath);
+ oConfSrc = new StreamDocumentSource(is);
+ } catch (Exception e1) {
+ try {
+ log.debug("Cannot load from a local bundle relative path", e1);
+ log.debug("Try to load the configuration ontology resolving the given IRI");
+ IRI iri = IRI.create(configPath);
+ if (!iri.isAbsolute()) throw new Exception("IRI seems to be not absolute! value was: "
+ + iri.toQuotedString());
+ oConfSrc = new IRIDocumentSource(iri);
+ if (oConfSrc == null) throw new Exception("Cannot load from the IRI: "
+ + iri.toQuotedString());
+ } catch (Exception e) {
+ try {
+ log.debug("Cannot load from the web", e1);
+ log.debug("Try to load the configuration ontology as full local file path");
+ oConfSrc = new FileDocumentSource(new File(configPath));
+ } catch (Exception e2) {
+ log.error("Cannot load the configuration ontology from parameter value: "
+ + configPath, e2);
+ }
+ }
+ }
+
+ if (oConfSrc == null) {
+ log.warn("KReS :: [NONFATAL] No ONM configuration file found at path " + configPath
+ + ". Starting with blank scope set.");
+ } else {
+ try {
+ oConf = tempMgr.loadOntologyFromOntologyDocument(oConfSrc);
+ } catch (OWLOntologyCreationException e) {
+ log.error("Cannot create the configuration ontology", e);
+ }
+ }
+
+ // Create and populate the scopes from the config ontology.
+ bootstrapOntologyNetwork(oConf);
+
+ }
+ log.debug("KReS :: ONManager activated.");
+
+ }
+
+ private void bootstrapOntologyNetwork(OWLOntology configOntology) {
+ if (configOntology == null) {
+ log.debug("KReS :: Ontology Network Manager starting with empty scope set.");
+ return;
+ }
+ try {
+
+ /**
+ * We create and register the scopes before activating
+ */
+ for (String scopeIRI : ConfigurationManagement.getScopes(configOntology)) {
+
+ String[] cores = ConfigurationManagement.getCoreOntologies(configOntology, scopeIRI);
+ String[] customs = ConfigurationManagement.getCustomOntologies(configOntology, scopeIRI);
+
+ // "Be a man. Use printf"
+ log.debug("KReS :: Scope " + scopeIRI);
+ for (String s : cores) {
+ log.debug("\tKReS :: Core ontology " + s);
+ }
+ for (String s : customs) {
+ log.debug("\tKReS :: Custom ontology " + s);
+ }
+
+ // Create the scope
+ IRI iri = IRI.create(scopeIRI);
+ OntologyScope sc = null;
+ sc = ontologyScopeFactory.createOntologyScope(iri, new BlankOntologySource());
+
+ // Populate the core space
+ if (cores.length > 0) {
+ OntologySpace corespc = sc.getCoreSpace();
+ corespc.tearDown();
+ for (int i = 0; i < cores.length; i++)
+ try {
+ corespc.addOntology(new RootOntologyIRISource(IRI.create(cores[i])));
+ } catch (Exception ex) {
+ log.warn("KReS :: failed to import ontology " + cores[i], ex);
+ continue;
+ }
+ // TODO: this call should be automatic
+ ((CustomOntologySpace) sc.getCustomSpace()).attachCoreSpace((CoreOntologySpace) corespc,
+ false);
+ }
+
+ sc.setUp();
+ scopeRegistry.registerScope(sc);
+
+ // getScopeHelper().createScope(scopeIRI);
+ // getScopeHelper().addToCoreSpace(scopeIRI, cores);
+ getScopeHelper().addToCustomSpace(scopeIRI, customs);
+ }
+
+ /**
+ * Try to get activation policies
+ */
+ toActivate = ConfigurationManagement.getScopesToActivate(configOntology);
+
+ for (String scopeID : toActivate) {
+ try {
+ IRI scopeId = IRI.create(scopeID.trim());
+ scopeRegistry.setScopeActive(scopeId, true);
+ log.info("KReS :: Ontology scope " + scopeID + " activated.");
+ } catch (NoSuchScopeException ex) {
+ log.warn("Tried to activate unavailable scope " + scopeID + ".");
+ } catch (Exception ex) {
+ log.error("Exception caught while activating scope " + scopeID + " . Skipping.", ex);
+ continue;
+ }
+ }
+
+ } catch (Throwable e) {
+ log.error("[NONFATAL] Invalid ONM configuration file found. " + "Starting with blank scope set.",
+ e);
+ }
+
+ }
+
+ /**
+ * Deactivation of the ONManagerImpl resets all its resources.
+ */
+ @Deactivate
+ protected void deactivate(ComponentContext context) {
+ log.info("in " + ONManagerImpl.class + " deactivate with context " + context);
+ }
+
+ @Override
+ public String getKReSNamespace() {
+ return kresNs;
+ }
+
+ public OntologyIndex getOntologyIndex() {
+ return oIndex;
+ }
+
+ /**
+ * Returns the ontology scope factory that was created along with the manager context.
+ *
+ * @return the ontology scope factory
+ */
+ public OntologyScopeFactory getOntologyScopeFactory() {
+ return ontologyScopeFactory;
+ }
+
+ /**
+ * Returns the ontology space factory that was created along with the manager context.
+ *
+ * @return the ontology space factory
+ */
+ public OntologySpaceFactory getOntologySpaceFactory() {
+ return ontologySpaceFactory;
+ }
+
+ public ClerezzaOntologyStorage getOntologyStore() {
+ return storage;
+ }
+
+ public OWLOntologyManager getOwlCacheManager() {
+ // return OWLManager.createOWLOntologyManager();
+ return owlCacheManager;
+ }
+
+ /**
+ * Returns a factory object that can be used for obtaining OWL API objects.
+ *
+ * @return the default OWL data factory
+ */
+ public OWLDataFactory getOwlFactory() {
+ return owlFactory;
+ }
+
+ /**
+ * Returns the default ontology registry loader.
+ *
+ * @return the default ontology registry loader
+ */
+ public RegistryLoaderImpl getRegistryLoader() {
+ return registryLoader;
+ }
+
+ /**
+ * Returns the unique ontology scope registry for this context.
+ *
+ * @return the ontology scope registry
+ */
+ public ScopeRegistry getScopeRegistry() {
+ return scopeRegistry;
+ }
+
+ public SessionManager getSessionManager() {
+ return sessionManager;
+ }
+
+ public String[] getUrisToActivate() {
+ return toActivate;
+ }
+
+ private Helper helper = null;
+
+ public Helper getScopeHelper() {
+ if (helper == null) {
+ helper = new Helper();
+ }
+ return helper;
+ }
+
+ public class Helper {
+ private Helper() {}
+
+ /**
+ * Create an empty scope. The scope is created, registered and activated
+ *
+ * @param scopeID
+ * @return
+ * @throws DuplicateIDException
+ */
+ public synchronized OntologyScope createScope(String scopeID) throws DuplicateIDException {
+ OntologyInputSource oisbase = new BlankOntologySource();
+
+ IRI scopeIRI = IRI.create(scopeID);
+
+ /*
+ * The scope is created by the ScopeFactory or loaded to the scope registry of KReS
+ */
+ OntologyScope scope;
+ scope = ontologyScopeFactory.createOntologyScope(scopeIRI, oisbase);
+
+ scope.setUp();
+ scopeRegistry.registerScope(scope, true);
+ log.debug("Created scope " + scopeIRI, this);
+ return scope;
+ }
+
+ /**
+ * Adds the ontology from the given iri to the core space of the given scope
+ *
+ * @param scopeID
+ * @param locationIri
+ */
+ public synchronized void addToCoreSpace(String scopeID, String[] locationIris) {
+ OntologyScope scope = getScopeRegistry().getScope(IRI.create(scopeID));
+ OntologySpace corespc = scope.getCoreSpace();
+ scope.tearDown();
+ corespc.tearDown();
+ for (String locationIri : locationIris) {
+ try {
+ corespc.addOntology(new RootOntologyIRISource(IRI.create(locationIri)));
+ //
+ // corespc.addOntology(
+ // createOntologyInputSource(locationIri));
+ log.debug("Added " + locationIri + " to scope " + scopeID + " in the core space.", this);
+ // OntologySpace cs = scope.getCustomSpace();
+ // if (cs instanceof CustomOntologySpace) {
+ // (
+ // (CustomOntologySpace)cs).attachCoreSpace((CoreOntologySpace)corespc,
+ // false);
+ // }
+ } catch (UnmodifiableOntologySpaceException e) {
+ log.error("Core space for scope " + scopeID + " denied addition of ontology "
+ + locationIri, e);
+ } catch (OWLOntologyCreationException e) {
+ log.error("Creation of ontology from source " + locationIri + " failed.", e);
+ }
+ }
+ corespc.setUp();
+ }
+
+ /**
+ * Adds the ontology fromt he given iri to the custom space of the given scope
+ *
+ * @param scopeID
+ * @param locationIri
+ */
+ public synchronized void addToCustomSpace(String scopeID, String[] locationIris) {
+ OntologyScope scope = getScopeRegistry().getScope(IRI.create(scopeID));
+
+ scope.getCustomSpace().tearDown();
+ for (String locationIri : locationIris) {
+ try {
+ scope.getCustomSpace().addOntology(createOntologyInputSource(locationIri));
+ log
+ .debug("Added " + locationIri + " to scope " + scopeID + " in the custom space.",
+ this);
+ } catch (UnmodifiableOntologySpaceException e) {
+ log.error("An error occurred while trying to add the ontology from location: "
+ + locationIri, e);
+ }
+ }
+ scope.getCustomSpace().setUp();
+ }
+
+ private OntologyInputSource createOntologyInputSource(final String uri) {
+ /*
+ * The scope factory needs an OntologyInputSource as input for the core ontology space. We want to
+ * use the dbpedia ontology as core ontology of our scope.
+ */
+ OntologyInputSource ois = new OntologyInputSource() {
+
+ @Override
+ public boolean hasRootOntology() {
+ return true;
+ }
+
+ @Override
+ public boolean hasPhysicalIRI() {
+ return false;
+ }
+
+ @Override
+ public OWLOntology getRootOntology() {
+
+ try {
+
+ OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
+ return manager.loadOntologyFromOntologyDocument(IRI.create(uri));
+ } catch (OWLOntologyCreationException e) {
+ log.error("Cannot load the ontology " + uri, e);
+ } catch (Exception e) {
+ log.error("Cannot load the ontology " + uri, e);
+ }
+ /** If some errors occur **/
+ return null;
+ }
+
+ @Override
+ public IRI getPhysicalIRI() {
+ return null;
+ }
+ };
+
+ return ois;
+ }
+ }
+}
Propchange: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/io/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 12:08:25 2011
@@ -0,0 +1 @@
+target
Added: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/io/ClerezzaOntologyStorage.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/io/ClerezzaOntologyStorage.java?rev=1087671&view=auto
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/io/ClerezzaOntologyStorage.java (added)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/io/ClerezzaOntologyStorage.java Fri Apr 1 12:08:25 2011
@@ -0,0 +1,204 @@
+package org.apache.stanbol.ontologymanager.ontonet.impl.io;
+
+import java.util.Dictionary;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Set;
+
+import org.apache.clerezza.rdf.core.MGraph;
+import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.rdf.core.access.EntityAlreadyExistsException;
+import org.apache.clerezza.rdf.core.access.TcManager;
+import org.apache.clerezza.rdf.core.access.WeightedTcProvider;
+import org.apache.clerezza.rdf.core.impl.SimpleGraph;
+import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
+import org.apache.clerezza.rdf.core.sparql.ParseException;
+import org.apache.clerezza.rdf.core.sparql.QueryParser;
+import org.apache.clerezza.rdf.core.sparql.query.Query;
+import org.osgi.service.component.ComponentContext;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLOntology;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.hp.hpl.jena.ontology.OntModel;
+import com.hp.hpl.jena.ontology.OntModelSpec;
+import com.hp.hpl.jena.rdf.model.Model;
+import com.hp.hpl.jena.rdf.model.ModelFactory;
+import com.hp.hpl.jena.util.FileManager;
+
+import org.apache.stanbol.ontologymanager.ontonet.impl.ontology.NoSuchStoreException;
+import org.apache.stanbol.owl.trasformation.JenaToClerezzaConverter;
+import org.apache.stanbol.owl.trasformation.JenaToOwlConvert;
+
+public class ClerezzaOntologyStorage {
+
+ private static Logger log = LoggerFactory.getLogger(ClerezzaOntologyStorage.class);
+
+ public static final String URI = "http://ontologydesignpatterns.org/ont/iks/oxml.owl";
+
+ TcManager tcManager;
+
+ WeightedTcProvider weightedTcProvider;
+
+ /**
+ * This default constructor is <b>only</b> intended to be used by the OSGI
+ * environment with Service Component Runtime support.
+ * <p>
+ * DO NOT USE to manually create instances - the ClerezzaStorage instances
+ * do need to be configured! YOU NEED TO USE
+ * {@link #ClerezzaStorage(TcManager, WeightedTcProvider, OntologyStoreProvider)}
+ * or its overloads, to parse the configuration and then initialise the rule
+ * store if running outside a OSGI environment.
+ */
+ protected ClerezzaOntologyStorage() {
+
+ }
+
+ /**
+ * Basic constructor to be used if outside of an OSGi environment. Invokes
+ * default constructor.
+ *
+ * @param tcManager
+ * @param wtcProvider
+ * @param osProvider
+ */
+ public ClerezzaOntologyStorage(TcManager tcManager, WeightedTcProvider wtcProvider) {
+ this();
+ this.tcManager = tcManager;
+ this.weightedTcProvider = wtcProvider;
+ activate(new Hashtable<String, Object>());
+ }
+
+ @SuppressWarnings("unchecked")
+ protected void activate(ComponentContext context) {
+ log.info("in " + ClerezzaOntologyStorage.class + " activate with context "
+ + context);
+ if (context == null) {
+ throw new IllegalStateException("No valid" + ComponentContext.class
+ + " parsed in activate!");
+ }
+ activate((Dictionary<String, Object>) context.getProperties());
+ }
+
+ protected void activate(Dictionary<String, Object> configuration) {
+
+ }
+
+ public void clear() {
+ // TODO Auto-generated method stub
+ }
+
+ protected void deactivate(ComponentContext context) {
+ log.info("in " + ClerezzaOntologyStorage.class + " deactivate with context "
+ + context);
+ tcManager = null;
+ weightedTcProvider = null;
+ }
+
+ public void delete(IRI ontologyId) {
+ // TODO Auto-generated method stub
+ }
+
+ public void deleteAll(Set<IRI> ontologyIds) {
+ // TODO Auto-generated method stub
+ }
+
+ public OWLOntology getGraph(IRI ontologyID) throws NoSuchStoreException {
+ OWLOntology ontology = null;
+
+ if (tcManager != null) {
+ MGraph mGraph = tcManager.getMGraph(new UriRef(ontologyID
+ .toString()));
+ JenaToOwlConvert jowl = new JenaToOwlConvert();
+ OntModel ontModel = ModelFactory.createOntologyModel(
+ OntModelSpec.OWL_DL_MEM, FileManager.get().loadModel(
+ URI));
+ ontModel.add(JenaToClerezzaConverter
+ .clerezzaMGraphToJenaModel(mGraph));
+ ontology = jowl.ModelJenaToOwlConvert(ontModel, "RDF/XML");
+ // ontology =
+ // OWLAPIToClerezzaConverter.clerezzaMGraphToOWLOntology(mGraph);
+
+ } else {
+ throw new NoSuchStoreException(
+ "No store registered or activated in the environment.");
+ }
+ return ontology;
+ }
+
+ public Set<IRI> listGraphs() {
+
+ Set<IRI> iris = null;
+ Set<UriRef> uriRefs = tcManager.listTripleCollections();
+ if (uriRefs != null) {
+ iris = new HashSet<IRI>();
+ for (UriRef uriRef : uriRefs) {
+ iris.add(IRI.create(uriRef.toString()));
+ }
+ }
+ return iris;
+
+ }
+
+ public OWLOntology load(IRI ontologyId) {
+ MGraph triples = TcManager.getInstance().getMGraph(
+ new UriRef(ontologyId.toString()));
+ Model om = JenaToClerezzaConverter.clerezzaMGraphToJenaModel(triples);
+ JenaToOwlConvert converter = new JenaToOwlConvert();
+ return converter.ModelJenaToOwlConvert(om, "RDF/XML");
+ }
+
+ public OWLOntology sparqlConstruct(String sparql, String datasetURI) {
+
+ Query query;
+
+ MGraph mGraph = new SimpleMGraph();
+ try {
+ query = QueryParser.getInstance().parse(sparql);
+
+ UriRef datasetUriRef = new UriRef(datasetURI);
+ MGraph dataset = weightedTcProvider.getMGraph(datasetUriRef);
+
+ mGraph.addAll((SimpleGraph) tcManager.executeSparqlQuery(query,
+ dataset));
+
+ } catch (ParseException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ Model om = JenaToClerezzaConverter.clerezzaMGraphToJenaModel(mGraph);
+ JenaToOwlConvert converter = new JenaToOwlConvert();
+ return converter.ModelJenaToOwlConvert(om, "RDF/XML");
+ }
+
+ public void store(OWLOntology o) {
+
+ JenaToOwlConvert converter = new JenaToOwlConvert();
+ OntModel om = converter.ModelOwlToJenaConvert(o, "RDF/XML");
+ MGraph mg = JenaToClerezzaConverter.jenaModelToClerezzaMGraph(om);
+ // MGraph mg = OWLAPIToClerezzaConverter.owlOntologyToClerezzaMGraph(o);
+ MGraph mg2 = null;
+UriRef ref = new UriRef(o.getOntologyID()
+ .getOntologyIRI().toString());
+ try {
+ mg2 = tcManager.createMGraph(ref);
+ } catch (EntityAlreadyExistsException ex) {
+ log.info("Entity "+ref+" already exists in store. Replacing...");
+ mg2 = tcManager.getMGraph(ref);
+ }
+
+ mg2.addAll(mg);
+ }
+
+ public void store(OWLOntology o, IRI ontologyID) {
+
+ JenaToOwlConvert converter = new JenaToOwlConvert();
+ OntModel om = converter.ModelOwlToJenaConvert(o, "RDF/XML");
+ MGraph mg = JenaToClerezzaConverter.jenaModelToClerezzaMGraph(om);
+ // MGraph mg = OWLAPIToClerezzaConverter.owlOntologyToClerezzaMGraph(o);
+ MGraph mg2 = tcManager.createMGraph(new UriRef(ontologyID.toString()));
+ mg2.addAll(mg);
+ }
+}
Added: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/io/InMemoryOntologyStorage.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/io/InMemoryOntologyStorage.java?rev=1087671&view=auto
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/io/InMemoryOntologyStorage.java (added)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/io/InMemoryOntologyStorage.java Fri Apr 1 12:08:25 2011
@@ -0,0 +1,61 @@
+package org.apache.stanbol.ontologymanager.ontonet.impl.io;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.stanbol.ontologymanager.ontonet.impl.ontology.NoSuchStoreException;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLOntology;
+
+public class InMemoryOntologyStorage extends ClerezzaOntologyStorage {
+
+ private Map<IRI,OWLOntology> store;
+
+ public InMemoryOntologyStorage() {
+ store = new HashMap<IRI,OWLOntology>();
+ }
+
+ public void clear() {
+ store.clear();
+ }
+
+ public void delete(IRI arg0) {
+ store.remove(arg0);
+ }
+
+ public void deleteAll(Set<IRI> arg0) {
+ for (IRI iri : arg0)
+ delete(iri);
+ }
+
+ public OWLOntology getGraph(IRI arg0) throws NoSuchStoreException {
+ return store.get(arg0);
+ }
+
+ public Set<IRI> listGraphs() {
+ return store.keySet();
+ }
+
+ public OWLOntology load(IRI arg0) {
+ return store.get(arg0);
+ }
+
+ public OWLOntology sparqlConstruct(String arg0, String arg1) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void store(OWLOntology arg0) {
+ try {
+ store.put(arg0.getOntologyID().getOntologyIRI(), arg0);
+ } catch (Exception ex) {
+ store.put(arg0.getOWLOntologyManager().getOntologyDocumentIRI(arg0), arg0);
+ }
+ }
+
+ public void store(OWLOntology arg0, IRI arg1) {
+ store.put(arg1, arg0);
+ }
+
+}
Added: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/io/OntologyRegistryIRISource.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/io/OntologyRegistryIRISource.java?rev=1087671&view=auto
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/io/OntologyRegistryIRISource.java (added)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/io/OntologyRegistryIRISource.java Fri Apr 1 12:08:25 2011
@@ -0,0 +1,122 @@
+package org.apache.stanbol.ontologymanager.ontonet.impl.io;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.stanbol.ontologymanager.ontonet.api.io.AbstractOntologyInputSource;
+import org.apache.stanbol.ontologymanager.ontonet.api.io.OntologyInputSource;
+import org.apache.stanbol.ontologymanager.ontonet.api.registry.RegistryLoader;
+import org.apache.stanbol.ontologymanager.ontonet.api.registry.models.Registry;
+import org.apache.stanbol.ontologymanager.ontonet.api.registry.models.RegistryItem;
+import org.apache.stanbol.ontologymanager.ontonet.impl.util.OntologyUtils;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLOntology;
+import org.semanticweb.owlapi.model.OWLOntologyAlreadyExistsException;
+import org.semanticweb.owlapi.model.OWLOntologyCreationException;
+import org.semanticweb.owlapi.model.OWLOntologyManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * An input source that provides a single ontology that imports all the imported
+ * ontology libraries found in the ontology registry obtained by dereferencing a
+ * supplied IRI.
+ *
+ * @author alessandro
+ *
+ */
+public class OntologyRegistryIRISource extends AbstractOntologyInputSource {
+
+ protected IRI registryIRI = null;
+
+ public OntologyRegistryIRISource(IRI registryIRI,
+ OWLOntologyManager ontologyManager, RegistryLoader loader) {
+ this(registryIRI, ontologyManager, loader, null);
+ }
+
+ /**
+ * Creates a new ontology input source by providing a new root ontology that
+ * imports the entire network addressed by the ontology registry at the
+ * supplied IRI.
+ *
+ * @param registryIRI
+ */
+ public OntologyRegistryIRISource(IRI registryIRI,
+ OWLOntologyManager ontologyManager, RegistryLoader loader,
+ OntologyInputSource parentSrc) {
+
+ this.registryIRI = registryIRI;
+
+ Logger log = LoggerFactory.getLogger(getClass());
+
+ Set<OWLOntology> subtrees = new HashSet<OWLOntology>();
+ for (Registry reg : loader.loadRegistriesEager(registryIRI)) {
+ for (RegistryItem ri : reg.getChildren()) {
+ if (ri.isLibrary())
+ try {
+ Set<OWLOntology> adds = loader.gatherOntologies(ri,
+ ontologyManager, true);
+ subtrees.addAll(adds);
+ } catch (OWLOntologyAlreadyExistsException e) {
+ // Chettefreca
+ continue;
+ } catch (OWLOntologyCreationException e) {
+ log.warn(
+ "KReS : [NONFATAL] Failed to load ontology library "
+ + ri.getName() + ". Skipping.", e);
+ // If we can't load this library at all, scrap it.
+ // TODO : not entirely convinced of this step.
+ continue;
+ }
+ }
+ }
+ // We always construct a new root now, even if there's just one subtree.
+
+ // Set<OWLOntology> subtrees = mgr.getOntologies();
+ // if (subtrees.size() == 1)
+ // rootOntology = subtrees.iterator().next();
+ // else
+ try {
+ if (parentSrc != null)
+ rootOntology = OntologyUtils.buildImportTree(parentSrc,
+ subtrees, ontologyManager);
+ else
+ rootOntology = OntologyUtils.buildImportTree(subtrees,
+ ontologyManager);
+ } catch (OWLOntologyCreationException e) {
+ log.error(
+ "KReS :: Failed to build import tree for registry source "
+ + registryIRI, e);
+ }
+ }
+
+ /**
+ * This method always return null. The ontology that imports the whole
+ * network is created in-memory, therefore it has no physical IRI.
+ */
+ @Override
+ public IRI getPhysicalIRI() {
+ return null;
+ }
+
+ /**
+ * This method always return false. The ontology that imports the whole
+ * network is created in-memory, therefore it has no physical IRI.
+ */
+ @Override
+ public boolean hasPhysicalIRI() {
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see eu.iksproject.kres.manager.io.AbstractOntologyInputSource#toString()
+ */
+ @Override
+ public String toString() {
+ return "REGISTRY_IRI<" + registryIRI + ">";
+ }
+
+}
Propchange: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 12:08:25 2011
@@ -0,0 +1 @@
+target
Added: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/AbstractOntologySpaceImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/AbstractOntologySpaceImpl.java?rev=1087671&view=auto
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/AbstractOntologySpaceImpl.java (added)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/AbstractOntologySpaceImpl.java Fri Apr 1 12:08:25 2011
@@ -0,0 +1,497 @@
+package org.apache.stanbol.ontologymanager.ontonet.impl.ontology;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.stanbol.ontologymanager.ontonet.api.io.OntologyInputSource;
+import org.apache.stanbol.ontologymanager.ontonet.api.io.RootOntologySource;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.IrremovableOntologyException;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.MissingOntologyException;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpaceListener;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpaceModificationException;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.SessionOntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.SpaceType;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.UnmodifiableOntologySpaceException;
+import org.apache.stanbol.ontologymanager.ontonet.impl.io.ClerezzaOntologyStorage;
+import org.apache.stanbol.ontologymanager.ontonet.impl.util.OntologyUtils;
+import org.apache.stanbol.ontologymanager.ontonet.impl.util.StringUtils;
+import org.semanticweb.owlapi.apibinding.OWLManager;
+import org.semanticweb.owlapi.io.RDFXMLOntologyFormat;
+import org.semanticweb.owlapi.io.StringDocumentSource;
+import org.semanticweb.owlapi.io.StringDocumentTarget;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLImportsDeclaration;
+import org.semanticweb.owlapi.model.OWLOntology;
+import org.semanticweb.owlapi.model.OWLOntologyAlreadyExistsException;
+import org.semanticweb.owlapi.model.OWLOntologyCreationException;
+import org.semanticweb.owlapi.model.OWLOntologyID;
+import org.semanticweb.owlapi.model.OWLOntologyLoaderListener;
+import org.semanticweb.owlapi.model.OWLOntologyManager;
+import org.semanticweb.owlapi.model.OWLOntologyStorageException;
+import org.semanticweb.owlapi.model.RemoveImport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Abstract implementation of an ontology space. While it still leaves it up to
+ * developers to decide what locking policies to adopt for subclasses (in the
+ * <code>setUp()</code> method), it provides default implementations of all
+ * other interface methods.<br>
+ * <br>
+ * NOTE: By default, an ontology space is NOT write-locked. Developers need to
+ * set the <code>locked</code> variable to true to make the space read-only.
+ *
+ *
+ * @author alessandro
+ *
+ */
+public abstract class AbstractOntologySpaceImpl implements OntologySpace {
+
+ protected IRI _id = null;
+
+ private Set<OntologySpaceListener> listeners = new HashSet<OntologySpaceListener>();
+
+ /**
+ * Indicates whether this ontology space is marked as read-only. Default
+ * value is false.
+ */
+ protected boolean locked = false;
+
+ protected Logger log = LoggerFactory.getLogger(getClass());
+
+ /**
+ * Each ontology space comes with its OWL ontology manager. By default, it
+ * is not available to the outside world, unless subclasses implement
+ * methods to return it.
+ */
+ protected OWLOntologyManager ontologyManager;
+
+ protected ClerezzaOntologyStorage storage;
+
+ protected IRI parentID = null;
+
+// public static String SUFFIX = "";
+
+ protected OWLOntology rootOntology = null;
+
+ protected boolean silent = false;
+
+ protected AbstractOntologySpaceImpl(IRI spaceID, SpaceType type/*, IRI parentID*/, ClerezzaOntologyStorage storage) {
+ this(spaceID, type, /*parentID,*/ storage,OWLManager.createOWLOntologyManager());
+ }
+
+// /**
+// * TODO: manage IDs properly
+// *
+// * @param rootOntology
+// */
+// public AbstractOntologySpaceImpl(IRI spaceID, SpaceType type, IRI parentID,
+// OntologyInputSource rootOntology) {
+// this(spaceID, type, parentID, OWLManager.createOWLOntologyManager(),
+// rootOntology);
+// }
+
+ /**
+ * Creates a new ontology space with the supplied ontology manager as the
+ * default manager for this space.
+ *
+ * @param spaceID
+ * the IRI that will uniquely identify this space.
+ * @param parentID
+ * IRI of the parent scope (TODO: get rid of it).
+ * @param ontologyManager
+ * the default ontology manager for this space.
+ */
+ protected AbstractOntologySpaceImpl(IRI spaceID, SpaceType type, ClerezzaOntologyStorage storage, /*IRI parentID,*/
+ OWLOntologyManager ontologyManager) {
+
+// this.parentID = parentID;
+// SUFFIX = type.getIRISuffix();
+
+// // FIXME: ensure that this is not null
+// OntologyScope parentScope = ONManager.get().getScopeRegistry()
+// .getScope(parentID);
+//
+// if (parentScope != null && parentScope instanceof OntologySpaceListener)
+// this.addOntologySpaceListener((OntologySpaceListener) parentScope);
+this.storage = storage;
+ this._id = spaceID;
+ if (ontologyManager != null)
+ this.ontologyManager = ontologyManager;
+ else
+ this.ontologyManager = OWLManager.createOWLOntologyManager();
+
+ this.ontologyManager
+ .addOntologyLoaderListener(new OWLOntologyLoaderListener() {
+
+ @Override
+ public void finishedLoadingOntology(
+ LoadingFinishedEvent arg0) {
+ if (arg0.isSuccessful()) {
+ fireOntologyAdded(arg0.getOntologyID()
+ .getOntologyIRI());
+ }
+ }
+
+ @Override
+ public void startedLoadingOntology(LoadingStartedEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ });
+ }
+
+// /**
+// * Creates a new ontology space with the supplied ontology set as its top
+// * ontology and the supplied ontology manager as the default manager for
+// * this space.
+// *
+// * @param spaceID
+// * the IRI that will uniquely identify this space.
+// * @param ontologyManager
+// * the default ontology manager for this space.
+// * @param rootSource
+// * the root ontology for this space.
+// */
+// public AbstractOntologySpaceImpl(IRI spaceID,SpaceType type, IRI parentID,
+// OWLOntologyManager ontologyManager, OntologyInputSource rootSource) {
+// this(spaceID, type,parentID, ontologyManager);
+// // Set the supplied ontology's parent as the root for this space.
+// try {
+// this.setTopOntology(rootSource, true);
+// } catch (UnmodifiableOntologySpaceException e) {
+// log.error("KReS :: Ontology space " + spaceID
+// + " found locked at creation time!", e);
+// }
+// }
+
+ /**
+ * TODO: manage import statements
+ *
+ * TODO 2 : manage anonymous ontologies.
+ */
+ @Override
+ public synchronized void addOntology(OntologyInputSource ontologySource)
+ throws UnmodifiableOntologySpaceException {
+
+ if (locked)
+ throw new UnmodifiableOntologySpaceException(this);
+
+ if (getTopOntology() == null) {
+ // If no top ontology has been set, we must create one first.
+ IRI rootIri = null;
+ try {
+ rootIri = IRI.create(StringUtils.stripIRITerminator(getID())
+ + "/root.owl");
+ OntologyInputSource src = new RootOntologySource(
+ ontologyManager.createOntology(rootIri), null);
+ // Don't bother about the ontology to be added right now.
+ setTopOntology(src, false);
+ } catch (OWLOntologyCreationException e) {
+ log.error(
+ "KReS :: Exception caught when creating top ontology "
+ + rootIri + " for space " + this.getID() + ".",
+ e);
+ // No point in continuing if we can't even create the root...
+ return;
+ }
+ }
+
+ // Now add the new ontology.
+ if (ontologySource != null && ontologySource.hasRootOntology()) {
+ // Remember that this method also fores the event
+ performAdd(ontologySource);
+ }
+
+ }
+
+ @Override
+ public void addOntologySpaceListener(OntologySpaceListener listener) {
+ listeners.add(listener);
+ }
+
+ @Override
+ public void clearOntologySpaceListeners() {
+ listeners.clear();
+ }
+
+ @Override
+ public boolean containsOntology(IRI ontologyIri) {
+ return ontologyManager.contains(ontologyIri);
+ }
+
+ protected void fireOntologyAdded(IRI ontologyIri) {
+ for (OntologySpaceListener listener : listeners)
+ listener.onOntologyAdded(this.getID(), ontologyIri);
+ }
+
+ protected void fireOntologyRemoved(IRI ontologyIri) {
+ for (OntologySpaceListener listener : listeners)
+ listener.onOntologyRemoved(this.getID(), ontologyIri);
+ }
+
+ @Override
+ public IRI getID() {
+ return _id;
+ }
+
+ @Override
+ public synchronized Set<OWLOntology> getOntologies() {
+ return ontologyManager.getOntologies();
+ }
+
+ @Override
+ public OWLOntology getOntology(IRI ontologyIri) {
+ return ontologyManager.getOntology(ontologyIri);
+ }
+
+ @Override
+ public Collection<OntologySpaceListener> getOntologyScopeListeners() {
+ return listeners;
+ }
+
+ @Override
+ public OWLOntology getTopOntology() {
+ return rootOntology;
+ }
+
+ @Override
+ public boolean hasOntology(IRI ontologyIri) {
+ return this.getOntology(ontologyIri) != null;
+ }
+
+ @Override
+ public boolean isLocked() {
+ return locked;
+ }
+
+ @Override
+ public boolean isSilentMissingOntologyHandling() {
+ return silent;
+ }
+
+ private void performAdd(OntologyInputSource ontSrc) {
+ OWLOntology ontology = ontSrc.getRootOntology();
+ OWLOntologyID id = ontology.getOntologyID();
+
+ // Should not modify the child ontology in any way.
+ // TODO implement transaction control.
+ OntologyUtils.appendOntology(new RootOntologySource(getTopOntology(),
+ null), ontSrc, ontologyManager/* ,parentID */);
+
+ StringDocumentTarget tgt = new StringDocumentTarget();
+ try {
+ ontologyManager.saveOntology(ontology, new RDFXMLOntologyFormat(),
+ tgt);
+ } catch (OWLOntologyStorageException e) {
+ log.error("KReS : [FATAL] Failed to store ontology " + id
+ + " in memory.", e);
+ return;
+ }
+
+ try {
+ ontologyManager.removeOntology(ontology);
+ ontologyManager
+ .loadOntologyFromOntologyDocument(new StringDocumentSource(
+ tgt.toString()));
+ } catch (OWLOntologyAlreadyExistsException e) {
+ // Could happen if we supplied an ontology manager that already
+ // knows this ontology. Nothing to do then.
+ log.warn("KReS : [NONFATAL] Tried to copy ontology " + id
+ + " to existing one.");
+ } catch (OWLOntologyCreationException e) {
+ log.error("Unexpected exception caught while copying ontology "
+ + id + " across managers", e);
+ return;
+ }
+
+ try {
+ // Store the top ontology
+ if (!(this instanceof SessionOntologySpace)) {
+ if (storage == null)
+ log
+ .error("KReS :: [NONFATAL] no ontology storage found. Ontology "
+ + ontology.getOntologyID()
+ + " will be stored in-memory only.");
+ else {
+ storage.store(ontology);
+ }
+ }
+ // ONManager.get().getOntologyStore().load(rootOntology.getOntologyID().getOntologyIRI());
+ } catch (Exception ex) {
+ log.error(
+ "KReS :: [NONFATAL] An error occurred while storing ontology "
+ + ontology
+ + " . Ontology management will be volatile!", ex);
+ }
+
+ fireOntologyAdded(id.getOntologyIRI());
+ }
+
+ /**
+ * TODO 1 : optimize addition/removal <br>
+ * TODO 2 : set import statements
+ */
+ @Override
+ public synchronized void removeOntology(OntologyInputSource src)
+ throws OntologySpaceModificationException {
+ if (locked)
+ throw new UnmodifiableOntologySpaceException(this);
+ else {
+ // TODO : find a way to remove anonymous ontologies.
+ OWLOntology o = src.getRootOntology();
+ IRI logicalID = null, physicalIRI = null;
+ try {
+ logicalID = o.getOntologyID().getOntologyIRI();
+ physicalIRI = src.getPhysicalIRI();
+ if (physicalIRI == null)
+ if (isSilentMissingOntologyHandling())
+ return;
+ else
+ throw new MissingOntologyException(this, null);
+ if (logicalID == null)
+ logicalID = physicalIRI;
+ } catch (RuntimeException ex) {
+ if (isSilentMissingOntologyHandling())
+ return;
+ else
+ throw new MissingOntologyException(this, null);
+ }
+ if (o.equals(getTopOntology()))
+ // setTopOntology(null, false);
+ throw new IrremovableOntologyException(this, logicalID);
+ try {
+ OWLImportsDeclaration imp = ontologyManager.getOWLDataFactory()
+ .getOWLImportsDeclaration(physicalIRI);
+ ontologyManager.applyChange(new RemoveImport(getTopOntology(),
+ imp));
+ ontologyManager.removeOntology(o);
+ fireOntologyRemoved(logicalID);
+ } catch (RuntimeException ex) {
+ throw new OntologySpaceModificationException(this);
+ }
+ }
+ }
+
+ @Override
+ public void removeOntologySpaceListener(OntologySpaceListener listener) {
+ listeners.remove(listener);
+ }
+
+ @Override
+ public void setSilentMissingOntologyHandling(boolean silent) {
+ this.silent = silent;
+ }
+
+ @Override
+ public synchronized void setTopOntology(OntologyInputSource ontologySource)
+ throws UnmodifiableOntologySpaceException {
+ setTopOntology(ontologySource, true);
+ }
+
+ /**
+ * TODO 1 : Attention: ontology is NOT added to ontology manager!
+ */
+ @Override
+ public synchronized void setTopOntology(OntologyInputSource ontologySource,
+ boolean createParent) throws UnmodifiableOntologySpaceException {
+
+ // TODO : implement or avoid passing of OWLOntology objects across
+ // managers
+
+ // Clear the ontology manager
+ for (OWLOntology o : ontologyManager.getOntologies()) {
+ ontologyManager.removeOntology(o);
+ fireOntologyRemoved(o.getOntologyID().getOntologyIRI());
+ }
+
+ OWLOntologyID id = new OWLOntologyID(IRI.create(StringUtils
+ .stripIRITerminator(_id)
+ + "/root.owl"));
+ OWLOntology ontology = null;
+ if (ontologySource != null) {
+ ontology = ontologySource.getRootOntology();
+ }
+ OWLOntology /* oTarget = null, */oParent = null;
+
+ // If set to create a parent ontology or this one is anonymous, create
+ // the parent
+ if (createParent || ontology == null || ontology.isAnonymous()) {
+
+ try {
+ oParent = ontologyManager.createOntology(id);
+ } catch (OWLOntologyAlreadyExistsException e) {
+ oParent = ontologyManager.getOntology(id);
+ } catch (OWLOntologyCreationException e) {
+ log.error("KReS :: Failed to copy ontology "
+ + ontology.getOntologyID()
+ + " across ontology managers.", e);
+ }
+ } else {
+ // If we don't have to create a parent, assign the original ontology
+ // to it.
+ oParent = ontology;
+ }
+
+ if (ontologySource != null)
+ try {
+
+ // Append the supplied ontology to the parent.
+ oParent = OntologyUtils.appendOntology(new RootOntologySource(
+ oParent, null), ontologySource, ontologyManager/*
+ * ,parentID
+ */);
+
+ // Save and reload it to make sure the whole import closure is
+ // loaded in memory.
+ StringDocumentTarget tgt = new StringDocumentTarget();
+ ontologyManager.saveOntology(oParent,
+ new RDFXMLOntologyFormat(), tgt);
+ ontologyManager.removeOntology(oParent);
+ ontologyManager
+ .loadOntologyFromOntologyDocument(new StringDocumentSource(
+ tgt.toString()));
+
+ } catch (OWLOntologyAlreadyExistsException e) {
+ log.warn("KReS : [NONFATAL] Tried to copy ontology " + id
+ + " to existing one.", e);
+ } catch (OWLOntologyCreationException e) {
+ log.error("KReS : [FATAL] Failed to create ontology " + id, e);
+ } catch (OWLOntologyStorageException e) {
+ // Shouldn't be a problem to save it in memory as RDF/XML...
+ log.error("KReS : [FATAL] In-memory store failed for ontology "
+ + id, e);
+ }
+
+ // Assign the ontology and fire the corresponding event.
+ rootOntology = oParent != null ? oParent : ontology;
+
+ try {
+
+ // Store the top ontology
+ if (!(this instanceof SessionOntologySpace)) {
+ if (storage == null)
+ log
+ .error("KReS :: [NONFATAL] no ontology storage found. Ontology "
+ + rootOntology.getOntologyID()
+ + " will be stored in-memory only.");
+ else {
+ storage.store(rootOntology);
+ }
+ }
+ } catch (Exception ex) {
+ log.error(
+ "KReS :: [NONFATAL] An error occurred while storing root ontology "
+ + rootOntology
+ + " . Ontology management will be volatile!", ex);
+ }
+
+ fireOntologyAdded(rootOntology.getOntologyID().getOntologyIRI());
+
+ }
+
+}
Added: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CoreOntologySpaceImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CoreOntologySpaceImpl.java?rev=1087671&view=auto
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CoreOntologySpaceImpl.java (added)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CoreOntologySpaceImpl.java Fri Apr 1 12:08:25 2011
@@ -0,0 +1,60 @@
+package org.apache.stanbol.ontologymanager.ontonet.impl.ontology;
+
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.CoreOntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.SpaceType;
+import org.apache.stanbol.ontologymanager.ontonet.impl.io.ClerezzaOntologyStorage;
+import org.apache.stanbol.ontologymanager.ontonet.impl.util.StringUtils;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLOntologyManager;
+
+
+public class CoreOntologySpaceImpl extends AbstractOntologySpaceImpl implements
+ CoreOntologySpace {
+
+ public static final String SUFFIX = SpaceType.CORE.getIRISuffix();
+// static {
+// SUFFIX = SpaceType.CORE.getIRISuffix();
+// }
+
+ public CoreOntologySpaceImpl(IRI scopeID, ClerezzaOntologyStorage storage) {
+ super(IRI.create(StringUtils.stripIRITerminator(scopeID) + "/"
+ + SpaceType.CORE.getIRISuffix()), SpaceType.CORE/*, scopeID*/,storage);
+ }
+
+ public CoreOntologySpaceImpl(IRI scopeID, ClerezzaOntologyStorage storage,
+ OWLOntologyManager ontologyManager) {
+ super(IRI.create(StringUtils.stripIRITerminator(scopeID) + "/"
+ + SpaceType.CORE.getIRISuffix()), SpaceType.CORE, /*scopeID,*/storage,
+ ontologyManager);
+ }
+
+// public CoreOntologySpaceImpl(IRI scopeID, OntologyInputSource topOntology) {
+// super(IRI.create(StringUtils.stripIRITerminator(scopeID) + "/"
+// + SpaceType.CORE.getIRISuffix()), SpaceType.CORE, scopeID,
+// topOntology);
+// }
+//
+// public CoreOntologySpaceImpl(IRI scopeID, OntologyInputSource topOntology,
+// OWLOntologyManager ontologyManager) {
+// super(IRI.create(StringUtils.stripIRITerminator(scopeID) + "/"
+// + SpaceType.CORE.getIRISuffix()), SpaceType.CORE, scopeID,
+// ontologyManager, topOntology);
+// }
+
+ /**
+ * When set up, a core space is write-locked.
+ */
+ @Override
+ public synchronized void setUp() {
+ locked = true;
+ }
+
+ /**
+ * When torn down, a core space releases its write-lock.
+ */
+ @Override
+ public synchronized void tearDown() {
+ locked = false;
+ }
+
+}
Added: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CustomOntologySpaceImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CustomOntologySpaceImpl.java?rev=1087671&view=auto
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CustomOntologySpaceImpl.java (added)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CustomOntologySpaceImpl.java Fri Apr 1 12:08:25 2011
@@ -0,0 +1,80 @@
+package org.apache.stanbol.ontologymanager.ontonet.impl.ontology;
+
+import org.apache.stanbol.ontologymanager.ontonet.api.io.RootOntologySource;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.CoreOntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.CustomOntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.SpaceType;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.UnmodifiableOntologySpaceException;
+import org.apache.stanbol.ontologymanager.ontonet.impl.io.ClerezzaOntologyStorage;
+import org.apache.stanbol.ontologymanager.ontonet.impl.util.StringUtils;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLOntology;
+import org.semanticweb.owlapi.model.OWLOntologyManager;
+
+
+public class CustomOntologySpaceImpl extends AbstractOntologySpaceImpl
+ implements CustomOntologySpace {
+
+ public static final String SUFFIX = SpaceType.CUSTOM.getIRISuffix();
+// static {
+// SUFFIX = SpaceType.CUSTOM.getIRISuffix();
+// }
+
+ public CustomOntologySpaceImpl(IRI scopeID, ClerezzaOntologyStorage storage) {
+ super(IRI.create(StringUtils.stripIRITerminator(scopeID) + "/"
+ + SpaceType.CUSTOM.getIRISuffix()), SpaceType.CUSTOM/*, scopeID*/,storage
+ );
+ }
+
+ public CustomOntologySpaceImpl(IRI scopeID, ClerezzaOntologyStorage storage,
+ OWLOntologyManager ontologyManager) {
+ super(IRI.create(StringUtils.stripIRITerminator(scopeID) + "/"
+ + SpaceType.CUSTOM.getIRISuffix()), SpaceType.CUSTOM, storage, /*scopeID,*/
+ ontologyManager);
+ }
+
+// public CustomOntologySpaceImpl(IRI scopeID, OntologyInputSource topOntology) {
+// super(IRI.create(StringUtils.stripIRITerminator(scopeID) + "/"
+// + SpaceType.CUSTOM.getIRISuffix()), SpaceType.CUSTOM, scopeID,
+// topOntology);
+//}
+//
+//public CustomOntologySpaceImpl(IRI scopeID,
+// OntologyInputSource topOntology, OWLOntologyManager ontologyManager) {
+// super(IRI.create(StringUtils.stripIRITerminator(scopeID) + "/"
+// + SpaceType.CUSTOM.getIRISuffix()), SpaceType.CUSTOM, scopeID,
+// ontologyManager, topOntology);
+//}
+
+ @Override
+ public void attachCoreSpace(CoreOntologySpace coreSpace, boolean skipRoot)
+ throws UnmodifiableOntologySpaceException {
+
+ OWLOntology o = coreSpace.getTopOntology();
+ // This does the append thingy
+ log.debug("Attaching " + o + " TO " + getTopOntology() + " ...");
+ try {
+ // It is in fact the addition of the core space top ontology to the
+ // custom space, with import statements and all.
+ addOntology(new RootOntologySource(o, null));
+ // log.debug("ok");
+ } catch (Exception ex) {
+ log.error("FAILED", ex);
+ }
+
+ }
+
+ /**
+ * Once it is set up, a custom space is write-locked.
+ */
+ @Override
+ public synchronized void setUp() {
+ locked = true;
+ }
+
+ @Override
+ public synchronized void tearDown() {
+ locked = false;
+ }
+
+}
Added: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/NoSuchStoreException.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/NoSuchStoreException.java?rev=1087671&view=auto
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/NoSuchStoreException.java (added)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/NoSuchStoreException.java Fri Apr 1 12:08:25 2011
@@ -0,0 +1,15 @@
+package org.apache.stanbol.ontologymanager.ontonet.impl.ontology;
+
+public class NoSuchStoreException extends Exception {
+
+ private String message;
+
+ public NoSuchStoreException(String message) {
+ this.message = message;
+ }
+
+ @Override
+ public String getMessage() {
+ return message;
+ }
+}
Added: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyIndexImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyIndexImpl.java?rev=1087671&view=auto
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyIndexImpl.java (added)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyIndexImpl.java Fri Apr 1 12:08:25 2011
@@ -0,0 +1,260 @@
+package org.apache.stanbol.ontologymanager.ontonet.impl.ontology;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.stanbol.ontologymanager.ontonet.api.ONManager;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.NoSuchScopeException;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyIndex;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyScope;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.ScopeRegistry;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLOntology;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OntologyIndexImpl implements OntologyIndex {
+
+ private final Logger log = LoggerFactory.getLogger(getClass());
+ /*
+ * We only use IRIs, so the actual scopes can get garbage-collected once
+ * they are deregistered.
+ */
+ private Map<IRI, Set<IRI>> ontScopeMap;
+
+ private ScopeRegistry scopeRegistry;
+
+ private ONManager onm;
+
+ public OntologyIndexImpl(ONManager onm) {
+
+ ontScopeMap = new HashMap<IRI, Set<IRI>>();
+ if (onm == null)
+ this.scopeRegistry = new ScopeRegistryImpl();
+ else {
+ this.onm=onm;
+ this.scopeRegistry = onm.getScopeRegistry();
+ }
+ this.scopeRegistry.addScopeRegistrationListener(this);
+ }
+
+ /**
+ * Given a scope, puts its ontologies in its scopeMap
+ *
+ * @param scope
+ */
+ private void addScopeOntologies(OntologyScope scope) {
+ for (OWLOntology o : getOntologiesForScope(scope)) {
+ IRI ontid = o.getOntologyID().getOntologyIRI();
+ Set<IRI> scopez = ontScopeMap.get(ontid);
+ if (scopez == null)
+ scopez = new HashSet<IRI>();
+ scopez.add(scope.getID());
+ ontScopeMap.put(ontid, scopez);
+ }
+ }
+
+ private Set<OWLOntology> getOntologiesForScope(OntologyScope scope) {
+ Set<OWLOntology> ontologies = new HashSet<OWLOntology>();
+ try {
+ // ontologies.add(scope.getCoreSpace().getTopOntology());
+ ontologies.addAll(scope.getCoreSpace().getOntologies());
+ } catch (Exception ex) {
+ }
+ try {
+ ontologies.addAll(scope.getCustomSpace().getOntologies());
+ } catch (Exception ex) {
+ }
+ // for (OWLOntology o : ontologies) {
+ // System.out.println(o.getOntologyID());
+ // for (OWLImportsDeclaration im: o.getImportsDeclarations())
+ // System.out.println("\t"+im);
+ // }
+ return ontologies;
+ }
+
+ @Override
+ public OWLOntology getOntology(IRI ontologyIri) {
+ Set<IRI> scopez = ontScopeMap.get(ontologyIri);
+ if (scopez == null || scopez.isEmpty())
+ return null;
+ OWLOntology ont = null;
+ OntologyScope scope = scopeRegistry.getScope(scopez.iterator().next());
+ try {
+ ont = scope.getCustomSpace().getOntology(ontologyIri);
+ if (ont != null)
+ return ont;
+ } catch (Exception ex) {
+ }
+ try {
+ ont = scope.getCoreSpace().getOntology(ontologyIri);
+ if (ont != null)
+ return ont;
+ } catch (Exception ex) {
+ }
+ return ont;
+ }
+
+ @Override
+ public OWLOntology getOntology(IRI ontologyIri, IRI scopeId) {
+ OWLOntology ont = null;
+ OntologyScope scope = scopeRegistry.getScope(scopeId);
+ try {
+ ont = scope.getCustomSpace().getOntology(ontologyIri);
+ if (ont != null)
+ return ont;
+ } catch (Exception ex) {
+ }
+ try {
+ ont = scope.getCoreSpace().getOntology(ontologyIri);
+ if (ont != null)
+ return ont;
+ } catch (Exception ex) {
+ }
+ return ont;
+ }
+
+ @Override
+ public Set<IRI> getReferencingScopes(IRI ontologyIRI,
+ boolean includingSessionSpaces) {
+ return ontScopeMap.get(ontologyIRI);
+ }
+
+ @Override
+ public boolean isOntologyLoaded(IRI ontologyIRI) {
+ Set<IRI> scopez = ontScopeMap.get(ontologyIRI);
+ return scopez != null && !scopez.isEmpty();
+ }
+
+ @Override
+ public void onOntologyAdded(IRI scopeId, IRI addedOntology) {
+ log.debug("Ontology " + addedOntology + " added to scope "
+ + scopeId);
+ Set<IRI> scopez = ontScopeMap.get(addedOntology);
+ if (scopez == null)
+ scopez = new HashSet<IRI>();
+ scopez.add(scopeId);
+ ontScopeMap.put(addedOntology, scopez);
+ Set<IRI> scopez2 = ontScopeMap.get(addedOntology);
+ if (!scopez2.contains(scopeId))
+ log.warn("Addition was not reindexed!");
+ }
+
+ @Override
+ public void onOntologyRemoved(IRI scopeId, IRI removedOntology) {
+ log.debug("Removing ontology " + removedOntology
+ + " from scope " + scopeId);
+ Set<IRI> scopez = ontScopeMap.get(removedOntology);
+ if(scopez != null){
+ if (scopez.contains(scopeId))
+ scopez.remove(scopeId);
+ else{
+// System.out.println("...but it was not indexed!");
+ log.warn("The scope "+scopeId+" is not indexed");
+ }
+ Set<IRI> scopez2 = ontScopeMap.get(removedOntology);
+ if (scopez2.contains(scopeId))
+ /**
+ * FIXME
+ * This message is obscure
+ */
+ log.warn("Removal was not reindexed!");
+ }
+ }
+
+ private void removeScopeOntologies(OntologyScope scope) {
+ log.debug("Removing all ontologies from Scope " + scope);
+ for (OWLOntology o : getOntologiesForScope(scope)) {
+ IRI ontid = o.getOntologyID().getOntologyIRI();
+ Set<IRI> scopez = ontScopeMap.get(ontid);
+ if (scopez != null) {
+ scopez.remove(scope.getID());
+ if (scopez.isEmpty())
+ ontScopeMap.remove(ontid);
+ }
+ }
+ }
+
+ @Override
+ public void scopeActivated(OntologyScope scope) {
+ log.info("Scope " + scope.getID()
+ + " activated.");
+ scope.removeOntologyScopeListener(this);
+ }
+
+ @Override
+ public void scopeCreated(OntologyScope scope) {
+ // scope.addOntologyScopeListener(this);
+ this.scopeDeactivated(scope);
+ }
+
+ @Override
+ public void scopeDeactivated(OntologyScope scope) {
+ // Scope has been deactivated but not due to deregistration
+ // if (scopeRegistry.containsScope(scope.getID())) {
+ scope.addOntologyScopeListener(this);
+ log.debug("Adding index as listener for scope "
+ + scope.getID());
+ // }
+ log.info("Scope " + scope.getID() + " deactivated.");
+ }
+
+ @Override
+ public void scopeDeregistered(OntologyScope scope) {
+ log.info("Scope " + scope.getID()
+ + " deregistered.");
+ this.scopeDeactivated(scope);
+ removeScopeOntologies(scope);
+ }
+
+ @Override
+ public void scopeRegistered(OntologyScope scope) {
+ log.info("Scope " + scope.getID()
+ + " registered. Now you can check for its activation status.");
+
+ Set<OntologyScope> scopez = scopeRegistry.getRegisteredScopes();
+ for (String token : onm.getUrisToActivate()) {
+ try {
+ IRI scopeId = IRI.create(token.trim());
+ scopeRegistry.setScopeActive(scopeId, true);
+ scopez.remove(scopeRegistry.getScope(scopeId));
+ log.info("KReS :: Ontology scope " + scopeId + " "
+ + " activated.");
+ } catch (NoSuchScopeException ex) {
+ log.warn("KReS :: Tried to activate unavailable scope "
+ + token + ".");
+ } catch (Exception ex) {
+ log.error("Exception caught while activating scope "
+ + token + " " + ex.getClass());
+ continue;
+ }
+ }
+ // Stop deactivating other scopes
+// for (OntologyScope scopp : scopez) {
+// IRI scopeId = scopp.getID();
+// try {
+// if (scopeRegistry.isScopeActive(scopeId)) {
+// scopeRegistry.setScopeActive(scopeId, false);
+// System.out.println("KReS :: Ontology scope " + scopeId
+// + " " + " deactivated.");
+// }
+// } catch (NoSuchScopeException ex) {
+// // Shouldn't happen because we already have the scope handle,
+// // however exceptions could be thrown erroneously...
+// System.err
+// .println("KReS :: Tried to deactivate unavailable scope "
+// + scopeId + ".");
+// } catch (Exception ex) {
+// System.err.println("Exception caught while deactivating scope "
+// + scope.getID() + " " + ex.getClass());
+// continue;
+// }
+// }
+
+ addScopeOntologies(scope);
+
+ }
+
+}
Added: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyScopeFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyScopeFactoryImpl.java?rev=1087671&view=auto
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyScopeFactoryImpl.java (added)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyScopeFactoryImpl.java Fri Apr 1 12:08:25 2011
@@ -0,0 +1,84 @@
+package org.apache.stanbol.ontologymanager.ontonet.impl.ontology;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.stanbol.ontologymanager.ontonet.api.DuplicateIDException;
+import org.apache.stanbol.ontologymanager.ontonet.api.io.OntologyInputSource;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyScope;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyScopeFactory;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpaceFactory;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.ScopeEventListener;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.ScopeRegistry;
+import org.semanticweb.owlapi.model.IRI;
+
+/**
+ * Utility class that instantiates default implementations of ontology scope.
+ *
+ * @author alessandro
+ *
+ */
+public class OntologyScopeFactoryImpl implements OntologyScopeFactory {
+
+ private Set<ScopeEventListener> listeners = new HashSet<ScopeEventListener>();
+
+ protected ScopeRegistry registry;
+ protected OntologySpaceFactory spaceFactory;
+
+ public OntologyScopeFactoryImpl(ScopeRegistry registry, OntologySpaceFactory spaceFactory) {
+ this.registry = registry;
+ this.spaceFactory = spaceFactory;
+ }
+
+ @Override
+ public void addScopeEventListener(ScopeEventListener listener) {
+ listeners.add(listener);
+ }
+
+ @Override
+ public void clearScopeEventListeners() {
+ listeners.clear();
+ }
+
+ @Override
+ public OntologyScope createOntologyScope(IRI scopeID,
+ OntologyInputSource coreSource) throws DuplicateIDException {
+
+ return createOntologyScope(scopeID, coreSource, null);
+ }
+
+ @Override
+ public OntologyScope createOntologyScope(IRI scopeID,
+ OntologyInputSource coreSource, OntologyInputSource customSource)
+ throws DuplicateIDException {
+
+ if (registry.containsScope(scopeID))
+ throw new DuplicateIDException(scopeID,
+ "Scope registry already contains ontology scope with ID "
+ + scopeID);
+
+ OntologyScope scope = new OntologyScopeImpl(scopeID,spaceFactory, coreSource,
+ customSource);
+ // scope.addOntologyScopeListener(ONManager.get().getOntologyIndex());
+ // TODO : manage scopes with null core ontologies
+ fireScopeCreated(scope);
+ return scope;
+ }
+
+ protected void fireScopeCreated(OntologyScope scope) {
+ for (ScopeEventListener l : listeners)
+ l.scopeCreated(scope);
+ }
+
+ @Override
+ public Collection<ScopeEventListener> getScopeEventListeners() {
+ return listeners;
+ }
+
+ @Override
+ public void removeScopeEventListener(ScopeEventListener listener) {
+ listeners.remove(listener);
+ }
+
+}
Added: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyScopeImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyScopeImpl.java?rev=1087671&view=auto
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyScopeImpl.java (added)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyScopeImpl.java Fri Apr 1 12:08:25 2011
@@ -0,0 +1,313 @@
+package org.apache.stanbol.ontologymanager.ontonet.impl.ontology;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.stanbol.ontologymanager.ontonet.api.io.OntologyInputSource;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.CoreOntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.CustomOntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyScope;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpaceFactory;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpaceListener;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.ScopeOntologyListener;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.SessionOntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.UnmodifiableOntologySpaceException;
+import org.semanticweb.owlapi.model.IRI;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The default implementation of an ontology scope.
+ *
+ * @author alessandro
+ *
+ */
+public class OntologyScopeImpl implements OntologyScope, OntologySpaceListener {
+
+ /**
+ * The core ontology space for this scope, always set as default.
+ */
+ protected CoreOntologySpace coreSpace;
+
+ /**
+ * The custom ontology space for this scope. This is optional, but cannot be
+ * set after the scope has been setup.
+ */
+ protected CustomOntologySpace customSpace;
+
+ /**
+ * The unique identifier for this scope.
+ */
+ protected IRI id = null;
+
+ private Set<ScopeOntologyListener> listeners = new HashSet<ScopeOntologyListener>();
+
+ /**
+ * An ontology scope knows whether it's write-locked or not. Initially it is
+ * not.
+ */
+ protected boolean locked = false;
+
+ /**
+ * Maps session IDs to ontology space. A single scope has at most one space
+ * per session.
+ */
+ protected Map<IRI, SessionOntologySpace> sessionSpaces;
+
+ public OntologyScopeImpl(IRI id, OntologySpaceFactory factory,OntologyInputSource coreRoot) {
+ this(id, factory, coreRoot,null);
+ }
+
+ public OntologyScopeImpl(IRI id,OntologySpaceFactory factory, OntologyInputSource coreRoot,
+ OntologyInputSource customRoot) {
+ if (id == null)
+ throw new NullPointerException(
+ "Ontology scope must be identified by a non-null IRI.");
+
+ this.id = id;
+ this.coreSpace = factory.createCoreOntologySpace(id, coreRoot);
+ this.coreSpace.addOntologySpaceListener(this);
+ // let's just lock it. Once the core space is done it's done.
+ this.coreSpace.setUp();
+ // if (customRoot != null) {
+ try {
+ setCustomSpace(factory.createCustomOntologySpace(id, customRoot));
+ } catch (UnmodifiableOntologySpaceException e) {
+ // Can't happen unless the factory or space implementations are
+ // really naughty.
+ LoggerFactory
+ .getLogger(getClass())
+ .warn(
+ "KReS :: Ontology scope "
+ + id
+ + " was denied creation of its own custom space upon initialization! This should not happen.",
+ e);
+ }
+ this.customSpace.addOntologySpaceListener(this);
+ // }
+ sessionSpaces = new HashMap<IRI, SessionOntologySpace>();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.kres.api.manager.ontology.OntologyScope#
+ * addOntologyScopeListener
+ * (eu.iksproject.kres.api.manager.ontology.ScopeOntologyListener)
+ */
+ @Override
+ public void addOntologyScopeListener(ScopeOntologyListener listener) {
+ listeners.add(listener);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * eu.iksproject.kres.api.manager.ontology.OntologyScope#addSessionSpace
+ * (eu.iksproject.kres.api.manager.ontology.OntologySpace,
+ * org.semanticweb.owlapi.model.IRI)
+ */
+ @Override
+ public synchronized void addSessionSpace(OntologySpace sessionSpace,
+ IRI sessionId) {
+ if (sessionSpace instanceof SessionOntologySpace) {
+ sessionSpaces.put(sessionId, (SessionOntologySpace) sessionSpace);
+ sessionSpace.addOntologySpaceListener(this);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.kres.api.manager.ontology.OntologyScope#
+ * clearOntologyScopeListeners()
+ */
+ @Override
+ public void clearOntologyScopeListeners() {
+ listeners.clear();
+ }
+
+ protected void fireOntologyAdded(IRI ontologyIri) {
+ for (ScopeOntologyListener listener : listeners)
+ listener.onOntologyAdded(this.getID(), ontologyIri);
+ }
+
+ protected void fireOntologyRemoved(IRI ontologyIri) {
+ for (ScopeOntologyListener listener : listeners)
+ listener.onOntologyRemoved(this.getID(), ontologyIri);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see eu.iksproject.kres.api.manager.ontology.OntologyScope#getCoreSpace()
+ */
+ @Override
+ public OntologySpace getCoreSpace() {
+ return coreSpace;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * eu.iksproject.kres.api.manager.ontology.OntologyScope#getCustomSpace()
+ */
+ @Override
+ public OntologySpace getCustomSpace() {
+ return customSpace;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see eu.iksproject.kres.api.manager.ontology.OntologyScope#getID()
+ */
+ @Override
+ public IRI getID() {
+ return id;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.kres.api.manager.ontology.OntologyScope#
+ * getOntologyScopeListeners()
+ */
+ @Override
+ public Collection<ScopeOntologyListener> getOntologyScopeListeners() {
+ return listeners;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * eu.iksproject.kres.api.manager.ontology.OntologyScope#getSessionSpace
+ * (org.semanticweb.owlapi.model.IRI)
+ */
+ @Override
+ public SessionOntologySpace getSessionSpace(IRI sessionID) {
+ return sessionSpaces.get(sessionID);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * eu.iksproject.kres.api.manager.ontology.OntologyScope#getSessionSpaces()
+ */
+ @Override
+ public Set<OntologySpace> getSessionSpaces() {
+ return new HashSet<OntologySpace>(sessionSpaces.values());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * eu.iksproject.kres.api.manager.ontology.OntologySpaceListener#onOntologyAdded
+ * (org.semanticweb.owlapi.model.IRI, org.semanticweb.owlapi.model.IRI)
+ */
+ @Override
+ public void onOntologyAdded(IRI spaceId, IRI addedOntology) {
+ // Propagate events to scope listeners
+ fireOntologyAdded(addedOntology);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.kres.api.manager.ontology.OntologySpaceListener#
+ * onOntologyRemoved(org.semanticweb.owlapi.model.IRI,
+ * org.semanticweb.owlapi.model.IRI)
+ */
+ @Override
+ public void onOntologyRemoved(IRI spaceId, IRI removedOntology) {
+ // Propagate events to scope listeners
+ fireOntologyRemoved(removedOntology);
+ }
+
+ @Override
+ public void removeOntologyScopeListener(ScopeOntologyListener listener) {
+ listeners.remove(listener);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * eu.iksproject.kres.api.manager.ontology.OntologyScope#setCustomSpace(
+ * eu.iksproject.kres.api.manager.ontology.OntologySpace)
+ */
+ @Override
+ public synchronized void setCustomSpace(OntologySpace customSpace)
+ throws UnmodifiableOntologySpaceException {
+ if (this.customSpace != null && this.customSpace.isLocked())
+ throw new UnmodifiableOntologySpaceException(getCustomSpace());
+ else if (!(customSpace instanceof CustomOntologySpace))
+ throw new ClassCastException(
+ "supplied object is not a CustomOntologySpace instance.");
+ else {
+ this.customSpace = (CustomOntologySpace) customSpace;
+ this.customSpace.addOntologySpaceListener(this);
+ this.customSpace.attachCoreSpace(this.coreSpace, true);
+ }
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see eu.iksproject.kres.api.manager.ontology.OntologyScope#setUp()
+ */
+ @Override
+ public synchronized void setUp() {
+ if (locked || (customSpace != null && !customSpace.isLocked()))
+ return;
+ this.coreSpace.addOntologySpaceListener(this);
+ this.coreSpace.setUp();
+ if (this.customSpace != null) {
+ this.customSpace.addOntologySpaceListener(this);
+ this.customSpace.setUp();
+ }
+ locked = true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see eu.iksproject.kres.api.manager.ontology.OntologyScope#tearDown()
+ */
+ @Override
+ public synchronized void tearDown() {
+ // this.coreSpace.addOntologySpaceListener(this);
+ this.coreSpace.tearDown();
+ if (this.customSpace != null) {
+ // this.customSpace.addOntologySpaceListener(this);
+ this.customSpace.tearDown();
+ }
+ locked = false;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return getID().toString();
+ }
+
+ @Override
+ public void synchronizeSpaces() {
+ // TODO Auto-generated method stub
+
+ }
+
+}
Added: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologySpaceFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologySpaceFactoryImpl.java?rev=1087671&view=auto
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologySpaceFactoryImpl.java (added)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologySpaceFactoryImpl.java Fri Apr 1 12:08:25 2011
@@ -0,0 +1,89 @@
+package org.apache.stanbol.ontologymanager.ontonet.impl.ontology;
+
+import org.apache.stanbol.ontologymanager.ontonet.api.io.OntologyInputSource;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.CoreOntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.CustomOntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyScope;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpaceFactory;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpaceListener;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.ScopeRegistry;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.SessionOntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.UnmodifiableOntologySpaceException;
+import org.apache.stanbol.ontologymanager.ontonet.impl.io.ClerezzaOntologyStorage;
+import org.semanticweb.owlapi.model.IRI;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Utility class that generates default implementations of the three types of
+ * ontology scope.
+ *
+ * @author alessandro
+ *
+ */
+public class OntologySpaceFactoryImpl implements OntologySpaceFactory {
+
+ protected Logger log = LoggerFactory.getLogger(getClass());
+
+ protected ScopeRegistry registry;
+ protected ClerezzaOntologyStorage storage;
+
+ public OntologySpaceFactoryImpl(ScopeRegistry registry, ClerezzaOntologyStorage storage) {
+ this.registry = registry;
+ this.storage = storage;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see eu.iksproject.kres.api.manager.ontology.OntologySpaceFactory#createCoreOntologySpace(org.semanticweb.owlapi.model.IRI, eu.iksproject.kres.api.manager.ontology.OntologyInputSource)
+ */
+ @Override
+ public CoreOntologySpace createCoreOntologySpace(IRI scopeID,
+ OntologyInputSource coreSource) {
+ CoreOntologySpace s = new CoreOntologySpaceImpl(scopeID,storage);
+ setupSpace(s, scopeID, coreSource);
+ return s;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see eu.iksproject.kres.api.manager.ontology.OntologySpaceFactory#createCustomOntologySpace(org.semanticweb.owlapi.model.IRI, eu.iksproject.kres.api.manager.ontology.OntologyInputSource)
+ */
+ @Override
+ public CustomOntologySpace createCustomOntologySpace(IRI scopeID,
+ OntologyInputSource customSource) {
+ CustomOntologySpace s = new CustomOntologySpaceImpl(scopeID,storage);
+ setupSpace(s, scopeID, customSource);
+ return s;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see eu.iksproject.kres.api.manager.ontology.OntologySpaceFactory#createSessionOntologySpace(org.semanticweb.owlapi.model.IRI)
+ */
+ @Override
+ public SessionOntologySpace createSessionOntologySpace(IRI scopeID) {
+ SessionOntologySpace s = new SessionOntologySpaceImpl(scopeID,storage);
+ // s.setUp();
+ return s;
+ }
+
+ private void setupSpace(OntologySpace s, IRI scopeID,
+ OntologyInputSource rootSource) {
+ // FIXME: ensure that this is not null
+ OntologyScope parentScope = registry.getScope(scopeID);
+
+ if (parentScope != null && parentScope instanceof OntologySpaceListener)
+ s.addOntologySpaceListener((OntologySpaceListener) parentScope);
+ // Set the supplied ontology's parent as the root for this space.
+ try {
+ s.setTopOntology(rootSource, true);
+ } catch (UnmodifiableOntologySpaceException e) {
+ log.error("KReS :: Ontology space " + s.getID()
+ + " found locked at creation time!", e);
+ }
+ // s.setUp();
+ }
+
+}