Author: alexdma
Date: Fri Sep 30 18:49:40 2011
New Revision: 1177771

URL: http://svn.apache.org/viewvc?rev=1177771&view=rev
Log:
Ontology IDs ending with # or ? are now trimmed by indices, although the 
original ID is preserved within the ontology itself. This was causing trouble 
depending on how applications are handling URIs ending with these characters. 

See e.g. the logical ID of http://www.w3.org/ns/org 

(STANBOL-196 STANBOL-305)

TODO see if any query or fragment should be stripped altogether.

Modified:
    
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/AbstractOntologySpaceImpl.java
    
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CoreOntologySpaceImpl.java
    
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CustomOntologySpaceImpl.java
    
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/SessionOntologySpaceImpl.java
    
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ONMScopeOntologyResource.java
    
incubator/stanbol/trunk/owl/src/main/java/org/apache/stanbol/owl/util/OWLUtils.java

Modified: 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/AbstractOntologySpaceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/AbstractOntologySpaceImpl.java?rev=1177771&r1=1177770&r2=1177771&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/AbstractOntologySpaceImpl.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/AbstractOntologySpaceImpl.java
 Fri Sep 30 18:49:40 2011
@@ -18,10 +18,12 @@ package org.apache.stanbol.ontologymanag
 
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import org.apache.stanbol.ontologymanager.ontonet.api.io.OntologyInputSource;
@@ -64,7 +66,7 @@ public abstract class AbstractOntologySp
     /**
      * Indicates whether this ontology space is marked as read-only. Default 
value is false.
      */
-    protected boolean locked = false;
+    protected volatile boolean locked = false;
 
     protected Logger log = LoggerFactory.getLogger(getClass());
 
@@ -72,7 +74,7 @@ public abstract class AbstractOntologySp
      * The identifier of the ontologies directly managed by this space (i.e. 
that were directly added to this
      * space, hence not including those just pulled in via import statements).
      */
-    protected Set<OWLOntology> managedOntologies;
+    protected Map<IRI,OWLOntology> managedOntologies;
 
     protected IRI namespace = null;
 
@@ -115,12 +117,14 @@ public abstract class AbstractOntologySp
         if (ontologyManager != null) this.ontologyManager = ontologyManager;
         else this.ontologyManager = OWLManager.createOWLOntologyManager();
 
-        this.managedOntologies = new HashSet<OWLOntology>();
+        this.managedOntologies = new HashMap<IRI,OWLOntology>();
     }
 
     @Override
     public synchronized void addOntology(OntologyInputSource ontologySource) 
