aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/formats/json
diff options
context:
space:
mode:
authorKseniya Tomskikh <ktomskih@datamonsters.co>2017-10-27 12:41:33 +0700
committerKseniya Tomskikh <ktomskih@datamonsters.co>2017-10-27 12:41:33 +0700
commitd9440a727edd25f2472754dc51b0206d6abbeba4 (patch)
tree1e7a123e5f28c7b5adfa4962971a550d247c28dd /src/main/scala/xyz/driver/pdsuidomain/formats/json
parentb27ba47906e48e9fc59d65893c71309303f73fc8 (diff)
parentfde83eb31ef4f2c2334b41d3a727239c034bfd63 (diff)
downloadrest-query-d9440a727edd25f2472754dc51b0206d6abbeba4.tar.gz
rest-query-d9440a727edd25f2472754dc51b0206d6abbeba4.tar.bz2
rest-query-d9440a727edd25f2472754dc51b0206d6abbeba4.zip
Merge branch 'master' into PDSUI-2336
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json')
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala1
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/export.scala86
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention.scala5
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala1
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patientcriterion.scala3
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/record.scala3
6 files changed, 72 insertions, 27 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala
@@ -0,0 +1 @@
+
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export.scala
index 6b72cb8..d70ce6f 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/export.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/export.scala
@@ -3,6 +3,7 @@ package xyz.driver.pdsuidomain.formats.json
import spray.json._
import xyz.driver.entities.labels.Label
import xyz.driver.formats.json.labels._
+import xyz.driver.pdsuicommon.domain.LongId
import xyz.driver.pdsuidomain.entities.export.patient._
import xyz.driver.pdsuidomain.entities.export.trial.{ExportTrialArm, ExportTrialLabelCriterion, ExportTrialWithLabels}
import xyz.driver.pdsuidomain.entities.{Criterion, EligibilityArm}
@@ -13,6 +14,14 @@ object export {
import document._
import record._
+ private def deserializationErrorFieldMessage(field: String, json: JsValue)(implicit className: String) = {
+ deserializationError(s"$className json object do not contain '$field' field: $json")
+ }
+
+ private def deserializationErrorEntityMessage(json: JsValue)(implicit className: String) = {
+ deserializationError(s"Expected Json Object as $className, but got $json")
+ }
+
implicit val patientLabelEvidenceDocumentFormat: RootJsonFormat[ExportPatientLabelEvidenceDocument] =
jsonFormat5(ExportPatientLabelEvidenceDocument.apply)
@@ -29,6 +38,8 @@ object export {
implicit val trialLabelCriterionFormat: RootJsonFormat[ExportTrialLabelCriterion] =
new RootJsonFormat[ExportTrialLabelCriterion] {
+ implicit val className: String = "ExportTrialLabelCriterion"
+
override def write(obj: ExportTrialLabelCriterion): JsValue =
JsObject(
"value" -> obj.value
@@ -43,40 +54,69 @@ object export {
"criterionText" -> obj.criteria.toJson,
"armIds" -> obj.armIds.toJson,
"isCompound" -> obj.isCompound.toJson,
- "isDefining" -> obj.isDefining.toJson
+ "isDefining" -> obj.isDefining.toJson,
+ "inclusion" -> obj.inclusion.toJson
)
override def read(json: JsValue): ExportTrialLabelCriterion = {
+ json match {
+ case JsObject(fields) =>
+ val value = fields
+ .get("value")
+ .map(_.convertTo[String])
+ .map {
+ case "Yes" => Option(true)
+ case "No" => Option(false)
+ case "Unknown" => Option.empty[Boolean]
+ }
+ .getOrElse(deserializationErrorFieldMessage("value", json))
- 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]
- }
+ val labelId = fields
+ .get("labelId")
+ .map(_.convertTo[LongId[Label]])
+ .getOrElse(deserializationErrorFieldMessage("labelId", json))
+
+ val criterionId = fields
+ .get("criterionId")
+ .map(_.convertTo[LongId[Criterion]])
+ .getOrElse(deserializationErrorFieldMessage("criterionId", json))
+
+ val criterionText = fields
+ .get("criterionText")
+ .map(_.convertTo[String])
+ .getOrElse(deserializationErrorFieldMessage("criterionText", json))
+
+ val armIds = fields
+ .get("armIds")
+ .map(_.convertTo[Set[LongId[EligibilityArm]]])
+ .getOrElse(deserializationErrorFieldMessage("armIds", json))
+
+ val isCompound = fields
+ .get("isCompound")
+ .map(_.convertTo[Boolean])
+ .getOrElse(deserializationErrorFieldMessage("isCompound", json))
+
+ val isDefining = fields
+ .get("isDefining")
+ .map(_.convertTo[Boolean])
+ .getOrElse(deserializationErrorFieldMessage("isDefining", json))
+
+ val inclusion = fields
+ .get("inclusion")
+ .flatMap(_.convertTo[Option[Boolean]])
ExportTrialLabelCriterion(
- longIdFormat[Criterion].read(criterionId),
+ criterionId,
value,
- longIdFormat[Label].read(labelId),
- armIdsVector.map(longIdFormat[EligibilityArm].read).toSet,
+ labelId,
+ armIds,
criterionText,
isCompound,
- isDefining
+ isDefining,
+ inclusion
)
- case _ =>
- deserializationError(
- s"Cannot find required fields ${fields.mkString(", ")} in ExportTrialLabelCriterion object!")
+ case _ => deserializationErrorEntityMessage(json)
}
}
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention.scala
index 5cd7527..14edd5d 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/intervention.scala
@@ -99,7 +99,8 @@ object intervention {
val deliveryMethod = fields
.get("deliveryMethod")
- .map(_.convertTo[String])
+ .map(_.convertTo[Option[String]])
+ .getOrElse(orig.intervention.deliveryMethod)
val origIntervention = orig.intervention
val arms = fields
@@ -112,7 +113,7 @@ object intervention {
typeId = typeId.orElse(origIntervention.typeId),
dosage = dosage.getOrElse(origIntervention.dosage),
isActive = isActive.getOrElse(origIntervention.isActive),
- deliveryMethod = deliveryMethod.orElse(origIntervention.deliveryMethod)
+ deliveryMethod = deliveryMethod
),
arms = arms.getOrElse(orig.arms)
)
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala
@@ -0,0 +1 @@
+
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientcriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientcriterion.scala
index fc0b725..fbefd33 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientcriterion.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientcriterion.scala
@@ -56,7 +56,8 @@ object patientcriterion {
"verifiedEligibilityStatus" -> obj.patientCriterion.verifiedEligibilityStatus.toJson,
"isVerified" -> obj.patientCriterion.isVerified.toJson,
"isVisible" -> obj.patientCriterion.isVisible.toJson,
- "lastUpdate" -> obj.patientCriterion.lastUpdate.toJson
+ "lastUpdate" -> obj.patientCriterion.lastUpdate.toJson,
+ "inclusion" -> obj.patientCriterion.inclusion.toJson
)
}
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record.scala
index 9a8dc9c..b6ed103 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record.scala
@@ -15,6 +15,7 @@ object record {
import common._
implicit val recordStatusFormat = new EnumJsonFormat[Status](
+ "PreCleaning" -> Status.PreCleaning,
"Unprocessed" -> Status.Unprocessed,
"PreOrganized" -> Status.PreOrganized,
"New" -> Status.New,
@@ -93,7 +94,7 @@ object record {
val endOriginalPage = fields
.get("endOriginalPage")
- .map(_.convertTo[Double])
+ .flatMap(_.convertTo[Option[Double]])
Duplicate(
startPage = startPage,