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();
+	}
+
+}