You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by rw...@apache.org on 2012/07/25 12:12:28 UTC

svn commit: r1365511 - in /incubator/stanbol/trunk: enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/ integration-tests/src/test/java/org/apache/stanbol/e...

Author: rwesten
Date: Wed Jul 25 10:12:28 2012
New Revision: 1365511

URL: http://svn.apache.org/viewvc?rev=1365511&view=rev
Log:
fixes STANBOL-702: The Stanbol Enhancer now correctly uses parsed content item URIs ('uri' query parameter). Also added an integration-test for this.

Modified:
    incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ContentItemReader.java
    incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/AbstractEnhancerResource.java
    incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/AbstractEnhancerUiResource.java
    incubator/stanbol/trunk/integration-tests/src/test/java/org/apache/stanbol/enhancer/it/DefaultChainTest.java

Modified: incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ContentItemReader.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ContentItemReader.java?rev=1365511&r1=1365510&r2=1365511&view=diff
==============================================================================
--- incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ContentItemReader.java (original)
+++ incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ContentItemReader.java Wed Jul 25 10:12:28 2012
@@ -36,6 +36,7 @@ import java.util.Map;
 import java.util.Set;
 
 import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
@@ -73,7 +74,12 @@ public class ContentItemReader implement
     private Parser __parser;
     private ServletContext context;
     private ContentItemFactory __ciFactory;
