From 131e5ec53ad065461c760c16f68af2522437928d Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sun, 2 Jun 2013 23:20:00 +0200 Subject: o Tried to improve error handling when the backend server fails. --- src/main/scala/io/trygvis/cj/Views.scala | 130 +++++++++++++++++++++++-------- 1 file changed, 99 insertions(+), 31 deletions(-) (limited to 'src/main/scala/io/trygvis/cj/Views.scala') diff --git a/src/main/scala/io/trygvis/cj/Views.scala b/src/main/scala/io/trygvis/cj/Views.scala index b4429d8..8b3e5d9 100644 --- a/src/main/scala/io/trygvis/cj/Views.scala +++ b/src/main/scala/io/trygvis/cj/Views.scala @@ -1,10 +1,12 @@ package io.trygvis.cj import scala.collection.JavaConversions._ -import scala.xml.{Group, NodeSeq, Elem} -import java.net.{MalformedURLException, URL, URI, URLEncoder} +import scala.xml.{NodeSeq, Elem} +import java.net._ import org.json4s.native.JsonMethods import java.io.{PrintWriter, StringWriter, Writer} +import scala.xml.Group +import scala.Some class Views(baseUrl: String) { @@ -120,8 +122,8 @@ class Views(baseUrl: String) { layout(content, None) } - def data(url: URI, targetParams: Map[String, String], result: Either[Throwable, Collection], res: CjResponse) = { - + def data(request: CjRequest, response: Option[Either[Throwable, CjResponse]], + targetParams: Map[String, String], collection: Option[Either[Throwable, Collection]]) = { def href(uri: URI) = { // val splits = uri.getPath.split('/') // for split in splits @@ -413,26 +415,66 @@ class Views(baseUrl: String) { } - def httpResponse = { + def httpRequest(req: CjRequest) = {
-
-
Request URL
-
{url}
-
- - - - - {res.headers map { case (header, values) => { values map { value => - - - - - }}}} -
{res.code} {res.status}
{header}{tryLink(value)}
+ {req.url match { + case None => +
+
Could not parse generated URL
+
{req.urlString}
+
+ case _ => + }} + { + req.headers match { + case None => + case Some(headers) => +

Request

+ + + + + {headers map { case (header, values) => { values map { value => + + + + + }}}} +
{req.method} {req.url map { url => {url.toExternalForm} } getOrElse req.urlString}
{header}: {tryLink(value)}
+ }}
} + def httpResponse(r: Either[Throwable, CjResponse]) = { r match { + case Left(ex) => + if (ex.isInstanceOf[ConnectException]) { + "Unable to connect: " + ex.getMessage + } else if (ex.isInstanceOf[UnknownHostException]) { + "Unknown host: " + ex.getMessage + } else { + +

Unknown error while connecting to remote server

+
{getStackTrace(ex)}
+
+ } + case Right(res) => +
+ + + + + + {res.headers map { case (header, values) => { values map { value => + + + + + }}}} +
{res.code} {res.status}
{header}: {tryLink(value)}
+
+
+ }} + def parsedContent(implicit cj: Collection) =