You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by al...@apache.org on 2012/06/20 11:42:27 UTC

svn commit: r1352018 [1/3] - in /incubator/stanbol/trunk: commons/owl/src/main/java/org/apache/stanbol/commons/owl/util/ commons/owl/src/test/java/org/apache/stanbol/commons/owl/util/ commons/owl/src/test/java/org/apache/stanbol/owl/ ontologymanager/on...

Author: alexdma
Date: Wed Jun 20 09:42:24 2012
New Revision: 1352018

URL: http://svn.apache.org/viewvc?rev=1352018&view=rev
Log:
- OntoNet meta graph also keeps track of collector-ontology relations (TODO still need to use it for rebuilding ontology networks) (STANBOL-518, STANBOL-571)
- I am undoing part of the work done for STANBOL-524 and STANBOL-572. OWL versionIRI is still used, but only when exporting the ontologies to OWL. Internally, we should use a different ownership mechanism (modifying the versionIRI in the graph can cause a new naming for the meta graph).

Added:
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/collector/OntologyCollectorListenable.java
      - copied, changed from r1326662, incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/ScopeOntologyListenable.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphImportsClosureSource.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/SetInputSource.java
      - copied, changed from r1309473, incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologySetInputSource.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/OntologyLookaheadMGraph.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/TestUtilities.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/TestClerezzaProvider.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/TestOntologyNetworkPersistence.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/test/resources/log4j.properties
    incubator/stanbol/trunk/ontologymanager/ontonet/src/test/resources/ontologies/versiontest_v1.owl
    incubator/stanbol/trunk/ontologymanager/ontonet/src/test/resources/ontologies/versiontest_v2.owl
Removed:
    incubator/stanbol/trunk/commons/owl/src/test/java/org/apache/stanbol/owl/
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologySetInputSource.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/ScopeOntologyListenable.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/ScopeOntologyListener.java
Modified:
    incubator/stanbol/trunk/commons/owl/src/main/java/org/apache/stanbol/commons/owl/util/OWLUtils.java
    incubator/stanbol/trunk/commons/owl/src/test/java/org/apache/stanbol/commons/owl/util/TestOWLUtils.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/Vocabulary.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/collector/OntologyCollector.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/collector/OntologyCollectorListener.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/AbstractClerezzaGraphInputSource.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphContentInputSource.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/RootOntologyIRISource.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyProvider.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/CustomOntologySpace.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/OntologyScope.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ONManagerImpl.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologyCollectorImpl.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOWLUtils.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOntologyProvider.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/CustomOntologySpaceImpl.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/OntologySpaceFactoryImpl.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyScopeImpl.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/ScopeRegistryImpl.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/AbstractOntologySpaceImpl.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/CustomOntologySpaceImpl.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/OWLAPIOntologyProvider.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/OntologySpaceFactoryImpl.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/renderers/ScopeSetRenderer.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/MockOsgiContext.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/TestOntologyCollectors.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/io/TestStorage.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/ontology/TestClerezzaSpaces.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/ontology/TestOntologySpaces.java
    incubator/stanbol/trunk/ontologymanager/ontonet/src/test/resources/ontologies/maincharacters.owl
    incubator/stanbol/trunk/ontologymanager/ontonet/src/test/resources/ontologies/minorcharacters.owl
    incubator/stanbol/trunk/ontologymanager/ontonet/src/test/resources/ontologies/mockfoaf.rdf
    incubator/stanbol/trunk/ontologymanager/ontonet/src/test/resources/ontologies/test1.owl
    incubator/stanbol/trunk/ontologymanager/registry/pom.xml
    incubator/stanbol/trunk/ontologymanager/registry/src/main/java/org/apache/stanbol/ontologymanager/registry/impl/model/LibraryImpl.java
    incubator/stanbol/trunk/ontologymanager/registry/src/main/java/org/apache/stanbol/ontologymanager/registry/io/LibrarySource.java
    incubator/stanbol/trunk/ontologymanager/web/pom.xml
    incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/OntoNetRootResource.java
    incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java
    incubator/stanbol/trunk/reengineer/base/pom.xml
    incubator/stanbol/trunk/reengineer/db/pom.xml
    incubator/stanbol/trunk/reengineer/db/src/test/java/org/apache/stanbol/reengineer/db/DBExtractorTest.java
    incubator/stanbol/trunk/reengineer/web/pom.xml
    incubator/stanbol/trunk/reengineer/web/src/main/java/org/apache/stanbol/reengineer/web/resources/ReengineerResource.java
    incubator/stanbol/trunk/reengineer/xml/pom.xml
    incubator/stanbol/trunk/reengineer/xml/src/test/java/org/apache/stanbol/reengineer/xml/XMLReengineerTest.java

