summaryrefslogtreecommitdiff
path: root/src/main/scala/io/trygvis/cj/Explorer.scala
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2013-05-19 23:09:39 +0200
committerTrygve Laugstøl <trygvis@inamo.no>2013-05-19 23:09:39 +0200
commitc7b619402f290fdf77312af5f426eb6bd0d5e5f7 (patch)
treec161afb788fbfb0610b6b70a7470b7d63a58cdc0 /src/main/scala/io/trygvis/cj/Explorer.scala
parentc569a4c58cf29778df28392b48e20ffebdbc518e (diff)
downloadcollection-json-explorer-scala-c7b619402f290fdf77312af5f426eb6bd0d5e5f7.tar.gz
collection-json-explorer-scala-c7b619402f290fdf77312af5f426eb6bd0d5e5f7.tar.bz2
collection-json-explorer-scala-c7b619402f290fdf77312af5f426eb6bd0d5e5f7.tar.xz
collection-json-explorer-scala-c7b619402f290fdf77312af5f426eb6bd0d5e5f7.zip
o Implementing my own model of collection+json. My browser want to be more relaxed than what normally makes sense.
o Implementing the server side of the queries.
Diffstat (limited to 'src/main/scala/io/trygvis/cj/Explorer.scala')
-rw-r--r--src/main/scala/io/trygvis/cj/Explorer.scala31
1 files changed, 25 insertions, 6 deletions
diff --git a/src/main/scala/io/trygvis/cj/Explorer.scala b/src/main/scala/io/trygvis/cj/Explorer.scala
index 9f8fd44..9c4206f 100644
--- a/src/main/scala/io/trygvis/cj/Explorer.scala
+++ b/src/main/scala/io/trygvis/cj/Explorer.scala
@@ -2,10 +2,9 @@ package io.trygvis.cj
import scala.collection.JavaConversions._
import scala.io.Source
-import java.net.{HttpURLConnection, URI}
-import java.io.{Writer, StringWriter, PrintWriter, InputStreamReader}
+import java.net.{URLEncoder, HttpURLConnection, URI}
+import java.io._
import javax.servlet.http.HttpServletRequest
-import net.hamnaberg.json.collection.{NativeJsonCollectionParser, JsonCollection}
import unfiltered.request._
import unfiltered.response._
import unfiltered.filter._
@@ -53,13 +52,33 @@ class Browser extends Plan {
views = viewsX(r)
} yield {
println("url=" + url)
- val uri = URI.create(url)
+
+ val targetParams = params flatMap {
+ case (key, value) if key.startsWith("param-") =>
+ // It makes no sense to have duplicate query keys so just pick the first one. This is most likely the
+ // same as most web framework does when given multiple query parameters.
+ Some(key.substring(6), value.headOption getOrElse "")
+ case _ =>
+ None
+ }
+
+ println("targetParam=" + targetParams)
+
+ val q = targetParams map { case (key, value) =>
+ URLEncoder.encode(key, "utf-8") + "=" + URLEncoder.encode(value, "utf-8")
+ }
+
+ println("q=" + q)
+
+ val uri = URI.create(url + (if(q.nonEmpty) "?" + q.reduce (_ ++ "&" ++ _) else ""))
+ println("uri=" + uri)
+
val con = uri.toURL.openConnection().asInstanceOf[HttpURLConnection]
con.setRequestProperty("accept", "application/vnd.collection+json")
val content = Source.fromInputStream(con.getInputStream, "utf-8").mkString("")
val headers = con.getHeaderFields.toMap filter {case (key, _) => key != null}
- val result = NativeJsonCollectionParser.parseCollection(content)
- Ok ~> Html5(views.data(uri, params, result, CjResponse(con.getResponseCode, con.getResponseMessage, headers)))
+ val result = Collection.parseCollection(new StringReader(content))
+ Ok ~> Html5(views.data(uri, targetParams, result, CjResponse(con.getResponseCode, con.getResponseMessage, headers)))
}
}
}