Author: alexdma
Date: Mon Nov 28 09:48:52 2011
New Revision: 1207044

URL: http://svn.apache.org/viewvc?rev=1207044&view=rev
Log:
- some optimizations in OWL exports of spaces and sessions (no merging if there 
is only one ontology) (STANBOL-332)
- reduced ontonet calls from reasoners web provider (STANBOL-250)

Modified:
    
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologySpaceSource.java
    
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyScope.java
    
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologySpace.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/AbstractOntologySpaceImpl.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/ontology/OntologyScopeImpl.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/session/SessionImpl.java
    
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeOntologyResource.java
    
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java
    
incubator/stanbol/trunk/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/OntonetInputProvider.java

Modified: 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologySpaceSource.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologySpaceSource.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologySpaceSource.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologySpaceSource.java
 Mon Nov 28 09:48:52 2011
@@ -44,7 +44,7 @@ public class OntologySpaceSource extends
                 "Could not add subtrees to unmodifiable ontology space {}. 
Input source will have no additions.",
                 e.getOntologyCollector());
         }
-        bindRootOntology(space.asOWLOntology());
+        bindRootOntology(space.asOWLOntology(false));
     }
 
     protected void appendSubtree(OntologyInputSource subtree) throws 
UnmodifiableOntologyCollectorException {

Modified: 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyScope.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyScope.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyScope.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyScope.java
 Mon Nov 28 09:48:52 2011
@@ -20,7 +20,6 @@ import java.util.Set;
 
 import org.apache.stanbol.ontologymanager.ontonet.api.NamedResource;
 import org.apache.stanbol.ontologymanager.ontonet.api.session.Session;
-import org.semanticweb.owlapi.model.OWLOntology;
 
 /**
  * Represents an ontology network that is used for modelling a given knowledge 
component or domain, e.g.
@@ -44,6 +43,9 @@ public interface OntologyScope extends N
     /**
      * Adds a new ontology space to the list of user session spaces for this 
scope.
      * 
+     * @deprecated as session ontology spaces are obsolete, so is this method. 
Please refer directly to the
+     *             session identified by <code>sessionID</code>.
+     * 
      * @param sessionSpace
      *            the ontology space to be added.
      * @throws UnmodifiableOntologyCollectorException
@@ -51,15 +53,6 @@ public interface OntologyScope extends N
     void addSessionSpace(OntologySpace sessionSpace, String sessionID) throws 
UnmodifiableOntologyCollectorException;
 
     /**
-     * Returns an ontological form of this scope.
-     * 
-     * @deprecated Please use the inherited method {@link 
OWLExportable#asOWLOntology(boolean)}. Calls to the
-     *             current method are equivalent to asOWLOntology(false).
-     * @return an OWL ontology that represents this scope.
-     */
-    OWLOntology asOWLOntology();
-
-    /**
      * Returns the core ontology space for this ontology scope. The core space 
should never be null for any
      * scope.
      * 

Modified: 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologySpace.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologySpace.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologySpace.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologySpace.java
 Mon Nov 28 09:48:52 2011
@@ -16,22 +16,13 @@
  */
 package org.apache.stanbol.ontologymanager.ontonet.api.ontology;
 
-import org.semanticweb.owlapi.model.OWLOntology;
-
 /**
  * An ontology space identifies the set of OWL ontologies that should be 
"active" in a given context, e.g. for
  * a certain user session or a specific reasoning service. Each ontology space 
has an ID and a top ontology
  * that can be used as a shared resource for mutual exclusion and locking 
strategies.
+ * 
+ * @author alexdma
  */
 public interface OntologySpace extends OntologyCollector, OWLExportable, 
Lockable {
 
-    /**
-     * Returns the ontology that serves as a root module for this ontology 
space.
-     * 
-     * @deprecated Please use the inherited method {@link 
OWLExportable#asOWLOntology(boolean)}. Calls to the
-     *             current method are equivalent to asOWLOntology(false).
-     * @return the OWL form of this ontology space.
-     */
-    OWLOntology asOWLOntology();
-
 }

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=1207044&r1=1207043&r2=1207044&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
 Mon Nov 28 09:48:52 2011
@@ -19,12 +19,15 @@ package org.apache.stanbol.ontologymanag
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Set;
 
 import org.apache.clerezza.rdf.core.TripleCollection;
 import org.apache.clerezza.rdf.core.UriRef;
 import org.apache.stanbol.ontologymanager.ontonet.api.io.OntologyInputSource;
 import org.apache.stanbol.ontologymanager.ontonet.api.ontology.Lockable;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OWLExportable;
 import 
org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyCollector;
 import 
org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyCollectorListener;
 import 
org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyCollectorModificationException;
@@ -33,8 +36,18 @@ import org.apache.stanbol.ontologymanage
 import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpace;
 import 
org.apache.stanbol.ontologymanager.ontonet.api.ontology.UnmodifiableOntologyCollectorException;
 import org.apache.stanbol.owl.util.OWLUtils;
+import org.apache.stanbol.owl.util.URIUtils;
+import org.semanticweb.owlapi.apibinding.OWLManager;
+import org.semanticweb.owlapi.model.AddImport;
 import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLDataFactory;
 import org.semanticweb.owlapi.model.OWLOntology;
+import org.semanticweb.owlapi.model.OWLOntologyAlreadyExistsException;
+import org.semanticweb.owlapi.model.OWLOntologyChange;
+import org.semanticweb.owlapi.model.OWLOntologyCreationException;
+import org.semanticweb.owlapi.model.OWLOntologyManager;
+import org.semanticweb.owlapi.model.OWLOntologySetProvider;
+import org.semanticweb.owlapi.util.OWLOntologyMerger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -45,7 +58,7 @@ import org.slf4j.LoggerFactory;
  * 
  */
 public abstract class AbstractOntologyCollectorImpl implements 
OntologyCollector, Lockable,
-        OntologyInputSourceHandler {
+        OntologyInputSourceHandler, OWLExportable {
 
     protected String _id = null;
 
@@ -133,6 +146,82 @@ public abstract class AbstractOntologyCo
     }
 
     @Override
+    public OWLOntology asOWLOntology(boolean merge) {
+
+        long before = System.currentTimeMillis();
+
+        // Create a new ontology
+        OWLOntology root;
+        OWLOntologyManager ontologyManager = 
OWLManager.createOWLOntologyManager();
+        IRI iri = IRI.create(namespace + _id);
+        try {
+            root = ontologyManager.createOntology(iri);
+        } catch (OWLOntologyAlreadyExistsException e) {
+            // It should be impossible, but just in case.
+            ontologyManager.removeOntology(ontologyManager.getOntology(iri));
+            try {
+                root = ontologyManager.createOntology(iri);
+            } catch (OWLOntologyAlreadyExistsException e1) {
+                root = ontologyManager.getOntology(iri);
+            } catch (OWLOntologyCreationException e1) {
+                log.error("Failed to assemble root ontology for scope " + iri, 
e);
+                root = null;
+            }
+        } catch (OWLOntologyCreationException e) {
+            log.error("Failed to assemble root ontology for scope " + _id, e);
+            root = null;
+        }
+
+        // Add the import declarations for directly managed ontologies.
+        if (root != null) {
+
+            if (merge) {
+                final Set<OWLOntology> set = new HashSet<OWLOntology>();
+                log.debug("Merging {} with its imports.", root);
+                set.add(root);
+
+                for (IRI ontologyIri : managedOntologies) {
+                    log.debug("Merging {} with {}.", ontologyIri, root);
+                    set.add(getOntology(ontologyIri, true));
+                }
+
+                OWLOntologySetProvider provider = new OWLOntologySetProvider() 
{
+                    @Override
+                    public Set<OWLOntology> getOntologies() {
+                        return set;
+                    }
+                };
+                OWLOntologyMerger merger = new OWLOntologyMerger(provider);
+                try {
+                    root = 
merger.createMergedOntology(OWLManager.createOWLOntologyManager(), iri);
+                } catch (OWLOntologyCreationException e) {
+                    log.error("Failed to merge imports for ontology " + iri, 
e);
+                    root = null;
+                }
+
+            } else {
+                // Add the import declarations for directly managed ontologies.
+                List<OWLOntologyChange> changes = new 
LinkedList<OWLOntologyChange>();
+                OWLDataFactory df = ontologyManager.getOWLDataFactory();
+
+                String base = URIUtils.upOne(IRI.create(namespace + getID())) 
+ "/";
+
+                // The key set of managedOntologies contains the ontology 
IRIs, not their storage keys.
+                for (IRI ontologyIri : managedOntologies) {
+                    IRI physIRI = IRI.create(base + ontologyIri);
+                    changes.add(new AddImport(root, 
df.getOWLImportsDeclaration(physIRI)));
+                }
+
+                ontologyManager.applyChanges(changes);
+            }
+
+        }
+        log.debug("OWL export of {} completed in {} ms.", getID(), 
System.currentTimeMillis() - before);
+
+        return root;
+    }
+
+    @Override
     public void clearListeners() {
         listeners.clear();
     }
@@ -211,11 +300,6 @@ public abstract class AbstractOntologyCo
     }
 
     @Override
-    public Set<Class<?>> getSupportedOntologyTypes() {
-        return Collections.unmodifiableSet(supportedTypes);
-    }
-
-    @Override
     public int getOntologyCount(boolean withClosure) {
         if (withClosure) throw new UnsupportedOperationException(
                 "Closure support not implemented efficiently yet. Please call 
getOntologyCount(false).");
@@ -223,6 +307,11 @@ public abstract class AbstractOntologyCo
     }
 
     @Override
+    public Set<Class<?>> getSupportedOntologyTypes() {
+        return Collections.unmodifiableSet(supportedTypes);
+    }
+
+    @Override
     public boolean hasOntology(IRI ontologyIri) {
         return managedOntologies.contains(ontologyIri);
     }

Modified: 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologySpaceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologySpaceImpl.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologySpaceImpl.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologySpaceImpl.java
 Mon Nov 28 09:48:52 2011
@@ -17,24 +17,18 @@
 package org.apache.stanbol.ontologymanager.ontonet.impl.clerezza;
 
 import java.util.ArrayList;
-import java.util.LinkedList;
 import java.util.List;
 
-import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OWLExportable;
 import 
org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyProvider;
 import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpace;
 import org.apache.stanbol.ontologymanager.ontonet.api.ontology.SpaceType;
 import org.apache.stanbol.owl.util.URIUtils;
-import org.semanticweb.owlapi.apibinding.OWLManager;
 import org.semanticweb.owlapi.model.AddImport;
 import org.semanticweb.owlapi.model.IRI;
 import org.semanticweb.owlapi.model.OWLDataFactory;
 import org.semanticweb.owlapi.model.OWLImportsDeclaration;
 import org.semanticweb.owlapi.model.OWLOntology;
-import org.semanticweb.owlapi.model.OWLOntologyAlreadyExistsException;
 import org.semanticweb.owlapi.model.OWLOntologyChange;
-import org.semanticweb.owlapi.model.OWLOntologyCreationException;
-import org.semanticweb.owlapi.model.OWLOntologyManager;
 import org.semanticweb.owlapi.model.RemoveImport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -61,65 +55,6 @@ public abstract class AbstractOntologySp
     }
 
     @Override
-    public OWLOntology asOWLOntology() {
-        return this.asOWLOntology(false);
-    }
-
-    /**
-     * FIXME not merging yet
-     * 
-     * @see OWLExportable#asOWLOntology(boolean)
-     */
-    @Override
-    public OWLOntology asOWLOntology(boolean merge) {
-        if (merge) throw new UnsupportedOperationException(
-                "Ontology merging only implemented for managed ontologies, not 
for collectors. "
-                        + "Please set merge parameter to false.");
-
-        long before = System.currentTimeMillis();
-
-        OWLOntology root;
-        OWLOntologyManager ontologyManager = 
OWLManager.createOWLOntologyManager();
-        IRI iri = IRI.create(namespace + _id);
-        try {
-            root = ontologyManager.createOntology(iri);
-        } catch (OWLOntologyAlreadyExistsException e) {
-            ontologyManager.removeOntology(ontologyManager.getOntology(iri));
-            try {
-                root = ontologyManager.createOntology(iri);
-            } catch (OWLOntologyAlreadyExistsException e1) {
-                root = ontologyManager.getOntology(iri);
-            } catch (OWLOntologyCreationException e1) {
-                log.error("Failed to assemble root ontology for scope " + iri, 
e);
-                root = null;
-            }
-        } catch (OWLOntologyCreationException e) {
-            log.error("Failed to assemble root ontology for scope " + _id, e);
-            root = null;
-        }
-
-        // Add the import declarations for directly managed ontologies.
-        if (root != null) {
-            List<OWLOntologyChange> changes = new 
LinkedList<OWLOntologyChange>();
-            OWLDataFactory df = ontologyManager.getOWLDataFactory();
-
-            String base = URIUtils.upOne(IRI.create(namespace + getID())) + 
"/";
-
-            // The key set of managedOntologies contains the ontology IRIs, 
not their storage keys.
-            for (IRI ontologyIri : managedOntologies) {
-                IRI physIRI = IRI.create(base + ontologyIri);
-                changes.add(new AddImport(root, 
df.getOWLImportsDeclaration(physIRI)));
-            }
-
-            ontologyManager.applyChanges(changes);
-        }
-
-        log.debug("OWL export of space {} completed in {} ms.", getID(), 
System.currentTimeMillis() - before);
-
-        return root;
-    }
-
-    @Override
     public OWLOntology getOntology(IRI ontologyIri, boolean merge) {
         // Remove the check below. It might be an unmanaged dependency (TODO 
remove from collector and
         // reintroduce check?).
@@ -133,19 +68,21 @@ public abstract class AbstractOntologySp
          * TODO manage import rewrites better once the container ID is fully 
configurable (i.e. instead of
          * going upOne() add "session" or "ontology" if needed).
          */
-        for (OWLImportsDeclaration oldImp : o.getImportsDeclarations()) {
-            changes.add(new RemoveImport(o, oldImp));
-            String s = oldImp.getIRI().toString();
-            s = s.substring(s.indexOf("::") + 2, s.length());
-            boolean managed = managedOntologies.contains(oldImp.getIRI());
-            // For space, always go up at least one
-            IRI ns = getNamespace();
-            IRI target = IRI.create((managed ? ns + "/" + 
getID().split("/")[0] + "/" : URIUtils.upOne(ns)
-                                                                               
         + "/")
-                                    + s);
-            changes.add(new AddImport(o, df.getOWLImportsDeclaration(target)));
+        if (!merge) {
+            for (OWLImportsDeclaration oldImp : o.getImportsDeclarations()) {
+                changes.add(new RemoveImport(o, oldImp));
+                String s = oldImp.getIRI().toString();
+                s = s.substring(s.indexOf("::") + 2, s.length());
+                boolean managed = managedOntologies.contains(oldImp.getIRI());
+                // For space, always go up at least one
+                IRI ns = getNamespace();
+                IRI target = IRI.create((managed ? ns + "/" + 
getID().split("/")[0] + "/" : URIUtils
+                        .upOne(ns) + "/")
+                                        + s);
+                changes.add(new AddImport(o, 
df.getOWLImportsDeclaration(target)));
+            }
+            o.getOWLOntologyManager().applyChanges(changes);
         }
-        o.getOWLOntologyManager().applyChanges(changes);
         return o;
     }
 

Modified: 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOntologyProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOntologyProvider.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOntologyProvider.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOntologyProvider.java
 Mon Nov 28 09:48:52 2011
@@ -505,6 +505,7 @@ public class ClerezzaOntologyProvider im
 
         UriRef ontologyId = null;
 
+        // Get the id of this ontology.
         Iterator<Triple> itt = graph.filter(null, RDF.type, OWL.Ontology);
         if (itt.hasNext()) {
             NonLiteral nl = itt.next().getSubject();
@@ -529,29 +530,15 @@ public class ClerezzaOntologyProvider im
             o.getOWLOntologyManager().applyChanges(changes);
             return o;
         } else {
-            // final Set<OWLOntology> mergeUs = new HashSet<OWLOntology>();
-            //
-            // for (UriRef ref : revImps) {
-            // if (!loaded.contains(ref)) {
-            // TripleCollection tc = store.getTriples(ref);
-            // 
mergeUs.add(OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(tc, mgr));
-            // loaded.add(ref);
-            // }
-            // }
-            // mergeUs.add(o);
-            // OWLOntologyMerger merger = new OWLOntologyMerger(new 
OWLOntologySetProvider() {
-            //
-            // @Override
-            // public Set<OWLOntology> getOntologies() {
-            // return mergeUs;
-            // }
-            //
-            // }, false);
-            // OWLOntology merged = 
merger.createMergedOntology(OWLManager.createOWLOntologyManager(),
-            // OWLUtils.guessOntologyIdentifier(o));
-
             // More efficient / brutal implementation.
 
+            // If there is just the root ontology, convert it straight away.
+            if (revImps.size() == 1 && revImps.contains(graphName)) {
+                OWLOntology o = 
OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(graph, mgr);
+                return o;
+            }
+
+            // FIXME when there's more than one ontology, this way of merging 
them seems inefficient...
             TripleCollection tempGraph = new SimpleMGraph();
             // The set of triples that will be excluded from the merge
             Set<Triple> exclusions = new HashSet<Triple>();
@@ -590,5 +577,4 @@ public class ClerezzaOntologyProvider im
             return 
OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(tempGraph, mgr);
         }
     }
-
 }

Modified: 
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=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyScopeImpl.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyScopeImpl.java
 Mon Nov 28 09:48:52 2011
@@ -43,6 +43,8 @@ import org.semanticweb.owlapi.model.OWLO
 import org.semanticweb.owlapi.model.OWLOntologyChange;
 import org.semanticweb.owlapi.model.OWLOntologyCreationException;
 import org.semanticweb.owlapi.model.OWLOntologyManager;
+import org.semanticweb.owlapi.model.OWLOntologySetProvider;
+import org.semanticweb.owlapi.util.OWLOntologyMerger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -132,11 +134,6 @@ public class OntologyScopeImpl implement
         }
     }
 
