aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jakob@driver.xyz>2017-08-04 13:07:24 -0700
committerJakob Odersky <jakob@driver.xyz>2017-08-16 19:26:10 -0700
commit6df9bf52db930ebd845ee7d35226b174d733e988 (patch)
tree1575fcfd1e9db55d02e370dfad3134c2a87c8604
parent644f0b2ee2d8e69949337c816bb64b19f5787025 (diff)
downloadrest-query-6df9bf52db930ebd845ee7d35226b174d733e988.tar.gz
rest-query-6df9bf52db930ebd845ee7d35226b174d733e988.tar.bz2
rest-query-6df9bf52db930ebd845ee7d35226b174d733e988.zip
Temporary back-port of parsers
-rw-r--r--build.sbt1
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/parsers/DimensionsParser.scala6
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/parsers/ListRequestParser.scala20
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/parsers/PagiationParser.scala26
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala6
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/parsers/SortingParser.scala6
6 files changed, 65 insertions, 0 deletions
diff --git a/build.sbt b/build.sbt
index 83602c8..b6e6d8c 100644
--- a/build.sbt
+++ b/build.sbt
@@ -4,6 +4,7 @@ import Keys._
lazy val core = (project in file("."))
.driverLibrary("pds-ui-common")
.settings(scalastyleSettings ++ wartRemoverSettings ++ formatSettings)
+ .settings(scalacOptions -= "-Xfatal-warnings") // TODO re-enable after migration
.settings(wartremoverErrors in (Compile, compile) --= Seq(
Wart.ImplicitConversion, Wart.MutableDataStructures, Wart.TraversableOps, Wart.OptionPartial))
.settings(sources in (Compile, doc) := Seq.empty, publishArtifact in (Compile, packageDoc) := false)
diff --git a/src/main/scala/xyz/driver/pdsuicommon/parsers/DimensionsParser.scala b/src/main/scala/xyz/driver/pdsuicommon/parsers/DimensionsParser.scala
index fb5a6b9..29f2363 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/parsers/DimensionsParser.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/parsers/DimensionsParser.scala
@@ -8,6 +8,12 @@ class Dimensions(private val xs: Set[String] = Set.empty) {
object DimensionsParser {
+ @deprecated("play-akka transition", "0")
+ def tryParse(query: Map[String, Seq[String]]): Try[Dimensions] =
+ tryParse(query.toSeq.flatMap{ case (key, values) =>
+ values.map(value => key -> value)
+ })
+
def tryParse(query: Seq[(String, String)]): Try[Dimensions] = {
query.collect { case ("dimensions", value) => value } match {
case Nil => Success(new Dimensions())
diff --git a/src/main/scala/xyz/driver/pdsuicommon/parsers/ListRequestParser.scala b/src/main/scala/xyz/driver/pdsuicommon/parsers/ListRequestParser.scala
new file mode 100644
index 0000000..0356784
--- /dev/null
+++ b/src/main/scala/xyz/driver/pdsuicommon/parsers/ListRequestParser.scala
@@ -0,0 +1,20 @@
+package xyz.driver.pdsuicommon.parsers
+
+import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
+import play.api.mvc._
+
+import scala.util.Try
+
+final case class ListRequestParameters(filter: SearchFilterExpr, sorting: Sorting, pagination: Pagination)
+
+class ListRequestParser(validSortingFields: Set[String]) {
+
+ def tryParse(request: Request[AnyContent]): Try[ListRequestParameters] = {
+ for {
+ queryFilters <- SearchFilterParser.parse(request.queryString)
+ sorting <- SortingParser.parse(validSortingFields, request.queryString)
+ pagination <- PaginationParser.parse(request.queryString)
+ } yield ListRequestParameters(queryFilters, sorting, pagination)
+ }
+
+}
diff --git a/src/main/scala/xyz/driver/pdsuicommon/parsers/PagiationParser.scala b/src/main/scala/xyz/driver/pdsuicommon/parsers/PagiationParser.scala
new file mode 100644
index 0000000..3381542
--- /dev/null
+++ b/src/main/scala/xyz/driver/pdsuicommon/parsers/PagiationParser.scala
@@ -0,0 +1,26 @@
+package xyz.driver.pdsuicommon.parsers
+
+import xyz.driver.pdsuicommon.db._
+import scala.util._
+
+object PaginationParser {
+
+ @deprecated("play-akka transition", "0")
+ def parse(query: Map[String, Seq[String]]): Try[Pagination] =
+ parse(query.toSeq.flatMap{ case (key, values) =>
+ values.map(value => key -> value)
+ })
+
+ def parse(query: Seq[(String, String)]): Try[Pagination] = {
+ val IntString = """\d+""".r
+ def validate(field: String) = query.collectFirst{case (`field`, size) => size} match {
+ case Some(IntString(x)) => x.toInt
+ case Some(str) => throw new ParseQueryArgException((field, s"must be an integer (found $str)"))
+ case None => throw new ParseQueryArgException((field, "must be defined"))
+ }
+
+ Try {
+ Pagination(validate("pageSize"), validate("pageNumber"))
+ }
+ }
+}
diff --git a/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala b/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala
index 58b80ce..061f2ef 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala
@@ -108,6 +108,12 @@ object SearchFilterParser {
private val atomParser: Parser[SearchFilterExpr.Atom] = P(binaryAtomParser | nAryAtomParser)
+ @deprecated("play-akka transition", "0")
+ def parse(query: Map[String, Seq[String]]): Try[SearchFilterExpr] =
+ parse(query.toSeq.flatMap{ case (key, values) =>
+ values.map(value => key -> value)
+ })
+
def parse(query: Seq[(String, String)]): Try[SearchFilterExpr] = Try {
query.toList.collect { case ("filters", value) => value } match {
case Nil => SearchFilterExpr.Empty
diff --git a/src/main/scala/xyz/driver/pdsuicommon/parsers/SortingParser.scala b/src/main/scala/xyz/driver/pdsuicommon/parsers/SortingParser.scala
index 375dee2..cc6ade3 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/parsers/SortingParser.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/parsers/SortingParser.scala
@@ -30,6 +30,12 @@ object SortingParser {
}
}
+ @deprecated("play-akka transition", "0")
+ def parse(validDimensions: Set[String], query: Map[String, Seq[String]]): Try[Sorting] =
+ parse(validDimensions, query.toSeq.flatMap{ case (key, values) =>
+ values.map(value => key -> value)
+ })
+
def parse(validDimensions: Set[String], query: Seq[(String, String)]): Try[Sorting] = Try {
query.toList.collect { case ("sort", value) => value } match {
case Nil => Sorting.Sequential(Seq.empty)