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();
}
}