You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by en...@apache.org on 2013/10/13 19:47:26 UTC

svn commit: r1531722 - in /stanbol/branches/commons-ng/ontologymanager/web: ./ src/main/java/org/apache/stanbol/ontologymanager/web/resources/

Author: enridaga
Date: Sun Oct 13 17:47:25 2013
New Revision: 1531722

URL: http://svn.apache.org/r1531722
Log:
STANBOL-1152 Removed dependencies to jersey, and jersey specific features. Needs more on viewables.

Modified:
    stanbol/branches/commons-ng/ontologymanager/web/pom.xml
    stanbol/branches/commons-ng/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/OntoNetRootResource.java
    stanbol/branches/commons-ng/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java
    stanbol/branches/commons-ng/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/SessionResource.java

Modified: stanbol/branches/commons-ng/ontologymanager/web/pom.xml
URL: http://svn.apache.org/viewvc/stanbol/branches/commons-ng/ontologymanager/web/pom.xml?rev=1531722&r1=1531721&r2=1531722&view=diff
==============================================================================
--- stanbol/branches/commons-ng/ontologymanager/web/pom.xml (original)
+++ stanbol/branches/commons-ng/ontologymanager/web/pom.xml Sun Oct 13 17:47:25 2013
@@ -59,6 +59,7 @@
             <Import-Package>
               javax.ws.rs.*; version="[2.0,3]",
               org.apache.stanbol.commons.web.base; provide:=true; version="[1.0.0,2)",
+              org.apache.clerezza.jaxrs.utils.*,
               com.sun.jersey.*; version="[1.15.0,2)",
               com.sun.net.httpserver.*,
               *
@@ -129,33 +130,37 @@
       <version>0.11.0-SNAPSHOT</version>
     </dependency>
 
-
     <!-- specific deps for this project -->
     <dependency>
       <groupId>org.apache.stanbol</groupId>
   	  <artifactId>org.apache.stanbol.commons.web.viewable</artifactId>
       <version>1.0.0-SNAPSHOT</version>      
     </dependency>
+    
+    <dependency>
+      <groupId>org.apache.clerezza</groupId>
+      <artifactId>jaxrs.utils</artifactId>
+    </dependency>
 
     <!-- Jersey specific JAX-RS annotations -->
-    <dependency> <!-- because of ImplicitProduces -->
+    <!--<dependency>  because of ImplicitProduces 
       <groupId>com.sun.jersey</groupId>
       <artifactId>jersey-server</artifactId>
       <version>1.15</version>
       <scope>compile</scope>
-    </dependency>
-    <dependency> <!-- because of multipart -->
+    </dependency>-->
+    <!-- dependency>  because of multipart
       <groupId>com.sun.jersey.contribs</groupId>
       <artifactId>jersey-multipart</artifactId>
       <version>1.15</version>
       <scope>compile</scope>
     </dependency>
-    <dependency> <!-- because of jersey (temporary) -->
+    <dependency>  because of jersey (temporary) 
       <groupId>com.sun.net.httpserver</groupId>
       <artifactId>http</artifactId>
       <version>20070405</version>
       <scope>compile</scope>
-    </dependency>
+    </dependency>-->
 
 
 

Modified: stanbol/branches/commons-ng/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/OntoNetRootResource.java
URL: http://svn.apache.org/viewvc/stanbol/branches/commons-ng/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/OntoNetRootResource.java?rev=1531722&r1=1531721&r2=1531722&view=diff
==============================================================================
--- stanbol/branches/commons-ng/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/OntoNetRootResource.java (original)
+++ stanbol/branches/commons-ng/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/OntoNetRootResource.java Sun Oct 13 17:47:25 2013
@@ -80,6 +80,7 @@ import javax.ws.rs.core.Response.Respons
 import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.UriInfo;
 
+import org.apache.clerezza.jaxrs.utils.form.MultiPartBody;
 import org.apache.clerezza.rdf.core.Graph;
 import org.apache.clerezza.rdf.core.MGraph;
 import org.apache.clerezza.rdf.core.Triple;
@@ -111,8 +112,10 @@ import org.apache.stanbol.ontologymanage
 import org.apache.stanbol.ontologymanager.servicesapi.ontology.OntologyLoadingException;
 import org.apache.stanbol.ontologymanager.servicesapi.ontology.OntologyProvider;
 import org.apache.stanbol.ontologymanager.servicesapi.ontology.OrphanOntologyKeyException;
+import org.apache.stanbol.ontologymanager.servicesapi.scope.OntologySpace;
 import org.apache.stanbol.ontologymanager.servicesapi.scope.Scope;
 import org.apache.stanbol.ontologymanager.servicesapi.scope.ScopeManager;
+import org.apache.stanbol.ontologymanager.servicesapi.session.Session;
 import org.apache.stanbol.ontologymanager.servicesapi.session.SessionManager;
 import org.apache.stanbol.ontologymanager.servicesapi.util.OntologyUtils;
 import org.apache.stanbol.ontologymanager.sources.owlapi.OntologyContentInputSource;
@@ -130,10 +133,10 @@ import org.semanticweb.owlapi.model.SetO
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.sun.jersey.api.view.ImplicitProduces;
-import com.sun.jersey.multipart.BodyPart;
-import com.sun.jersey.multipart.FormDataBodyPart;
-import com.sun.jersey.multipart.FormDataMultiPart;
+//import com.sun.jersey.api.view.ImplicitProduces;
+//import com.sun.jersey.multipart.BodyPart;
+//import com.sun.jersey.multipart.FormDataBodyPart;
+//import com.sun.jersey.multipart.FormDataMultiPart;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 
@@ -148,7 +151,7 @@ import java.security.PrivilegedAction;
 @Service(Object.class)
 @Property(name="javax.ws.rs", boolValue=true)
 @Path("/ontonet")