-    
+    /**
+     * Used to read the queryParameter with the ContentItem ID
+     */
+    @Context
+    private HttpServletRequest request;
+
     public static final MediaType MULTIPART = MediaType.valueOf(MediaType.MULTIPART_FORM_DATA_TYPE.getType()+"/*");
 
     public ContentItemReader(@Context ServletContext context) {
@@ -132,12 +138,12 @@ public class ContentItemReader implement
                                 InputStream entityStream) throws IOException, WebApplicationException {
         //boolean withMetadata = withMetadata(httpHeaders);
         ContentItem contentItem = null;
+        UriRef contentItemId = getContentItemId();
         Set<String> parsedContentIds = new HashSet<String>();
         if(mediaType.isCompatible(MULTIPART)){
             //try to read ContentItem from "multipart/from-data"
             MGraph metadata = null;
             FileItemIterator fileItemIterator;
-            String contentItemId = null;
             try {
                 fileItemIterator = fu.getItemIterator(new MessageBodyReaderContext(entityStream, mediaType));
                 while(fileItemIterator.hasNext()){
@@ -151,8 +157,9 @@ public class ContentItemReader implement
                                 		"'content'!").build());
                         }
                         //the metadata may define the ID for the contentItem
-                        if(fis.getName() != null && !fis.getName().isEmpty()){
-                            contentItemId = fis.getName();
+                        //only used if not parsed as query param
+                        if(contentItemId == null && fis.getName() != null && !fis.getName().isEmpty()){
+                            contentItemId = new UriRef(fis.getName());
                         }
                         metadata = new IndexedMGraph();
                         try {
@@ -251,7 +258,7 @@ public class ContentItemReader implement
             }
         } else { //normal content
             ContentItemFactory ciFactory = getContentItemFactory();
-            contentItem = ciFactory.createContentItem(
+            contentItem = ciFactory.createContentItem(contentItemId,
                 new StreamSource(entityStream, mediaType.toString()));
             //add the URI of the main content
             parsedContentIds.add(contentItem.getPartUri(0).getUnicodeString());
@@ -262,6 +269,16 @@ public class ContentItemReader implement
         return contentItem;
     }
     /**
+     * tries to retrieve the ContentItem from the 'uri' query parameter of the
+     * {@link #request}.
+     * @return the parsed URI or <code>null</code> if none
+     */
+    private UriRef getContentItemId() {
+        //NOTE: check for request NULL is needed because of unit tests
+        String ciUri = request == null ? null : request.getParameter("uri");
+        return ciUri == null ? null : new UriRef(ciUri);
+    }
+    /**
      * Creates a ContentItem
      * @param id the ID or <code>null</code> if not known
      * @param metadata the metadata or <code>null</code> if not parsed. NOTE that
@@ -280,7 +297,7 @@ public class ContentItemReader implement
      * @throws FileUploadException if the parsed contents are not correctly
      * encoded Multipoart MIME
      */
-    private ContentItem createContentItem(String id, MGraph metadata, FileItemStream content,Set<String> parsedContentParts) throws IOException, FileUploadException {
+    private ContentItem createContentItem(UriRef id, MGraph metadata, FileItemStream content,Set<String> parsedContentParts) throws IOException, FileUploadException {
         MediaType partContentType = MediaType.valueOf(content.getContentType());
         ContentItem contentItem = null;
         ContentItemFactory ciFactory = getContentItemFactory();
@@ -294,7 +311,7 @@ public class ContentItemReader implement
                 if(contentItem == null){
                     log.debug("create ContentItem {} for content (type:{})",
                         id,content.getContentType());
-                    contentItem = ciFactory.createContentItem(id != null ? new UriRef(id) : (UriRef)null,
+                    contentItem = ciFactory.createContentItem(id,
                         new StreamSource(fis.openStream(),fis.getContentType()), 
                         metadata);
                 } else {
@@ -316,7 +333,7 @@ public class ContentItemReader implement
         } else {
             log.debug("create ContentItem {} for content (type:{})",
                 id,content.getContentType());
-            contentItem = ciFactory.createContentItem(new UriRef(id),
+            contentItem = ciFactory.createContentItem(id,
                 new StreamSource(content.openStream(),content.getContentType()), 
                 metadata);
         }

Modified: incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/AbstractEnhancerResource.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/AbstractEnhancerResource.java?rev=1365511&r1=1365510&r2=1365511&view=diff
==============================================================================
--- incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/AbstractEnhancerResource.java (original)
+++ incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/AbstractEnhancerResource.java Wed Jul 25 10:12:28 2012
@@ -172,7 +172,8 @@ public abstract class AbstractEnhancerRe
     @POST
     @Consumes(WILDCARD)
     public Response enhanceFromData(ContentItem ci,
-            @QueryParam(value = "uri") String uri,
+            //NOTE: The 'uri' parameter is already consumed by the ContentItemReader
+            //@QueryParam(value = "uri") String uri,
             @QueryParam(value = "executionmetadata") boolean inclExecMetadata,
             @QueryParam(value = "outputContent") Set<String> mediaTypes,
             @QueryParam(value = "omitParsed") boolean omitParsed,

Modified: incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/AbstractEnhancerUiResource.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/AbstractEnhancerUiResource.java?rev=1365511&r1=1365510&r2=1365511&view=diff
==============================================================================
--- incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/AbstractEnhancerUiResource.java (original)
+++ incubator/stanbol/trunk/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/resource/AbstractEnhancerUiResource.java Wed Jul 25 10:12:28 2012
@@ -119,7 +119,7 @@ public abstract class AbstractEnhancerUi
         log.info("enhance from From: " + content);
         ContentItem ci = ciFactory.createContentItem(new StringSource(content));
         if(!buildAjaxview){ //rewrite to a normal EnhancementRequest
-            return enhanceFromData(ci, null, false, null, false, null, false, null, headers);
+            return enhanceFromData(ci, false, null, false, null, false, null, headers);
         } else { //enhance and build the AJAX response
             EnhancementException enhancementException;
             try {

Modified: incubator/stanbol/trunk/integration-tests/src/test/java/org/apache/stanbol/enhancer/it/DefaultChainTest.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/integration-tests/src/test/java/org/apache/stanbol/enhancer/it/DefaultChainTest.java?rev=1365511&r1=1365510&r2=1365511&view=diff
==============================================================================
--- incubator/stanbol/trunk/integration-tests/src/test/java/org/apache/stanbol/enhancer/it/DefaultChainTest.java (original)
+++ incubator/stanbol/trunk/integration-tests/src/test/java/org/apache/stanbol/enhancer/it/DefaultChainTest.java Wed Jul 25 10:12:28 2012
@@ -91,6 +91,25 @@ public class DefaultChainTest extends En
                 + " of the POSTed text. Output format is defined by the Accept header."
         );
     }
+    /**
+     * Validates that parsed contentItem URIs are used by the Stanbol Enhancer
+     * (STANBOL-702)
+     * @throws Exception
+     */
+    @Test
+    public void testParsedContentItemUri() throws Exception {
+        String uri = "http://test.stanbol.org/uriTest/"
+                + Math.round(Math.random()*1000.0);
+        executor.execute(
+            builder.buildPostRequest(getEndpoint()+"?uri="+uri)
+            .withHeader("Accept","text/rdf+nt")
+            .withContent("The Stanbol enhancer can detect famous cities such as Paris and people such as Bob Marley.")
+        )
+        .assertStatus(200)
+        .assertContentRegexp(
+                "<http://fise.iks-project.eu/ontology/extracted-from> <"+uri+"> ."
+        );
+    }
     
     @Test
     public void testOutputFormats() throws Exception {