/* * Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2007. * * Licensed under the Aduna BSD-style license. */ package org.openrdf.http.webclient.repository.explore; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import info.aduna.text.ToStringComparator; import org.openrdf.http.webclient.SessionKeys; import org.openrdf.model.Resource; import org.openrdf.query.BindingSet; import org.openrdf.query.MalformedQueryException; import org.openrdf.query.QueryEvaluationException; import org.openrdf.query.QueryLanguage; import org.openrdf.query.TupleQueryResult; import org.openrdf.repository.RepositoryConnection; import org.openrdf.repository.RepositoryException; import org.openrdf.repository.http.HTTPRepository; /** * @author Herko ter Horst */ public class ExploreRepositoryController implements Controller { final Logger logger = LoggerFactory.getLogger(this.getClass()); private String view; public String getView() { return view; } public void setView(String view) { this.view = view; } public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) { ModelAndView result = new ModelAndView(); result.setViewName(view); Map<String, Object> model = new HashMap<String, Object>(); try { List<Resource> classes = getClasses(request); Collections.sort(classes, ToStringComparator.getInstance()); model.put("classes", classes); } catch (RepositoryException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (QueryEvaluationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MalformedQueryException e) { // TODO Auto-generated catch block e.printStackTrace(); } result.addAllObjects(model); return result; } /** * @param request * @return * @throws RepositoryException * @throws MalformedQueryException * @throws QueryEvaluationException */ private List<Resource> getClasses(HttpServletRequest request) throws RepositoryException, QueryEvaluationException, MalformedQueryException { List<Resource> result = new ArrayList<Resource>(); HttpSession session = request.getSession(); HTTPRepository repo = (HTTPRepository)session.getAttribute(SessionKeys.REPOSITORY_KEY); RepositoryConnection conn = null; try { conn = repo.getConnection(); String query = "SELECT DISTINCT C FROM {} rdf:type {C}"; TupleQueryResult classes = conn.prepareTupleQuery(QueryLanguage.SERQL, query).evaluate(); try { while (classes.hasNext()) { BindingSet bindingSet = classes.next(); Resource resource = (Resource)bindingSet.getValue("C"); result.add(resource); } } finally { classes.close(); } } finally { if (conn != null) { try { conn.close(); } catch (RepositoryException e) { logger.error("Unable to close connection", e); } } } return result; } }