Author: alexdma
Date: Tue Nov 22 19:29:47 2011
New Revision: 1205140

URL: http://svn.apache.org/viewvc?rev=1205140&view=rev
Log:
- More RESTful methods for managing sessions and ontologies loaded within 
(STANBOL-247)
- Fixed a bug in the namespace assignment for sessions (STANBOL-247)
- New ontology input source that parses an input stream (STANBOL-178)

Added:
    
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologyContentInputSource.java
Modified:
    
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyCollector.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/session/SessionImpl.java
    
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/SessionByIdResource.java

Added: 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologyContentInputSource.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologyContentInputSource.java?rev=1205140&view=auto
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologyContentInputSource.java
 (added)
+++ 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologyContentInputSource.java
 Tue Nov 22 19:29:47 2011
@@ -0,0 +1,42 @@
+/*
+ * 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 org.apache.stanbol.owl.util.OWLUtils;
+import org.semanticweb.owlapi.apibinding.OWLManager;
+import org.semanticweb.owlapi.model.OWLOntologyCreationException;
+import org.semanticweb.owlapi.model.OWLOntologyManager;
+
+public class OntologyContentInputSource extends AbstractOWLOntologyInputSource 
{
+
+    public OntologyContentInputSource(InputStream content) throws 
OWLOntologyCreationException {
+        this(content, OWLManager.createOWLOntologyManager());
+    }
+
+    public OntologyContentInputSource(InputStream content, OWLOntologyManager 
manager) throws OWLOntologyCreationException {
+        bindPhysicalIri(null);
+        bindRootOntology(manager.loadOntologyFromOntologyDocument(content));
+    }
+
+    @Override
+    public String toString() {
+        return "<ONTOLOGY_CONTENT>" + 
OWLUtils.guessOntologyIdentifier(getRootOntology());
+    }
+
+}

Modified: 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyCollector.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyCollector.java?rev=1205140&r1=1205139&r2=1205140&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyCollector.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyCollector.java
 Tue Nov 22 19:29:47 2011
@@ -67,14 +67,6 @@ public interface OntologyCollector exten
     Collection<OntologyCollectorListener> getListeners();
 
     /**
-     * The namespace can change dynamically (e.g. if the ontology network is 
relocated), so it is not part of
-     * the scope identifier (although its concatenation with the identifier 
will still be unique).
-     * 
-     * @param namespace
-     */
-    IRI getNamespace();
-
-    /**
      * Returns the ontologies managed by this ontology space.
      * 
      * @param withClosure
@@ -133,16 +125,6 @@ public interface OntologyCollector exten
     void removeOntology(IRI ontologyId) throws 
OntologyCollectorModificationException;
 
     /**
-     * The namespace can be changed dynamically (e.g. if the ontology network 
is relocated).
-     * 
-     * @param namespace
-     *            Must end with a slash character. If the IRI ends with a has, 
and
-     *            {@link IllegalArgumentException} will be thrown. If it ends 
with neither, a slash will be
-     *            added.
-     */
-    void setNamespace(IRI namespace);
-
-    /**
      * Bootstraps the ontology space. In some cases (such as with core and 
custom spaces) this also implies
      * write-locking its ontologies.
      */

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=1205140&r1=1205139&r2=1205140&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
 Tue Nov 22 19:29:47 2011
