aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala
diff options
context:
space:
mode:
authorvlad <vlad@driver.xyz>2017-09-28 13:12:32 -0700
committervlad <vlad@driver.xyz>2017-09-28 13:12:32 -0700
commitdeba20326e3269fee3ef51f8e6841f17453b4155 (patch)
tree29aac6bf4d0cd679a39ab1e1b84aef8ce1328b3f /src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala
parentc24679f1ae7d7ccc4e6693535b0aa3ac0e1ca225 (diff)
downloadrest-query-deba20326e3269fee3ef51f8e6841f17453b4155.tar.gz
rest-query-deba20326e3269fee3ef51f8e6841f17453b4155.tar.bz2
rest-query-deba20326e3269fee3ef51f8e6841f17453b4155.zip
Simplified Export entities for EVLSv0.4.1
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala')
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala97
1 files changed, 55 insertions, 42 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala
index 20b6ed0..2a1fe46 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala
@@ -1,6 +1,7 @@
package xyz.driver.pdsuidomain.formats.json.sprayformats
import spray.json._
+import xyz.driver.pdsuidomain.entities.{Arm, Criterion, Label}
import xyz.driver.pdsuidomain.entities.export.patient._
import xyz.driver.pdsuidomain.entities.export.trial.{ExportTrialArm, ExportTrialLabelCriterion, ExportTrialWithLabels}
@@ -8,42 +9,24 @@ object export {
import DefaultJsonProtocol._
import common._
import record._
+ import document._
- implicit val patientLabelEvidenceDocumentFormat: RootJsonFormat[ExportPatientLabelEvidenceDocument] = jsonFormat5(
- ExportPatientLabelEvidenceDocument.apply)
+ implicit val patientLabelEvidenceDocumentFormat: RootJsonFormat[ExportPatientLabelEvidenceDocument] =
+ jsonFormat5(ExportPatientLabelEvidenceDocument.apply)
- implicit val patientLabelEvidenceWriter: JsonWriter[ExportPatientLabelEvidence] =
- new JsonWriter[ExportPatientLabelEvidence] {
- override def write(obj: ExportPatientLabelEvidence): JsValue =
- JsObject(
- "evidenceId" -> obj.id.toJson,
- "labelValue" -> obj.value.toJson,
- "evidenceText" -> obj.evidenceText.toJson,
- "document" -> obj.document.toJson
- )
- }
+ implicit val patientLabelEvidenceFormat: RootJsonFormat[ExportPatientLabelEvidence] =
+ jsonFormat(ExportPatientLabelEvidence.apply, "evidenceId", "labelValue", "evidenceText", "document")
- implicit val patientLabelWriter: JsonWriter[ExportPatientLabel] = new JsonWriter[ExportPatientLabel] {
- override def write(obj: ExportPatientLabel): JsValue =
- JsObject(
- "labelId" -> obj.id.toJson,
- "evidence" -> obj.evidences.map(_.toJson).toJson
- )
- }
+ implicit val patientLabelFormat: RootJsonFormat[ExportPatientLabel] =
+ jsonFormat(ExportPatientLabel.apply, "labelId", "evidence")
- implicit val patientWithLabelsWriter: JsonWriter[ExportPatientWithLabels] = new JsonWriter[ExportPatientWithLabels] {
- override def write(obj: ExportPatientWithLabels): JsValue =
- JsObject(
- "patientId" -> obj.patientId.toJson,
- "labelVersion" -> obj.labelVersion.toJson,
- "labels" -> obj.labels.map(_.toJson).toJson
- )
- }
+ implicit val patientWithLabelsFormat: RootJsonFormat[ExportPatientWithLabels] =
+ jsonFormat(ExportPatientWithLabels.apply, "patientId", "labelVersion", "labels")
implicit val trialArmFormat: RootJsonFormat[ExportTrialArm] = jsonFormat2(ExportTrialArm.apply)
- implicit val trialLabelCriterionWriter: JsonWriter[ExportTrialLabelCriterion] =
- new JsonWriter[ExportTrialLabelCriterion] {
+ implicit val trialLabelCriterionFormat: RootJsonFormat[ExportTrialLabelCriterion] =
+ new RootJsonFormat[ExportTrialLabelCriterion] {
override def write(obj: ExportTrialLabelCriterion): JsValue =
JsObject(
"value" -> obj.value
@@ -60,19 +43,49 @@ object export {
"isCompound" -> obj.isCompound.toJson,
"isDefining" -> obj.isDefining.toJson
)
- }
- implicit val trialWithLabelsWriter: JsonWriter[ExportTrialWithLabels] = new JsonWriter[ExportTrialWithLabels] {
- override def write(obj: ExportTrialWithLabels) =
- JsObject(
- "nctId" -> obj.nctId.toJson,
- "trialId" -> obj.trialId.toJson,
- "disease" -> obj.condition.toJson,
- "lastReviewed" -> obj.lastReviewed.toJson,
- "labelVersion" -> obj.labelVersion.toJson,
- "arms" -> obj.arms.toJson,
- "criteria" -> obj.criteria.map(_.toJson).toJson
- )
- }
+ override def read(json: JsValue): ExportTrialLabelCriterion = {
+
+ val fields = Seq("value", "labelId", "criterionId", "criterionText", "armIds", "isCompound", "isDefining")
+
+ json.asJsObject.getFields(fields: _*) match {
+ case Seq(JsString(valueString),
+ labelId,
+ criterionId,
+ JsString(criterionText),
+ JsArray(armIdsVector),
+ JsBoolean(isCompound),
+ JsBoolean(isDefining)) =>
+ val value = valueString match {
+ case "Yes" => Option(true)
+ case "No" => Option(false)
+ case "Unknown" => Option.empty[Boolean]
+ }
+
+ ExportTrialLabelCriterion(
+ longIdFormat[Criterion].read(criterionId),
+ value,
+ longIdFormat[Label].read(labelId),
+ armIdsVector.map(longIdFormat[Arm].read).toSet,
+ criterionText,
+ isCompound,
+ isDefining
+ )
+
+ case _ =>
+ deserializationError(
+ s"Cannot find required fields ${fields.mkString(", ")} in ExportTrialLabelCriterion object!")
+ }
+ }
+ }
+ implicit val trialWithLabelsFormat: RootJsonFormat[ExportTrialWithLabels] =
+ jsonFormat(ExportTrialWithLabels.apply,
+ "nctId",
+ "trialId",
+ "disease",
+ "lastReviewed",
+ "labelVersion",
+ "arms",
+ "criteria")
}