throws UnmodifiableOntologySpaceException {
         if (locked) throw new UnmodifiableOntologySpaceException(this);
+        log.debug("Trying to add ontology {} to space {}",
+            ontologySource != null ? ontologySource.getRootOntology() : 
"<NULL>", getNamespace() + getID());
         // Avoid adding the space top ontology itself.
         if (ontologySource != null && ontologySource.hasRootOntology()) {
             OWLOntology o = ontologySource.getRootOntology();
@@ -231,18 +235,19 @@ public abstract class AbstractOntologySp
 
     @Override
     public synchronized Set<OWLOntology> getOntologies(boolean withClosure) {
-        return withClosure ? ontologyManager.getOntologies() : 
managedOntologies;
+        return withClosure ? ontologyManager.getOntologies() : new 
HashSet<OWLOntology>(managedOntologies.values());
     }
 
     @Override
     public OWLOntology getOntology(IRI ontologyIri) {
-        OWLOntology o = null;
-        Iterator<OWLOntology> it = managedOntologies.iterator();
-        while (it.hasNext() && o == null) {
-            OWLOntology temp = it.next();
-            if (!temp.isAnonymous() && 
ontologyIri.equals(temp.getOntologyID().getOntologyIRI())) o = temp;
-        }
-        if (o == null) o = ontologyManager.getOntology(ontologyIri);
+        log.debug("Requesting ontology {} from space {}", ontologyIri, 
getNamespace() + getID());
+        OWLOntology o = managedOntologies.get(ontologyIri);
+//        Iterator<OWLOntology> it = managedOntologies.iterator();
+//        while (it.hasNext() && o == null) {
+//            OWLOntology temp = it.next();
+//            if (!temp.isAnonymous() && 
ontologyIri.equals(temp.getOntologyID().getOntologyIRI())) o = temp;
+//        }
+//        if (o == null) o = ontologyManager.getOntology(ontologyIri);
         return o;
     }
 
@@ -274,7 +279,7 @@ public abstract class AbstractOntologySp
         // TODO implement transaction control.
         // See to it that the ontology is copied to this manager.
         OWLOntology newOnt = reload(ontology, ontologyManager, true, false);
-        managedOntologies.add(newOnt);
+        managedOntologies.put(OWLUtils.getIdentifyingIRI(newOnt),newOnt);
 
         try {
             // Store the top ontology

Modified: 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CoreOntologySpaceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CoreOntologySpaceImpl.java?rev=1177771&r1=1177770&r2=1177771&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CoreOntologySpaceImpl.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CoreOntologySpaceImpl.java
 Fri Sep 30 18:49:40 2011
@@ -29,28 +29,19 @@ public class CoreOntologySpaceImpl exten
 
     public static final String SUFFIX = SpaceType.CORE.getIRISuffix();
 
+    protected static String buildId(String scopeID) {
+        return (scopeID != null ? scopeID : "") + "/" + SUFFIX;
+    }
+
     public CoreOntologySpaceImpl(String scopeID, IRI namespace, 
ClerezzaOntologyStorage storage) {
-        super(/* IRI.create( */(scopeID!=null?scopeID:"") + "/" + 
SpaceType.CORE.getIRISuffix(), namespace/*
-                                                                               
         * StringUtils.
-                                                                               
         * stripIRITerminator
-                                                                               
         * (namespace) + "/")
-                                                                               
         */,
-                SpaceType.CORE/* , scopeID */, storage);
+        super(buildId(scopeID), namespace, SpaceType.CORE, storage);
     }
 
     public CoreOntologySpaceImpl(String scopeID,
                                  IRI namespace,
                                  ClerezzaOntologyStorage storage,
                                  OWLOntologyManager ontologyManager) {
-        super(/* IRI.create( */(scopeID!=null?scopeID:"") + "/" + 
SpaceType.CORE.getIRISuffix(), namespace/*
-                                                                               
         * StringUtils.
-                                                                               
         * stripIRITerminator
-                                                                               
         * (namespace) + "/")
-                                                                               
         */, SpaceType.CORE, /*
-                                                                               
                              * scopeID
-                                                                               
                              * ,
-                                                                               
                              */
-                storage, ontologyManager);
+        super(buildId(scopeID), namespace, SpaceType.CORE, storage, 
ontologyManager);
     }
 
     /**

Modified: 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CustomOntologySpaceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CustomOntologySpaceImpl.java?rev=1177771&r1=1177770&r2=1177771&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CustomOntologySpaceImpl.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CustomOntologySpaceImpl.java
 Fri Sep 30 18:49:40 2011
@@ -31,25 +31,19 @@ public class CustomOntologySpaceImpl ext
 
     public static final String SUFFIX = SpaceType.CUSTOM.getIRISuffix();
 
+    protected static String buildId(String scopeID) {
+        return (scopeID != null ? scopeID : "") + "/" + SUFFIX;
+    }
+
     public CustomOntologySpaceImpl(String scopeID, IRI namespace, 
ClerezzaOntologyStorage storage) {
-        super(/* IRI.create( */(scopeID!=null?scopeID:"") + "/" + 
SpaceType.CUSTOM.getIRISuffix(), namespace/*
-                                                                               
           * StringUtils.
-                                                                               
           * stripIRITerminator
-                                                                               
           * (namespace) + "/")
-                                                                               
           */,
-                SpaceType.CUSTOM/* , scopeID */, storage);
+        super(buildId(scopeID), namespace, SpaceType.CUSTOM, storage);
     }
 
     public CustomOntologySpaceImpl(String scopeID,
                                    IRI namespace,
                                    ClerezzaOntologyStorage storage,
                                    OWLOntologyManager ontologyManager) {
-        super(/* IRI.create( */(scopeID!=null?scopeID:"") + "/" + 
SpaceType.CUSTOM.getIRISuffix(), namespace/*
-                                                                               
           * StringUtils.
-                                                                               
           * stripIRITerminator
-                                                                               
           * (namespace) + "/")
-                                                                               
           */,
-                SpaceType.CUSTOM, storage, ontologyManager);
+        super(buildId(scopeID), namespace, SpaceType.CUSTOM, storage, 
ontologyManager);
     }
 
     @Override

Modified: 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/SessionOntologySpaceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/SessionOntologySpaceImpl.java?rev=1177771&r1=1177770&r2=1177771&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/SessionOntologySpaceImpl.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/SessionOntologySpaceImpl.java
 Fri Sep 30 18:49:40 2011
@@ -33,54 +33,22 @@ public class SessionOntologySpaceImpl ex
 
     public static final String SUFFIX = SpaceType.SESSION.getIRISuffix();
 