@@ -367,7 +367,7 @@ public class ONManagerImpl implements ON
     }
 
     protected void bindResources() {
-        IRI ns = 
IRI.create(URIUtils.upOne(IRI.create(getOntologyNetworkNamespace())) + 
"/session/");
+        IRI ns = IRI.create(getOntologyNetworkNamespace());
         if (ontologyProvider.getStore() instanceof TcProvider) 
ontologySpaceFactory = new OntologySpaceFactoryImpl(
                 scopeRegistry, (OntologyProvider<TcProvider>) 
ontologyProvider, offline, ns);
         else ontologySpaceFactory = new 
org.apache.stanbol.ontologymanager.ontonet.impl.owlapi.OntologySpaceFactoryImpl(
@@ -377,6 +377,7 @@ public class ONManagerImpl implements ON
                 IRI.create(getOntologyNetworkNamespace()), 
ontologySpaceFactory);
         ontologyScopeFactory.addScopeEventListener(oIndex);
 
+        ns = IRI.create(URIUtils.upOne(ns) + "/session/");
         sessionManager = new SessionManagerImpl(ns, getScopeRegistry(), 
ontologyProvider);
         sessionManager.addSessionListener(new ScopeSessionSynchronizer(this));
     }

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=1205140&r1=1205139&r2=1205140&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
 Tue Nov 22 19:29:47 2011
@@ -33,7 +33,6 @@ import org.apache.stanbol.ontologymanage
 import 
org.apache.stanbol.ontologymanager.ontonet.api.session.SessionEvent.OperationType;
 import org.apache.stanbol.ontologymanager.ontonet.api.session.SessionListener;
 import 
org.apache.stanbol.ontologymanager.ontonet.impl.clerezza.AbstractOntologyCollectorImpl;
-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;
@@ -72,6 +71,7 @@ public class SessionImpl extends Abstrac
      */
     public SessionImpl(String sessionID, IRI namespace, TcProvider tcProvider) 
{
         super(sessionID, namespace, tcProvider);
+        // setNamespace(namespace);
         attachedScopes = new HashMap<String,OntologyScope>();
         listeners = new HashSet<SessionListener>();
     }
@@ -83,6 +83,7 @@ public class SessionImpl extends Abstrac
 
     /**
      * FIXME not merging yet
+     * FIXME not including imported ontologies
      * 
      * @see OWLExportable#asOWLOntology(boolean)
      */
