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 2011/08/22 18:58:43 UTC

svn commit: r1160332 - in /incubator/stanbol/branches/jena-reasoners/reasoners: hermit/src/main/java/org/apache/stanbol/reasoners/hermit/ jena/src/main/java/org/apache/stanbol/reasoners/jena/ manager/src/main/java/org/apache/stanbol/reasoners/manager/ ...

Author: enridaga
Date: Mon Aug 22 16:58:42 2011
New Revision: 1160332

URL: http://svn.apache.org/viewvc?rev=1160332&view=rev
Log:
Few steps on STANBOL-185.
* The path of a reasoning service can be configured via OSGi console
* Added a asImmutableSet() method to the ReasoningServiceManager to provide an immutable set of services (for utility, example in a template to iterate the list of available services)
* Added owlapi and jena modules to the web in pom.xml
* Created a new resource ReasoningServiceTaskResource, to start understanding how to bind rest requests to reasoning services in a smart way. A basic try have been done get() method.
* An initial writer for Jena Model have been added.

Added:
    incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource.java
    incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/writers/
    incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/writers/JenaModelWriter.java
    incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource/
    incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource/index.ftl
    incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource/jena-model.ftl
    incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServicesResource/
    incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServicesResource/index.ftl
Modified:
    incubator/stanbol/branches/jena-reasoners/reasoners/hermit/src/main/java/org/apache/stanbol/reasoners/hermit/HermitReasoningService.java
    incubator/stanbol/branches/jena-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/JenaOWLMiniReasoningService.java
    incubator/stanbol/branches/jena-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/JenaOWLReasoningService.java
    incubator/stanbol/branches/jena-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/JenaRDFSReasoningService.java
    incubator/stanbol/branches/jena-reasoners/reasoners/manager/src/main/java/org/apache/stanbol/reasoners/manager/ReasoningServicesManagerImpl.java
    incubator/stanbol/branches/jena-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServicesManager.java
    incubator/stanbol/branches/jena-reasoners/reasoners/web/pom.xml
    incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/ReasonersFragment.java
    incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/ReasoningServicesResource.java

Modified: incubator/stanbol/branches/jena-reasoners/reasoners/hermit/src/main/java/org/apache/stanbol/reasoners/hermit/HermitReasoningService.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/hermit/src/main/java/org/apache/stanbol/reasoners/hermit/HermitReasoningService.java?rev=1160332&r1=1160331&r2=1160332&view=diff
==============================================================================
--- incubator/stanbol/branches/jena-reasoners/reasoners/hermit/src/main/java/org/apache/stanbol/reasoners/hermit/HermitReasoningService.java (original)
+++ incubator/stanbol/branches/jena-reasoners/reasoners/hermit/src/main/java/org/apache/stanbol/reasoners/hermit/HermitReasoningService.java Mon Aug 22 16:58:42 2011
@@ -1,11 +1,13 @@
 package org.apache.stanbol.reasoners.hermit;
 
+import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.stanbol.reasoners.owlapi.AbstractOWLApiReasoningService;
 import org.apache.stanbol.reasoners.owlapi.OWLApiReasoningService;
 import org.apache.stanbol.reasoners.servicesapi.ReasoningService;
+import org.osgi.service.component.ComponentContext;
 import org.semanticweb.HermiT.Configuration;
 import org.semanticweb.HermiT.Reasoner.ReasonerFactory;
 import org.semanticweb.owlapi.model.OWLOntology;