-    private static String buildId(String scopeID) {
-        return (scopeID!=null?scopeID:"") + "/" + 
SpaceType.SESSION.getIRISuffix() + "-" + new Random().nextLong();
+    protected static String buildId(String scopeID) {
+        return (scopeID != null ? scopeID : "") + "/" + 
SpaceType.SESSION.getIRISuffix() + "-"
+               + new Random().nextLong();
     }
 
     public SessionOntologySpaceImpl(String scopeID, IRI namespace, 
ClerezzaOntologyStorage store) {
         // FIXME : sync session id with session space ID
-        super(buildId(scopeID), namespace
-        /*
-         * IRI.create(StringUtils.stripIRITerminator(scopeID) + "/" + 
SpaceType.SESSION.getIRISuffix() + "-" +
-         * new Random().nextLong())
-         */, SpaceType.SESSION, store/* , scopeID */);
-
-        // IRI iri = IRI.create(StringUtils.stripIRITerminator(getID()) + 
"/root.owl");
-        // try {
-        // setTopOntology(new 
RootOntologySource(ontologyManager.createOntology(iri), null), false);
-        // } catch (OWLOntologyCreationException e) {
-        // log.error("Could not create session space root ontology " + iri, e);
-        // } catch (UnmodifiableOntologySpaceException e) {
-        // // Should not happen...
-        // log.error("Session space ontology " + iri
-        // + " was denied modification by the space itself. This should not 
happen.", e);
-        // }
+        super(buildId(scopeID), namespace, SpaceType.SESSION, store);
     }
 
     public SessionOntologySpaceImpl(String scopeID,
                                     IRI namespace,
                                     ClerezzaOntologyStorage store,
                                     OWLOntologyManager ontologyManager) {
-
         // FIXME : sync session id with session space ID
-        super(buildId(scopeID), namespace
-        /*
-         * IRI.create(StringUtils.stripIRITerminator(scopeID) + "/" + 
SpaceType.SESSION.getIRISuffix() + "-" +
-         * new Random().nextLong())
-         */, SpaceType.SESSION, store, /* scopeID, */
-        ontologyManager);
-
-        // Logger log = LoggerFactory.getLogger(getClass());
-        // IRI iri = IRI.create(StringUtils.stripIRITerminator(getID()) + 
"/root.owl");
-        // try {
-        // setTopOntology(new 
RootOntologySource(ontologyManager.createOntology(iri), null), false);
-        // } catch (OWLOntologyCreationException e) {
-        // log.error("Could not create session space root ontology " + iri, e);
-        // } catch (UnmodifiableOntologySpaceException e) {
-        // // Should not happen...
-        // log.error("Session space ontology " + iri
-        // + " was denied modification by the space itself. This should not 
happen.", e);
-        // }
+        super(buildId(scopeID), namespace, SpaceType.SESSION, store, 
ontologyManager);
     }
 
     @Override
@@ -115,7 +83,8 @@ public class SessionOntologySpaceImpl ex
 
     @Override
     public synchronized void tearDown() {
-        // TODO Auto-generated method stub
+        // TODO Do we really unlock?
+        locked = false;
     }
 
 }

Modified: 
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ONMScopeOntologyResource.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ONMScopeOntologyResource.java?rev=1177771&r1=1177770&r2=1177771&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ONMScopeOntologyResource.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ONMScopeOntologyResource.java
 Fri Sep 30 18:49:40 2011
@@ -103,11 +103,15 @@ public class ONMScopeOntologyResource ex
                                      @PathParam("uri") String ontologyid,
                                      @Context UriInfo uriInfo) {
 
+        log.info("Caught request for ontology {} in scope {}", ontologyid, 
scopeid);
+
         if (!ontologyid.equals("all")) {
 
             // First of all, it could be a simple request for the space root!
 
             String absur = uriInfo.getAbsolutePath().toString();
+            log.debug("Absolute URL Path {}", absur);
+            log.debug("Ontology ID {}", ontologyid);
             URI uri = URI.create(absur.substring(0, 
absur.lastIndexOf(ontologyid) - 1));
 
             IRI sciri = IRI.create(uri);

Modified: 
incubator/stanbol/trunk/owl/src/main/java/org/apache/stanbol/owl/util/OWLUtils.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/owl/src/main/java/org/apache/stanbol/owl/util/OWLUtils.java?rev=1177771&r1=1177770&r2=1177771&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/owl/src/main/java/org/apache/stanbol/owl/util/OWLUtils.java
 (original)
+++ 
incubator/stanbol/trunk/owl/src/main/java/org/apache/stanbol/owl/util/OWLUtils.java
 Fri Sep 30 18:49:40 2011
@@ -16,6 +16,9 @@
  */
 package org.apache.stanbol.owl.util;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
 import org.semanticweb.owlapi.model.IRI;
 import org.semanticweb.owlapi.model.OWLOntology;
 
@@ -32,11 +35,23 @@ public class OWLUtils {
      * @return
      */
     public static IRI getIdentifyingIRI(OWLOntology o) {
+        String originalIri;
         if (o.isAnonymous()) {
-            return o.getOWLOntologyManager().getOntologyDocumentIRI(o);
+            originalIri = 
o.getOWLOntologyManager().getOntologyDocumentIRI(o).toString();
         } else {
-            return o.getOntologyID().getOntologyIRI();
+            originalIri = o.getOntologyID().getOntologyIRI().toString();
         }
+        while (originalIri.endsWith("#") || originalIri.endsWith("?"))
+            originalIri = originalIri.substring(0, originalIri.length() - 1);
+        // try {
+        // if (originalIri.endsWith("#")) originalIri = 
originalIri.substring(0,
+        // originalIri.length() - 1) + URLEncoder.encode("#", "UTF-8");
+        // else if (originalIri.endsWith("?")) originalIri = 
originalIri.substring(0,
+        // originalIri.length() - 1)
+        // + URLEncoder.encode("?", "UTF-8");
+        // } catch (UnsupportedEncodingException e) {
+        // // That cannot be.
+        // }
+        return IRI.create(originalIri);
     }
-
 }


Reply via email to