@@ -119,7 +120,7 @@ public class SessionImpl extends Abstrac
             for (OWLOntology o : getOntologies(false)) {
                 if (o == null) continue;
 
-                String base = URIUtils.upOne(IRI.create(namespace + getID())) 
+ "/";
+                String base = /* URIUtils.upOne( */IRI.create(namespace + 
getID())/* ) */+ "/";
 
                 IRI ontologyIri;
 

Modified: 
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/SessionByIdResource.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/SessionByIdResource.java?rev=1205140&r1=1205139&r2=1205140&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/SessionByIdResource.java
 (original)
+++ 
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/SessionByIdResource.java
 Tue Nov 22 19:29:47 2011
@@ -16,25 +16,41 @@
  */
 package org.apache.stanbol.ontologymanager.web.resources;
 
+import static javax.ws.rs.core.Response.Status.FORBIDDEN;
+import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
+import static javax.ws.rs.core.Response.Status.NOT_FOUND;
+import static javax.ws.rs.core.Response.Status.OK;
+
+import java.io.InputStream;
+
 import javax.servlet.ServletContext;
+import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
+import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.UriInfo;
 
 import org.apache.stanbol.commons.web.base.ContextHelper;
 import org.apache.stanbol.commons.web.base.format.KRFormat;
 import org.apache.stanbol.commons.web.base.resource.BaseStanbolResource;
 import org.apache.stanbol.ontologymanager.ontonet.api.ONManager;
+import 
org.apache.stanbol.ontologymanager.ontonet.api.io.OntologyContentInputSource;
+import org.apache.stanbol.ontologymanager.ontonet.api.io.RootOntologyIRISource;
+import 
org.apache.stanbol.ontologymanager.ontonet.api.ontology.UnmodifiableOntologyCollectorException;
 import org.apache.stanbol.ontologymanager.ontonet.api.session.Session;
 import org.apache.stanbol.ontologymanager.ontonet.api.session.SessionManager;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLOntology;
+import org.semanticweb.owlapi.model.OWLOntologyCreationException;
 
-@Path("/ontonet/session/{id:.+}")
+@Path("/ontonet/session/{id}")
 public class SessionByIdResource extends BaseStanbolResource {
 
     /*
@@ -44,24 +60,67 @@ public class SessionByIdResource extends
 
     protected ServletContext servletContext;
 
-    public SessionByIdResource(@Context ServletContext servletContext) {
+    protected Session session;
+
+    public SessionByIdResource(@PathParam(value = "id") String sessionId,
+                               @Context ServletContext servletContext) {
         this.servletContext = servletContext;
         this.onm = (ONManager) 
ContextHelper.getServiceFromContext(ONManager.class, servletContext);
+        SessionManager mgr = onm.getSessionManager();
+        session = mgr.getSession(sessionId);
     }
 
     @GET
     @Produces(value = {KRFormat.RDF_XML, KRFormat.OWL_XML, KRFormat.TURTLE, 
KRFormat.FUNCTIONAL_OWL,
                        KRFormat.MANCHESTER_OWL, KRFormat.RDF_JSON})
-    public Response getSessionMetadataOntology(@PathParam("id") String 
sessionId,
-                                               @Context UriInfo uriInfo,
-                                               @Context HttpHeaders headers) {
-
-        Session ses = null;
-        SessionManager mgr = onm.getSessionManager();
-        ses = mgr.getSession(sessionId);
-        if (ses == null) return Response.status(Status.NOT_FOUND).build();
+    public Response getSessionAsOntology(@PathParam("id") String sessionId,
+                                         @Context UriInfo uriInfo,
+                                         @Context HttpHeaders headers) {
+        if (session == null) return Response.status(NOT_FOUND).build();
         // return 
Response.ok(SessionRenderer.getSessionMetadataRDFasOntology(ses)).build();
-        return Response.ok(ses.asOWLOntology(false)).build();
+        return Response.ok(session.asOWLOntology(false)).build();
+    }
+
+    @POST
+    @Consumes(value = {KRFormat.RDF_XML, KRFormat.OWL_XML, KRFormat.TURTLE, 
KRFormat.FUNCTIONAL_OWL,
+                       KRFormat.MANCHESTER_OWL, KRFormat.RDF_JSON})
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response addOntology(InputStream content) {
+        try {
+            session.addOntology(new OntologyContentInputSource(content));
+        } catch (UnmodifiableOntologyCollectorException e) {
+            throw new WebApplicationException(e, FORBIDDEN);
+        } catch (OWLOntologyCreationException e) {
+            throw new WebApplicationException(e, INTERNAL_SERVER_ERROR);
+        }
+        return Response.status(OK).type(MediaType.TEXT_PLAIN).build();
+    }
+
+    @POST
+    @Consumes(value = MediaType.TEXT_PLAIN)
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response addOntology(String iri) {
+        try {
+            session.addOntology(new RootOntologyIRISource(IRI.create(iri)));
+        } catch (UnmodifiableOntologyCollectorException e) {
+            throw new WebApplicationException(e, FORBIDDEN);
+        } catch (OWLOntologyCreationException e) {
+            throw new WebApplicationException(e, INTERNAL_SERVER_ERROR);
+        }
+        return Response.status(OK).type(MediaType.TEXT_PLAIN).build();
+    }
+
+    @GET
+    @Path(value = "/{ontologyId:.+}")
+    @Produces(value = {KRFormat.RDF_XML, KRFormat.OWL_XML, KRFormat.TURTLE, 
KRFormat.FUNCTIONAL_OWL,
+                       KRFormat.MANCHESTER_OWL, KRFormat.RDF_JSON})
+    public Response getSessionOntology(@PathParam("id") String sessionId,
+                                       @PathParam("ontologyId") String 
ontologyId,
+                                       @Context UriInfo uriInfo,
+                                       @Context HttpHeaders headers) {
+        OWLOntology o = session.getOntology(IRI.create(ontologyId));
+        if (o == null) return Response.status(NOT_FOUND).build();
+        return Response.ok(o).build();
     }
 
 }


Reply via email to