From 2bf175e705bd602511341f5858b12084f680f0b7 Mon Sep 17 00:00:00 2001 From: Abhinav Sarkar Date: Mon, 20 May 2013 00:37:23 +0530 Subject: [PATCH] Added support for a simple search result json --- .../net/abhinavsarkar/ircsearch/Server.scala | 15 ++++++++++++--- .../net/abhinavsarkar/ircsearch/model.scala | 18 +++++++++++++++--- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/main/scala/net/abhinavsarkar/ircsearch/Server.scala b/src/main/scala/net/abhinavsarkar/ircsearch/Server.scala index e63a359..b07a3f4 100644 --- a/src/main/scala/net/abhinavsarkar/ircsearch/Server.scala +++ b/src/main/scala/net/abhinavsarkar/ircsearch/Server.scala @@ -199,21 +199,30 @@ object SearchHandler extends HttpRequestHandler { val query = params("query")(0) val page = params.get("page").collect({ case l => l.get(0) }) val pageSize = params.get("pageSize").collect({ case l => l.get(0) }) + val details = params.get("details").collect({ case l => l.get(0) }) + var sr = new SearchRequest(server, channel, botName, query) if (page.isDefined) sr = sr.copy(page = page.get.toInt) if (pageSize.isDefined) sr = sr.copy(pageSize = pageSize.get.toInt) + if (details.isDefined) + sr = sr.copy(details = details.get.toBoolean) sr } else { throw new UnsupportedOperationException("HTTP method " + method + " is not supported") } - Searcher.search(searchRequest) + (searchRequest, Searcher.search(searchRequest)) } f onSuccess { - case searchResult => - logRequest(ctx, request, sendSuccess(ctx, request, Serialization.write(searchResult))) + case (searchRequest, searchResult) => + logRequest(ctx, request, + sendSuccess(ctx, request, + if (searchRequest.details) + Serialization.write(searchResult) + else + Serialization.write(searchResult.toSimpleSearchResult))) } f onFailure { case e : Exception => { logger.error("Error", e) diff --git a/src/main/scala/net/abhinavsarkar/ircsearch/model.scala b/src/main/scala/net/abhinavsarkar/ircsearch/model.scala index b529083..026d115 100644 --- a/src/main/scala/net/abhinavsarkar/ircsearch/model.scala +++ b/src/main/scala/net/abhinavsarkar/ircsearch/model.scala @@ -18,16 +18,28 @@ case class IndexRequest( case class SearchRequest( server : String, channel : String, botName : String, query: String, - page : Int = 0, pageSize : Int = 10) + page : Int = 0, pageSize : Int = 10, details : Boolean = false) case class SearchResult( server : String, channel : String, botName : String, query: String, - page : Int, pageSize : Int, totalResults : Int, chatLines : List[ChatLine]) + page : Int, pageSize : Int, totalResults : Int, chatLines : List[ChatLine]) { + def toSimpleSearchResult = + SimpleSearchResult(server, channel, botName, query, page, pageSize, totalResults, + chatLines map { + case mline@ChatLine(_, _, _, contextBefore, contextAfter) => + ((contextBefore :+ mline) ++ contextAfter) map { line => + List(line.timestamp.toString, line.user, line.message) + } + }) +} object SearchResult { def fromSearchRequest(searchRequest : SearchRequest) = searchRequest match { - case SearchRequest(server, channel, botName, query, page, pageSize) => + case SearchRequest(server, channel, botName, query, page, pageSize, _) => new SearchResult(server, channel, botName, query, page, pageSize, 0, List()) } } +case class SimpleSearchResult( + server : String, channel : String, botName : String, query: String, + page : Int, pageSize : Int, totalResults : Int, lines : List[List[List[String]]])