Author: enridaga
Date: Wed Nov 9 12:41:22 2011
New Revision: 1199715
URL: http://svn.apache.org/viewvc?rev=1199715&view=rev
Log:
Main changes have been around the ReasoningServiceExecutor class, in order to
prepare it to be an imlementation of Callable to be given to the JobManager.
* Removed references to JAX-RS types from ReasoningServiceExecutor
* Created two new types:
** ReasoningServiceResult, to be processed by the JAX-RS resource. In
perspective this would be the outcome of the job
(Callable<ReasoningServiceResult>)
** ResponseTaskBuilder, this class compute the JAX-RX response Object with data
from a ReasoningServiceBuilder.
These two classes whould be moved to the api, later
STANBOL-343
Added:
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/utils/ReasoningServiceResult.java
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/utils/ResponseTaskBuilder.java
Modified:
incubator/stanbol/branches/lto-reasoners/reasoners/jobs/api/ (props
changed)
incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceException.java
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource.java
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/utils/ReasoningServiceExecutor.java
Propchange: incubator/stanbol/branches/lto-reasoners/reasoners/jobs/api/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Nov 9 12:41:22 2011
@@ -0,0 +1,4 @@
+.settings
+target
+.classpath
+.project
Modified:
incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceException.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceException.java?rev=1199715&r1=1199714&r2=1199715&view=diff
==============================================================================
---
incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceException.java
(original)
+++
incubator/stanbol/branches/lto-reasoners/reasoners/servicesapi/src/main/java/org/apache/stanbol/reasoners/servicesapi/ReasoningServiceException.java
Wed Nov 9 12:41:22 2011
@@ -1,7 +1,11 @@
package org.apache.stanbol.reasoners.servicesapi;
public class ReasoningServiceException extends Exception {
-
+ public ReasoningServiceException(Throwable t) {
+ super(t);
+ }
+ public ReasoningServiceException() {
+ }
/**
*
*/
Modified:
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource.java?rev=1199715&r1=1199714&r2=1199715&view=diff
==============================================================================
---
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource.java
(original)
+++
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/resources/ReasoningServiceTaskResource.java
Wed Nov 9 12:41:22 2011
@@ -50,10 +50,15 @@ import org.apache.stanbol.ontologymanage
import org.apache.stanbol.owl.transformation.JenaToOwlConvert;
import org.apache.stanbol.reasoners.jena.JenaReasoningService;
import org.apache.stanbol.reasoners.owlapi.OWLApiReasoningService;
+import org.apache.stanbol.reasoners.servicesapi.InconsistentInputException;
import org.apache.stanbol.reasoners.servicesapi.ReasoningService;
+import org.apache.stanbol.reasoners.servicesapi.ReasoningServiceException;
import org.apache.stanbol.reasoners.servicesapi.ReasoningServicesManager;
import
org.apache.stanbol.reasoners.servicesapi.UnboundReasoningServiceException;
+import org.apache.stanbol.reasoners.servicesapi.UnsupportedTaskException;
import org.apache.stanbol.reasoners.web.utils.ReasoningServiceExecutor;
+import org.apache.stanbol.reasoners.web.utils.ReasoningServiceResult;
+import org.apache.stanbol.reasoners.web.utils.ResponseTaskBuilder;
import org.apache.stanbol.rules.base.api.NoSuchRecipeException;
import org.apache.stanbol.rules.base.api.Recipe;
import org.apache.stanbol.rules.base.api.RuleStore;
@@ -252,39 +257,47 @@ public class ReasoningServiceTaskResourc
this.parameters.remove("target");
// The service executor
- ReasoningServiceExecutor executor = new
ReasoningServiceExecutor(tcManager, headers, servletContext,
- uriInfo);
-
- /**
- * Select the service implementation TODO Question: how this part
could be decoupled?
- */
- if (getCurrentService() instanceof JenaReasoningService) {
- // Prepare input data
- Model input;
- try {
- input = prepareJenaInputFromGET(url, scope, session);
- } catch (DoesNotExistException e) {
- throw new WebApplicationException(e,
Response.Status.NOT_FOUND);
- }
- // Prepare rules
- // TODO (this is not implemented yet!)
- List<Rule> rules = prepareJenaRules(recipe);
- return executor.executeJenaReasoningService(getCurrentTask(),
- (JenaReasoningService) getCurrentService(), input, rules,
targetGraphID, false,
- this.parameters);
- } else if (getCurrentService() instanceof OWLApiReasoningService) {
- OWLOntology input = null;
- try {
- input = prepareOWLApiInputFromGET(url, scope, session);
- } catch (OWLOntologyCreationIOException e) {
- throw new WebApplicationException(e,
Response.Status.NOT_FOUND);
- } catch (OWLOntologyCreationException e) {
- throw new WebApplicationException(e,
Response.Status.INTERNAL_SERVER_ERROR);
- }
- // Prepare rules
- List<SWRLRule> rules = prepareOWLApiRules(recipe);
- return executor.executeOWLApiReasoningService(getCurrentTask(),
- (OWLApiReasoningService) getCurrentService(), input, rules,
targetGraphID, false, this.parameters);
+ ReasoningServiceExecutor executor = new
ReasoningServiceExecutor(tcManager);
+ try {
+ /**
+ * Select the service implementation TODO Question: how this part
could be decoupled?
+ */
+ if (getCurrentService() instanceof JenaReasoningService) {
+ // Prepare input data
+ Model input;
+ try {
+ input = prepareJenaInputFromGET(url, scope, session);
+ } catch (DoesNotExistException e) {
+ throw new WebApplicationException(e,
Response.Status.NOT_FOUND);
+ }
+ // Prepare rules
+ // TODO (this is not implemented yet!)
+ List<Rule> rules = prepareJenaRules(recipe);
+ ReasoningServiceResult<Model> res =
executor.executeJenaReasoningService(getCurrentTask(),
+ (JenaReasoningService) getCurrentService(), input, rules,
targetGraphID, false,
+ this.parameters);
+ return new
ResponseTaskBuilder(uriInfo,context,headers).build(res);
+ } else if (getCurrentService() instanceof OWLApiReasoningService) {
+ OWLOntology input = null;
+ try {
+ input = prepareOWLApiInputFromGET(url, scope, session);
+ } catch (OWLOntologyCreationIOException e) {
+ throw new WebApplicationException(e,
Response.Status.NOT_FOUND);
+ } catch (OWLOntologyCreationException e) {
+ throw new WebApplicationException(e,
Response.Status.INTERNAL_SERVER_ERROR);
+ }
+ // Prepare rules
+ List<SWRLRule> rules = prepareOWLApiRules(recipe);
+ ReasoningServiceResult<OWLOntology> res =
executor.executeOWLApiReasoningService(getCurrentTask(),
+ (OWLApiReasoningService) getCurrentService(), input,
rules, targetGraphID, false, this.parameters);
+ return new
ResponseTaskBuilder(uriInfo,context,headers).build(res);
+ }
+ } catch (InconsistentInputException e) {
+ new WebApplicationException(e);
+ } catch (ReasoningServiceException e) {
+ new WebApplicationException(e);
+ } catch (UnsupportedTaskException e) {
+ new WebApplicationException(e);
}
throw new WebApplicationException(new Exception("Unsupported
implementation"),
Response.Status.INTERNAL_SERVER_ERROR);
@@ -350,38 +363,46 @@ public class ReasoningServiceTaskResourc
log.info("Called {} with parameters: {}
",httpContext.getRequest().getMethod(), parameters.keySet().toArray(new
String[parameters.keySet().size()]));
if (file.exists() && file.canRead()) {
// The service executor
- ReasoningServiceExecutor executor = new
ReasoningServiceExecutor(tcManager, headers,
- servletContext, uriInfo);
-
- // Select the service implementation
- if (getCurrentService() instanceof JenaReasoningService) {
- // Prepare input data
- Model input;
- try {
- input = prepareJenaInputFromPOST(file, scope, session);
- } catch (MalformedURLException e) {
- throw new WebApplicationException(new
IllegalArgumentException("Cannot read file"),
- Response.Status.INTERNAL_SERVER_ERROR);
- }
- // Prepare rules
- List<Rule> rules = prepareJenaRules(recipe);
- return executor.executeJenaReasoningService(getCurrentTask(),
- (JenaReasoningService) getCurrentService(), input, rules,
targetGraphID, false,
- this.parameters);
- } else if (getCurrentService() instanceof OWLApiReasoningService) {
- OWLOntology input = null;
- try {
- input = prepareOWLApiInputFromPOST(file, scope, session);
- } catch (OWLOntologyCreationIOException e) {
- throw new WebApplicationException(e,
Response.Status.NOT_FOUND);
- } catch (OWLOntologyCreationException e) {
- throw new WebApplicationException(e,
Response.Status.INTERNAL_SERVER_ERROR);
+ ReasoningServiceExecutor executor = new
ReasoningServiceExecutor(tcManager);
+ try{
+ // Select the service implementation
+ if (getCurrentService() instanceof JenaReasoningService) {
+ // Prepare input data
+ Model input;
+ try {
+ input = prepareJenaInputFromPOST(file, scope, session);
+ } catch (MalformedURLException e) {
+ throw new WebApplicationException(new
IllegalArgumentException("Cannot read file"),
+ Response.Status.INTERNAL_SERVER_ERROR);
+ }
+ // Prepare rules
+ List<Rule> rules = prepareJenaRules(recipe);
+ ReasoningServiceResult<Model> result =
executor.executeJenaReasoningService(getCurrentTask(),
+ (JenaReasoningService) getCurrentService(), input,
rules, targetGraphID, false,
+ this.parameters);
+ return new
ResponseTaskBuilder(uriInfo,context,headers).build(result);
+ } else if (getCurrentService() instanceof
OWLApiReasoningService) {
+ OWLOntology input = null;
+ try {
+ input = prepareOWLApiInputFromPOST(file, scope,
session);
+ } catch (OWLOntologyCreationIOException e) {
+ throw new WebApplicationException(e,
Response.Status.NOT_FOUND);
+ } catch (OWLOntologyCreationException e) {
+ throw new WebApplicationException(e,
Response.Status.INTERNAL_SERVER_ERROR);
+ }
+ // Prepare rules
+ List<SWRLRule> rules = prepareOWLApiRules(recipe);
+ ReasoningServiceResult<OWLOntology> result =
executor.executeOWLApiReasoningService(getCurrentTask(),
+ (OWLApiReasoningService) getCurrentService(), input,
rules, targetGraphID, false,
+ this.parameters);
+ return new
ResponseTaskBuilder(uriInfo,context,headers).build(result);
}
- // Prepare rules
- List<SWRLRule> rules = prepareOWLApiRules(recipe);
- return executor.executeOWLApiReasoningService(getCurrentTask(),
- (OWLApiReasoningService) getCurrentService(), input,
rules, targetGraphID, false,
- this.parameters);
+ } catch (InconsistentInputException e) {
+ new WebApplicationException(e);
+ } catch (ReasoningServiceException e) {
+ new WebApplicationException(e);
+ } catch (UnsupportedTaskException e) {
+ new WebApplicationException(e);
}
throw new WebApplicationException(new Exception("Unsupported
implementation"),
Response.Status.INTERNAL_SERVER_ERROR);
@@ -610,7 +631,7 @@ public class ReasoningServiceTaskResourc
OntologySpace sessionSpace = null;
if (sessionID != null) {
IRI sessionIRI = IRI.create(sessionID);
- sessionSpace = scope.getSessionSpace(sessionIRI);
+ sessionSpace = scope.getSessionSpace(sessionIRI.toString());
}
OntologySpace coreSpace = scope.getCoreSpace();
Set<OWLOntology> coreOntologies = coreSpace.getOntologies(true);
Modified:
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/utils/ReasoningServiceExecutor.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/utils/ReasoningServiceExecutor.java?rev=1199715&r1=1199714&r2=1199715&view=diff
==============================================================================
---
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/utils/ReasoningServiceExecutor.java
(original)
+++
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/utils/ReasoningServiceExecutor.java
Wed Nov 9 12:41:22 2011
@@ -1,30 +1,16 @@
package org.apache.stanbol.reasoners.web.utils;
-import static javax.ws.rs.core.MediaType.TEXT_HTML;
-
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.util.Arrays;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.locks.Lock;
-import javax.servlet.ServletContext;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.Status;
-import javax.ws.rs.core.UriInfo;
-
import org.apache.clerezza.rdf.core.MGraph;
import org.apache.clerezza.rdf.core.UriRef;
import org.apache.clerezza.rdf.core.access.LockableMGraph;
import org.apache.clerezza.rdf.core.access.NoSuchEntityException;
import org.apache.clerezza.rdf.core.access.TcManager;
-import org.apache.stanbol.commons.web.base.format.KRFormat;
import org.apache.stanbol.owl.transformation.JenaToClerezzaConverter;
import org.apache.stanbol.owl.transformation.OWLAPIToClerezzaConverter;
import org.apache.stanbol.reasoners.jena.JenaReasoningService;
@@ -32,12 +18,10 @@ import org.apache.stanbol.reasoners.owla
import org.apache.stanbol.reasoners.servicesapi.InconsistentInputException;
import org.apache.stanbol.reasoners.servicesapi.ReasoningServiceException;
import org.apache.stanbol.reasoners.servicesapi.UnsupportedTaskException;
-import org.coode.owlapi.manchesterowlsyntax.ManchesterOWLSyntaxOntologyFormat;
import org.semanticweb.owlapi.model.OWLAxiom;
import org.semanticweb.owlapi.model.OWLOntology;
import org.semanticweb.owlapi.model.OWLOntologyCreationException;
import org.semanticweb.owlapi.model.OWLOntologyManager;
-import org.semanticweb.owlapi.model.OWLOntologyStorageException;
import org.semanticweb.owlapi.model.SWRLRule;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -46,16 +30,12 @@ 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.hp.hpl.jena.reasoner.rulesys.Rule;
-import com.sun.jersey.api.view.Viewable;
/**
* TODO Add comment
*/
public class ReasoningServiceExecutor {
private Logger log = LoggerFactory.getLogger(getClass());
- private HttpHeaders headers;
- private ServletContext servletContext;
- private UriInfo uriInfo;
private TcManager tcManager;
// This task is not dinamically provided by the service, since it work
on a
@@ -63,11 +43,7 @@ public class ReasoningServiceExecutor {
// (isConsistent())
public static String TASK_CHECK = "check";
- public ReasoningServiceExecutor(TcManager tcManager, HttpHeaders
headers,
- ServletContext context, UriInfo uriInfo) {
- this.headers = headers;
- this.servletContext = context;
- this.uriInfo = uriInfo;
+ public ReasoningServiceExecutor(TcManager tcManager) {
this.tcManager = tcManager;
}
@@ -81,11 +57,13 @@ public class ReasoningServiceExecutor {
* @param input
* @param rules
* @return
+ * @throws ReasoningServiceException
+ * @throws UnsupportedTaskException
*/
- public Response executeJenaReasoningService(String task,
+ public ReasoningServiceResult<Model> executeJenaReasoningService(String
task,
JenaReasoningService s, Model input, List<Rule> rules,
String targetGraphID, boolean filtered,
- Map<String, List<String>> parameters) {
+ Map<String, List<String>> parameters) throws
ReasoningServiceException, UnsupportedTaskException {
long start = System.currentTimeMillis();
log.info("[start] Execution: {}",s);
// Check task: this is managed directly by the endpoint
@@ -95,11 +73,10 @@ public class ReasoningServiceExecutor {
boolean is = s.isConsistent(input);
long end = System.currentTimeMillis();
log.info("[end] In time: {}", (end - start));
- return buildCheckResponse(is);
+ return new
ReasoningServiceResult<Model>(ReasoningServiceExecutor.TASK_CHECK,is);
} catch (ReasoningServiceException e) {
log.error("Error thrown: {}", e);
- throw new WebApplicationException(e,
-
Response.Status.INTERNAL_SERVER_ERROR);
+ throw e;
}
}
try {
@@ -107,7 +84,7 @@ public class ReasoningServiceExecutor {
parameters);
if (result == null) {
log.error("Result is null");
- throw new WebApplicationException();
+ throw new RuntimeException("Result is null.");
}
Model outputModel = ModelFactory.createDefaultModel();
outputModel.add(result.toArray(new
Statement[result.size()]));
@@ -118,33 +95,23 @@ public class ReasoningServiceExecutor {
log.info("Prepare output");
if (targetGraphID == null) {
log.info("Returning {} statements",
result.size());
- if (isHTML()) {
- ByteArrayOutputStream out = new
ByteArrayOutputStream();
- outputModel.write(out, "TURTLE");
- return Response.ok(
- new Viewable("result",
- new
ReasoningPrettyResultResource(
-
servletContext, uriInfo, out)),
- TEXT_HTML).build();
- } else {
- return Response.ok(outputModel).build();
- }
+ return new ReasoningServiceResult<Model>(task,
true, outputModel);
} else {
save(outputModel, targetGraphID);
- return Response.ok().build();
+ return new ReasoningServiceResult<Model>(task,
true);
}
} catch (ReasoningServiceException e) {
log.error("Error thrown: {}", e);
- throw new WebApplicationException(e,
- Response.Status.INTERNAL_SERVER_ERROR);
+ throw e;
} catch (InconsistentInputException e) {
log.debug("The input is not consistent");
- return Response.status(Status.NO_CONTENT).build();
+ return new
ReasoningServiceResult<Model>(ReasoningServiceExecutor.TASK_CHECK, false);
} catch (UnsupportedTaskException e) {
log.error("Error thrown: {}", e);
- throw new WebApplicationException(e,
- Response.Status.INTERNAL_SERVER_ERROR);
- }
+ throw e;
+ } catch (IOException e) {
+ throw new ReasoningServiceException(e);
+ }
}
/**
@@ -157,10 +124,13 @@ public class ReasoningServiceExecutor {
* @param targetGraphID
* @param parameters
* @return
+ * @throws InconsistentInputException
+ * @throws ReasoningServiceException
+ * @throws UnsupportedTaskException
*/
- public Response executeOWLApiReasoningService(String task,
+ public ReasoningServiceResult<OWLOntology>
executeOWLApiReasoningService(String task,
OWLApiReasoningService s, OWLOntology input,
List<SWRLRule> rules,
- String targetGraphID,boolean filtered, Map<String,
List<String>> parameters) {
+ String targetGraphID, boolean filtered, Map<String,
List<String>> parameters) throws InconsistentInputException,
ReasoningServiceException, UnsupportedTaskException {
long start = System.currentTimeMillis();
log.info("[start] Execution: {}",s);
// Check task: this is managed directly by the endpoint
@@ -170,10 +140,9 @@ public class ReasoningServiceExecutor {
boolean is = s.isConsistent(input);
long end = System.currentTimeMillis();
log.info("[end] In time: {}", (end - start));
- return buildCheckResponse(is);
+ return new
ReasoningServiceResult<OWLOntology>(ReasoningServiceExecutor.TASK_CHECK, is);
} catch (ReasoningServiceException e) {
- throw new WebApplicationException(e,
-
Response.Status.INTERNAL_SERVER_ERROR);
+ throw e;
}
}
// We get the manager from the input ontology
@@ -188,134 +157,52 @@ public class ReasoningServiceExecutor {
log.info("Prepare output: {} axioms",axioms.size());
manager.addAxioms(output,axioms);
if (targetGraphID == null) {
- if (isHTML()) {
- ByteArrayOutputStream out = new
ByteArrayOutputStream();
- manager.saveOntology(output,
- new
ManchesterOWLSyntaxOntologyFormat(), out);
- return Response.ok(
- new Viewable("result",
- new
ReasoningPrettyResultResource(
-
servletContext, uriInfo, out)),
- TEXT_HTML).build();
- } else {
- return Response.ok(output).build();
- }
+ return new ReasoningServiceResult<OWLOntology>(task, true,
manager.getOntology(output.getOntologyID()));
} else {
save(output, targetGraphID);
- return Response.ok().build();
+ return new
ReasoningServiceResult<OWLOntology>(task, true);
}
} catch (InconsistentInputException e) {
log.warn("The input is not consistent");
- return buildCheckResponse(false);
+ throw e;
} catch (ReasoningServiceException e) {
- log.error("Error! \n",e);
- throw new WebApplicationException(e,
- Response.Status.INTERNAL_SERVER_ERROR);
+ throw e;
} catch (OWLOntologyCreationException e) {
log.error("Error! \n",e);
- throw new WebApplicationException(e,
- Response.Status.INTERNAL_SERVER_ERROR);
- } catch (OWLOntologyStorageException e) {
- log.error("Error! \n",e);
- throw new WebApplicationException(e,
- Response.Status.INTERNAL_SERVER_ERROR);
+ throw new ReasoningServiceException(new IOException(e));
} catch (UnsupportedTaskException e) {
log.error("Error! \n",e);
- throw new WebApplicationException(e,
- Response.Status.INTERNAL_SERVER_ERROR);
+ throw e;
}catch(Throwable t){
log.error("Error! \n",t);
- throw new WebApplicationException(t,
- Response.Status.INTERNAL_SERVER_ERROR);
+ throw new ReasoningServiceException(t);
}
}
- /**
- * To build the Response for any CHECK task execution
- *
- * @param isConsistent
- * @return
- */
- public Response buildCheckResponse(boolean isConsistent) {
- if (isHTML()) {
- if (isConsistent) {
- log.debug("The input is consistent");
- return Response.ok(
- new Viewable("result",
- new
ReasoningPrettyResultResource(
-
servletContext, uriInfo,
-
"The input is consistent :)")),
- TEXT_HTML).build();
- } else {
- log.debug("The input is not consistent");
- return Response
- .status(Status.NO_CONTENT)
- .entity(new Viewable("result",
- new
ReasoningPrettyResultResource(
-
servletContext, uriInfo,
-
"The input is NOT consistent :(")))
- .type(TEXT_HTML).build();
- }
- } else {
- if (isConsistent) {
- log.debug("The input is consistent");
- return Response.ok("The input is consistent
:)").build();
- } else {
- log.debug("The input is not consistent");
- return
Response.status(Status.NO_CONTENT).build();
- }
- }
- }
-
- /**
- * Check if the client needs a serialization of the output or a human
- * readable form (HTML)
- *
- * @param headers
- * @return
- */
- public boolean isHTML() {
- // 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.debug("Requested format is HTML {}", t);
- return true;
- } else if (rdfformats.contains(strty)) {
- log.debug("Requested format is RDF {}", t);
- return false;
- }
- }
- // Default behavior? Should never happen!
- return true;
- }
/**
* To save data in the triple store.
*
* @param data
* @param targetGraphID
+ * @throws IOException
*/
- protected void save(Object data, String targetGraphID) {
+ protected void save(Object data, String targetGraphID) throws
IOException {
log.info("Attempt saving in target graph {}", targetGraphID);
final long startSave = System.currentTimeMillis();
LockableMGraph mGraph;
UriRef graphUriRef = new UriRef(targetGraphID);
- try {
- // Check whether the graph already exists
- mGraph = tcManager.getMGraph(graphUriRef);
- } catch (NoSuchEntityException e) {
- mGraph = tcManager.createMGraph(graphUriRef);
- }
+
+ // tcManager must be synchronized
+ synchronized (tcManager) {
+ try {
+ // Check whether the graph already exists
+ mGraph = tcManager.getMGraph(graphUriRef);
+ } catch (NoSuchEntityException e) {
+ mGraph = tcManager.createMGraph(graphUriRef);
+ }
+ }
+
// We lock the graph before proceed
Lock writeLock = mGraph.getLock().writeLock();
boolean saved = false;
@@ -326,16 +213,15 @@ public class ReasoningServiceExecutor {
saved = mGraph.addAll(m);
writeLock.unlock();
} else if (data instanceof OWLOntology) {
- MGraph m = OWLAPIToClerezzaConverter
+ MGraph m = (MGraph) OWLAPIToClerezzaConverter
.owlOntologyToClerezzaMGraph((OWLOntology) data);
writeLock.lock();
saved = mGraph.addAll(m);
writeLock.unlock();
}
if (!saved)
- throw new WebApplicationException(new IOException(
- "Cannot save model!"),
- Response.Status.INTERNAL_SERVER_ERROR);
+ throw new IOException(
+ "Cannot save the result in clerezza!");
final long endSave = System.currentTimeMillis();
log.info("Save time: {}", (endSave - startSave));
}
Added:
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/utils/ReasoningServiceResult.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/utils/ReasoningServiceResult.java?rev=1199715&view=auto
==============================================================================
---
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/utils/ReasoningServiceResult.java
(added)
+++
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/utils/ReasoningServiceResult.java
Wed Nov 9 12:41:22 2011
@@ -0,0 +1,43 @@
+package org.apache.stanbol.reasoners.web.utils;
+
+public class ReasoningServiceResult<T extends Object> {
+ private T resultObj;
+ private boolean success;
+ private String task;
+
+ public ReasoningServiceResult(String task, boolean success, T resultObj) {
+ this.task = task;
+ this.resultObj = resultObj;
+ this.success = success;
+ }
+
+ public ReasoningServiceResult(String task, boolean success) {
+ this.task = task;
+ this.resultObj = null;
+ this.success = success;
+ }
+
+ public ReasoningServiceResult(String task, T resultObj) {
+ this.task = task;
+ this.resultObj = resultObj;
+ this.success = true;
+ }
+
+ public ReasoningServiceResult(String task) {
+ this.task = task;
+ this.resultObj = null;
+ this.success = true;
+ }
+
+ public Object get() {
+ return this.resultObj;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public String getTask() {
+ return task;
+ }
+}
Added:
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/utils/ResponseTaskBuilder.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/utils/ResponseTaskBuilder.java?rev=1199715&view=auto
==============================================================================
---
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/utils/ResponseTaskBuilder.java
(added)
+++
incubator/stanbol/branches/lto-reasoners/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/utils/ResponseTaskBuilder.java
Wed Nov 9 12:41:22 2011
@@ -0,0 +1,180 @@
+package org.apache.stanbol.reasoners.web.utils;
+
+import static javax.ws.rs.core.MediaType.TEXT_HTML;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.servlet.ServletContext;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+import javax.ws.rs.core.Response.Status;
+
+import org.apache.stanbol.commons.web.base.format.KRFormat;
+import org.coode.owlapi.manchesterowlsyntax.ManchesterOWLSyntaxOntologyFormat;
+import org.semanticweb.owlapi.io.StreamDocumentTarget;
+import org.semanticweb.owlapi.model.OWLOntology;
+import org.semanticweb.owlapi.model.OWLOntologyStorageException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import
uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxOntologyStorer;
+
+import com.hp.hpl.jena.rdf.model.Model;
+import com.sun.jersey.api.view.Viewable;
+
+public class ResponseTaskBuilder {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+ private UriInfo info;
+ private ServletContext context;
+ private HttpHeaders headers;
+
+ public ResponseTaskBuilder(UriInfo info, ServletContext context,
HttpHeaders headers) {
+ this.info = info;
+ this.context = context;
+ this.headers = headers;
+ }
+
+ /**
+ * This is special, in case of task CHECK
+ *
+ * @param output
+ * @return
+ */
+ private Response build(boolean result) {
+ return buildCheckResponse(result);
+ }
+
+ private Response build(){
+ return Response.ok().build();
+ }
+
+ private Response build(Object object){
+ if (isHTML()) {
+ OutputStream out = stream(object);
+ return Response.ok(
+ new Viewable("result",
+ new ReasoningPrettyResultResource(
+ context, info, out)),
+ TEXT_HTML).build();
+ } else {
+ return Response.ok(object).build();
+ }
+ }
+
+ /**
+ * FIXME: Both should return the same format
+ *
+ * @param object
+ * @return
+ */
+ private OutputStream stream(Object object) {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ if(object instanceof OWLOntology){
+ OWLOntology o = (OWLOntology) object;
+ ManchesterOWLSyntaxOntologyStorer mosos = new
ManchesterOWLSyntaxOntologyStorer();
+ try {
+ mosos.storeOntology(o.getOWLOntologyManager(), o, new
StreamDocumentTarget(out), new ManchesterOWLSyntaxOntologyFormat());
+ } catch (OWLOntologyStorageException e) {
+ log.error("Cannot stream the ontology",e);
+ throw new RuntimeException(e);
+ }
+ }else if (object instanceof Model){
+ Model m = (Model) object;
+ // FIXME Both should return the same format
+ m.write(out, "TURTLE");
+ }
+
+ return out;
+ }
+
+ /**
+ * Check if the client needs a serialization of the output or a human
+ * readable form (HTML)
+ *
+ * @param headers
+ * @return
+ */
+ private boolean isHTML() {
+ // 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.debug("Requested format is HTML {}", t);
+ return true;
+ } else if (rdfformats.contains(strty)) {
+ log.debug("Requested format is RDF {}", t);
+ return false;
+ }
+ }
+ // Default behavior? Should never happen!
+ return true;
+ }
+
+
+ /**
+ * To build the Response for any CHECK task execution
+ *
+ * @param isConsistent
+ * @return
+ */
+ private Response buildCheckResponse(boolean isConsistent) {
+ if (isHTML()) {
+ if (isConsistent) {
+ log.debug("The input is consistent");
+ return Response.ok(
+ new Viewable("result",
+ new ReasoningPrettyResultResource(
+ context, info,
+ "The input is consistent :)")),
+ TEXT_HTML).build();
+ } else {
+ log.debug("The input is not consistent");
+ return Response
+ .status(Status.NO_CONTENT)
+ .entity(new Viewable("result",
+ new ReasoningPrettyResultResource(
+ context, info,
+ "The input is NOT consistent :(")))
+ .type(TEXT_HTML).build();
+ }
+ } else {
+ if (isConsistent) {
+ log.debug("The input is consistent");
+ return Response.ok("The input is consistent :)").build();
+ } else {
+ log.debug("The input is not consistent");
+ return Response.status(Status.NO_CONTENT).build();
+ }
+ }
+ }
+
+ public Response build(ReasoningServiceResult<? extends Object> result){
+ // If task is CHECK
+ if(result.getTask().equals(ReasoningServiceExecutor.TASK_CHECK)){
+ return build(result.isSuccess());
+ }else{
+ // Elsewhere, if some data is provided, serialize result
+ if(result.get()!=null){
+ return build(result.get());
+ }else{
+ return build();
+ }
+ }
+ }
+}