PageRenderTime 47ms CodeModel.GetById 33ms RepoModel.GetById 0ms app.codeStats 0ms

/iks-ri/tags/apache-stanbol-incubation-20101129/kres/eu.iksproject.kres.jersey/src/main/java/eu/iksproject/kres/jersey/resource/GraphsResource.java

http://iks-project.googlecode.com/
Java | 159 lines | 128 code | 30 blank | 1 comment | 6 complexity | f49adf9661cc4d729473ce9bea5f353a MD5 | raw file
Possible License(s): CC-BY-3.0
  1. package eu.iksproject.kres.jersey.resource;
  2. import java.io.InputStream;
  3. import java.util.ArrayList;
  4. import java.util.Collection;
  5. import java.util.List;
  6. import java.util.Set;
  7. import javax.servlet.ServletContext;
  8. import javax.ws.rs.Consumes;
  9. import javax.ws.rs.FormParam;
  10. import javax.ws.rs.GET;
  11. import javax.ws.rs.POST;
  12. import javax.ws.rs.Path;
  13. import javax.ws.rs.PathParam;
  14. import javax.ws.rs.Produces;
  15. import javax.ws.rs.core.Context;
  16. import javax.ws.rs.core.HttpHeaders;
  17. import javax.ws.rs.core.MediaType;
  18. import javax.ws.rs.core.Response;
  19. import javax.ws.rs.core.UriInfo;
  20. import org.apache.clerezza.rdf.core.access.TcManager;
  21. import org.semanticweb.owlapi.apibinding.OWLManager;
  22. import org.semanticweb.owlapi.model.AddAxiom;
  23. import org.semanticweb.owlapi.model.IRI;
  24. import org.semanticweb.owlapi.model.OWLDataFactory;
  25. import org.semanticweb.owlapi.model.OWLNamedIndividual;
  26. import org.semanticweb.owlapi.model.OWLObjectProperty;
  27. import org.semanticweb.owlapi.model.OWLObjectPropertyAssertionAxiom;
  28. import org.semanticweb.owlapi.model.OWLOntologyCreationException;
  29. import org.semanticweb.owlapi.model.OWLOntologyManager;
  30. import org.slf4j.Logger;
  31. import org.slf4j.LoggerFactory;
  32. import eu.iksproject.kres.api.format.KReSFormat;
  33. import eu.iksproject.kres.api.manager.KReSONManager;
  34. import eu.iksproject.kres.api.storage.NoSuchStoreException;
  35. import eu.iksproject.kres.api.storage.OntologyStorage;
  36. import eu.iksproject.kres.api.storage.OntologyStoreProvider;
  37. import eu.iksproject.kres.shared.transformation.JenaToOwlConvert;
  38. import org.semanticweb.owlapi.model.OWLOntology;
  39. import com.hp.hpl.jena.rdf.model.Model;
  40. import com.hp.hpl.jena.rdf.model.ModelFactory;
  41. import com.hp.hpl.jena.rdf.model.Bag;
  42. import com.sun.jersey.api.view.ImplicitProduces;
  43. @Path("/graphs")
  44. @ImplicitProduces(MediaType.TEXT_HTML + ";qs=2")
  45. public class GraphsResource extends NavigationMixin {
  46. private OntologyStoreProvider ontologyStoreProvider;
  47. protected TcManager tcManager;
  48. protected KReSONManager onManager;
  49. protected OntologyStorage storage;
  50. private final Logger log = LoggerFactory.getLogger(getClass());
  51. public GraphsResource(@Context ServletContext servletContext) {
  52. ontologyStoreProvider = (OntologyStoreProvider) (servletContext.getAttribute(OntologyStoreProvider.class.getName()));
  53. tcManager = (TcManager) servletContext.getAttribute(TcManager.class.getName());
  54. onManager = (KReSONManager) (servletContext.getAttribute(KReSONManager.class.getName()));
  55. if (onManager == null) {
  56. throw new IllegalStateException(
  57. "OntologyStorage missing in ServletContext");
  58. }
  59. else{
  60. storage = onManager.getOntologyStore();
  61. }
  62. }
  63. @GET
  64. @Path("/resume")
  65. @Produces( {KReSFormat.FUNCTIONAL_OWL,
  66. KReSFormat.MANCHERSTER_OWL,
  67. KReSFormat.OWL_XML,
  68. KReSFormat.RDF_XML,
  69. KReSFormat.TURTLE,
  70. KReSFormat.RDF_JSON})
  71. public Response graphs(@Context HttpHeaders headers, @Context ServletContext servletContext){
  72. Set<IRI> iris = storage.listGraphs();
  73. if(iris != null){
  74. OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
  75. OWLDataFactory factory = OWLManager.getOWLDataFactory();
  76. OWLOntology ontology;
  77. try {
  78. ontology = manager.createOntology();
  79. String ns = onManager.getKReSNamespace();
  80. OWLNamedIndividual storage = factory.getOWLNamedIndividual(IRI.create(ns+"Storage"));
  81. OWLObjectProperty p = factory.getOWLObjectProperty(IRI.create(ns+"hasGraph"));
  82. for(IRI iri : iris){
  83. iri = IRI.create(iri.toString().replace("<", "").replace(">", ""));
  84. OWLNamedIndividual graph = factory.getOWLNamedIndividual(iri);
  85. OWLObjectPropertyAssertionAxiom axiom = factory.getOWLObjectPropertyAssertionAxiom(p, storage, graph);
  86. manager.applyChange(new AddAxiom(ontology, axiom));
  87. }
  88. return Response.ok(ontology).build();
  89. } catch (OWLOntologyCreationException e) {
  90. return Response.status(500).build();
  91. }
  92. }
  93. return Response.status(404).build();
  94. }
  95. @GET
  96. @Path("/{graphid:.+}")
  97. public Response getGraph(@PathParam("graphid") String graphid, @Context UriInfo uriInfo, @Context HttpHeaders headers){
  98. OntologyStorage ontologyStorage = ontologyStoreProvider.getActiveOntologyStorage();
  99. IRI ontologyID = IRI.create(graphid);
  100. //return Response.ok(tcManager.getMGraph(new UriRef(graphid))).build();
  101. try {
  102. return Response.ok(ontologyStorage.getGraph(ontologyID)).build();
  103. } catch (NoSuchStoreException e) {
  104. return Response.status(204).build();
  105. }
  106. }
  107. @POST
  108. @Consumes(MediaType.MULTIPART_FORM_DATA)
  109. public Response storeGraph(@FormParam("graph") InputStream graph, @FormParam("id") String id){
  110. try {
  111. OWLOntology ontology = OWLManager.createOWLOntologyManager().loadOntologyFromOntologyDocument(graph);
  112. ontologyStoreProvider.getActiveOntologyStorage().store(ontology, IRI.create(id));
  113. return Response.ok().build();
  114. } catch (OWLOntologyCreationException e) {
  115. return Response.status(500).build();
  116. }
  117. }
  118. public String getNamespace(){
  119. return onManager.getKReSNamespace();
  120. }
  121. public List<String> getStoredGraphs(){
  122. Set<IRI> iris = ontologyStoreProvider.getActiveOntologyStorage().listGraphs();
  123. ArrayList<String> graphs = new ArrayList<String>();
  124. for(IRI iri : iris){
  125. graphs.add(iri.toString());
  126. }
  127. return graphs;
  128. }
  129. }