01: /*
02: * Copyright Aduna (http://www.aduna-software.com/) (c) 2007.
03: *
04: * Licensed under the Aduna BSD-style license.
05: */
06: package org.openrdf.http.server.repository.contexts;
07:
08: import java.util.ArrayList;
09: import java.util.Arrays;
10: import java.util.HashMap;
11: import java.util.List;
12: import java.util.Map;
13:
14: import javax.servlet.http.HttpServletRequest;
15: import javax.servlet.http.HttpServletResponse;
16:
17: import org.springframework.context.ApplicationContextException;
18: import org.springframework.web.servlet.ModelAndView;
19: import org.springframework.web.servlet.mvc.AbstractController;
20:
21: import info.aduna.iteration.CloseableIteration;
22:
23: import org.openrdf.http.server.ServerHTTPException;
24: import org.openrdf.http.server.ProtocolUtil;
25: import org.openrdf.http.server.repository.QueryResultView;
26: import org.openrdf.http.server.repository.RepositoryInterceptor;
27: import org.openrdf.http.server.repository.TupleQueryResultView;
28: import org.openrdf.model.Resource;
29: import org.openrdf.query.BindingSet;
30: import org.openrdf.query.impl.ListBindingSet;
31: import org.openrdf.query.impl.TupleQueryResultImpl;
32: import org.openrdf.query.resultio.TupleQueryResultWriterFactory;
33: import org.openrdf.query.resultio.TupleQueryResultWriterRegistry;
34: import org.openrdf.repository.RepositoryConnection;
35: import org.openrdf.repository.RepositoryException;
36:
37: /**
38: * Handles requests for the list of contexts in a repository.
39: *
40: * @author Herko ter Horst
41: */
42: public class ContextsController extends AbstractController {
43:
44: public ContextsController() throws ApplicationContextException {
45: setSupportedMethods(new String[] { METHOD_GET });
46: }
47:
48: @Override
49: protected ModelAndView handleRequestInternal(
50: HttpServletRequest request, HttpServletResponse response)
51: throws Exception {
52: RepositoryConnection repositoryCon = RepositoryInterceptor
53: .getRepositoryConnection(request);
54:
55: List<String> columnNames = Arrays.asList("contextID");
56: List<BindingSet> contexts = new ArrayList<BindingSet>();
57: try {
58: CloseableIteration<? extends Resource, RepositoryException> contextIter = repositoryCon
59: .getContextIDs();
60:
61: try {
62: while (contextIter.hasNext()) {
63: BindingSet bindingSet = new ListBindingSet(
64: columnNames, contextIter.next());
65: contexts.add(bindingSet);
66: }
67: } finally {
68: contextIter.close();
69: }
70: } catch (RepositoryException e) {
71: throw new ServerHTTPException("Repository error: "
72: + e.getMessage(), e);
73: }
74:
75: TupleQueryResultWriterFactory factory = ProtocolUtil
76: .getAcceptableService(request, response,
77: TupleQueryResultWriterRegistry.getInstance());
78:
79: Map<String, Object> model = new HashMap<String, Object>();
80: model.put(QueryResultView.QUERY_RESULT_KEY,
81: new TupleQueryResultImpl(columnNames, contexts));
82: model.put(QueryResultView.FILENAME_HINT_KEY, "contexts");
83: model.put(QueryResultView.FACTORY_KEY, factory);
84:
85: return new ModelAndView(TupleQueryResultView.getInstance(),
86: model);
87: }
88: }
|