-    @Override
-    public OWLOntology asOWLOntology() {
-        return this.asOWLOntology(false);
-    }
-
     /**
      * FIXME not merging yet
      * 
@@ -144,30 +141,56 @@ public class OntologyScopeImpl implement
      */
     @Override
     public OWLOntology asOWLOntology(boolean merge) {
-        if (merge) throw new UnsupportedOperationException(
-                "Ontology merging only implemented for managed ontologies, not 
for collectors. "
-                        + "Please set merge parameter to false.");
+        // if (merge) throw new UnsupportedOperationException(
+        // "Ontology merging only implemented for managed ontologies, not for 
collectors. "
+        // + "Please set merge parameter to false.");
         // Create an ontology manager on the fly. We don't really need a 
permanent one.
         OWLOntologyManager mgr = OWLManager.createOWLOntologyManager();
         OWLDataFactory df = mgr.getOWLDataFactory();
-        OWLOntology ont;
+        OWLOntology ont = null;
         try {
-            // The root ontology ID is in the form [namespace][scopeId]
-            ont = mgr.createOntology(IRI.create(getNamespace() + getID()));
-            List<OWLOntologyChange> additions = new 
LinkedList<OWLOntologyChange>();
-            // Add the import statement for the custom space, if existing and 
not empty
-            OntologySpace spc = getCustomSpace();
-            if (spc != null && spc.getOntologyCount(false) > 0) {
-                IRI spaceIri = IRI.create(getNamespace() + spc.getID());
-                additions.add(new AddImport(ont, 
df.getOWLImportsDeclaration(spaceIri)));
-            }
-            // Add the import statement for the core space, if existing and 
not empty
-            spc = getCoreSpace();
-            if (spc != null && spc.getOntologyCount(false) > 0) {
-                IRI spaceIri = IRI.create(getNamespace() + spc.getID());
-                additions.add(new AddImport(ont, 
df.getOWLImportsDeclaration(spaceIri)));
+
+            if (merge) {
+                final Set<OWLOntology> set = new HashSet<OWLOntology>();
+
+                log.debug("Merging custom space of {}.", getID());
+                set.add(this.getCustomSpace().asOWLOntology(merge));
+
+                log.debug("Merging core space of {}.", getID());
+                set.add(this.getCoreSpace().asOWLOntology(merge));
+
+                OWLOntologySetProvider provider = new OWLOntologySetProvider() 
{
+                    @Override
+                    public Set<OWLOntology> getOntologies() {
+                        return set;
+                    }
+                };
+                OWLOntologyMerger merger = new OWLOntologyMerger(provider);
+                try {
+                    ont = 
merger.createMergedOntology(OWLManager.createOWLOntologyManager(),
+                        IRI.create(getNamespace() + getID()));
+                } catch (OWLOntologyCreationException e) {
+                    log.error("Failed to merge imports for ontology.", e);
+                    ont = null;
+                }
+            } else {
+                // The root ontology ID is in the form [namespace][scopeId]
+                ont = mgr.createOntology(IRI.create(getNamespace() + getID()));
+                List<OWLOntologyChange> additions = new 
LinkedList<OWLOntologyChange>();
+                // Add the import statement for the custom space, if existing 
and not empty
+                OntologySpace spc = getCustomSpace();
+                if (spc != null && spc.getOntologyCount(false) > 0) {
+                    IRI spaceIri = IRI.create(getNamespace() + spc.getID());
+                    additions.add(new AddImport(ont, 
df.getOWLImportsDeclaration(spaceIri)));
+                }
+                // Add the import statement for the core space, if existing 
and not empty
+                spc = getCoreSpace();
+                if (spc != null && spc.getOntologyCount(false) > 0) {
+                    IRI spaceIri = IRI.create(getNamespace() + spc.getID());
+                    additions.add(new AddImport(ont, 
df.getOWLImportsDeclaration(spaceIri)));
+                }
+                mgr.applyChanges(additions);
             }
-            mgr.applyChanges(additions);
         } catch (OWLOntologyCreationException e) {
             log.error("Failed to generate an OWL form of scope " + getID(), e);
             ont = null;

Modified: 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/AbstractOntologySpaceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/AbstractOntologySpaceImpl.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/AbstractOntologySpaceImpl.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/AbstractOntologySpaceImpl.java
 Mon Nov 28 09:48:52 2011
@@ -26,7 +26,6 @@ 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.OWLExportable;
 import 
org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyCollectorListener;
 import 
org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyCollectorModificationException;
 import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpace;
@@ -150,16 +149,6 @@ public abstract class AbstractOntologySp
     }
 
     @Override
-    public OWLOntology asOWLOntology() {
-        return this.asOWLOntology(false);
-    }
-
-    /**
-     * FIXME not merging yet
-     * 
-     * @see OWLExportable#asOWLOntology(boolean)
-     */
-    @Override
     public OWLOntology asOWLOntology(boolean merge) {
         if (merge) throw new UnsupportedOperationException(
                 "Ontology merging not implemented yet. Please set merge 
parameter to false.");

Modified: 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionImpl.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionImpl.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionImpl.java
 Mon Nov 28 09:48:52 2011
@@ -45,7 +45,9 @@ import org.semanticweb.owlapi.model.OWLO
 import org.semanticweb.owlapi.model.OWLOntologyChange;
 import org.semanticweb.owlapi.model.OWLOntologyCreationException;
 import org.semanticweb.owlapi.model.OWLOntologyManager;
+import org.semanticweb.owlapi.model.OWLOntologySetProvider;
 import org.semanticweb.owlapi.model.RemoveImport;
+import org.semanticweb.owlapi.util.OWLOntologyMerger;
 import org.slf4j.LoggerFactory;
 
 /**
@@ -85,16 +87,30 @@ public class SessionImpl extends Abstrac
         listeners.add(listener);
     }
 
+    @Override
+    public OWLOntology asOWLOntology(boolean merge) {
+        OWLOntology o = super.asOWLOntology(merge);
+        if (o != null && !merge) {
+            OWLOntologyManager ontologyManager = o.getOWLOntologyManager();
+            OWLDataFactory df = ontologyManager.getOWLDataFactory();
+            List<OWLOntologyChange> changes = new 
LinkedList<OWLOntologyChange>();
+            // Add import declarations for attached scopes.
+            for (String scopeID : getAttachedScopes()) {
+                IRI physIRI = IRI.create(namespace + scopeID);
+                changes.add(new AddImport(o, 
df.getOWLImportsDeclaration(physIRI)));
+            }
+            ontologyManager.applyChanges(changes);
+        }
+        return o;
+    }
+
     /**
      * FIXME not merging yet FIXME not including imported ontologies unless 
they are merged *before* storage.
      * 
      * @see OWLExportable#asOWLOntology(boolean)
      */
-    @Override
-    public OWLOntology asOWLOntology(boolean merge) {
-        if (merge) throw new UnsupportedOperationException(
-            "Ontology merging only implemented for managed ontologies, not for 
collectors. "
-                    + "Please set merge parameter to false.");
+    // @Override
+    public OWLOntology asOWLOntology2(boolean merge) {
 
         long before = System.currentTimeMillis();
 
@@ -120,29 +136,54 @@ public class SessionImpl extends Abstrac
             root = null;
         }
 
+        // Add the import declarations for directly managed ontologies.
         if (root != null) {
 
-            // Add the import declarations for directly managed ontologies.
-            List<OWLOntologyChange> changes = new 
LinkedList<OWLOntologyChange>();
-            OWLDataFactory df = ontologyManager.getOWLDataFactory();
-            String base = IRI.create(namespace + getID()) + "/";
-            // The key set of managedOntologies contains the ontology IRIs, 
not their storage keys.
-            for (IRI ontologyIri : managedOntologies) {
-                IRI physIRI = IRI.create(base + ontologyIri);
-                changes.add(new AddImport(root, 
df.getOWLImportsDeclaration(physIRI)));
-            }
+            if (merge) {
+                final Set<OWLOntology> set = new HashSet<OWLOntology>();
+                log.debug("Merging {} with its imports.", root);
+                set.add(root);
+
+                for (IRI ontologyIri : managedOntologies) {
+                    log.debug("Merging {} with {}.", ontologyIri, root);
+                    set.add(getOntology(ontologyIri, true));
+                }
+
+                OWLOntologySetProvider provider = new OWLOntologySetProvider() 
{
+                    @Override
+                    public Set<OWLOntology> getOntologies() {
+                        return set;
+                    }
+                };
+                OWLOntologyMerger merger = new OWLOntologyMerger(provider);
+                try {
+                    root = 
merger.createMergedOntology(OWLManager.createOWLOntologyManager(), iri);
+                } catch (OWLOntologyCreationException e) {
+                    log.error("Failed to merge imports for ontology " + iri, 
e);
+                    root = null;
+                }
+
+            } else {
+                // Add the import declarations for directly managed ontologies.
+                List<OWLOntologyChange> changes = new 
LinkedList<OWLOntologyChange>();
+                OWLDataFactory df = ontologyManager.getOWLDataFactory();
+                String base = IRI.create(namespace + getID()) + "/";
+                // The key set of managedOntologies contains the ontology 
IRIs, not their storage keys.
+                for (IRI ontologyIri : managedOntologies) {
+                    IRI physIRI = IRI.create(base + ontologyIri);
+                    changes.add(new AddImport(root, 
df.getOWLImportsDeclaration(physIRI)));
+                }
+
+                // Add import declarations for attached scopes.
+                for (String scopeID : getAttachedScopes()) {
+                    IRI physIRI = IRI.create(namespace + scopeID);
+                    changes.add(new AddImport(root, 
df.getOWLImportsDeclaration(physIRI)));
+                }
 
-            // Add import declarations for attached scopes.
-            for (String scopeID : getAttachedScopes()) {
-                IRI physIRI = IRI.create(namespace + scopeID);
-                changes.add(new AddImport(root, 
df.getOWLImportsDeclaration(physIRI)));
+                // Commit
+                ontologyManager.applyChanges(changes);
             }
-
-            // Commit
-            ontologyManager.applyChanges(changes);
-
         }
-
         log.debug("OWL export of session {} completed in {} ms.", getID(), 
System.currentTimeMillis()
                                                                            - 
before);
 
@@ -197,11 +238,14 @@ public class SessionImpl extends Abstrac
 
     @Override
     public OWLOntology getOntology(IRI ontologyIri, boolean merge) {
+
+        long before = System.currentTimeMillis();
+
         // Remove the check below. It might be an unmanaged dependency (TODO 
remove from collector and
         // reintroduce check?).
         // if (!hasOntology(ontologyIri)) return null;
         OWLOntology o;
-        o = (OWLOntology) ontologyProvider.getStoredOntology(ontologyIri, 
OWLOntology.class, merge);
+        o = (OWLOntology) ontologyProvider.getStoredOntology(ontologyIri, 
OWLOntology.class, true);
         // Rewrite import statements
         List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>();
         OWLDataFactory df = o.getOWLOntologyManager().getOWLDataFactory();
@@ -220,6 +264,9 @@ public class SessionImpl extends Abstrac
             changes.add(new AddImport(o, df.getOWLImportsDeclaration(target)));
         }
         o.getOWLOntologyManager().applyChanges(changes);
+
+        log.debug("OWL export of session " + getID() + " ontology {} completed 
in {} ms.", ontologyIri,
+            System.currentTimeMillis() - before);
         return o;
     }
 

Modified: 
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeOntologyResource.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeOntologyResource.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeOntologyResource.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeOntologyResource.java
 Mon Nov 28 09:48:52 2011
@@ -185,9 +185,9 @@ public class ScopeOntologyResource exten
             // First of all, it could be a simple request for the space root!
             String temp = scopeid + "/" + ontologyid;
             if (temp.equals(scope.getCoreSpace().getID())) {
-                return 
Response.ok(scope.getCoreSpace().asOWLOntology()).build();
+                return 
Response.ok(scope.getCoreSpace().asOWLOntology(false)).build();
             } else if (temp.equals(scope.getCustomSpace().getID())) {
-                return 
Response.ok(scope.getCustomSpace().asOWLOntology()).build();
+                return 
Response.ok(scope.getCustomSpace().asOWLOntology(false)).build();
                 // } else if (scope.getSessionSpace(IRI.create(temp)) != null) 
{
                 // return 
Response.ok(scope.getSessionSpace(IRI.create(temp)).asOWLOntology()).build();
             }

Modified: 
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java
 Mon Nov 28 09:48:52 2011
@@ -129,7 +129,7 @@ public class ScopeResource extends BaseS
                                    @Context HttpHeaders headers,
                                    @Context ServletContext servletContext) {
         if (scope == null) return Response.status(NOT_FOUND).build();
-        else return Response.ok(scope.asOWLOntology()).build();
+        else return Response.ok(scope.asOWLOntology(false)).build();
     }
 
     /**

Modified: 
incubator/stanbol/trunk/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/OntonetInputProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/OntonetInputProvider.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/OntonetInputProvider.java
 (original)
+++ 
incubator/stanbol/trunk/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/OntonetInputProvider.java
 Mon Nov 28 09:48:52 2011
@@ -161,22 +161,24 @@ public class OntonetInputProvider implem
                 log.warn("Session {} cannot be retrieved. Ignoring.", 
this.sessionId);
             }
             final Set<OWLOntology> set = new HashSet<OWLOntology>();
-            set.add(scope.asOWLOntology(false));
-            for (OWLOntology o : scope.getCustomSpace().getOntologies(true)) {
-                set.add(o);
-                // set.addAll(o.getImportsClosure());
-            }
-            for (OWLOntology o : scope.getCoreSpace().getOntologies(true)) {
-                set.add(o);
-                // set.addAll(o.getImportsClosure());
-            }
+            set.add(scope.asOWLOntology(true));
+
+            // for (OWLOntology o : 
scope.getCustomSpace().getOntologies(true)) {
+            // set.add(o);
+            // // set.addAll(o.getImportsClosure());
+            // }
+            // for (OWLOntology o : scope.getCoreSpace().getOntologies(true)) {
+            // set.add(o);
+            // // set.addAll(o.getImportsClosure());
+            // }
             if (session != null) {
-                set.add(session.asOWLOntology(false));
-                for (OWLOntology o : session.getOntologies(true)) {
-                    set.add(o);
-                    // set.addAll(o.getImportsClosure());
-                }
+                set.add(session.asOWLOntology(true));
+                // for (OWLOntology o : session.getOntologies(true)) {
+                // set.add(o);
+                // // set.addAll(o.getImportsClosure());
+                // }
             }
+            if (set.size() == 1) return set.iterator().next();
             OWLOntologyMerger merger = new OWLOntologyMerger(new 
OWLOntologySetProvider() {
                 @Override
                 public Set<OWLOntology> getOntologies() {


Reply via email to