@@ -19,8 +21,10 @@ import org.semanticweb.owlapi.reasoner.O
 @Service
 public class HermitReasoningService extends AbstractOWLApiReasoningService
 		implements OWLApiReasoningService, ReasoningService {
-	@Property(value = "hermit")
-	private static final String PATH = ReasoningService.SERVICE_PATH;
+	public static final String _DEFAULT_PATH = "hermit";
+
+	@Property(name = ReasoningService.SERVICE_PATH, value = _DEFAULT_PATH)
+	private String path;
 
 	@Override
 	protected OWLReasoner getReasoner(OWLOntology ontology) {
@@ -32,6 +36,10 @@ public class HermitReasoningService exte
 
 	@Override
 	public String getPath() {
-		return PATH;
+		return path;
+	}
+	@Activate
+	public void activate(ComponentContext context){
+		this.path = (String) context.getProperties().get(ReasoningService.SERVICE_PATH);
 	}
 }

Modified: incubator/stanbol/branches/jena-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/JenaOWLMiniReasoningService.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/JenaOWLMiniReasoningService.java?rev=1160332&r1=1160331&r2=1160332&view=diff
==============================================================================
--- incubator/stanbol/branches/jena-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/JenaOWLMiniReasoningService.java (original)
+++ incubator/stanbol/branches/jena-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/JenaOWLMiniReasoningService.java Mon Aug 22 16:58:42 2011
@@ -1,9 +1,11 @@
 package org.apache.stanbol.reasoners.jena;
 
+import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.stanbol.reasoners.servicesapi.ReasoningService;
+import org.osgi.service.component.ComponentContext;
 
 import com.hp.hpl.jena.reasoner.ReasonerRegistry;
 
@@ -14,8 +16,10 @@ import com.hp.hpl.jena.reasoner.Reasoner
 @Service
 public class JenaOWLMiniReasoningService extends AbstractJenaReasoningService
 		implements ReasoningService {
-	@Property(value = "owlmini")
-	private static final String PATH = ReasoningService.SERVICE_PATH;
+	public static final String _DEFAULT_PATH = "owlmini";
+
+	@Property(name = ReasoningService.SERVICE_PATH, value = _DEFAULT_PATH)
+	private String path;
 
 	public JenaOWLMiniReasoningService() {
 		super(ReasonerRegistry.getOWLMiniReasoner());
@@ -23,6 +27,11 @@ public class JenaOWLMiniReasoningService
 
 	@Override
 	public String getPath() {
-		return PATH;
+		return path;
+	}
+		
+	@Activate
+	public void activate(ComponentContext context){
+		this.path = (String) context.getProperties().get(ReasoningService.SERVICE_PATH);
 	}
 }

Modified: incubator/stanbol/branches/jena-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/JenaOWLReasoningService.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/JenaOWLReasoningService.java?rev=1160332&r1=1160331&r2=1160332&view=diff
==============================================================================
--- incubator/stanbol/branches/jena-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/JenaOWLReasoningService.java (original)
+++ incubator/stanbol/branches/jena-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/JenaOWLReasoningService.java Mon Aug 22 16:58:42 2011
@@ -1,9 +1,11 @@
 package org.apache.stanbol.reasoners.jena;
 
+import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.stanbol.reasoners.servicesapi.ReasoningService;
+import org.osgi.service.component.ComponentContext;
 
 import com.hp.hpl.jena.reasoner.ReasonerRegistry;
 
@@ -14,9 +16,10 @@ import com.hp.hpl.jena.reasoner.Reasoner
 @Service
 public class JenaOWLReasoningService extends AbstractJenaReasoningService
 		implements ReasoningService {
-
-	@Property(value = "owl")
-	private static final String PATH = ReasoningService.SERVICE_PATH;
+	public static final String _DEFAULT_PATH = "owl";
+	
+	@Property(name = ReasoningService.SERVICE_PATH, value = _DEFAULT_PATH)
+	private String path;
 	
 	public JenaOWLReasoningService() {
 		super(ReasonerRegistry.getOWLReasoner());
@@ -24,6 +27,10 @@ public class JenaOWLReasoningService ext
 
 	@Override
 	public String getPath() {
-		return PATH;
+		return path;
+	}
+	@Activate
+	public void activate(ComponentContext context){
+		this.path = (String) context.getProperties().get(ReasoningService.SERVICE_PATH);
 	}
 }

Modified: incubator/stanbol/branches/jena-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/JenaRDFSReasoningService.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/JenaRDFSReasoningService.java?rev=1160332&r1=1160331&r2=1160332&view=diff
==============================================================================
--- incubator/stanbol/branches/jena-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/JenaRDFSReasoningService.java (original)
+++ incubator/stanbol/branches/jena-reasoners/reasoners/jena/src/main/java/org/apache/stanbol/reasoners/jena/JenaRDFSReasoningService.java Mon Aug 22 16:58:42 2011
@@ -1,9 +1,11 @@
 package org.apache.stanbol.reasoners.jena;
 
+import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.stanbol.reasoners.servicesapi.ReasoningService;
+import org.osgi.service.component.ComponentContext;
 
 import com.hp.hpl.jena.reasoner.ReasonerRegistry;
 
@@ -17,9 +19,10 @@ import com.hp.hpl.jena.reasoner.Reasoner
 @Service
 public class JenaRDFSReasoningService extends AbstractJenaReasoningService
 		implements ReasoningService {
+	public static final String _DEFAULT_PATH = "rdfs";
 
-	@Property(value = "rdfs")
-	private static final String PATH = ReasoningService.SERVICE_PATH;
+	@Property(name = ReasoningService.SERVICE_PATH, value = _DEFAULT_PATH)
+	private String path;
 
 	public JenaRDFSReasoningService() {
 		super(ReasonerRegistry.getRDFSReasoner());
@@ -27,6 +30,10 @@ public class JenaRDFSReasoningService ex
 
 	@Override
 	public String getPath() {
-		return PATH;
+		return path;
+	}
+	@Activate
+	public void activate(ComponentContext context){
+		this.path = (String) context.getProperties().get(ReasoningService.SERVICE_PATH);
 	}
 }

Modified: incubator/stanbol/branches/jena-reasoners/reasoners/manager/src/main/java/org/apache/stanbol/reasoners/manager/ReasoningServicesManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/manager/src/main/java/org/apache/stanbol/reasoners/manager/ReasoningServicesManagerImpl.java?rev=1160332&r1=1160331&r2=1160332&view=diff
==============================================================================
--- incubator/stanbol/branches/jena-reasoners/reasoners/manager/src/main/java/org/apache/stanbol/reasoners/manager/ReasoningServicesManagerImpl.java (original)
+++ incubator/stanbol/branches/jena-reasoners/reasoners/manager/src/main/java/org/apache/stanbol/reasoners/manager/ReasoningServicesManagerImpl.java Mon Aug 22 16:58:42 2011
@@ -1,5 +1,6 @@
 package org.apache.stanbol.reasoners.manager;
 
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -25,16 +26,16 @@ public class ReasoningServicesManagerImp
 
 	public void bindReasoningService(ReasoningService service) {
 		services.add(service);
-		log.info("Reasoning service {} added to path {}", service,
+		log.debug("Reasoning service {} added to path {}", service,
 				service.getPath());
-		log.info("{} services bound.", services.size());
+		log.debug("{} services bound.", services.size());
 	}
 
 	public void unbindReasoningService(ReasoningService service) {
 		services.remove(service);
-		log.info("Reasoning service {} removed from path {}", service,
+		log.debug("Reasoning service {} removed from path {}", service,
 				service.getPath());
-		log.info("{} services bound.", services.size());
+		log.debug("{} services bound.", services.size());
 	}
 
 	/*
@@ -50,11 +51,17 @@ public class ReasoningServicesManagerImp
 	@Override
 	public ReasoningService get(String path) throws UnboundReasoningServiceException {
 		for (ReasoningService service : services) {
+			log.debug("Does service {} match path {}?",service,path);
 			if (service.getPath().equals(path)) {
 				return service;
 			}
 		}
 		throw new UnboundReasoningServiceException();
 	}
+	
+	@Override
+	public Set<ReasoningService> asUnmodifiableSet(){
+		return Collections.unmodifiableSet(services);
+	}
 }
 

Modified: incubator/stanbol/branches/jena-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServicesManager.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServicesManager.java?rev=1160332&r1=1160331&r2=1160332&view=diff
==============================================================================
--- incubator/stanbol/branches/jena-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServicesManager.java (original)
+++ incubator/stanbol/branches/jena-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServicesManager.java Mon Aug 22 16:58:42 2011
@@ -1,5 +1,7 @@
 package org.apache.stanbol.reasoners.servicesapi;
 
+import java.util.Set;
+
 public interface ReasoningServicesManager {
 
 	public abstract int size();
@@ -7,4 +9,6 @@ public interface ReasoningServicesManage
 	public abstract ReasoningService get(String path)
 			throws UnboundReasoningServiceException;
 
+	public abstract Set<ReasoningService> asUnmodifiableSet();
+
 }

Modified: incubator/stanbol/branches/jena-reasoners/reasoners/web/pom.xml
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/web/pom.xml?rev=1160332&r1=1160331&r2=1160332&view=diff
==============================================================================
--- incubator/stanbol/branches/jena-reasoners/reasoners/web/pom.xml (original)
+++ incubator/stanbol/branches/jena-reasoners/reasoners/web/pom.xml Mon Aug 22 16:58:42 2011
@@ -347,7 +347,16 @@
     <artifactId>org.apache.stanbol.reasoners.servicesapi</artifactId>
     <version>0.1</version>
     </dependency>
-    
+    <dependency>
+    <groupId>org.apache.stanbol</groupId>
+    <artifactId>org.apache.stanbol.reasoners.jena</artifactId>
+    <version>0.1</version>
+    </dependency>
+    <dependency>
+    <groupId>org.apache.stanbol</groupId>
+    <artifactId>org.apache.stanbol.reasoners.owlapi</artifactId>
+    <version>0.1</version>
+    </dependency>    
     <dependency>
       <groupId>com.hp.hpl.jena</groupId>
       <artifactId>jena</artifactId>

Modified: incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/ReasonersFragment.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/ReasonersFragment.java?rev=1160332&r1=1160331&r2=1160332&view=diff
==============================================================================
--- incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/ReasonersFragment.java (original)
+++ incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/ReasonersFragment.java Mon Aug 22 16:58:42 2011
@@ -37,7 +37,9 @@ import org.apache.stanbol.reasoners.web.
 import org.apache.stanbol.reasoners.web.resources.ConsistentRefactoring;
 import org.apache.stanbol.reasoners.web.resources.Enrichment;
 import org.apache.stanbol.reasoners.web.resources.ReasonersResource;
+import org.apache.stanbol.reasoners.web.resources.ReasoningServiceTaskResource;
 import org.apache.stanbol.reasoners.web.resources.ReasoningServicesResource;
+import org.apache.stanbol.reasoners.web.writers.JenaModelWriter;
 import org.apache.stanbol.rules.base.api.RuleStore;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.component.ComponentContext;
@@ -88,8 +90,12 @@ public class ReasonersFragment implement
         classes.add(ConsistentRefactoring.class);
         classes.add(Classify.class);
         classes.add(Enrichment.class);
+        
         classes.add(ReasoningServicesResource.class);
+        classes.add(ReasoningServiceTaskResource.class);
         
+        // Writer
+        classes.add(JenaModelWriter.class);
         return classes;
     }
 

Added: incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource.java?rev=1160332&view=auto
==============================================================================
--- incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource.java (added)
+++ incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource.java Mon Aug 22 16:58:42 2011
@@ -0,0 +1,210 @@
+package org.apache.stanbol.reasoners.web.resources;
+
+import static javax.ws.rs.core.MediaType.MULTIPART_FORM_DATA;
+import static javax.ws.rs.core.MediaType.TEXT_HTML;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+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.QueryParam;
+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 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.reasoners.jena.JenaReasoningService;
+import org.apache.stanbol.reasoners.owlapi.OWLApiReasoningService;
+import org.apache.stanbol.reasoners.servicesapi.ReasoningService;
+import org.apache.stanbol.reasoners.servicesapi.ReasoningServicesManager;
+import org.apache.stanbol.reasoners.servicesapi.UnboundReasoningServiceException;
+import org.apache.stanbol.reasoners.web.writers.JenaModelWriter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.hp.hpl.jena.rdf.model.Model;
+import com.hp.hpl.jena.rdf.model.ModelFactory;
+import com.hp.hpl.jena.rdf.model.Statement;
+import com.sun.jersey.api.view.Viewable;
+import com.sun.jersey.multipart.FormDataParam;
+
+@Path("/reasoners/services/{service}/{task}")
+public class ReasoningServiceTaskResource extends BaseStanbolResource {
+	private Logger log = LoggerFactory.getLogger(getClass());
+	private ServletContext context;
+
+	/**
+	 * TODO: We may want to extend the possible tasks in the future, demanding
+	 * the execution to some delegate...
+	 */
+	public static final String[] TASKS = { "enrich", "classify", "check" };
+
+	private ReasoningService service;
+	private String taskID;
+
+	public ReasoningServiceTaskResource(
+			@PathParam(value = "service") String serviceID,
+			@PathParam(value = "task") String taskID,
+			@Context ServletContext servletContext) {
+		super();
+		this.context = servletContext;
+		// Retrieve the service
+		try {
+			service = getService(serviceID);
+		} catch (UnboundReasoningServiceException e) {
+			log.error("Service not found: {}", serviceID);
+			throw new WebApplicationException(e, Response.Status.NOT_FOUND);
+		}
+		// Check if the task is allowed
+		if (Arrays.asList(TASKS).contains(taskID)) {
+			this.taskID = taskID;
+		} else {
+			log.error("Unsupported task (not found): {}", taskID);
+			throw new WebApplicationException(new Exception(
+					"Unsupported task (not found): " + taskID),
+					Response.Status.BAD_REQUEST);
+		}
+
+		// Now we check if the service implementation is supported
+		if (getCurrentService() instanceof JenaReasoningService) {
+		} else if (getCurrentService() instanceof OWLApiReasoningService) {
+		} else {
+			log.error(
+					"This implementation of ReasoningService is not supported: {}",
+					getCurrentService().getClass());
+			throw new WebApplicationException(new Exception(
+					"This implementation of ReasoningService is not supported: "
+							+ getCurrentService().getClass()),
+					Response.Status.INTERNAL_SERVER_ERROR);
+		}
+	}
+
+	@POST
+	@Consumes({ MULTIPART_FORM_DATA })
+	@Produces({ TEXT_HTML, KRFormat.RDF_XML, KRFormat.TURTLE, KRFormat.OWL_XML })
+	public Response postData(@FormDataParam("file") File file) {
+		log.info("Called POST on service {} to perform task {}", service,
+				taskID);
+		log.info("on input file: {}", file);
+		return Response.ok(new Viewable("index", this), TEXT_HTML).build();
+	}
+
+	@GET
+	@Produces({ TEXT_HTML, "text/plain", KRFormat.RDF_XML, KRFormat.TURTLE,
+			"text/turtle", "text/n3" })
+	public Response get(@QueryParam("url") String url,
+			@Context HttpHeaders headers) {
+		log.info("Called GET on service {} to perform task {}", service, taskID);
+		log.info("on input url: {}", url);
+		//
+		if (getCurrentService() instanceof JenaReasoningService) {
+			JenaReasoningService s = (JenaReasoningService) getCurrentService();
+
+			if (getCurrentTask().equals("check")) {
+				log.info("Task is 'check'");
+				boolean isConsistent;
+				isConsistent = s.isConsistent(ModelFactory.createDefaultModel()
+						.read(url));
+				if (isConsistent) {
+					log.info("Is consistent");
+					return Response.ok().build();
+				} else {
+					log.info("Is not consistent");
+					return Response.status(Status.NO_CONTENT).build();
+				}
+			}
+
+			Set<Statement> result = null;
+			if (getCurrentTask().equals("classify")) {
+				result = s
+						.classify(ModelFactory.createDefaultModel().read(url));
+			} else if (getCurrentTask().equals("enrich")) {
+				log.info("Task is: 'enrich'");
+				result = s.enrich(ModelFactory.createDefaultModel().read(url));
+			}
+			if (result == null) {
+				log.error("Result is null");
+				throw new WebApplicationException();
+			}
+			log.info("Returning {} statements", result.size());
+			Model outputModel = ModelFactory.createDefaultModel();
+			outputModel.add(result.toArray(new Statement[result.size()]));
+			
+			// We only want to state if HTML format is the preferred format
+			// requested
+			Set<String> htmlformats = new HashSet<String>();
+			htmlformats.add(TEXT_HTML);
+			Set<String> rdfformats = new HashSet<String>();
+			String[] formats = { TEXT_HTML, "text/plain", KRFormat.RDF_XML, KRFormat.TURTLE,
+					"text/turtle", "text/n3" };
+			rdfformats.addAll(Arrays.asList(formats));
+			List<MediaType> mediaTypes = headers.getAcceptableMediaTypes();
+			for (MediaType t : mediaTypes) {
+				String strty = t.toString();
+				log.info("Acceptable is {}", t);
+				if (htmlformats.contains(strty)) {
+					log.info("EQUAL!!! is {}", t);
+					return Response.ok(
+							new Viewable("jena-model",
+									new JenaModelWriter().toStream(outputModel,
+											"text/n3")), TEXT_HTML).build();
+				}else if(rdfformats.contains(strty)){
+					return Response.ok(outputModel).build();					
+				}
+			}
+
+		} else if (getCurrentService() instanceof OWLApiReasoningService) {
+			// TODO
+			throw new WebApplicationException(new Exception(
+					"Unsupported implementation"),
+					Response.Status.INTERNAL_SERVER_ERROR);
+		}
+		throw new WebApplicationException(new Exception(
+				"Unsupported implementation"),
+				Response.Status.INTERNAL_SERVER_ERROR);
+	}
+
+	public ReasoningService getCurrentService() {
+		return this.service;
+	}
+
+	public String getCurrentTask() {
+		return this.taskID;
+	}
+
+	public List<String> getSupportedTasks() {
+		return Arrays.asList(ReasoningServiceTaskResource.TASKS);
+	}
+
+	private ReasoningService getService(String servicePath)
+			throws UnboundReasoningServiceException {
+		return getServicesManager().get(servicePath);
+	}
+
+	private ReasoningServicesManager getServicesManager() {
+		log.debug("(getServicesManager()) ");
+		return (ReasoningServicesManager) ContextHelper.getServiceFromContext(
+				ReasoningServicesManager.class, this.context);
+	}
+
+	public Set<ReasoningService> getActiveServices() {
+		log.debug("(getActiveServices()) There are {} reasoning services",
+				getServicesManager().size());
+		return getServicesManager().asUnmodifiableSet();
+	}
+}

Modified: incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/ReasoningServicesResource.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/ReasoningServicesResource.java?rev=1160332&r1=1160331&r2=1160332&view=diff
==============================================================================
--- incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/ReasoningServicesResource.java (original)
+++ incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/ReasoningServicesResource.java Mon Aug 22 16:58:42 2011
@@ -2,13 +2,15 @@ package org.apache.stanbol.reasoners.web
 
 import static javax.ws.rs.core.MediaType.TEXT_HTML;
 
+import java.util.Set;
+
 import javax.servlet.ServletContext;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
 
 import org.apache.stanbol.commons.web.base.ContextHelper;
 import org.apache.stanbol.commons.web.base.resource.BaseStanbolResource;
@@ -17,24 +19,45 @@ import org.apache.stanbol.reasoners.serv
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.sun.jersey.api.view.ImplicitProduces;
 import com.sun.jersey.api.view.Viewable;
 
 @Path("/reasoners/services")
-@ImplicitProduces(MediaType.TEXT_HTML)
 public class ReasoningServicesResource extends BaseStanbolResource {
 	private Logger log = LoggerFactory.getLogger(getClass());
 	private ServletContext context;
-
-	public ReasoningServicesResource(@Context ServletContext servletContext) {
+	private UriInfo uriInfo;
+	
+	public ReasoningServicesResource(@Context ServletContext servletContext, @Context UriInfo uriInfo) {
+		super();
 		this.context = servletContext;
+		this.uriInfo = uriInfo;
+	}
+
+	public String getCurrentPath(){
+		return uriInfo.getPath();
+	}
+	
+	public String[] getTasks(){
+		return ReasoningServiceTaskResource.TASKS;
 	}
 
 	@GET
 	@Produces(TEXT_HTML)
-	public Response getView() {
-		ReasoningServicesManager services = (ReasoningServicesManager) ContextHelper.getServiceFromContext(
-				ReasoningServicesManager.class, this.context);
-		return Response.ok("Services: " + services.size(), TEXT_HTML).build();
+	public Response getDocumentation() {
+		return Response.ok(new Viewable("index", this), TEXT_HTML).build();
 	}
+
+	
+	private ReasoningServicesManager getServicesManager(){
+		log.debug("(getServicesManager()) ");
+		return  (ReasoningServicesManager) ContextHelper
+				.getServiceFromContext(ReasoningServicesManager.class,
+						this.context);
+	}
+	public Set<ReasoningService> getActiveServices() {
+		log.debug("(getActiveServices()) There are {} reasoning services",
+				getServicesManager().size());
+		return getServicesManager().asUnmodifiableSet();
+	}
+
 }

Added: incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/writers/JenaModelWriter.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/writers/JenaModelWriter.java?rev=1160332&view=auto
==============================================================================
--- incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/writers/JenaModelWriter.java (added)
+++ incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/writers/JenaModelWriter.java Mon Aug 22 16:58:42 2011
@@ -0,0 +1,79 @@
+package org.apache.stanbol.reasoners.web.writers;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.hp.hpl.jena.rdf.model.Model;
+import com.hp.hpl.jena.rdf.model.RDFWriter;
+
+@Provider
+@Produces({"application/rdf+xml","text/turtle","text/n3","text/plain","application/turtle"})
+public class JenaModelWriter implements MessageBodyWriter<Model> {
+	private final Logger log = LoggerFactory.getLogger(getClass());
+
+	@Override
+	public boolean isWriteable(Class<?> type, Type genericType,
+			Annotation[] annotations, MediaType mediaType) {
+		return Model.class.isAssignableFrom(type);
+	}
+
+	private ByteArrayOutputStream stream = null;
+
+	@Override
+	public long getSize(Model t, Class<?> type, Type genericType,
+			Annotation[] annotations, MediaType mediaType) {
+		log.debug("Called size of item");
+		stream = toStream(t, mediaType.toString());
+		log.error("Returning {} bytes",stream.size());
+		return Integer.valueOf(stream.toByteArray().length).longValue();
+	}
+
+	public ByteArrayOutputStream toStream(Model t, String mediaType) {
+		log.info("Serializing model to {}. Statements are {}",mediaType, t.listStatements().toSet().size());
+		ByteArrayOutputStream stream = new ByteArrayOutputStream();
+		if (mediaType.equals("application/rdf+xml")) {
+			t.write(stream);
+		}else if (mediaType.equals("application/turtle")){
+			//t.write(stream, "TURTLE");
+			RDFWriter writer = t.getWriter("TURTLE");
+			log.info("Writer for TURTLE: {}",writer);
+			writer.write(t, stream, null);
+		}else if (mediaType.equals("text/turtle")){
+			t.write(stream, "TURTLE");
+		}else if (mediaType.equals("text/plain")){
+			t.write(stream, "TURTLE");
+		}else if (mediaType.equals("text/n3")){
+			t.write(stream, "N3");
+		}
+		log.info("Written {} bytes to stream",stream.toByteArray().length);
+		return stream;
+	}
+
+	@Override
+	public void writeTo(Model t, Class<?> type, Type genericType,
+			Annotation[] annotations, MediaType mediaType,
+			MultivaluedMap<String, Object> httpHeaders,
+			OutputStream entityStream) throws IOException,
+			WebApplicationException {
+		if (stream == null) {
+			toStream(t, mediaType.toString()).writeTo(entityStream);
+		} else {
+			stream.writeTo(entityStream);
+			stream = null;
+		}
+	}
+
+}

Added: incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource/index.ftl
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource/index.ftl?rev=1160332&view=auto
==============================================================================
--- incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource/index.ftl (added)
+++ incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource/index.ftl Mon Aug 22 16:58:42 2011
@@ -0,0 +1,35 @@
+<#--
+  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.
+-->
+<#import "/imports/common.ftl" as common>
+<#escape x as x?html>
+<@common.page title="Apache Stanbol Reasoners: Service /${it.currentService.path}/${it.currentTask}" hasrestapi=false> 
+		
+ <div class="panel" id="webview">
+	<p><em>Service type:</em> ${it.currentService.class.name}</p>
+	<p><em>Path:</em> ${it.currentService.path}</p>
+	<p><em>Task:</em> ${it.currentTask}</p>
+ </div>
+
+    <#-- We disable this at the moment -->
+    <!--
+    <div class="panel" id="restapi" style="display: none;">
+          
+    </div>
+    -->
+
+  </...@common.page>
+</#escape>
\ No newline at end of file

Added: incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource/jena-model.ftl
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource/jena-model.ftl?rev=1160332&view=auto
==============================================================================
--- incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource/jena-model.ftl (added)
+++ incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource/jena-model.ftl Mon Aug 22 16:58:42 2011
@@ -0,0 +1,26 @@
+<#--
+  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.
+-->
+<#escape x as x?html>
+<html>
+<head></head>
+<body>
+<pre>
+${it}
+</pre>
+</body>
+</html>
+</#escape>
\ No newline at end of file

Added: incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServicesResource/index.ftl
URL: http://svn.apache.org/viewvc/incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServicesResource/index.ftl?rev=1160332&view=auto
==============================================================================
--- incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServicesResource/index.ftl (added)
+++ incubator/stanbol/branches/jena-reasoners/reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/templates/org/apache/stanbol/reasoners/web/resources/ReasoningServicesResource/index.ftl Mon Aug 22 16:58:42 2011
@@ -0,0 +1,66 @@
+<#--
+  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.
+-->
+<#import "/imports/common.ftl" as common>
+<#import "/imports/reasonersDescription.ftl" as reasonersDescription>
+<#escape x as x?html>
+<@common.page title="Apache Stanbol Reasoners: Services" hasrestapi=false> 
+		
+ <div class="panel" id="webview">
+ <#if it.activeServices?size == 0>
+   <p><em>There is no reasoning services. Administrators can install and
+   configure new reasoning services using the
+    <a href="/system/console/components" target="_blank">OSGi console</a>.</em></p>
+ <#else>
+ <!-- FIXME class names should be generic, and not bound to a specific functionality (here engines->reasoning services)-->
+ <div class="enginelisting">
+  <div class="collapsed">
+  <p class="collapseheader">There are currently
+   <strong>${it.activeServices?size}</strong> active services.</p>
+   <div class="collapsable">
+    <ul>
+
+     <#list it.activeServices as service>
+      <li><b>.../${service.path}</b>:<br/>Tasks:
+        <#list it.tasks as task> 
+        	<a href="/${it.currentPath}/${service.path}/${task}" title="${service.class.name} Task: ${task}">${task}</a>
+        </#list>
+      </li>
+     </#list>
+    </ul>
+    
+  <p class="note">Administrators can enable, disable and deploy reasoning services using the
+    <a href="/system/console/components" target="_blank">OSGi console</a>.</p>
+   </div>
+   
+  </div> 
+ </div>
+
+<script>
+$(".enginelisting p").click(function () {
+  $(this).parents("div").toggleClass("collapsed");
+});    
+</script>
+ </#if>
+	</div>
+
+    <!-- We disable this at the moment -->
+    <!--div class="panel" id="restapi" style="display: none;">
+          
+    </div -->
+
+</...@common.page>
+</#escape>
\ No newline at end of file