/******************************************************************************* * Copyright (c) 2012 IBM Corporation. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompanies this distribution. * * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * * Keith Wells - initial API and implementation * Sam Padgett - initial API and Implementation * Jim Conallen - initial API and implementation * *******************************************************************************/ package org.eclipse.lyo.samples.sharepoint.adapter; import java.io.IOException; import java.util.List; import java.util.Map; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.lyo.samples.sharepoint.SharepointConnector; import org.eclipse.lyo.samples.sharepoint.core.IConstants; import org.eclipse.lyo.samples.sharepoint.services.ShareBaseService; import org.eclipse.lyo.samples.sharepoint.store.ShareStore; import org.eclipse.lyo.samples.sharepoint.store.ShareValue; import org.eclipse.lyo.samples.sharepoint.util.StringUtils; /** * Servlet implementation class ResourceFactory */ public class ResourceSelectorService extends ShareBaseService { private static final long serialVersionUID = 6114613293834136389L; /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String terms = request.getParameter("terms"); //$NON-NLS-1$ String collection = request.getParameter("collection"); request.setAttribute("collection", collection); request.setAttribute("terms", terms); System.out.println("ResourceSelector: GET: terms =" + terms); try { if( terms != null ) { System.out.println("if ResourceSelector: GET: terms =" + terms); sendFilteredResponse(collection, terms, request, response); } else { // redirect to jsp RequestDispatcher rd = request.getRequestDispatcher("/sharepoint/resource_selector.jsp"); //$NON-NLS-1$ rd.forward(request, response); } } catch (Exception e) { System.out.println("Exception thrown: ResourceSelectorService"); } } private void sendFilteredResponse(String collection, String terms, HttpServletRequest request, HttpServletResponse response) throws ServletException { try { final SharepointConnector sc = SharepointInitializer.getSharepointConnector(); List<Map<String, ShareValue>> results = sc.getDocuments(collection); StringBuffer jsonResults = new StringBuffer(); jsonResults.append("{\"results\": [ \n" ); //$NON-NLS-1$ boolean addComma = false; for (Map<String, ShareValue> result : results) { String uri = result.get("uri").stringValue(); //$NON-NLS-1$ String title = result.get("title").stringValue(); //$NON-NLS-1$ //title = StringUtils.stringEscape(title + " (" + id + ")" ); //$NON-NLS-1$ //$NON-NLS-2$ if( !addComma ) { addComma = true; } else { jsonResults.append(",\n"); //$NON-NLS-1$ } jsonResults.append( "{\"uri\": \"" + uri + "\", \"title\": \"" + title + "\"}" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } jsonResults.append( "\n] \n}" ); //$NON-NLS-1$ response.setContentType(IConstants.CT_JSON); response.getWriter().write(jsonResults.toString()); response.setStatus(IConstants.SC_OK); // RequestDispatcher rd = request.getRequestDispatcher("/sharepoint/resource_selector.jsp"); // rd.forward(request, response); } catch (Exception e) { throw new ServletException(e); } } /* private void sendQueryResponse(String terms, HttpServletResponse response) throws ShareServiceException { // query for link types with this term in the title or description String query = buildQuery(terms); ShareStore store = getStore(); StringBuffer jsonResults = new StringBuffer(); jsonResults.append("{\"results\": [ \n" ); //$NON-NLS-1$ try { List<Map<String, ShareValue>> results = store.query(IConstants.SPARQL, query, IAmConstants.DEFAULT_MAX_RESULTS); boolean addComma = false; for (Map<String, ShareValue> result : results) { String about = result.get("about").stringValue(); //$NON-NLS-1$ String resUri = result.get("about").stringValue(); //$NON-NLS-1$ String id = extractId(resUri); String title = result.get("title").stringValue(); //$NON-NLS-1$ title = StringUtils.stringEscape(title + " (" + id + ")" ); //$NON-NLS-1$ //$NON-NLS-2$ if( !addComma ) { addComma = true; } else { jsonResults.append(",\n"); //$NON-NLS-1$ } jsonResults.append( "{\"resource\": \"" + about + "\", \"title\": \"" + title + "\"}" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } jsonResults.append( "\n] \n}" ); //$NON-NLS-1$ response.setContentType(IConstants.CT_JSON); response.getWriter().write(jsonResults.toString()); response.setStatus(IConstants.SC_OK); } catch (Exception e) { throw new ShareServiceException(e); } }*/ @SuppressWarnings("nls") private String buildQuery(String terms) { // PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> // PREFIX dcterms:<http://purl.org/dc/terms/> // SELECT ?uri ?graph ?title // WHERE { // GRAPH ?graph { // ?uri // rdf:type <http://open-services.net/ns/am#LinkType>; // dcterms:title ?title . // FILTER( regex(?title,"lat","i") ) . // } // } int id = -1; try{ id = Integer.parseInt(terms); } catch(NumberFormatException nfe) { id = -1; } terms = StringUtils.stringEscape(terms); StringBuilder query = new StringBuilder(); query.append(ShareStore.sparqlDefaultPrefixes()); query.append("SELECT ?graph ?about ?title\n"); query.append("WHERE {\n"); query.append("GRAPH ?graph {\n"); query.append(" ?about rdf:type <http://open-services.net/ns/am#Resource>;\n"); if( id >0 ) { query.append(" dcterms:identifier \"" + id + "\";\n"); query.append(" dcterms:title ?title.\n"); } else { query.append(" dcterms:title ?title.\n"); query.append(" FILTER( regex(?title,\"" + terms + "\",\"i\") ). \n" ); } query.append("}"); query.append("}"); return query.toString(); } }