-@ImplicitProduces(MediaType.TEXT_HTML + ";qs=2")
+//@ImplicitProduces(MediaType.TEXT_HTML + ";qs=2")
 public class OntoNetRootResource extends AbstractOntologyAccessResource {
 
     private Logger log = LoggerFactory.getLogger(getClass());
@@ -597,7 +600,7 @@ public class OntoNetRootResource extends
     @Consumes({MULTIPART_FORM_DATA})
     @Produces({TEXT_HTML, TEXT_PLAIN, RDF_XML, TURTLE, X_TURTLE, N3})
     public Response loadOntologyContent(@PathParam("ontologyId") String ontologyId,
-            FormDataMultiPart data,
+                                        MultiPartBody data,
             @Context HttpHeaders headers) {
         ResponseBuilder rb = performLoadOntology(data, headers,
                 Origin.create(OntologyUtils.decode(ontologyId)));
@@ -606,46 +609,56 @@ public class OntoNetRootResource extends
         return rb.build();
     }
 
-    protected ResponseBuilder performLoadOntology(FormDataMultiPart data,
+    protected ResponseBuilder performLoadOntology(MultiPartBody data,
             HttpHeaders headers,
             Origin<?>... keys) {
-        log.debug(" post(FormDataMultiPart data)");
+        log.debug(" post(MultiPartBody data)");
         ResponseBuilder rb = null;
 
         IRI location = null;
         File file = null; // If found, it takes precedence over location.
         String format = null;
         List<OWLOntologyID> aliases = new ArrayList<OWLOntologyID>();
-        for (BodyPart bpart : data.getBodyParts()) {
-            log.debug("is a {}", bpart.getClass());
-            if (bpart instanceof FormDataBodyPart) {
-                FormDataBodyPart dbp = (FormDataBodyPart) bpart;
-                String name = dbp.getName();
-                if (name.equals("file")) {
-                    file = bpart.getEntityAs(File.class);
-                } else {
-                    String value = dbp.getValue();
-                    if (name.equals("format") && !value.equals("auto")) {
-                        format = value;
-                    } else if (name.equals("url")) {
-                        try {
-                            URI.create(value); // To throw 400 if malformed.
-                            location = IRI.create(value);
-                        } catch (Exception ex) {
-                            log.error("Malformed IRI for " + value, ex);
-                            throw new WebApplicationException(ex, BAD_REQUEST);
-                        }
-                    } else if (name.equals("alias") && !"null".equals(value)) {
-                        try {
-                            aliases.add(OntologyUtils.decode(value));
-                        } catch (Exception ex) {
-                            log.error("Malformed public key for " + value, ex);
-                            throw new WebApplicationException(ex, BAD_REQUEST);
-                        }
+        
+        if (data.getFormFileParameterValues("file").length > 0) {
+            file = new File(data.getFormFileParameterValues("file")[0].getFileName());
+        }
+        // else {
+        if (data.getTextParameterValues("format").length > 0) {
+            String value = data.getTextParameterValues("format")[0];
+            if (!value.equals("auto")) {
+                format = value;
+            }
+        }
+        if (data.getTextParameterValues("url").length > 0) {
+            String value = data.getTextParameterValues("url")[0];
+            try {
+                URI.create(value); // To throw 400 if malformed.
+                location = IRI.create(value);
+            } catch (Exception ex) {
+                log.error("Malformed IRI for " + value, ex);
+                throw new WebApplicationException(ex, BAD_REQUEST);
+            }
+        }
+        if (data.getTextParameterValues("alias").length > 0) {
+            for(String value : data.getTextParameterValues("alias")){
+                if (!"null".equals(value)) {
+                    try {
+                        aliases.add(OntologyUtils.decode(value));
+                    } catch (Exception ex) {
+                        log.error("Malformed public key for " + value, ex);
+                        throw new WebApplicationException(ex, BAD_REQUEST);
                     }
                 }
             }
         }
+
+        log.debug("Parameters:");
+        log.debug("file: {}", file);
+        log.debug("url: {}", location);
+        log.debug("format: {}", format);
+        log.debug("alias: {}", aliases);
+
         // Then add the file
         OWLOntologyID key = null;
         if (file != null && file.canRead() && file.exists()) {
@@ -814,7 +827,7 @@ public class OntoNetRootResource extends
     @POST
     @Consumes({MULTIPART_FORM_DATA})
     @Produces({TEXT_HTML, TEXT_PLAIN, RDF_XML, TURTLE, X_TURTLE, N3})
-    public Response postOntology(FormDataMultiPart data, @Context HttpHeaders headers) {
+    public Response postOntology(MultiPartBody data, @Context HttpHeaders headers) {
         ResponseBuilder rb = performLoadOntology(data, headers);
         // rb.header(HttpHeaders.CONTENT_TYPE, TEXT_HTML + "; charset=utf-8");
         //addCORSOrigin(servletContext, rb, headers);
@@ -885,4 +898,64 @@ public class OntoNetRootResource extends
                 (System.currentTimeMillis() - before), r.getStatus());
         return r;
     }
+    
+    public class OntologyStatsResource extends ResultData {
+
+        private Set<OntologyCollector> handles;
+
+        private Set<OWLOntologyID> identifiers;
+
+        private OWLOntology o;
+
+        private UriInfo uriInfo;
+
+        private OWLOntologyID submitted;
+
+        public OntologyStatsResource(
+                                     UriInfo uriInfo,
+                                     OWLOntologyID key,
+                                     OWLOntology o,
+                                     Set<OWLOntologyID> identifiers,
+                                     Set<OntologyCollector> handles) {
+//            this.servletContext = context;
+            this.uriInfo = uriInfo;
+            this.submitted = key;
+            this.o = o;
+            this.identifiers = identifiers;
+            this.handles = handles;
+        }
+
+        public Set<String> getAliases() {
+            Set<String> aliases = new HashSet<String>();
+            for (OWLOntologyID alias : identifiers)
+                // if (!o.getOntologyID().equals(alias))
+                aliases.add(OntologyUtils.encode(alias));
+            return Collections.unmodifiableSet(aliases);
+        }
+
+        public Set<String> getScopeHandles() {
+            Set<String> handles = new HashSet<String>();
+            for (OntologyCollector handle : this.handles)
+                if (handle instanceof OntologySpace) handles.add(handle.getID());
+            return handles;
+        }
+
+        public Set<String> getSessionHandles() {
+            Set<String> handles = new HashSet<String>();
+            for (OntologyCollector handle : this.handles)
+                if (handle instanceof Session) handles.add(handle.getID());
+            return handles;
+        }
+
+        public int getTotalAxioms() {
+            return o.getAxiomCount();
+        }
+        public OWLOntologyID getRepresentedOntologyKey() {
+            return submitted;
+        }
+
+        public String stringForm(OWLOntologyID ontologyID) {
+            return OntologyUtils.encode(ontologyID);
+        }
+    }
 }

Modified: stanbol/branches/commons-ng/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java
URL: http://svn.apache.org/viewvc/stanbol/branches/commons-ng/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java?rev=1531722&r1=1531721&r2=1531722&view=diff
==============================================================================
--- stanbol/branches/commons-ng/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java (original)
+++ stanbol/branches/commons-ng/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java Sun Oct 13 17:47:25 2013
@@ -30,9 +30,6 @@ import static javax.ws.rs.core.Response.
 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.UNSUPPORTED_MEDIA_TYPE;
-//import static org.apache.stanbol.commons.web.base.CorsHelper.addCORSOrigin;
-//import static org.apache.stanbol.commons.web.base.CorsHelper.enableCORS;
 import static org.apache.stanbol.commons.web.base.format.KRFormat.FUNCTIONAL_OWL;
 import static org.apache.stanbol.commons.web.base.format.KRFormat.MANCHESTER_OWL;
 import static org.apache.stanbol.commons.web.base.format.KRFormat.N3;
@@ -43,9 +40,8 @@ import static org.apache.stanbol.commons
 import static org.apache.stanbol.commons.web.base.format.KRFormat.TURTLE;
 import static org.apache.stanbol.commons.web.base.format.KRFormat.X_TURTLE;
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
@@ -80,6 +76,8 @@ import javax.ws.rs.core.Response.Respons
 import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.UriInfo;
 
+import org.apache.clerezza.jaxrs.utils.form.FormFile;
+import org.apache.clerezza.jaxrs.utils.form.MultiPartBody;
 import org.apache.clerezza.rdf.core.Graph;
 import org.apache.clerezza.rdf.core.TripleCollection;
 import org.apache.clerezza.rdf.core.access.TcProvider;
@@ -92,7 +90,6 @@ import org.apache.felix.scr.annotations.
 import org.apache.stanbol.commons.owl.util.OWLUtils;
 import org.apache.stanbol.commons.owl.util.URIUtils;
 import org.apache.stanbol.commons.web.viewable.Viewable;
-//import org.apache.stanbol.commons.web.base.ContextHelper;
 import org.apache.stanbol.ontologymanager.ontonet.api.scope.OntologyScope;
 import org.apache.stanbol.ontologymanager.registry.api.RegistryManager;
 import org.apache.stanbol.ontologymanager.registry.api.model.Library;
@@ -122,10 +119,9 @@ import org.semanticweb.owlapi.model.OWLO
 import org.semanticweb.owlapi.model.OWLOntologyStorageException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
-import com.sun.jersey.multipart.BodyPart;
-import com.sun.jersey.multipart.FormDataBodyPart;
-import com.sun.jersey.multipart.FormDataMultiPart;
+//import static org.apache.stanbol.commons.web.base.CorsHelper.addCORSOrigin;
+//import static org.apache.stanbol.commons.web.base.CorsHelper.enableCORS;
+//import org.apache.stanbol.commons.web.base.ContextHelper;
 
 /**
  * The REST resource of an OntoNet {@link OntologyScope} whose identifier is known.
@@ -135,7 +131,7 @@ import com.sun.jersey.multipart.FormData
  */
 @Component
 @Service(Object.class)
-@Property(name="javax.ws.rs", boolValue=true)
+@Property(name = "javax.ws.rs", boolValue = true)
 @Path("/ontonet/ontology/{scopeid}")
 public class ScopeResource extends AbstractOntologyAccessResource {
 
@@ -157,23 +153,22 @@ public class ScopeResource extends Abstr
 
     protected Scope scope;
 
-    
     public ScopeResource() {
         super();
-//        log.info("<init> with scope {}", scopeId);
-//
-//        this.servletContext = servletContext;
-//        this.onm = (ScopeManager) ContextHelper.getServiceFromContext(ScopeManager.class, servletContext);
-//        this.regMgr = (RegistryManager) ContextHelper.getServiceFromContext(RegistryManager.class,
-//            servletContext);
-//        this.ontologyProvider = (OntologyProvider<TcProvider>) ContextHelper.getServiceFromContext(
-//            OntologyProvider.class, servletContext);
-
-//        if (scopeId == null || scopeId.isEmpty()) {
-//            log.error("Missing path parameter scopeid={}", scopeId);
-//            throw new WebApplicationException(NOT_FOUND);
-//        }
-//        scope = onm.getScope(scopeId);
+        // log.info("<init> with scope {}", scopeId);
+        //
+        // this.servletContext = servletContext;
+        // this.onm = (ScopeManager) ContextHelper.getServiceFromContext(ScopeManager.class, servletContext);
+        // this.regMgr = (RegistryManager) ContextHelper.getServiceFromContext(RegistryManager.class,
+        // servletContext);
+        // this.ontologyProvider = (OntologyProvider<TcProvider>) ContextHelper.getServiceFromContext(
+        // OntologyProvider.class, servletContext);
+
+        // if (scopeId == null || scopeId.isEmpty()) {
+        // log.error("Missing path parameter scopeid={}", scopeId);
+        // throw new WebApplicationException(NOT_FOUND);
+        // }
+        // scope = onm.getScope(scopeId);
 
         // // Skip null checks: the scope might be created with a PUT
         // if (scope == null) {
@@ -189,12 +184,12 @@ public class ScopeResource extends Abstr
                                     @Context HttpHeaders headers) {
 
         scope = onm.getScope(scopeid);
-        
+
         if (scope == null) return Response.status(NOT_FOUND).build();
         IRI prefix = IRI.create(getPublicBaseUri() + "ontonet/ontology/");
         // Export to Clerezza Graph, which can be rendered as JSON-LD.
         ResponseBuilder rb = Response.ok(scope.export(Graph.class, merge, prefix));
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
@@ -204,14 +199,14 @@ public class ScopeResource extends Abstr
                                     @DefaultValue("false") @QueryParam("merge") boolean merge,
                                     @Context HttpHeaders headers) {
         scope = onm.getScope(scopeid);
-        
+
         if (scope == null) return Response.status(NOT_FOUND).build();
         // Export smaller graphs to OWLOntology due to the more human-readable rendering.
         ResponseBuilder rb;
         IRI prefix = IRI.create(getPublicBaseUri() + "ontonet/ontology/");
         if (merge) rb = Response.ok(scope.export(Graph.class, merge, prefix));
         else rb = Response.ok(scope.export(OWLOntology.class, merge, prefix));
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
@@ -221,12 +216,12 @@ public class ScopeResource extends Abstr
                                   @DefaultValue("false") @QueryParam("merge") boolean merge,
                                   @Context HttpHeaders headers) {
         scope = onm.getScope(scopeid);
-        
+
         if (scope == null) return Response.status(NOT_FOUND).build();
         IRI prefix = IRI.create(getPublicBaseUri() + "ontonet/ontology/");
         // Export to OWLOntology due to the more human-readable rendering.
         ResponseBuilder rb = Response.ok(scope.export(OWLOntology.class, merge, prefix));
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
@@ -236,11 +231,11 @@ public class ScopeResource extends Abstr
                                     @Context HttpHeaders headers,
                                     @Context ServletContext servletContext) {
         scope = onm.getScope(scopeid);
-        
+
         onm.deregisterScope(scope);
         scope = null;
         ResponseBuilder rb = Response.ok();
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
@@ -259,12 +254,12 @@ public class ScopeResource extends Abstr
                                       @Context UriInfo uriInfo,
                                       @Context HttpHeaders headers) {
         scope = onm.getScope(scopeid);
-        
+
         OntologySpace space = scope.getCoreSpace();
         IRI prefix = IRI.create(getPublicBaseUri() + "ontonet/ontology/");
         Graph o = space.export(Graph.class, merge, prefix);
         ResponseBuilder rb = Response.ok(o);
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
@@ -276,12 +271,12 @@ public class ScopeResource extends Abstr
                                     @Context UriInfo uriInfo,
                                     @Context HttpHeaders headers) {
         scope = onm.getScope(scopeid);
-        
+
         OntologySpace space = scope.getCoreSpace();
         IRI prefix = IRI.create(getPublicBaseUri() + "ontonet/ontology/");
         OWLOntology o = space.export(OWLOntology.class, merge, prefix);
         ResponseBuilder rb = Response.ok(o);
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
@@ -304,12 +299,12 @@ public class ScopeResource extends Abstr
                                         @Context UriInfo uriInfo,
                                         @Context HttpHeaders headers) {
         scope = onm.getScope(scopeid);
-        
+
         OntologySpace space = scope.getCustomSpace();
         IRI prefix = IRI.create(getPublicBaseUri() + "ontonet/ontology/");
         Graph o = space.export(Graph.class, merge, prefix);
         ResponseBuilder rb = Response.ok(o);
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
@@ -321,12 +316,12 @@ public class ScopeResource extends Abstr
                                       @Context UriInfo uriInfo,
                                       @Context HttpHeaders headers) {
         scope = onm.getScope(scopeid);
-        
+
         OntologySpace space = scope.getCustomSpace();
         IRI prefix = IRI.create(getPublicBaseUri() + "ontonet/ontology/");
         OWLOntology o = space.export(OWLOntology.class, merge, prefix);
         ResponseBuilder rb = Response.ok(o);
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
@@ -335,11 +330,11 @@ public class ScopeResource extends Abstr
     public Response getHtmlInfo(@PathParam("scopeid") String scopeid, @Context HttpHeaders headers) {
         ResponseBuilder rb;
         scope = onm.getScope(scopeid);
-        
+
         if (scope == null) rb = Response.status(NOT_FOUND);
         else rb = Response.ok(new Viewable("index", this)); // TODO move to a dedicated class
         rb.header(HttpHeaders.CONTENT_TYPE, TEXT_HTML + "; charset=utf-8");
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
@@ -372,7 +367,7 @@ public class ScopeResource extends Abstr
     @OPTIONS
     public Response handleCorsPreflight(@Context HttpHeaders headers) {
         ResponseBuilder rb = Response.ok();
-//        enableCORS(servletContext, rb, headers, GET, POST, PUT, DELETE, OPTIONS);
+        // enableCORS(servletContext, rb, headers, GET, POST, PUT, DELETE, OPTIONS);
         return rb.build();
     }
 
@@ -380,7 +375,7 @@ public class ScopeResource extends Abstr
     @Path("/core")
     public Response handleCorsPreflightCore(@Context HttpHeaders headers) {
         ResponseBuilder rb = Response.ok();
-//        enableCORS(servletContext, rb, headers, GET, OPTIONS);
+        // enableCORS(servletContext, rb, headers, GET, OPTIONS);
         return rb.build();
     }
 
@@ -388,7 +383,7 @@ public class ScopeResource extends Abstr
     @Path("/custom")
     public Response handleCorsPreflightCustom(@Context HttpHeaders headers) {
         ResponseBuilder rb = Response.ok();
-//        enableCORS(servletContext, rb, headers, GET, OPTIONS);
+        // enableCORS(servletContext, rb, headers, GET, OPTIONS);
         return rb.build();
     }
 
@@ -396,7 +391,7 @@ public class ScopeResource extends Abstr
     @Path("/{ontologyId:.+}")
     public Response handleCorsPreflightOntology(@Context HttpHeaders headers) {
         ResponseBuilder rb = Response.ok();
-//        enableCORS(servletContext, rb, headers, GET, DELETE, OPTIONS);
+        // enableCORS(servletContext, rb, headers, GET, DELETE, OPTIONS);
         return rb.build();
     }
 
@@ -424,7 +419,7 @@ public class ScopeResource extends Abstr
         log.debug("Ontology ID {}", ontologyId);
         ResponseBuilder rb;
         scope = onm.getScope(scopeid);
-        
+
         if (scope == null) rb = Response.status(NOT_FOUND);
         else {
             IRI prefix = IRI.create(getPublicBaseUri() + "ontonet/ontology/");
@@ -441,7 +436,7 @@ public class ScopeResource extends Abstr
             else rb = Response.ok(o);
         }
 
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
@@ -460,8 +455,7 @@ public class ScopeResource extends Abstr
     @GET
     @Path("/{ontologyId:.+}")
     @Produces(value = {RDF_XML, TURTLE, X_TURTLE, MANCHESTER_OWL, FUNCTIONAL_OWL, OWL_XML, TEXT_PLAIN})
-    public Response managedOntologyGetOWL(
-                                          @PathParam("scopeid") String scopeid,
+    public Response managedOntologyGetOWL(@PathParam("scopeid") String scopeid,
                                           @PathParam("ontologyId") String ontologyId,
                                           @DefaultValue("false") @QueryParam("merge") boolean merge,
                                           @Context UriInfo uriInfo,
@@ -470,7 +464,7 @@ public class ScopeResource extends Abstr
         log.debug("Ontology ID {}", ontologyId);
         ResponseBuilder rb;
         scope = onm.getScope(scopeid);
-        
+
         if (scope == null) rb = Response.status(NOT_FOUND);
         else {
             IRI prefix = IRI.create(getPublicBaseUri() + "ontonet/ontology/");
@@ -487,7 +481,7 @@ public class ScopeResource extends Abstr
             if (o == null) rb = Response.status(NOT_FOUND);
             else rb = Response.ok(o);
         }
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
@@ -514,14 +508,14 @@ public class ScopeResource extends Abstr
             else try {
                 ByteArrayOutputStream out = new ByteArrayOutputStream();
                 o.getOWLOntologyManager().saveOntology(o, new ManchesterOWLSyntaxOntologyFormat(), out);
-                rb = Response.ok(new Viewable("ontology", new OntologyPrettyPrintResource(
-                        uriInfo, out, scope)));
+                rb = Response.ok(new Viewable("ontology",
+                        new OntologyPrettyPrintResource(uriInfo, out, scope)));
             } catch (OWLOntologyStorageException e) {
                 throw new WebApplicationException(e, INTERNAL_SERVER_ERROR);
             }
         }
         rb.header(HttpHeaders.CONTENT_TYPE, TEXT_HTML + "; charset=utf-8");
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
@@ -560,7 +554,7 @@ public class ScopeResource extends Abstr
                 onm.setScopeActive(scopeId, true);
             }
         } else rb = Response.status(BAD_REQUEST); // null/blank ontology ID
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
@@ -579,7 +573,9 @@ public class ScopeResource extends Abstr
     @POST
     @Consumes(value = {RDF_XML, OWL_XML, N_TRIPLE, N3, TURTLE, X_TURTLE, FUNCTIONAL_OWL, MANCHESTER_OWL,
                        RDF_JSON})
-    public Response manageOntology(InputStream content,@PathParam("scopeid") String scopeid, @Context HttpHeaders headers) {
+    public Response manageOntology(InputStream content,
+                                   @PathParam("scopeid") String scopeid,
+                                   @Context HttpHeaders headers) {
         long before = System.currentTimeMillis();
         ResponseBuilder rb;
         scope = onm.getScope(scopeid);
@@ -615,7 +611,7 @@ public class ScopeResource extends Abstr
         } catch (UnmodifiableOntologyCollectorException e) {
             throw new WebApplicationException(e, FORBIDDEN);
         }
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
@@ -633,7 +629,9 @@ public class ScopeResource extends Abstr
      */
     @POST
     @Consumes(value = MediaType.TEXT_PLAIN)
-    public Response manageOntology(String iri,@PathParam("scopeid") String scopeid, @Context HttpHeaders headers) {
+    public Response manageOntology(String iri,
+                                   @PathParam("scopeid") String scopeid,
+                                   @Context HttpHeaders headers) {
         ResponseBuilder rb;
         scope = onm.getScope(scopeid);
         if (scope == null) rb = Response.status(NOT_FOUND);
@@ -646,15 +644,17 @@ public class ScopeResource extends Abstr
         } catch (OWLOntologyCreationException e) {
             throw new WebApplicationException(e, INTERNAL_SERVER_ERROR);
         }
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
     @POST
     @Consumes({MULTIPART_FORM_DATA})
     @Produces({TEXT_HTML, TEXT_PLAIN, RDF_XML, TURTLE, X_TURTLE, N3})
-    public Response postOntology(FormDataMultiPart data, @PathParam("scopeid") String scopeid, @Context HttpHeaders headers) {
-        log.debug(" post(FormDataMultiPart data)");
+    public Response postOntology(MultiPartBody data,
+                                 @PathParam("scopeid") String scopeid,
+                                 @Context HttpHeaders headers) {
+        log.info(" post(MultiPartBody data) scope: {}", scopeid);
         ResponseBuilder rb;
         scope = onm.getScope(scopeid);
 
@@ -662,41 +662,88 @@ public class ScopeResource extends Abstr
         rb = Response.status(BAD_REQUEST);
 
         IRI location = null, library = null;
-        File file = null; // If found, it takes precedence over location.
+        FormFile file = null; // If found, it takes precedence over location.
         String format = null;
         Set<String> keys = new HashSet<String>();
-        for (BodyPart bpart : data.getBodyParts()) {
-            log.debug("is a {}", bpart.getClass());
-            if (bpart instanceof FormDataBodyPart) {
-                FormDataBodyPart dbp = (FormDataBodyPart) bpart;
-                String name = dbp.getName();
-                if (name.equals("file")) file = bpart.getEntityAs(File.class);
-                else {
-                    String value = dbp.getValue();
-                    if (name.equals("format") && !value.equals("auto")) format = value;
-                    else if (name.equals("url")) try {
-                        URI.create(value); // To throw 400 if malformed.
-                        location = IRI.create(value);
-                    } catch (Exception ex) {
-                        log.error("Malformed IRI for " + value, ex);
-                        throw new WebApplicationException(ex, BAD_REQUEST);
-                    }
-                    else if (name.equals("library") && !"null".equals(value)) try {
-                        URI.create(value); // To throw 400 if malformed.
-                        library = IRI.create(value);
-                    } catch (Exception ex) {
-                        log.error("Malformed IRI for " + value, ex);
-                        throw new WebApplicationException(ex, BAD_REQUEST);
-                    }
-                    else if (name.equals("stored") && !"null".equals(value)) {
-                        log.info("Request to manage ontology with key {}", value);
-                        keys.add(value);
-                    }
-                }
 
+        // for (BodyPart bpart : data.getBodyParts()) {
+        // log.debug("is a {}", bpart.getClass());
+        // if (bpart instanceof FormDataBodyPart) {
+        // FormDataBodyPart dbp = (FormDataBodyPart) bpart;
+        // String name = dbp.getName();
+        // if (name.equals("file")) file = bpart.getEntityAs(File.class);
+        // else {
+        // String value = dbp.getValue();
+        // if (name.equals("format") && !value.equals("auto")) format = value;
+        // else if (name.equals("url")) try {
+        // URI.create(value); // To throw 400 if malformed.
+        // location = IRI.create(value);
+        // } catch (Exception ex) {
+        // log.error("Malformed IRI for " + value, ex);
+        // throw new WebApplicationException(ex, BAD_REQUEST);
+        // }
+        // else if (name.equals("library") && !"null".equals(value)) try {
+        // URI.create(value); // To throw 400 if malformed.
+        // library = IRI.create(value);
+        // } catch (Exception ex) {
+        // log.error("Malformed IRI for " + value, ex);
+        // throw new WebApplicationException(ex, BAD_REQUEST);
+        // }
+        // else if (name.equals("stored") && !"null".equals(value)) {
+        // log.info("Request to manage ontology with key {}", value);
+        // keys.add(value);
+        // }
+        // }
+        //
+        // }
+        // }
+
+        if (data.getFormFileParameterValues("file").length > 0) {
+            file = data.getFormFileParameterValues("file")[0];
+        }
+        // else {
+        if (data.getTextParameterValues("format").length > 0) {
+            String value = data.getTextParameterValues("format")[0];
+            if (!value.equals("auto")) {
+                format = value;
+            }
+        }
+        if (data.getTextParameterValues("url").length > 0) {
+            String value = data.getTextParameterValues("url")[0];
+            try {
+                URI.create(value); // To throw 400 if malformed.
+                location = IRI.create(value);
+            } catch (Exception ex) {
+                log.error("Malformed IRI for param url " + value, ex);
+                throw new WebApplicationException(ex, BAD_REQUEST);
+            }
+        }
+        if (data.getTextParameterValues("library").length > 0) {
+            String value = data.getTextParameterValues("library")[0];
+            try {
+                URI.create(value); // To throw 400 if malformed.
+                library = IRI.create(value);
+            } catch (Exception ex) {
+                log.error("Malformed IRI for param library " + value, ex);
+                throw new WebApplicationException(ex, BAD_REQUEST);
             }
         }
-        boolean fileOk = file != null && file.canRead() && file.exists();
+        if (data.getTextParameterValues("stored").length > 0) {
+            String value = data.getTextParameterValues("stored")[0];
+            keys.add(value);
+        }
+
+        log.debug("Parameters:");
+        log.debug("file: {}", file);
+        log.debug("url: {}", location);
+        log.debug("format: {}", format);
+        log.debug("keys: {}", keys);
+
+        boolean fileOk = file != null;
+        // if(fileOk && !(file.canRead() && file.exists())){
+        // log.error("File is not accessible: {}", file);
+        // throw new WebApplicationException(INTERNAL_SERVER_ERROR);
+        // }
         if (fileOk || location != null || library != null) { // File and location take precedence
 
             // src = new GraphContentInputSource(content, format, ontologyProvider.getStore());
@@ -704,6 +751,7 @@ public class ScopeResource extends Abstr
             // Then add the file
             OntologyInputSource<?> src = null;
             if (fileOk) {
+
                 /*
                  * Because the ontology provider's load method could fail after only one attempt without
                  * resetting the stream, we might have to do that ourselves.
@@ -720,21 +768,22 @@ public class ScopeResource extends Abstr
                     String f = itf.next();
                     try {
                         // Re-instantiate the stream on every attempt
-                        InputStream content = new FileInputStream(file);
+                        InputStream content = new ByteArrayInputStream(file.getContent());
                         // ClerezzaOWLUtils.guessOntologyID(new FileInputStream(file), Parser.getInstance(),
                         // f);
                         OWLOntologyID guessed = OWLUtils.guessOntologyID(content, Parser.getInstance(), f);
+                        log.debug("guessed ontology id: {}", guessed);
                         if (guessed != null && !guessed.isAnonymous()
                             && ontologyProvider.hasOntology(guessed)) {
-                            rb = Response.status(Status.CONFLICT);
+                            // rb = Response.status(Status.CONFLICT);
                             this.submitted = guessed;
                             if (headers.getAcceptableMediaTypes().contains(MediaType.TEXT_HTML_TYPE)) {
-                                rb.entity(new Viewable("/imports/409", this));
+                                rb.entity(new Viewable("conflict.ftl", new ScopeResultData())); 
                                 rb.header(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_HTML + "; charset=utf-8");
                             }
                             break;
                         } else {
-                            content = new FileInputStream(file);
+                            content = new ByteArrayInputStream(file.getContent());
                             log.debug("Recreated input stream for format {}", f);
                             src = new GraphContentInputSource(content, f, ontologyProvider.getStore());
                         }
@@ -752,10 +801,6 @@ public class ScopeResource extends Abstr
                         failed++;
                     }
                 } while (src == null && itf.hasNext());
-//                if (src == null) {
-//                    if (failed > 0) throw new WebApplicationException(BAD_REQUEST);
-//                    else if (unsupported > 0) throw new WebApplicationException(UNSUPPORTED_MEDIA_TYPE);
-//                }
             }
 
             if (src != null) {
@@ -770,6 +815,7 @@ public class ScopeResource extends Abstr
                 } else rb = Response.ok();
             } else if (rb == null) rb = Response.status(INTERNAL_SERVER_ERROR);
         }
+
         if (!keys.isEmpty()) {
             for (String key : keys)
                 scope.getCustomSpace().addOntology(new StoredOntologySource(OntologyUtils.decode(key)));
@@ -778,7 +824,7 @@ public class ScopeResource extends Abstr
         // else throw new WebApplicationException(BAD_REQUEST);
         // rb.header(HttpHeaders.CONTENT_TYPE, TEXT_HTML + "; charset=utf-8");
         // FIXME return an appropriate response e.g. 201
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
@@ -857,8 +903,20 @@ public class ScopeResource extends Abstr
         }
 
         ResponseBuilder rb = Response.created(uriInfo.getAbsolutePath());
-//        addCORSOrigin(servletContext, rb, headers);
+        // addCORSOrigin(servletContext, rb, headers);
         return rb.build();
     }
 
+    public class ScopeResultData extends ResultData {
+
+        public OWLOntologyID getRepresentedOntologyKey() {
+            log.info("getRepresentedOntologyKey {}",ScopeResource.this.getRepresentedOntologyKey());
+            return ScopeResource.this.getRepresentedOntologyKey();
+        }
+
+        public String stringForm(OWLOntologyID ontologyID) {
+            return OntologyUtils.encode(ontologyID);
+        }
+    }
+
 }

Modified: stanbol/branches/commons-ng/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/SessionResource.java
URL: http://svn.apache.org/viewvc/stanbol/branches/commons-ng/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/SessionResource.java?rev=1531722&r1=1531721&r2=1531722&view=diff
==============================================================================
--- stanbol/branches/commons-ng/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/SessionResource.java (original)
+++ stanbol/branches/commons-ng/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/SessionResource.java Sun Oct 13 17:47:25 2013
@@ -42,6 +42,7 @@ import static org.apache.stanbol.commons
 import static org.apache.stanbol.commons.web.base.format.KRFormat.X_TURTLE;
 
 import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
@@ -76,6 +77,8 @@ import javax.ws.rs.core.Response.Respons
 import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.UriInfo;
 
+import org.apache.clerezza.jaxrs.utils.form.FormFile;
+import org.apache.clerezza.jaxrs.utils.form.MultiPartBody;
 import org.apache.clerezza.rdf.core.Graph;
 import org.apache.clerezza.rdf.core.access.TcProvider;
 import org.apache.clerezza.rdf.core.serializedform.Parser;
@@ -114,10 +117,10 @@ import org.semanticweb.owlapi.model.OWLO
 import org.semanticweb.owlapi.model.OWLOntologyStorageException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
-import com.sun.jersey.multipart.BodyPart;
-import com.sun.jersey.multipart.FormDataBodyPart;
-import com.sun.jersey.multipart.FormDataMultiPart;
+//
+//import com.sun.jersey.multipart.BodyPart;
+//import com.sun.jersey.multipart.FormDataBodyPart;
+//import com.sun.jersey.multipart.FormDataMultiPart;
 //import static org.apache.stanbol.commons.web.base.CorsHelper.addCORSOrigin;
 //import static org.apache.stanbol.commons.web.base.CorsHelper.enableCORS;
 //import org.apache.stanbol.commons.web.base.ContextHelper;
@@ -627,7 +630,7 @@ public class SessionResource extends Abs
     @POST
     @Consumes({MULTIPART_FORM_DATA})
     @Produces({WILDCARD})
-    public Response postOntology(FormDataMultiPart data, @Context HttpHeaders headers) {
+    public Response postOntology(MultiPartBody data, @Context HttpHeaders headers) {
         log.debug(" post(FormDataMultiPart data)");
         long before = System.currentTimeMillis();
         ResponseBuilder rb;
@@ -636,53 +639,96 @@ public class SessionResource extends Abs
         rb = Response.status(BAD_REQUEST);
 
         IRI location = null, library = null;
-        File file = null; // If found, it takes precedence over location.
+        FormFile file = null; // If found, it takes precedence over location.
         String format = null;
         Set<String> toAppend = null;
         Set<String> keys = new HashSet<String>();
 
-        for (BodyPart bpart : data.getBodyParts()) {
-            log.debug("Found body part of type {}", bpart.getClass());
-            if (bpart instanceof FormDataBodyPart) {
-                FormDataBodyPart dbp = (FormDataBodyPart) bpart;
-                String name = dbp.getName();
-                log.debug("Detected form parameter \"{}\".", name);
-                if (name.equals("file")) {
-                    file = bpart.getEntityAs(File.class);
-                } else {
-                    String value = dbp.getValue();
-                    if (name.equals("format") && !value.equals("auto")) {
-                        log.debug(" -- Expected format : {}", value);
-                        format = value;
-                    } else if (name.equals("url")) try {
-                        URI.create(value); // To throw 400 if malformed.
-                        location = IRI.create(value);
-                        log.debug(" -- Will load ontology from URL : {}", location);
-                    } catch (Exception ex) {
-                        log.error("Malformed IRI for " + value, ex);
-                        throw new WebApplicationException(ex, BAD_REQUEST);
-                    }
-                    else if (name.equals("library") && !"null".equals(value)) try {
-                        log.debug(" -- Library ID : {}", value);
-                        URI.create(value); // To throw 400 if malformed.
-                        library = IRI.create(value);
-                        log.debug(" ---- (is well-formed URI)");
-                    } catch (Exception ex) {
-                        log.error("Malformed IRI for " + value, ex);
-                        throw new WebApplicationException(ex, BAD_REQUEST);
-                    }
-                    else if (name.equals("stored") && !"null".equals(value)) {
-                        log.info("Request to manage ontology with key {}", value);
-                        keys.add(value);
-                    } else if (name.equals("scope")) {
-                        log.info("Request to append scope \"{}\".", value);
-                        if (toAppend == null) toAppend = new HashSet<String>();
-                        toAppend.add(value);
-                    }
-                }
+//        for (BodyPart bpart : data.getBodyParts()) {
+//            log.debug("Found body part of type {}", bpart.getClass());
+//            if (bpart instanceof FormDataBodyPart) {
+//                FormDataBodyPart dbp = (FormDataBodyPart) bpart;
+//                String name = dbp.getName();
+//                log.debug("Detected form parameter \"{}\".", name);
+//                if (name.equals("file")) {
+//                    file = bpart.getEntityAs(File.class);
+//                } else {
+//                    String value = dbp.getValue();
+//                    if (name.equals("format") && !value.equals("auto")) {
+//                        log.debug(" -- Expected format : {}", value);
+//                        format = value;
+//                    } else if (name.equals("url")) try {
+//                        URI.create(value); // To throw 400 if malformed.
+//                        location = IRI.create(value);
+//                        log.debug(" -- Will load ontology from URL : {}", location);
+//                    } catch (Exception ex) {
+//                        log.error("Malformed IRI for " + value, ex);
+//                        throw new WebApplicationException(ex, BAD_REQUEST);
+//                    }
+//                    else if (name.equals("library") && !"null".equals(value)) try {
+//                        log.debug(" -- Library ID : {}", value);
+//                        URI.create(value); // To throw 400 if malformed.
+//                        library = IRI.create(value);
+//                        log.debug(" ---- (is well-formed URI)");
+//                    } catch (Exception ex) {
+//                        log.error("Malformed IRI for " + value, ex);
+//                        throw new WebApplicationException(ex, BAD_REQUEST);
+//                    }
+//                    else if (name.equals("stored") && !"null".equals(value)) {
+//                        log.info("Request to manage ontology with key {}", value);
+//                        keys.add(value);
+//                    } else if (name.equals("scope")) {
+//                        log.info("Request to append scope \"{}\".", value);
+//                        if (toAppend == null) toAppend = new HashSet<String>();
+//                        toAppend.add(value);
+//                    }
+//                }
+//            }
+//        }
+        if (data.getFormFileParameterValues("file").length > 0) {
+            file = data.getFormFileParameterValues("file")[0];
+        }
+        // else {
+        if (data.getTextParameterValues("format").length > 0) {
+            String value = data.getTextParameterValues("format")[0];
+            if (!value.equals("auto")) {
+                format = value;
             }
         }
-        boolean fileOk = file != null && file.canRead() && file.exists();
+        if (data.getTextParameterValues("url").length > 0) {
+            String value = data.getTextParameterValues("url")[0];
+            try {
+                URI.create(value); // To throw 400 if malformed.
+                location = IRI.create(value);
+            } catch (Exception ex) {
+                log.error("Malformed IRI for param url " + value, ex);
+                throw new WebApplicationException(ex, BAD_REQUEST);
+            }
+        }
+        if (data.getTextParameterValues("library").length > 0) {
+            String value = data.getTextParameterValues("library")[0];
+            try {
+                URI.create(value); // To throw 400 if malformed.
+                library = IRI.create(value);
+            } catch (Exception ex) {
+                log.error("Malformed IRI for param library " + value, ex);
+                throw new WebApplicationException(ex, BAD_REQUEST);
+            }
+        }
+        if (data.getTextParameterValues("stored").length > 0) {
+            String value = data.getTextParameterValues("stored")[0];
+            keys.add(value);
+        }
+        if (data.getTextParameterValues("scope").length > 0) {
+            String value = data.getTextParameterValues("scope")[0];
+            log.info("Request to append scope \"{}\".", value);
+            if (toAppend == null) {
+                toAppend = new HashSet<String>();
+            }
+            toAppend.add(value);
+        }
+        
+        boolean fileOk = file != null;
         if (fileOk || location != null || library != null) { // File and location take precedence
             // Then add the file
             OntologyInputSource<?> src = null;
@@ -695,7 +741,7 @@ public class SessionResource extends Abs
                         log.debug("Trying format {}.", f);
                         long b4buf = System.currentTimeMillis();
                         // Recreate the stream on each attempt
-                        InputStream content = new BufferedInputStream(new FileInputStream(file));
+                        InputStream content = new BufferedInputStream(new ByteArrayInputStream(file.getContent()));
                         log.debug("Streams created in {} ms", System.currentTimeMillis() - b4buf);
                         log.debug("Creating ontology input source...");
                         b4buf = System.currentTimeMillis();
@@ -709,7 +755,7 @@ public class SessionResource extends Abs
                                 rb.header(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_HTML + "; charset=utf-8");
                             }
                         } else {
-                            content = new BufferedInputStream(new FileInputStream(file));
+                            content = new BufferedInputStream(new ByteArrayInputStream(file.getContent()));
                             src = new GraphContentInputSource(content, f, ontologyProvider.getStore());
                         }
                         log.debug("Done in {} ms", System.currentTimeMillis() - b4buf);