Modified: incubator/stanbol/trunk/commons/owl/src/main/java/org/apache/stanbol/commons/owl/util/OWLUtils.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/owl/src/main/java/org/apache/stanbol/commons/owl/util/OWLUtils.java?rev=1352018&r1=1352017&r2=1352018&view=diff
==============================================================================
--- incubator/stanbol/trunk/commons/owl/src/main/java/org/apache/stanbol/commons/owl/util/OWLUtils.java (original)
+++ incubator/stanbol/trunk/commons/owl/src/main/java/org/apache/stanbol/commons/owl/util/OWLUtils.java Wed Jun 20 09:42:24 2012
@@ -40,15 +40,6 @@ public class OWLUtils {
 
     public static final String NS_STANBOL = "http://stanbol.apache.org/";
 
-    public static UriRef guessOntologyIdentifier(Object g) {
-        if (g instanceof TripleCollection) return URIUtils.createUriRef(guessOWLOntologyID(
-            (TripleCollection) g).getOntologyIRI());
-        else if (g instanceof OWLOntology) return URIUtils
-                .createUriRef(guessOntologyIdentifier((OWLOntology) g));
-        else throw new IllegalArgumentException("Cannot guess ontology identifier for objects of type "
-                                                + g.getClass());
-    }
-
     /**
      * If the ontology is named, this method will return its logical ID, otherwise it will return the location
      * it was retrieved from (which is still unique).
@@ -56,15 +47,21 @@ public class OWLUtils {
      * @param o
      * @return
      */
-    public static IRI guessOntologyIdentifier(OWLOntology o) {
-        String iri;
+    public static OWLOntologyID guessOntologyIdentifier(OWLOntology o) {
+
+        String oiri;
+        IRI viri = null;
         // For named OWL ontologies it is their ontology ID. For anonymous ontologies, it is the URI they were
         // fetched from, if any.
-        if (o.isAnonymous()) iri = o.getOWLOntologyManager().getOntologyDocumentIRI(o).toString();
-        else iri = o.getOntologyID().getOntologyIRI().toString();
+        if (o.isAnonymous()) oiri = o.getOWLOntologyManager().getOntologyDocumentIRI(o).toString();
+        else {
+            OWLOntologyID id = o.getOntologyID();
+            oiri = id.getOntologyIRI().toString();
+            viri = id.getVersionIRI();
+        }
         // Strip fragment or query tokens. TODO do proper URL Encoding.
-        while (iri.endsWith("#") || iri.endsWith("?"))
-            iri = iri.substring(0, iri.length() - 1);
+        while (oiri.endsWith("#") || oiri.endsWith("?"))
+            oiri = oiri.substring(0, oiri.length() - 1);
         // try {
         // if (originalIri.endsWith("#")) originalIri = originalIri.substring(0,
         // originalIri.length() - 1) + URLEncoder.encode("#", "UTF-8");
@@ -74,32 +71,12 @@ public class OWLUtils {
         // } catch (UnsupportedEncodingException e) {
         // // That cannot be.
         // }
-        return IRI.create(iri);
-    }
 
-    /**
-     * Returns an UriRef wrapper for the first instance of owl:Ontology it detects, and ignores further
-     * instances (which is nonstandard in OWL).
-     * 
-     * If the ontology is anonymous, a timestamped UriRef is created
-     * 
-     * @param g
-     * @return
-     */
-    public static UriRef guessOntologyIdentifier(TripleCollection g) {
-        Iterator<Triple> it = g.filter(null, RDF.type, OWL.Ontology);
-        if (it.hasNext()) {
-            NonLiteral subj = it.next().getSubject();
-            if (it.hasNext()) log.warn(
-                "RDF Graph {} has multiple OWL ontology definitions! Ignoring all but {}", g, subj);
-            if (subj instanceof UriRef) return (UriRef) subj;
-        }
-        String s = NS_STANBOL + System.currentTimeMillis();
-        log.debug("Ontology is anonymous. Returning generated ID <{}> .", s);
-        return new UriRef(s);
+        if (viri != null) return new OWLOntologyID(IRI.create(oiri), viri);
+        else return new OWLOntologyID(IRI.create(oiri));
     }
 
-    public static OWLOntologyID guessOWLOntologyID(TripleCollection g) {
+    public static OWLOntologyID guessOntologyIdentifier(TripleCollection g) {
         IRI ontologyIri = null, versionIri = null;
         Iterator<Triple> it = g.filter(null, RDF.type, OWL.Ontology);
         if (it.hasNext()) {
@@ -114,12 +91,15 @@ public class OWLUtils {
                         .getUnicodeString());
             }
         }
-        if (ontologyIri == null) ontologyIri = IRI.create(NS_STANBOL + System.currentTimeMillis());
+        if (ontologyIri == null) {
+            ontologyIri = IRI.create(NS_STANBOL + System.currentTimeMillis());
+            log.debug("Ontology is anonymous. Returning generated ID <{}> .", ontologyIri);
+        }
         if (versionIri == null) return new OWLOntologyID(ontologyIri);
         else return new OWLOntologyID(ontologyIri, versionIri);
     }
 
-    public static IRI guessOntologyIdentifier(UriRef key, TcProvider store) {
-        return guessOWLOntologyID(store.getTriples(key)).getOntologyIRI();
+    public static OWLOntologyID guessOntologyIdentifier(UriRef key, TcProvider store) {
+        return guessOntologyIdentifier(store.getTriples(key));
     }
 }

Modified: incubator/stanbol/trunk/commons/owl/src/test/java/org/apache/stanbol/commons/owl/util/TestOWLUtils.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/owl/src/test/java/org/apache/stanbol/commons/owl/util/TestOWLUtils.java?rev=1352018&r1=1352017&r2=1352018&view=diff
==============================================================================
--- incubator/stanbol/trunk/commons/owl/src/test/java/org/apache/stanbol/commons/owl/util/TestOWLUtils.java (original)
+++ incubator/stanbol/trunk/commons/owl/src/test/java/org/apache/stanbol/commons/owl/util/TestOWLUtils.java Wed Jun 20 09:42:24 2012
@@ -16,7 +16,7 @@
  */
 package org.apache.stanbol.commons.owl.util;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertNotNull;
 
 import java.io.InputStream;
 
@@ -26,7 +26,6 @@ import org.apache.clerezza.rdf.core.acce
 import org.apache.clerezza.rdf.core.serializedform.ParsingProvider;
 import org.apache.clerezza.rdf.jena.parser.JenaParserProvider;
 import org.apache.clerezza.rdf.simple.storage.SimpleTcProvider;
-import org.apache.stanbol.commons.owl.util.OWLUtils;
 import org.junit.After;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -55,7 +54,7 @@ public class TestOWLUtils {
         InputStream inputStream = getClass().getResourceAsStream("/owl/nameless_ontology.owl");
         MGraph mg = TcManager.getInstance().createMGraph(uri);
         pp.parse(mg, inputStream, "application/rdf+xml", uri);
-//        No longer null!
+        // No longer null!
         assertNotNull(OWLUtils.guessOntologyIdentifier(mg.getGraph()));
     }
 

Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/Vocabulary.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/Vocabulary.java?rev=1352018&r1=1352017&r2=1352018&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/Vocabulary.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/Vocabulary.java Wed Jun 20 09:42:24 2012
@@ -21,9 +21,17 @@ public class Vocabulary {
     public static final String _NS_ONTONET = "http://stanbol.apache.org/ontology/meta/ontonet#";
 
     public static final String IS_MANAGED_BY = _NS_ONTONET + "isManagedBy";
+    
+    public static final String IS_MANAGED_BY_CORE = _NS_ONTONET + "isManagedByCore";
 
+    public static final String IS_MANAGED_BY_CUSTOM = _NS_ONTONET + "isManagedByCustom";
+    
     public static final String MANAGES = _NS_ONTONET + "manages";
     
+    public static final String MANAGES_IN_CORE = _NS_ONTONET + "managesInCore";
+    
+    public static final String MANAGES_IN_CUSTOM = _NS_ONTONET + "managesInCustom";
+    
     public static final String HAS_STATUS = _NS_ONTONET + "hasStatus";
     
     public static final String STATUS = _NS_ONTONET + "Status";

Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/collector/OntologyCollector.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/collector/OntologyCollector.java?rev=1352018&r1=1352017&r2=1352018&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/collector/OntologyCollector.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/collector/OntologyCollector.java Wed Jun 20 09:42:24 2012
@@ -16,7 +16,6 @@
  */
 package org.apache.stanbol.ontologymanager.ontonet.api.collector;
 
-import java.util.Collection;
 import java.util.Set;
 
 import org.apache.stanbol.ontologymanager.ontonet.api.NamedResource;
@@ -32,16 +31,8 @@ import org.semanticweb.owlapi.model.IRI;
  * @author alexdma
  * 
  */
-public interface OntologyCollector extends NamedResource, OntologyInputSourceHandler {
-
-    /**
-     * Registers a new listener for changes in this ontology space. Has no effect if the same listener is
-     * already registered with this ontology space.
-     * 
-     * @param listener
-     *            the ontology space listener to be added.
-     */
-    void addListener(OntologyCollectorListener listener);
+public interface OntologyCollector extends OntologyCollectorListenable, NamedResource,
+        OntologyInputSourceHandler {
 
     /**
      * Adds the given ontology to the ontology space. If the supplied ontology is not already present in
@@ -55,19 +46,6 @@ public interface OntologyCollector exten
     String addOntology(OntologyInputSource<?,?> ontologySource);
 
     /**
-     * Removes all ontology space listeners registered with this space.
-     */
-    void clearListeners();
-
-    /**
-     * Returns all the listeners registered with this ontology space. Whether the collection reflects or not
-     * the order in which they were registered depends on the implementation.
-     * 
-     * @return the registered ontology space listeners.
-     */
-    Collection<OntologyCollectorListener> getListeners();
-
-    /**
      * Returns the ontologies managed by this ontology space. This is a shortcut method for iterating
      * {@link #getOntology(IRI, Class)} calls over {@link #listManagedOntologies()}.
      * 
@@ -111,15 +89,6 @@ public interface OntologyCollector exten
     boolean hasOntology(IRI ontologyIri);
 
     /**
-     * Unregisters the supplied for changes in this ontology space. Has no effect if the same listener was not
-     * registered with this ontology space.
-     * 
-     * @param listener
-     *            the ontology space listener to be removed.
-     */
-    void removeListener(OntologyCollectorListener listener);
-
-    /**
      * Removes the given ontology from the ontology space, if the ontology is a direct child of the top
      * ontology.<br/>
      * <u>Note</u> that this will NOT delete the ontology from the store! This method simply states that the

Copied: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/collector/OntologyCollectorListenable.java (from r1326662, incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/ScopeOntologyListenable.java)
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/collector/OntologyCollectorListenable.java?p2=incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/collector/OntologyCollectorListenable.java&p1=incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/ScopeOntologyListenable.java&r1=1326662&r2=1352018&rev=1352018&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/ScopeOntologyListenable.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/collector/OntologyCollectorListenable.java Wed Jun 20 09:42:24 2012
@@ -1,38 +1,38 @@
 /*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements.  See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package org.apache.stanbol.ontologymanager.ontonet.api.scope;
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.stanbol.ontologymanager.ontonet.api.collector;
 
 import java.util.Collection;
 
 /**
- * Implementations of this interface are able to fire events related to the
- * modification of ontologies within an ontology scope.
+ * Informs listeners about changes in an ontology collector. Implementations of this interface should be able
+ * to fire events related to the modification of ontologies within an ontology collector.
  * 
  * @author alexdma
  * 
  */
-public interface ScopeOntologyListenable {
+public interface OntologyCollectorListenable {
 
-	void addOntologyScopeListener(ScopeOntologyListener listener);
+    void addOntologyCollectorListener(OntologyCollectorListener listener);
 
-	void clearOntologyScopeListeners();
+    void clearOntologyCollectorListeners();
 
-	Collection<ScopeOntologyListener> getOntologyScopeListeners();
+    Collection<OntologyCollectorListener> getOntologyCollectorListeners();
 
-	void removeOntologyScopeListener(ScopeOntologyListener listener);
+    void removeOntologyCollectorListener(OntologyCollectorListener listener);
 
 }

Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/collector/OntologyCollectorListener.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/collector/OntologyCollectorListener.java?rev=1352018&r1=1352017&r2=1352018&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/collector/OntologyCollectorListener.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/collector/OntologyCollectorListener.java Wed Jun 20 09:42:24 2012
@@ -16,11 +16,13 @@
  */
 package org.apache.stanbol.ontologymanager.ontonet.api.collector;
 
-import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLOntologyID;
 
 /**
- * Objects that react to the addition or removal of ontologies to an ontology collector will implement this
- * interface.
+ * Objects that react to the addition or removal of ontologies to or from an ontology collector will implement
+ * this interface.<br>
+ * <br>
+ * XXX add "before" methods.
  * 
  * @author alexdma
  * 
@@ -28,23 +30,23 @@ import org.semanticweb.owlapi.model.IRI;
 public interface OntologyCollectorListener {
 
     /**
-     * Fired after an ontology was successfully added to an ontology collector.
+     * Fired <i>after</i> an ontology was successfully added to an ontology collector.
      * 
      * @param collectorId
      *            the ontology collector identifier.
      * @param addedOntology
      *            the added ontology identifier.
      */
-    void onOntologyAdded(String collectorId, IRI addedOntology);
+    void onOntologyAdded(OntologyCollector collector, OWLOntologyID addedOntology);
 
     /**
-     * Fired after an ontology was successfully removed from an ontology collector.
+     * Fired <i>after</i> an ontology was successfully removed from an ontology collector.
      * 
      * @param collectorId
      *            the ontology collector identifier.
      * @param removedOntology
      *            the removed ontology identifier.
      */
-    void onOntologyRemoved(String collectorId, IRI removedOntology);
+    void onOntologyRemoved(OntologyCollector collector, OWLOntologyID removedOntology);
 
 }

Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/AbstractClerezzaGraphInputSource.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/AbstractClerezzaGraphInputSource.java?rev=1352018&r1=1352017&r2=1352018&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/AbstractClerezzaGraphInputSource.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/AbstractClerezzaGraphInputSource.java Wed Jun 20 09:42:24 2012
@@ -21,6 +21,7 @@ import java.util.Iterator;
 import java.util.Set;
 
 import org.apache.clerezza.rdf.core.Graph;
+import org.apache.clerezza.rdf.core.NonLiteral;
 import org.apache.clerezza.rdf.core.Resource;
 import org.apache.clerezza.rdf.core.Triple;
 import org.apache.clerezza.rdf.core.TripleCollection;
@@ -28,7 +29,9 @@ import org.apache.clerezza.rdf.core.UriR
 import org.apache.clerezza.rdf.core.access.TcManager;
 import org.apache.clerezza.rdf.core.access.TcProvider;
 import org.apache.clerezza.rdf.ontologies.OWL;
-import org.apache.stanbol.commons.owl.util.OWLUtils;
+import org.apache.clerezza.rdf.ontologies.RDF;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Default implementation of an {@link OntologyInputSource} that returns {@link Graph} objects as ontologies.
@@ -43,6 +46,8 @@ import org.apache.stanbol.commons.owl.ut
 public abstract class AbstractClerezzaGraphInputSource extends
         AbstractGenericInputSource<TripleCollection,TcProvider> {
 
+    protected Logger log = LoggerFactory.getLogger(getClass());
+
     @Override
     protected void bindRootOntology(TripleCollection ontology) {
         super.bindRootOntology(ontology);
@@ -55,8 +60,17 @@ public abstract class AbstractClerezzaGr
 
     protected Set<TripleCollection> getImportedGraphs(TripleCollection g, boolean recursive) {
         Set<TripleCollection> result = new HashSet<TripleCollection>();
-        UriRef u = OWLUtils.guessOntologyIdentifier(g);
-        Iterator<Triple> it = g.filter(u, OWL.imports, null);
+        UriRef u = null;
+
+        Iterator<Triple> it = g.filter(null, RDF.type, OWL.Ontology);
+        if (it.hasNext()) {
+            NonLiteral subj = it.next().getSubject();
+            if (it.hasNext()) log.warn(
+                "RDF Graph has multiple OWL ontology definitions! Ignoring all but {}", subj);
+            if (subj instanceof UriRef) u = (UriRef) subj;
+        }
+
+        it = g.filter(u, OWL.imports, null);
         while (it.hasNext()) {
             Resource r = it.next().getObject();
             if (r instanceof UriRef) {

Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphContentInputSource.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphContentInputSource.java?rev=1352018&r1=1352017&r2=1352018&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphContentInputSource.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphContentInputSource.java Wed Jun 20 09:42:24 2012
@@ -42,7 +42,7 @@ import org.slf4j.LoggerFactory;
  */
 public class GraphContentInputSource extends AbstractClerezzaGraphInputSource {
 
-    private Logger log = LoggerFactory.getLogger(getClass());
+    protected Logger log = LoggerFactory.getLogger(getClass());
 
     /**
      * Creates a new graph input source by parsing <code>content</code>. Every supported format will be tried

Added: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphImportsClosureSource.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphImportsClosureSource.java?rev=1352018&view=auto
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphImportsClosureSource.java (added)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphImportsClosureSource.java Wed Jun 20 09:42:24 2012
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.stanbol.ontologymanager.ontonet.api.io;
+
+import java.io.InputStream;
+import java.util.Set;
+
+import org.apache.clerezza.rdf.core.access.TcProvider;
+import org.apache.clerezza.rdf.core.serializedform.Parser;
+import org.semanticweb.owlapi.model.OWLOntology;
+
+public class GraphImportsClosureSource extends GraphContentInputSource implements SetInputSource {
+
+    /**
+     * Creates a new graph input source by parsing <code>content</code>. Every supported format will be tried
+     * until one is parsed successfully. The resulting graph is created in-memory, and its triples will have
+     * to be manually added to a stored graph if necessary.
+     * 
+     * @param content
+     *            the serialized graph content.
+     */
+    public GraphImportsClosureSource(InputStream content) {
+        this(content, (String) null);
+    }
+
+    /**
+     * Creates a new graph input source by parsing <code>content</code> assuming it has the given format. The
+     * resulting graph is created in-memory, and its triples will have to be manually added to a stored graph
+     * if necessary.
+     * 
+     * @param content
+     *            the serialized graph content.
+     * @param formatIdentifier
+     *            the format to parse the content as.
+     */
+    public GraphImportsClosureSource(InputStream content, String formatIdentifier) {
+        this(content, formatIdentifier, null);
+    }
+
+    /**
+     * Creates a new graph input source by parsing <code>content</code> into a graph created using the
+     * supplied {@link TcProvider}, assuming it has the given format.
+     * 
+     * @param content
+     *            the serialized graph content.
+     * @param formatIdentifier
+     *            the format to parse the content as.
+     * @param tcProvider
+     *            the provider that will create the graph where the triples will be stored.
+     */
+    public GraphImportsClosureSource(InputStream content, String formatIdentifier, TcProvider tcProvider) {
+        this(content, formatIdentifier, tcProvider, Parser.getInstance());
+    }
+
+    /**
+     * Creates a new graph input source by parsing <code>content</code> (using the supplied {@link Parser})
+     * into a graph created using the supplied {@link TcProvider}, assuming it has the given format.
+     * 
+     * @param content
+     *            the serialized graph content.
+     * @param formatIdentifier
+     *            the format to parse the content as.
+     * @param tcProvider
+     *            the provider that will create the graph where the triples will be stored.
+     * @param parser
+     *            the parser to use for creating the graph. If null, the default one will be used.
+     */
+    public GraphImportsClosureSource(InputStream content,
+                                     String formatIdentifier,
+                                     TcProvider tcProvider,
+                                     Parser parser) {
+        super(content, formatIdentifier, tcProvider, parser);
+    }
+
+    @Override
+    public Set<OWLOntology> getOntologies() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}

Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/RootOntologyIRISource.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/RootOntologyIRISource.java?rev=1352018&r1=1352017&r2=1352018&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/RootOntologyIRISource.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/RootOntologyIRISource.java Wed Jun 20 09:42:24 2012
@@ -23,7 +23,14 @@ import org.semanticweb.owlapi.model.OWLO
 
 /**
  * An input source that provides the OWL Ontology loaded from the supplied physical IRI, as well as the
- * physical IRI itself for consumers that need to load the ontology themselves.<br>
+ * physical IRI itself for consumers that need to load the ontology themselves. This means that in order to
+ * use the {@link RootOntologyIRISource}, <i>one</i> the following requirements must be met:
+ * <ol>
+ * <li>Stanbol is in online mode and all imports can be resolved recursively;
+ * <li>Stanbol is in offline mode and the ontology has no recursive import statements.
+ * </ol>
+ * If Stanbol is in offline mode and it is known that all imported ontologies are in the same local directory
+ * as the root ontology, one should use a {@link ParentPathInputSource} instead. <br>
  * <br>
  * For convenience, an existing OWL ontology manager can be supplied for loading the ontology.
  * 

Copied: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/SetInputSource.java (from r1309473, incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologySetInputSource.java)
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/SetInputSource.java?p2=incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/SetInputSource.java&p1=incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologySetInputSource.java&r1=1309473&r2=1352018&rev=1352018&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologySetInputSource.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/SetInputSource.java Wed Jun 20 09:42:24 2012
@@ -20,8 +20,8 @@ import java.util.Set;
 
 import org.semanticweb.owlapi.model.OWLOntology;
 
-public interface OntologySetInputSource {
+public interface SetInputSource<O> {
 
-    Set<OWLOntology> getOntologies();
+    Set<O> getOntologies();
 
 }

Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyProvider.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyProvider.java?rev=1352018&r1=1352017&r2=1352018&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyProvider.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyProvider.java Wed Jun 20 09:42:24 2012
@@ -20,6 +20,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.Set;
 
+import org.apache.clerezza.rdf.core.Graph;
+import org.apache.clerezza.rdf.core.MGraph;
 import org.apache.clerezza.rdf.core.TripleCollection;
 import org.apache.clerezza.rdf.core.access.TcProvider;
 import org.apache.clerezza.rdf.core.serializedform.UnsupportedFormatException;
@@ -73,19 +75,21 @@ public interface OntologyProvider<S> {
      * Gets a string that can be used to directly access the ontology whose logical identifier is
      * <tt>ontologyIRI</tt>.
      * 
-     * @param ontologyIRI
+     * @param locator
      *            the logical identifier of the ontology.
      * @return the key to access the ontology from the store.
      */
-    String getKey(IRI ontologyIRI);
+    String getKey(IRI locator);
 
     /**
-     * Returns the graph that stores all the information on stored ontologies
+     * Gets the key of the ontology with the supplied ontology ID. Note that both ontoloeyIRI and versionIRI
+     * (if present) must match, otherwise it will return null. To get the keys for a givemn ontologyIRI, no
+     * matte what its version is, use {@link #getOntologyVersionKeys(IRI)}.
      * 
-     * @param returnType
+     * @param ontologyId
      * @return
      */
-    <O extends TripleCollection> O getMetaGraph(Class<O> returnType);
+    String getKey(OWLOntologyID ontologyId);
 
     /**
      * Gets the set of all the strings that can be used to access the ontologies stored by this provider.
@@ -95,6 +99,26 @@ public interface OntologyProvider<S> {
     Set<String> getKeys();
 
     /**
+     * Returns the graph that stores all the information on stored ontologies. Whether the returned triple
+     * collection is a {@link Graph} or a {@link MGraph} depends on the provider's policy on allowing external
+     * modifications to the meta-level graph or not.
+     * 
+     * @param returnType
+     * @return
+     */
+    <O extends TripleCollection> O getMetaGraph(Class<O> returnType);
+
+    /**
+     * Will return the keys of all the ontologies whose ontologyIRI is the one provided. These include any
+     * ontologies with that ontologyIRI and a versionIRI, and one ontology with no version IRI (if it exists,
+     * it must be unique).
+     * 
+     * @param ontologyIRI
+     * @return
+     */
+    Set<String> getOntologyVersionKeys(IRI ontologyIRI);
+
+    /**
      * Returns the storage system used by this ontology provider (e.g. a {@link TcProvider} or an
      * {@link OWLOntologyManager}).
      * 
@@ -249,8 +273,8 @@ public interface OntologyProvider<S> {
      * @throws UnsupportedFormatException
      *             if no parsers are able to parse the supplied format (or the actual file format).
      */
-    String loadInStore(InputStream data, String formatIdentifier, String preferredKey, boolean force) throws IOException,
-                                                                                                     UnsupportedFormatException;
+    String loadInStore(InputStream data, String formatIdentifier, boolean force) throws IOException,
+                                                                                UnsupportedFormatException;
 
     /**
      * Retrieves an ontology physically located at <code>location</code> (unless mapped otherwise by the
@@ -279,7 +303,7 @@ public interface OntologyProvider<S> {
      * @throws UnsupportedFormatException
      *             if no parsers are able to parse the supplied format (or the actual file format).
      */
-    String loadInStore(IRI location, String formatIdentifier, String preferredKey, boolean force) throws IOException;
+    String loadInStore(IRI location, String formatIdentifier, boolean force) throws IOException;
 
     /**
      * Stores an ontology that has already been loaded into an object. If the object is of a non-native yet
@@ -299,7 +323,7 @@ public interface OntologyProvider<S> {
      *            set on offline mode, this method will fail.
      * @return
      */
-    String loadInStore(Object ontology, String preferredKey, boolean force);
+    String loadInStore(Object ontology, boolean force);
 
     /**
      * Sets the policy adopted by this provider whenever an import statement is found in an ontology <i>that
@@ -311,4 +335,16 @@ public interface OntologyProvider<S> {
      */
     void setImportManagementPolicy(ImportManagementPolicy policy);
 
+    /**
+     * Will not be checked by dereferencing
+     * 
+     * If the key does not exist in the provider, or if locator is already bound to a different key, an
+     * {@link IllegalArgumentException} will be thrown.
+     * 
+     * 
+     * @param locator
+     * @param key
+     */
+    void setLocatorMapping(IRI locator, String key);
+
 }

Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/CustomOntologySpace.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/CustomOntologySpace.java?rev=1352018&r1=1352017&r2=1352018&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/CustomOntologySpace.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/CustomOntologySpace.java Wed Jun 20 09:42:24 2012
@@ -16,8 +16,6 @@
  */
 package org.apache.stanbol.ontologymanager.ontonet.api.scope;
 
-import org.apache.stanbol.ontologymanager.ontonet.api.collector.UnmodifiableOntologyCollectorException;
-
 /**
  * An ontology space that wraps the components that can be customized by CMS developers, IKS customizers and
  * the like. The custom ontology space becomes read-only after bootstrapping (i.e. after a call to
@@ -32,23 +30,4 @@ import org.apache.stanbol.ontologymanage
  */
 public interface CustomOntologySpace extends OntologySpace {
 
-    /**
-     * Logically links this custom space with the supplied core ontology space, so that the top ontology in
-     * the former will import those in the latter.<br>
-     * <br>
-     * This relationship is expected to hold at all times once the space is active, however the method to set
-     * it is available in case implementations require to perform other operations between the creation of
-     * ontology spaces and their linking.
-     * 
-     * @deprecated space linking is performed by the parent scope at OWL export time. Implementations do
-     *             nothing.
-     * @param coreSpace
-     *            the core ontology space to be linked
-     * @param skipRoot
-     *            if true, the custom root ontology will not import the core root ontology straight away, but
-     *            instead all of its axioms and import statements will be copied. Useful for implementations
-     *            that construct root ontologies in memory but do not store them.
-     */
-    void attachCoreSpace(CoreOntologySpace coreSpace, boolean skipRoot) throws UnmodifiableOntologyCollectorException;
-
 }

Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/OntologyScope.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/OntologyScope.java?rev=1352018&r1=1352017&r2=1352018&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/OntologyScope.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/OntologyScope.java Wed Jun 20 09:42:24 2012
@@ -18,6 +18,7 @@ package org.apache.stanbol.ontologymanag
 
 import org.apache.stanbol.ontologymanager.ontonet.api.NamedResource;
 import org.apache.stanbol.ontologymanager.ontonet.api.collector.Lockable;
+import org.apache.stanbol.ontologymanager.ontonet.api.collector.OntologyCollectorListenable;
 import org.apache.stanbol.ontologymanager.ontonet.api.collector.UnmodifiableOntologyCollectorException;
 import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OWLExportable;
 
@@ -38,7 +39,7 @@ import org.apache.stanbol.ontologymanage
  * @author alexdma
  * 
  */
-public interface OntologyScope extends NamedResource, Lockable, ScopeOntologyListenable, OWLExportable {
+public interface OntologyScope extends NamedResource, Lockable, OntologyCollectorListenable, OWLExportable {
 
     /**
      * Returns the core ontology space for this ontology scope. The core space should never be null for any

Modified: 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=1352018&r1=1352017&r2=1352018&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ONManagerImpl.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ONManagerImpl.java Wed Jun 20 09:42:24 2012
@@ -22,12 +22,16 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Dictionary;
-import java.util.HashSet;
 import java.util.Hashtable;
+import java.util.Iterator;
 import java.util.List;
-import java.util.Set;
 
+import org.apache.clerezza.rdf.core.NonLiteral;
+import org.apache.clerezza.rdf.core.Triple;
+import org.apache.clerezza.rdf.core.TripleCollection;
+import org.apache.clerezza.rdf.core.UriRef;
 import org.apache.clerezza.rdf.core.access.TcProvider;
+import org.apache.clerezza.rdf.ontologies.RDF;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -41,6 +45,7 @@ import org.apache.stanbol.commons.owl.OW
 import org.apache.stanbol.commons.stanboltools.offline.OfflineMode;
 import org.apache.stanbol.ontologymanager.ontonet.api.ONManager;
 import org.apache.stanbol.ontologymanager.ontonet.api.OfflineConfiguration;
+import org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary;
 import org.apache.stanbol.ontologymanager.ontonet.api.collector.DuplicateIDException;
 import org.apache.stanbol.ontologymanager.ontonet.api.collector.UnmodifiableOntologyCollectorException;
 import org.apache.stanbol.ontologymanager.ontonet.api.io.BlankOntologySource;
@@ -136,8 +141,6 @@ public class ONManagerImpl extends Scope
 
     private Helper helper = null;
 
-    private Set<ScopeEventListener> listeners = new HashSet<ScopeEventListener>();
-
     private final Logger log = LoggerFactory.getLogger(getClass());
 
     @Reference
@@ -179,7 +182,8 @@ public class ONManagerImpl extends Scope
      * 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(OntologyProvider, OfflineConfiguration, Dictionary)} or its
+     * YOU NEED TO USE
+     * {@link #ONManagerImpl(OntologyProvider, OfflineConfiguration, OntologySpaceFactory, Dictionary)} or its
      * overloads, to parse the configuration and then initialise the rule store if running outside an OSGI
      * environment.
      */
@@ -188,13 +192,6 @@ public class ONManagerImpl extends Scope
         // All bindings are deferred to the activator
     }
 
-    @Deprecated
-    public ONManagerImpl(OntologyProvider<?> ontologyProvider,
-                         OfflineConfiguration offline,
-                         Dictionary<String,Object> configuration) {
-        this(ontologyProvider, offline, null, configuration);
-    }
-
     public ONManagerImpl(OntologyProvider<?> ontologyProvider,
                          OfflineConfiguration offline,
                          OntologySpaceFactory spaceFactory,
@@ -314,7 +311,10 @@ public class ONManagerImpl extends Scope
             // Create and populate the scopes from the config ontology.
             bootstrapOntologyNetwork(oConf);
 
+        } else {
+            rebuildScopes();
         }
+
         log.debug(ONManager.class + " activated.");
 
     }
@@ -334,11 +334,15 @@ public class ONManagerImpl extends Scope
         }
         IRI iri = IRI.create(getOntologyNetworkNamespace() + scopeRegistryId + "/");
         ontologySpaceFactory.setNamespace(iri);
+
+        // Add listeners
+        if (ontologyProvider instanceof ScopeEventListener) this
+                .addScopeEventListener((ScopeEventListener) ontologyProvider);
     }
 
     private void bootstrapOntologyNetwork(OWLOntology configOntology) {
         if (configOntology == null) {
-            log.debug("Ontology Network Manager starting with empty scope set.");
+            log.info("Ontology Network Manager starting with empty scope set.");
             return;
         }
         try {
@@ -424,8 +428,12 @@ public class ONManagerImpl extends Scope
                                                                         + scopeRegistryId + "/"),
                 getOntologySpaceFactory(), coreSources);
         if (scope != null) {
-            this.registerScope(scope);
+            // Commented out: for the time being we try not to propagate additions to scopes.
+
+            // if (ontologyProvider instanceof OntologyCollectorListener) scope
+            // .addOntologyCollectorListener((OntologyCollectorListener) ontologyProvider);
             fireScopeCreated(scope);
+            this.registerScope(scope);
         }
         return scope;
     }
@@ -440,7 +448,6 @@ public class ONManagerImpl extends Scope
                 super.registerScope(scope);
             } else log.warn("Ignoring unnecessary call to already registered scope {}", id);
         } else super.registerScope(scope);
-
     }
 
     /**
@@ -554,4 +561,30 @@ public class ONManagerImpl extends Scope
         this.ontonetNS = namespace;
     }
 
+    private void rebuildScopes() {
+        TripleCollection meta = ontologyProvider.getMetaGraph(TripleCollection.class);
+        for (Iterator<Triple> it = meta.filter(null, RDF.type, new UriRef(Vocabulary.SCOPE)); it.hasNext();) {
+            NonLiteral sub = it.next().getSubject();
+            if (sub instanceof UriRef) {
+                String s = ((UriRef) sub).getUnicodeString(), prefix = getOntologyNetworkNamespace()
+                                                                       + scopeRegistryId + "/";
+                if (s.startsWith(prefix)) {
+                    String scopeId = s.substring(prefix.length());
+                    OntologyScope scope = new OntologyScopeImpl(scopeId, IRI.create(prefix),
+                            getOntologySpaceFactory());
+
+                    // retrieve the ontologies
+                    for (Iterator<Triple> it2 = meta.filter(sub, null, null); it2.hasNext();) {
+                        Triple t = it2.next();
+                        UriRef predicate = t.getPredicate();
+                        if (predicate.equals(new UriRef(Vocabulary.MANAGES_IN_CUSTOM))) {
+                            System.out.println(t.getObject());
+                        }
+                    }
+
+                    scopeMap.put(scopeId, scope);
+                }
+            }
+        }
+    }
 }

Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologyCollectorImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologyCollectorImpl.java?rev=1352018&r1=1352017&r2=1352018&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologyCollectorImpl.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologyCollectorImpl.java Wed Jun 20 09:42:24 2012
@@ -76,11 +76,6 @@ import org.slf4j.LoggerFactory;
 public abstract class AbstractOntologyCollectorImpl implements OntologyCollector, Lockable,
         OntologyInputSourceHandler, OWLExportable {
 
-    @Override
-    public Set<IRI> listManagedOntologies() {
-        return managedOntologies;
-    }
-
     protected String _id = null;
 
     /**
@@ -100,9 +95,10 @@ public abstract class AbstractOntologyCo
 
     /**
      * The identifier of the ontologies directly managed by this collector (i.e. that were directly added to
-     * this space, hence not including those just pulled in via import statements).
-     * 
-     * TODO make it a set again and have the ontology provider manage the mapping?
+     * this space, hence not including those just pulled in via import statements).<br>
+     * <br>
+     * XXX depending on whether we want to support multiple versionIRIs in the same collector, we may want to
+     * turn this one into a set of {@link OWLOntologyID}.
      */
     protected Set<IRI> managedOntologies;
 
@@ -124,11 +120,6 @@ public abstract class AbstractOntologyCo
     }
 
     @Override
-    public void addListener(OntologyCollectorListener listener) {
-        listeners.add(listener);
-    }
-
-    @Override
     public synchronized String addOntology(OntologyInputSource<?,?> ontologySource) throws UnmodifiableOntologyCollectorException {
 
         long before = System.currentTimeMillis();
@@ -142,56 +133,48 @@ public abstract class AbstractOntologyCo
                 "Ontology source cannot be null and must provide an ontology object.");
 
         Object o = ontologySource.getRootOntology();
-        UriRef uri;
         /*
          * Note for the developer: make sure the call to guessOntologyIdentifier() is only performed once
          * during all the storage process, otherwise multiple calls could return different results for
          * anonymous ontologies.
          */
+        OWLOntologyID id;
         if (o instanceof TripleCollection) {
-            uri = OWLUtils.guessOntologyIdentifier((TripleCollection) o);
+            id = OWLUtils.guessOntologyIdentifier((TripleCollection) o);
         } else if (o instanceof OWLOntology) {
-            uri = new UriRef(OWLUtils.guessOntologyIdentifier((OWLOntology) o).toString());
+            id = OWLUtils.guessOntologyIdentifier((OWLOntology) o);
         } else throw new UnsupportedOperationException(
                 "This ontology collector implementation cannot handle " + o.getClass().getCanonicalName()
                         + " objects.");
 
         // Now for the actual storage. We pass the ontology object directly.
         String key = null;
-        if (ontologyProvider.hasOntology(IRI.create(uri.getUnicodeString()))) if (o instanceof MGraph) claimOwnership((MGraph) o);
-        else if (o instanceof OWLOntology) claimOwnership((OWLOntology) o);
-        key = ontologyProvider.loadInStore(o, uri.getUnicodeString(), false);
+        // // FIXME restore ownership management, but maybe not by directly setting the versionIRI
+        // if (ontologyProvider.hasOntology(id.getOntologyIRI())) if (o instanceof MGraph)
+        // claimOwnership((MGraph) o);
+        // else if (o instanceof OWLOntology) claimOwnership((OWLOntology) o);
+        key = ontologyProvider.loadInStore(o, false);
+        if (ontologySource.hasPhysicalIRI()) ontologyProvider.setLocatorMapping(
+            ontologySource.getPhysicalIRI(), key);
+
         /*
          * Actually we are not interested in knowing the key here (ontology collectors are not concerned with
          * them), but knowing it is non-null and non-empty indicates the operation was successful.
          */
         if (key != null && !key.isEmpty()) {
             // add to index
-            managedOntologies.add(IRI.create(uri.getUnicodeString()));
+            managedOntologies.add(id.getOntologyIRI());
             // Note that imported ontologies are not considered as managed! TODO should we change this?
             log.debug("Add ontology completed in {} ms.", (System.currentTimeMillis() - before));
             // fire the event
-            fireOntologyAdded(uri);
+            fireOntologyAdded(id);
         }
         return key;
     }
 
-    protected void claimOwnership(OWLOntology ontology) {
-        log.info("Checking ownership of {} {}", OWLOntology.class.getSimpleName(), ontology.getOntologyID());
-        OWLOntologyID id = ontology.getOntologyID();
-        if (id.getOntologyIRI() != null) {
-            IRI ontologyIRI = id.getOntologyIRI();
-            IRI versionIri = id.getVersionIRI();
-            if (versionIri == null) {
-                log.info("    No OWL version IRI Found . Will set to own ID. ");
-                versionIri = IRI.create(getNamespace() + getID());
-                OWLOntologyID newId = new OWLOntologyID(ontologyIRI, versionIri);
-                OWLOntologyChange change = new SetOntologyID(ontology, newId);
-                ontology.getOWLOntologyManager().applyChange(change);
-                log.info("    Set OWL version IRI : {} . ", versionIri);
-            } else log.info("    Found OWL version IRI {} . Will not claim ownership. ", versionIri);
-        }
-
+    @Override
+    public void addOntologyCollectorListener(OntologyCollectorListener listener) {
+        listeners.add(listener);
     }
 
     protected void claimOwnership(MGraph ontology) {
@@ -219,8 +202,26 @@ public abstract class AbstractOntologyCo
         }
     }
 
+    protected void claimOwnership(OWLOntology ontology) {
+        log.info("Checking ownership of {} {}", OWLOntology.class.getSimpleName(), ontology.getOntologyID());
+        OWLOntologyID id = ontology.getOntologyID();
+        if (id.getOntologyIRI() != null) {
+            IRI ontologyIRI = id.getOntologyIRI();
+            IRI versionIri = id.getVersionIRI();
+            if (versionIri == null) {
+                log.info("    No OWL version IRI Found . Will set to own ID. ");
+                versionIri = IRI.create(getNamespace() + getID());
+                OWLOntologyID newId = new OWLOntologyID(ontologyIRI, versionIri);
+                OWLOntologyChange change = new SetOntologyID(ontology, newId);
+                ontology.getOWLOntologyManager().applyChange(change);
+                log.info("    Set OWL version IRI : {} . ", versionIri);
+            } else log.info("    Found OWL version IRI {} . Will not claim ownership. ", versionIri);
+        }
+
+    }
+
     @Override
-    public void clearListeners() {
+    public void clearOntologyCollectorListeners() {
         listeners.clear();
     }
 
@@ -405,19 +406,9 @@ public abstract class AbstractOntologyCo
      * @param ontologyIri
      *            the identifier of the ontology that was added to this space.
      */
-    protected void fireOntologyAdded(IRI ontologyIri) {
+    protected void fireOntologyAdded(OWLOntologyID ontologyId) {
         for (OntologyCollectorListener listener : listeners)
-            listener.onOntologyAdded(this.getID(), ontologyIri);
-    }
-
-    /**
-     * Notifies all ontology space listeners that an ontology has been added to this space.
-     * 
-     * @param ontologyIri
-     *            the identifier of the ontology that was added to this space.
-     */
-    protected void fireOntologyAdded(UriRef ontologyIri) {
-        fireOntologyAdded(IRI.create(ontologyIri.getUnicodeString()));
+            listener.onOntologyAdded(this, ontologyId);
     }
 
     /**
@@ -426,13 +417,9 @@ public abstract class AbstractOntologyCo
      * @param ontologyIri
      *            the identifier of the ontology that was removed from this space.
      */
-    protected void fireOntologyRemoved(IRI ontologyIri) {
+    protected void fireOntologyRemoved(OWLOntologyID ontologyId) {
         for (OntologyCollectorListener listener : listeners)
-            listener.onOntologyRemoved(this.getID(), ontologyIri);
-    }
-
-    protected void fireOntologyRemoved(UriRef ontologyIri) {
-        fireOntologyRemoved(IRI.create(ontologyIri.getUnicodeString()));
+            listener.onOntologyRemoved(this, ontologyId);
     }
 
     @Override
@@ -446,11 +433,6 @@ public abstract class AbstractOntologyCo
     }
 
     @Override
-    public Collection<OntologyCollectorListener> getListeners() {
-        return listeners;
-    }
-
-    @Override
     public <O> Set<O> getManagedOntologies(Class<O> returnType, boolean withClosure) {
         if (withClosure) log.warn("Closure support not implemented yet. Will merge instead.");
         Set<O> ontologies = new HashSet<O>();
@@ -598,6 +580,11 @@ public abstract class AbstractOntologyCo
     }
 
     @Override
+    public Collection<OntologyCollectorListener> getOntologyCollectorListeners() {
+        return listeners;
+    }
+
+    @Override
     public Set<Class<?>> getSupportedOntologyTypes() {
         return Collections.unmodifiableSet(supportedTypes);
     }
@@ -613,21 +600,28 @@ public abstract class AbstractOntologyCo
     }
 
     @Override
-    public void removeListener(OntologyCollectorListener listener) {
-        listeners.remove(listener);
+    public Set<IRI> listManagedOntologies() {
+        return managedOntologies;
     }
 
     @Override
     public void removeOntology(IRI ontologyId) throws OntologyCollectorModificationException {
         if (locked) throw new UnmodifiableOntologyCollectorException(this);
         try {
-            managedOntologies.remove(ontologyId);
-            fireOntologyRemoved(ontologyId);
+            if (managedOntologies.remove(ontologyId)) { // Don't fire if the ontology wasn't there.
+                OWLOntologyID fullId = new OWLOntologyID(ontologyId); // TODO do something about versionIRI
+                fireOntologyRemoved(fullId);
+            }
         } catch (RuntimeException ex) {
             throw new OntologyCollectorModificationException(this, ex);
         }
     }
 
+    @Override
+    public void removeOntologyCollectorListener(OntologyCollectorListener listener) {
+        listeners.remove(listener);
+    }
+
     protected abstract void setID(String id);
 
     /**

Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOWLUtils.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOWLUtils.java?rev=1352018&r1=1352017&r2=1352018&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOWLUtils.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOWLUtils.java Wed Jun 20 09:42:24 2012
@@ -16,12 +16,21 @@
  */
 package org.apache.stanbol.ontologymanager.ontonet.impl.clerezza;
 
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
 import org.apache.clerezza.rdf.core.MGraph;
 import org.apache.clerezza.rdf.core.UriRef;
 import org.apache.clerezza.rdf.core.access.TcManager;
 import org.apache.clerezza.rdf.core.impl.TripleImpl;
+import org.apache.clerezza.rdf.core.serializedform.Parser;
 import org.apache.clerezza.rdf.ontologies.OWL;
 import org.apache.clerezza.rdf.ontologies.RDF;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLOntologyID;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * A set of utilities for handling OWL2 ontologies in Clerezza.
@@ -31,6 +40,8 @@ import org.apache.clerezza.rdf.ontologie
  */
 public class ClerezzaOWLUtils {
 
+    private static Logger log = LoggerFactory.getLogger(ClerezzaOWLUtils.class);
+
     public static MGraph createOntology(String id, TcManager tcm) {
         UriRef name = new UriRef(id);
         MGraph ont = tcm.createMGraph(name);
@@ -42,4 +53,22 @@ public class ClerezzaOWLUtils {
         return createOntology(id, TcManager.getInstance());
     }
 
+    public static OWLOntologyID guessOntologyID(InputStream content, Parser parser, String format) throws IOException {
+        int limit = 100 * 1024; // 100kB lookahead size
+        BufferedInputStream bIn = new BufferedInputStream(content);
+        bIn.mark(limit); // set an appropriate limit
+        OntologyLookaheadMGraph graph = new OntologyLookaheadMGraph();
+        try {
+            parser.parse(graph, bIn, format);
+        } catch (RuntimeException e) {}
+        if (graph.getOntologyIRI() != null) {
+            // bIn.reset(); // reset set the stream to the start
+            return new OWLOntologyID(IRI.create(graph.getOntologyIRI().getUnicodeString()));
+        } else { // No OntologyID found
+            // do some error handling
+            log.warn("No ontologyID found after {} bytes, ontology has a chance of being anonymous.", limit);
+            return null;
+        }
+    }
+
 }