aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksandr <ognelisar@gmail.com>2017-10-12 16:48:47 +0700
committerAleksandr <ognelisar@gmail.com>2017-10-12 16:48:47 +0700
commit91ac9c92f5b8232d22a41885b6d64686e22fcc3d (patch)
treed176438ee47aa72ec8ada66f19a7ae53e4b388ef
parentf49ba1bd0b14073dd263b5cce499250c8a4419b2 (diff)
downloadrest-query-91ac9c92f5b8232d22a41885b6d64686e22fcc3d.tar.gz
rest-query-91ac9c92f5b8232d22a41885b6d64686e22fcc3d.tar.bz2
rest-query-91ac9c92f5b8232d22a41885b6d64686e22fcc3d.zip
Implemented format for EligibilityArmWithDiseases class; Fixed formats for other classes
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiCreateEligibilityArm.scala (renamed from src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityCreateArm.scala)0
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala4
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibilityarm.scala123
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala6
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/slotarm.scala2
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/EligibilityArmFormatSuite.scala36
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/EligibilityArmWithDiseasesFormatSuite.scala55
7 files changed, 158 insertions, 68 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityCreateArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiCreateEligibilityArm.scala
index 087fed5..087fed5 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityCreateArm.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiCreateEligibilityArm.scala
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala
index a43e92a..52d82dc 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala
@@ -10,7 +10,7 @@ object criterion {
import DefaultJsonProtocol._
import common._
- implicit val criterionLabelWriter = new RootJsonWriter[CriterionLabel] {
+ implicit def criterionLabelWriter: RootJsonWriter[CriterionLabel] = new RootJsonWriter[CriterionLabel] {
override def write(obj: CriterionLabel) = JsObject(
"labelId" -> obj.labelId.toJson,
"categoryId" -> obj.categoryId.toJson,
@@ -103,7 +103,7 @@ object criterion {
case _ => deserializationError(s"Expected Json Object as partial Criterion, but got $json")
}
- val richCriterionFormat = new RootJsonFormat[RichCriterion] {
+ implicit def richCriterionFormat: RootJsonFormat[RichCriterion] = new RootJsonFormat[RichCriterion] {
override def write(obj: RichCriterion): JsValue =
JsObject(
"id" -> obj.criterion.id.toJson,
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibilityarm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibilityarm.scala
index acb790a..4b72096 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibilityarm.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibilityarm.scala
@@ -1,44 +1,115 @@
package xyz.driver.pdsuidomain.formats.json.sprayformats
import spray.json._
+import xyz.driver.entities.patient.CancerType
+import xyz.driver.formats.json.patient._
import xyz.driver.pdsuicommon.domain.{LongId, StringId}
-import xyz.driver.pdsuidomain.entities.{EligibilityArm, Trial}
+import xyz.driver.pdsuidomain.entities._
object eligibilityarm {
+
import DefaultJsonProtocol._
import common._
- def applyUpdateToArm(json: JsValue, orig: EligibilityArm): EligibilityArm = json match {
- case JsObject(fields) =>
- val name = fields
- .get("name")
- .map(_.convertTo[String])
- .getOrElse(deserializationError(s"Arm json object does not contain `name` field: $json"))
- orig.copy(name = name)
+ private def deserializationErrorFieldMessage(field: String, json: JsValue)(implicit className: String) = {
+ deserializationError(s"$className json object do not contain '$field' field: $json")
+ }
- case _ => deserializationError(s"Expected Json Object as partial Arm, but got $json")
+ private def deserializationErrorEntityMessage(json: JsValue)(implicit className: String) = {
+ deserializationError(s"Expected Json Object as $className, but got $json")
}
- def eligibilityArmFormat: RootJsonFormat[EligibilityArm] = new RootJsonFormat[EligibilityArm] {
- override def write(obj: EligibilityArm): JsValue =
- JsObject(
- "id" -> obj.id.toJson,
- "name" -> obj.name.toJson,
- "originalName" -> obj.originalName.toJson,
- "trialId" -> obj.trialId.toJson
- )
-
- override def read(json: JsValue): EligibilityArm = json.asJsObject.getFields("trialId", "name") match {
- case Seq(trialId, name) =>
- EligibilityArm(
- id = LongId(0),
- name = name.convertTo[String],
- trialId = trialId.convertTo[StringId[Trial]],
- originalName = name.convertTo[String]
+
+ implicit def eligibilityArmWithDiseasesWriter: RootJsonWriter[EligibilityArmWithDiseases] =
+ new RootJsonWriter[EligibilityArmWithDiseases] {
+ override def write(obj: EligibilityArmWithDiseases): JsValue = {
+ JsObject(
+ "id" -> obj.eligibilityArm.id.toJson,
+ "name" -> obj.eligibilityArm.name.toJson,
+ "originalName" -> obj.eligibilityArm.originalName.toJson,
+ "trialId" -> obj.eligibilityArm.trialId.toJson,
+ "diseases" -> obj.eligibilityArmDiseases.map(_.disease.toJson).toJson
)
+ }
+ }
+
+
+ implicit def eligibilityArmWithDiseasesReader: RootJsonReader[EligibilityArmWithDiseases] = {
+ new RootJsonReader[EligibilityArmWithDiseases] {
+ implicit val className: String = "create EligibilityArmWithDiseases"
+
+ override def read(json: JsValue): EligibilityArmWithDiseases = {
+ json match {
+ case JsObject(fields) =>
+ val name = fields
+ .get("name")
+ .map(_.convertTo[String])
+ .getOrElse(deserializationErrorFieldMessage("name", json))
+
+ val trialId = fields
+ .get("trialId")
+ .map(_.convertTo[StringId[Trial]])
+ .getOrElse(deserializationErrorFieldMessage("trialId", json))
+
+ val diseases = fields
+ .get("diseases")
+ .map(_.convertTo[Seq[String]])
+ .getOrElse(deserializationErrorFieldMessage("diseases", json))
- case _ => deserializationError(s"Expected Json Object as Arm, but got $json")
+
+
+ val eligibilityArm = EligibilityArm(
+ id = LongId(0),
+ name = name,
+ trialId = trialId,
+ originalName = name
+ )
+
+ EligibilityArmWithDiseases(
+ eligibilityArm,
+ diseases.map { disease =>
+ val condition = CancerType
+ .fromString(disease)
+ .getOrElse(throw new NoSuchElementException(s"unknown condition $disease"))
+ EligibilityArmDisease(eligibilityArm.id, condition)
+ }
+ )
+ case _ => deserializationErrorEntityMessage(json)
+ }
+ }
}
}
+ def applyUpdateToEligibilityArmWithDiseases(json: JsValue, orig: EligibilityArmWithDiseases): EligibilityArmWithDiseases = {
+ implicit val className: String = "update EligibilityArmWithDiseases"
+ json match {
+ case JsObject(fields) =>
+ val name = fields
+ .get("name")
+ .map(_.convertTo[String])
+ .getOrElse(orig.eligibilityArm.name)
+
+ val diseases = fields
+ .get("diseases")
+ .map(_.convertTo[Seq[CancerType]])
+ .getOrElse(orig.eligibilityArmDiseases.map(_.disease))
+
+ orig.copy(
+ eligibilityArm =
+ orig
+ .eligibilityArm
+ .copy(name = name),
+ eligibilityArmDiseases =
+ orig
+ .eligibilityArmDiseases
+ .zip(diseases)
+ .map {
+ case (eligibilityArmDisease, disease) =>
+ eligibilityArmDisease.copy(disease = disease)
+ }
+ )
+
+ case _ => deserializationErrorEntityMessage(json)
+ }
+ }
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala
index 2ced434..0fcc61f 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/intervention.scala
@@ -9,7 +9,7 @@ object intervention {
import DefaultJsonProtocol._
import common._
- implicit val interventionFormat: JsonFormat[InterventionWithArms] = new RootJsonFormat[InterventionWithArms] {
+ implicit def interventionFormat: RootJsonFormat[InterventionWithArms] = new RootJsonFormat[InterventionWithArms] {
override def write(obj: InterventionWithArms) =
JsObject(
"id" -> obj.intervention.id.toJson,
@@ -120,8 +120,8 @@ object intervention {
case _ => deserializationError(s"Expected Json Object as partial Intervention, but got $json")
}
- implicit val interventionTypeFormat: JsonFormat[InterventionType] = new RootJsonFormat[InterventionType] {
- override def read(json: JsValue) = json match {
+ implicit def interventionTypeFormat: JsonFormat[InterventionType] = new RootJsonFormat[InterventionType] {
+ override def read(json: JsValue): InterventionType = json match {
case JsObject(fields) =>
val name = fields
.get("name")
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/slotarm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/slotarm.scala
index 192bd6a..1d74916 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/slotarm.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/slotarm.scala
@@ -19,7 +19,7 @@ object slotarm {
case _ => deserializationError(s"Expected Json Object as partial Arm, but got $json")
}
- def slotArmFormat: RootJsonFormat[SlotArm] = new RootJsonFormat[SlotArm] {
+ implicit def slotArmFormat: RootJsonFormat[SlotArm] = new RootJsonFormat[SlotArm] {
override def write(obj: SlotArm): JsValue =
JsObject(
"id" -> obj.id.toJson,
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/EligibilityArmFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/EligibilityArmFormatSuite.scala
deleted file mode 100644
index bcfb977..0000000
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/EligibilityArmFormatSuite.scala
+++ /dev/null
@@ -1,36 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.sprayformats
-
-import spray.json._
-import org.scalatest.{FlatSpec, Matchers}
-import xyz.driver.pdsuicommon.domain.{LongId, StringId}
-import xyz.driver.pdsuidomain.entities.EligibilityArm
-
-class EligibilityArmFormatSuite extends FlatSpec with Matchers {
- import eligibilityarm._
-
- "Json format for EligibilityArm" should "read and write correct JSON" in {
- val arm = EligibilityArm(
- id = LongId(10),
- trialId = StringId("NCT000001"),
- name = "arm name",
- originalName = "orig arm name"
- )
- val writtenJson = eligibilityArmFormat.write(arm)
-
- writtenJson should be(
- """{"id":10,"trialId":"NCT000001","name":"arm name","originalName":"orig arm name"}""".parseJson)
-
- val createArmJson = """{"trialId":"NCT000001","name":"arm name"}""".parseJson
- val parsedArm = eligibilityArmFormat.read(createArmJson)
- val expectedCreatedArm = arm.copy(
- id = LongId(0),
- originalName = "arm name"
- )
- parsedArm should be(expectedCreatedArm)
-
- val updateArmJson = """{"name":"new arm name"}""".parseJson
- val expectedUpdatedArm = arm.copy(name = "new arm name")
- val parsedUpdateArm = applyUpdateToArm(updateArmJson, arm)
- parsedUpdateArm should be(expectedUpdatedArm)
- }
-}
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/EligibilityArmWithDiseasesFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/EligibilityArmWithDiseasesFormatSuite.scala
new file mode 100644
index 0000000..22adc98
--- /dev/null
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/EligibilityArmWithDiseasesFormatSuite.scala
@@ -0,0 +1,55 @@
+package xyz.driver.pdsuidomain.formats.json.sprayformats
+
+import spray.json._
+import org.scalatest.{FlatSpec, Matchers}
+import xyz.driver.entities.patient.CancerType
+import xyz.driver.pdsuicommon.domain.{LongId, StringId}
+import xyz.driver.pdsuidomain.entities.{EligibilityArm, EligibilityArmDisease, EligibilityArmWithDiseases}
+
+class EligibilityArmWithDiseasesFormatSuite extends FlatSpec with Matchers {
+ import eligibilityarm._
+
+ "Json format for EligibilityArmWithDiseases" should "read and write correct JSON" in {
+ val name = "arm name"
+
+ val arm = EligibilityArm(
+ id = LongId(0),
+ trialId = StringId("NCT000001"),
+ name = name,
+ originalName = name
+ )
+
+ val disease = EligibilityArmDisease(
+ arm.id,
+ disease = CancerType.Lung
+ )
+
+ val eligibilityArmWithDiseases =
+ EligibilityArmWithDiseases(
+ arm,
+ Seq(disease)
+ )
+
+ val writtenJson = eligibilityArmWithDiseasesWriter.write(eligibilityArmWithDiseases)
+
+ writtenJson should be(
+ """{"id":0,"trialId":"NCT000001","name":"arm name","originalName":"arm name","diseases":["Lung"]}""".parseJson)
+
+ val createArmWithDiseasesJson = """{"trialId":"NCT000001","name":"arm name","diseases":["Lung"]}""".parseJson
+ val parsedArmWithDiseases = eligibilityArmWithDiseasesReader.read(createArmWithDiseasesJson)
+ parsedArmWithDiseases should be(eligibilityArmWithDiseases)
+
+ val updateArmWithDiseasesJson = """{"name":"new arm name"}""".parseJson
+ val expectedUpdatedArmWithDiseases = eligibilityArmWithDiseases.copy(
+ eligibilityArm = eligibilityArmWithDiseases.eligibilityArm.copy(name = "new arm name")
+ )
+
+ val parsedUpdateArmWithDiseases =
+ applyUpdateToEligibilityArmWithDiseases(
+ updateArmWithDiseasesJson,
+ eligibilityArmWithDiseases
+ )
+
+ parsedUpdateArmWithDiseases should be(expectedUpdatedArmWithDiseases)
+ }
+}