Author: alexdma
Date: Sat Nov 26 23:41:30 2011
New Revision: 1206635

URL: http://svn.apache.org/viewvc?rev=1206635&view=rev
Log:
- OntologyProvider now uses generics instead of Object (STANBOL-332)
- getOntologies(true) implementation in AbstractOntologyCollectorImpl is now 
possible, although instead of providing the closure it merges the closure of 
each managed ontology with the ontology itself (TODO preserve separate 
ontologies). (STANBOL-332)
- Implemented simpler version of getFromOntonet() method in reasoners.web 
(calls getOntologies(true) among other things) (STANBOL-250)

Modified:
    
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/impl/clerezza/AbstractOntologyCollectorImpl.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/owlapi/OWLAPIOntologyProvider.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/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=1206635&r1=1206634&r2=1206635&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
 Sat Nov 26 23:41:30 2011
@@ -75,9 +75,9 @@ public interface OntologyProvider<S> {
      * @param returnType
      * @return
      */
-    Object getStoredOntology(IRI reference, Class<?> returnType);
+    <O> O getStoredOntology(IRI reference, Class<O> returnType);
 
-    Object getStoredOntology(IRI reference, Class<?> returnType, boolean 
merge);
+    <O> O getStoredOntology(IRI reference, Class<O> returnType, boolean merge);
 
     /**
      * 
@@ -92,9 +92,9 @@ public interface OntologyProvider<S> {
      *            {@link UnsupportedOperationException} should be thrown.
      * @return
      */
-    Object getStoredOntology(String key, Class<?> returnType);
+    <O> O getStoredOntology(String key, Class<O> returnType);
 
-    Object getStoredOntology(String key, Class<?> returnType, boolean merge);
+    <O> O getStoredOntology(String key, Class<O> returnType, boolean merge);
 
     /**
      * Returns an array containing the most specific types for ontology 
objects that this provider can manage
@@ -102,7 +102,7 @@ public interface OntologyProvider<S> {
      * 
      * @return the supported ontology return types.
      */
-    Class<?>[] getSupportedReturnTypes();
+    <O> Class<O>[] getSupportedReturnTypes();
 
     /**
      * Retrieves an ontology by reading its content from a data stream and 
stores it using the storage system

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=1206635&r1=1206634&r2=1206635&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
 Sat Nov 26 23:41:30 2011
@@ -195,11 +195,13 @@ public abstract class AbstractOntologyCo
      */
     @Override
     public Set<OWLOntology> getOntologies(boolean withClosure) {
-        if (withClosure) throw new UnsupportedOperationException(
-                "Closure support not implemented efficiently yet. Please call 
getOntologies(false) and compute the closure union for the OWLOntology objects 
in the set.");
+        // if (withClosure) throw new UnsupportedOperationException(
+        // "Closure support not implemented efficiently yet. Please call 
getOntologies(false) and compute the closure union for the OWLOntology objects 
in the set.");
         Set<OWLOntology> ontologies = new HashSet<OWLOntology>();
-        for (IRI id : managedOntologies)
-            ontologies.add(getOntology(id));
+        for (IRI id : managedOntologies) {
+            // FIXME temporary fix is to merge instead of including closure
+            ontologies.add(getOntology(id, withClosure));
+        }
         return Collections.unmodifiableSet(ontologies);
     }
 

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=1206635&r1=1206634&r2=1206635&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
 Sat Nov 26 23:41:30 2011
@@ -33,6 +33,7 @@ import java.util.Set;
 import java.util.Stack;
 
 import org.apache.clerezza.rdf.core.MGraph;
+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;
@@ -40,6 +41,7 @@ import org.apache.clerezza.rdf.core.UriR
 import org.apache.clerezza.rdf.core.access.EntityAlreadyExistsException;
 import org.apache.clerezza.rdf.core.access.TcManager;
 import org.apache.clerezza.rdf.core.access.TcProvider;
+import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
 import org.apache.clerezza.rdf.core.serializedform.Parser;
 import org.apache.clerezza.rdf.core.serializedform.UnsupportedFormatException;
 import org.apache.clerezza.rdf.ontologies.OWL;
@@ -72,8 +74,6 @@ import org.semanticweb.owlapi.model.OWLO
 import org.semanticweb.owlapi.model.OWLOntologyCreationException;
 import org.semanticweb.owlapi.model.OWLOntologyIRIMapper;
 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;
 
@@ -260,17 +260,17 @@ public class ClerezzaOntologyProvider im
     }
 
     @Override
-    public Object getStoredOntology(IRI reference, Class<?> returnType) {
+    public <O> O getStoredOntology(IRI reference, Class<O> returnType) {
         return getStoredOntology(getKey(reference), returnType);
     }
 
     @Override
-    public Object getStoredOntology(IRI reference, Class<?> returnType, 
boolean merge) {
+    public <O> O getStoredOntology(IRI reference, Class<O> returnType, boolean 
merge) {
         return getStoredOntology(getKey(reference), returnType, merge);
     }
 
     @Override
-    public Object getStoredOntology(String key, Class<?> returnType) {
+    public <O> O getStoredOntology(String key, Class<O> returnType) {
         // TODO default to false? Or by set policy?
         return getStoredOntology(key, returnType, false);
     }
@@ -278,11 +278,12 @@ public class ClerezzaOntologyProvider im
     /**
      * In this implementation the identifier is the Graph Name (e.g. 
ontonet::blabla)
      */
+    @SuppressWarnings("unchecked")
     @Override
-    public Object getStoredOntology(String identifier, Class<?> returnType, 
boolean merge) {
+    public <O> O getStoredOntology(String identifier, Class<O> returnType, 
boolean merge) {
         if (identifier == null) throw new IllegalArgumentException("Identifier 
cannot be null");
         if (returnType == null) {
-            returnType = OWLOntology.class;
+            returnType = (Class<O>) OWLOntology.class;
             log.warn("No return type given for ontologies. Will return a {}", 
returnType);
         }
         boolean canDo = false;
@@ -302,7 +303,7 @@ public class ClerezzaOntologyProvider im
             return returnType.cast(tc);
         } else if (OWLOntology.class.isAssignableFrom(returnType)) {
             try {
-                return toOWLOntology(new UriRef(identifier), merge);
+                return (O) toOWLOntology(new UriRef(identifier), merge);
             } catch (OWLOntologyCreationException e) {
                 log.error("Failed to return stored ontology " + identifier + " 
as type " + returnType, e);
             }
@@ -311,6 +312,7 @@ public class ClerezzaOntologyProvider im
         return null;
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public Class<?>[] getSupportedReturnTypes() {
         return supported;
@@ -500,14 +502,21 @@ public class ClerezzaOntologyProvider im
         Set<UriRef> loaded = new HashSet<UriRef>();
 
         TripleCollection graph = store.getTriples(graphName);
-        OWLOntology o = 
OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(graph, mgr);
 
+        UriRef ontologyId = null;
+
+        Iterator<Triple> itt = graph.filter(null, RDF.type, OWL.Ontology);
+        if (itt.hasNext()) {
+            NonLiteral nl = itt.next().getSubject();
+            if (nl instanceof UriRef) ontologyId = (UriRef) nl;
+        }
         List<UriRef> revImps = new Stack<UriRef>();
 
         fillImportsReverse(graphName, revImps);
 
         if (!merge) {
-            // FIXME rewrite import statements so that only the scope name 
needs to be added!
+            OWLOntology o = 
OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(graph, mgr);
+            // TODO make it not flat.
             // Examining the reverse imports stack will flatten all imports.
             List<OWLOntologyChange> changes = new 
ArrayList<OWLOntologyChange>();
             OWLDataFactory df = OWLManager.getOWLDataFactory();
@@ -520,39 +529,65 @@ 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 concise / efficient / brutal implementation, but messes 
up ontology name.
-           
-            // TripleCollection tempGraph = new SimpleMGraph();
-            // for (UriRef ref : revImps)
+            // final Set<OWLOntology> mergeUs = new HashSet<OWLOntology>();
+            //
+            // for (UriRef ref : revImps) {
             // if (!loaded.contains(ref)) {
-            // tempGraph.addAll(store.getTriples(ref));
+            // TripleCollection tc = store.getTriples(ref);
+            // 
mergeUs.add(OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(tc, mgr));
             // loaded.add(ref);
             // }
-            // OWLOntology merged = 
OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(tempGraph, mgr);
+            // }
+            // 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.
+
+            TripleCollection tempGraph = new SimpleMGraph();
+            // The set of triples that will be excluded from the merge
+            Set<Triple> exclusions = new HashSet<Triple>();
+            // Examine all reverse imports
+            for (UriRef ref : revImps)
+                if (!loaded.contains(ref)) {
+                    // Get the triples
+                    TripleCollection imported = store.getTriples(ref);
+                    // For each owl:Ontology
+                    Iterator<Triple> remove = imported.filter(null, RDF.type, 
OWL.Ontology);
+                    while (remove.hasNext()) {
+                        NonLiteral subj = remove.next().getSubject();
+                        /*
+                         * If it's not the root ontology, trash all its 
triples. If the root ontology is
+                         * anonymous, all ontology annotations are to be 
trashed without distinction.
+                         */
+                        if (ontologyId == null || !subj.equals(ontologyId)) {
+                            Iterator<Triple> it = imported.filter(subj, null, 
null);
+                            while (it.hasNext()) {
+                                Triple t = it.next();
+                                exclusions.add(t);
+                            }
+                        }
+                    }
 
-            return merged;
+                    Iterator<Triple> it = imported.iterator();
+                    while (it.hasNext()) {
+                        Triple t = it.next();
+                        if (!exclusions.contains(t)) tempGraph.add(t);
+                    }
 
+                    loaded.add(ref);
+                }
+            // Since they are all merged and import statements removed, there 
should be no risk of going
+            // online.
+            return 
OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(tempGraph, mgr);
         }
     }
 

Modified: 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/OWLAPIOntologyProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/OWLAPIOntologyProvider.java?rev=1206635&r1=1206634&r2=1206635&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/OWLAPIOntologyProvider.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/OWLAPIOntologyProvider.java
 Sat Nov 26 23:41:30 2011
@@ -79,9 +79,21 @@ public class OWLAPIOntologyProvider impl
     }
 
     @Override
-    public Object getStoredOntology(String identifier, Class<?> returnType) {
+    public <O> O getStoredOntology(IRI reference, Class<O> returnType) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public <O> O getStoredOntology(IRI reference, Class<O> returnType, boolean 
merge) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public <O> O getStoredOntology(String identifier, Class<O> returnType) {
         if (returnType == null) {
-            returnType = OWLOntology.class;
+            returnType = (Class<O>) OWLOntology.class;
             log.warn("No return type given for ontologies. Will return a {}", 
returnType);
         }
         boolean canDo = false;
@@ -98,6 +110,12 @@ public class OWLAPIOntologyProvider impl
     }
 
     @Override
+    public <O> O getStoredOntology(String key, Class<O> returnType, boolean 
merge) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
     public Class<?>[] getSupportedReturnTypes() {
         return new Class<?>[] {OWLOntology.class};
     }
@@ -132,22 +150,4 @@ public class OWLAPIOntologyProvider impl
         throw new UnsupportedOperationException("Not implemented for OWL API 
version.");
     }
 
-    @Override
-    public Object getStoredOntology(IRI reference, Class<?> returnType) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Object getStoredOntology(IRI reference, Class<?> returnType, 
boolean merge) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Object getStoredOntology(String key, Class<?> returnType, boolean 
merge) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
 }

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=1206635&r1=1206634&r2=1206635&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
 Sat Nov 26 23:41:30 2011
@@ -24,6 +24,7 @@ import java.util.Set;
 import org.apache.stanbol.ontologymanager.ontonet.api.ONManager;
 import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyScope;
 import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.session.Session;
 import org.apache.stanbol.owl.transformation.JenaToOwlConvert;
 import org.apache.stanbol.reasoners.servicesapi.ReasoningServiceInputProvider;
 import org.semanticweb.owlapi.apibinding.OWLManager;
@@ -48,7 +49,7 @@ import com.hp.hpl.jena.rdf.model.StmtIte
  * An input provider which binds the reasoners input to Ontonet
  * 
  * @author enridaga
- *
+ * 
  */
 public class OntonetInputProvider implements ReasoningServiceInputProvider {
 
@@ -147,6 +148,55 @@ public class OntonetInputProvider implem
             OntologyScope scope = null;
             synchronized (onManager) {
                 scope = onManager.getScopeRegistry().getScope(this.scopeId);
+            }
+            if (scope == null) {
+                log.error("Scope {} cannot be retrieved", this.scopeId);
+                throw new IOException("Scope " + this.scopeId + " cannot be 
retrieved");
+            }
+            Session session = null;
+            synchronized (onManager) {
+                session = onManager.getSessionManager().getSession(sessionId);
+            }
+            if (session == null) {
+                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());
+            }
+            if (session != null) {
+                set.add(session.asOWLOntology(false));
+                for (OWLOntology o : session.getOntologies(true)) {
+                    set.add(o);
+                    // set.addAll(o.getImportsClosure());
+                }
+            }
+            OWLOntologyMerger merger = new OWLOntologyMerger(new 
OWLOntologySetProvider() {
+                @Override
+                public Set<OWLOntology> getOntologies() {
+                    return set;
+                }
+            });
+            return merger.createMergedOntology(createOWLOntologyManager(),
+                IRI.create("reasoners:input-" + System.currentTimeMillis()));
+        } catch (OWLOntologyCreationException e) {
+            String message = "The network for scope/session cannot be 
retrieved";
+            log.error(message + ":", e);
+            throw new IllegalArgumentException(message);
+        }
+    }
+
+    private OWLOntology getFromOntonetOld() throws IOException {
+        try {
+            OntologyScope scope = null;
+            synchronized (onManager) {
+                scope = onManager.getScopeRegistry().getScope(this.scopeId);
 
             }
             if (scope == null) {


Reply via email to