package org.aksw.sparqlify.admin.web.endpoint; import java.io.InputStream; import java.util.Map; import javax.annotation.Resource; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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.MultivaluedMap; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import org.aksw.jena_sparql_api.core.QueryExecutionFactory; import org.aksw.jena_sparql_api.core.utils.QueryExecutionAndType; import org.aksw.jena_sparql_api.stmt.SparqlStmtUpdate; import org.aksw.jena_sparql_api.web.servlets.SparqlEndpointBase; import org.aksw.service_framework.core.SparqlService; import org.aksw.sparqlify.core.sparql.QueryEx; import org.aksw.sparqlify.core.sparql.QueryExecutionFactoryEx; import org.aksw.sparqlify.core.sparql.QueryFactoryEx; import org.apache.jena.query.Query; import org.apache.jena.query.QueryExecution; import org.apache.jena.query.QueryFactory; import org.apache.jena.update.UpdateProcessor; import org.springframework.stereotype.Service; @Service @Path("/{path}/sparql/") //@Path("/{path : ([^/]+)?}/sparql/") public class SparqlEndpointDispatcher extends SparqlEndpointBase { @Resource(name="sparqlServiceMap") //private Map<String, QueryExecutionFactory> nameToService; private Map<String, SparqlService> nameToService; @Context private UriInfo uriInfo; @Context private ServletContext servletContext; @Context private HttpServletResponse response; public QueryExecutionFactory requireService() { MultivaluedMap<String, String> params = uriInfo.getPathParameters(); String path = params.getFirst("path"); SparqlService service = nameToService.get(path); //QueryExecutionFactory result = nameToService.get(path); //sparqlServiceConfig.getServiceMap().get(path); if(service == null) { throw new RuntimeException("No service registered for " + path); } QueryExecutionFactory result = service.getSparqlService(); return result; } @Override public QueryExecutionAndType createQueryExecutionAndType(String queryString) { QueryExecutionFactory qef = requireService(); QueryExecutionAndType result; QueryExecution qe; if(qef instanceof QueryExecutionFactoryEx) { QueryEx queryEx = QueryFactoryEx.create(queryString); QueryExecutionFactoryEx tmp = (QueryExecutionFactoryEx)qef; qe = tmp.createQueryExecution(queryEx); result = new QueryExecutionAndType(qe, queryEx.getQuery().getQueryType()); } else { Query query = QueryFactory.create(queryString); qe = qef.createQueryExecution(query); result = new QueryExecutionAndType(qe, query.getQueryType()); } //QueryExecutionFactoryExImpl return result; } @GET @Produces(MediaType.TEXT_HTML) public Response executeQueryXml(@Context HttpServletRequest req) //, @Context HttpServletResponse res) throws Exception { requireService(); InputStream r = servletContext.getResourceAsStream("/resources/snorql/index.html"); System.out.println("Resource is " + r); return Response.ok(r, MediaType.TEXT_HTML).build(); } @Override public UpdateProcessor createUpdateProcessor(SparqlStmtUpdate stmt) { // TODO Auto-generated method stub return null; } }