aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats
diff options
context:
space:
mode:
authorvlad <vlad@driver.xyz>2017-10-01 12:50:54 -0700
committervlad <vlad@driver.xyz>2017-10-01 12:50:54 -0700
commitb5e0d5f91b52013bc11ef3ea586a54bb001577bc (patch)
tree58d6ca321e1f9176d02e24fbde6321bddadb21ee /src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats
parent46b354b6a49c0843fefc5794f2351f52b98102bd (diff)
downloadrest-query-0.5.1.tar.gz
rest-query-0.5.1.tar.bz2
rest-query-0.5.1.zip
Fixing IN in filters, Model from EVLS added to common, Reusing domain model labelsv0.5.1
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats')
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala3
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documenttype.scala1
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala101
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala3
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala3
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala1
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/providertype.scala (renamed from src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/providerttype.scala)0
7 files changed, 108 insertions, 4 deletions
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 732bcad..743f885 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
@@ -1,6 +1,7 @@
package xyz.driver.pdsuidomain.formats.json.sprayformats
import spray.json._
+import xyz.driver.entities.labels.{Label, LabelCategory}
import xyz.driver.pdsuicommon.domain.{LongId, StringId}
import xyz.driver.pdsuidomain.entities._
import xyz.driver.pdsuidomain.services.CriterionService.RichCriterion
@@ -29,7 +30,7 @@ object criterion {
val categoryId = fields
.get("categoryId")
- .map(_.convertTo[LongId[Category]])
+ .map(_.convertTo[LongId[LabelCategory]])
val value = fields
.get("value")
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documenttype.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documenttype.scala
index 8119d35..7ec6ef5 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documenttype.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/documenttype.scala
@@ -1,7 +1,6 @@
package xyz.driver.pdsuidomain.formats.json.sprayformats
import spray.json._
-import xyz.driver.pdsuidomain.entities._
import xyz.driver.pdsuidomain.entities.DocumentType
object documenttype {
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala
new file mode 100644
index 0000000..30ceae2
--- /dev/null
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala
@@ -0,0 +1,101 @@
+package xyz.driver.pdsuidomain.formats.json.sprayformats
+
+import spray.json._
+import DefaultJsonProtocol._
+import xyz.driver.core.Id
+import xyz.driver.core.json._
+import xyz.driver.entities.labels.LabelValue
+import xyz.driver.pdsuidomain.entities.eligibility._
+
+object eligibility {
+ import xyz.driver.formats.json.assay._
+ import xyz.driver.formats.json.common._
+ import xyz.driver.formats.json.labels._
+ import xyz.driver.formats.json.process._
+ import xyz.driver.pdsuidomain.formats.json.sprayformats.document._
+ import xyz.driver.pdsuidomain.formats.json.sprayformats.record._
+ import xyz.driver.pdsuidomain.formats.json.sprayformats.export._
+
+ implicit val molecularDocumentFormat: RootJsonFormat[MolecularEvidenceDocument] = jsonFormat7(
+ MolecularEvidenceDocument)
+ implicit val clinicalDocumentFormat: RootJsonFormat[ClinicalEvidenceDocument] = jsonFormat7(ClinicalEvidenceDocument)
+
+ implicit val evidenceDocumentFormat: RootJsonFormat[EvidenceDocument] =
+ GadtJsonFormat.create[EvidenceDocument]("documentType") {
+ case _: MolecularEvidenceDocument => "Molecular"
+ case _: ClinicalEvidenceDocument => "Clinical"
+ } {
+ case "Molecular" => molecularDocumentFormat
+ case "Clinical" => clinicalDocumentFormat
+ }
+
+ implicit object evidenceFormat extends RootJsonFormat[Evidence] {
+
+ override def write(evidence: Evidence): JsValue = {
+ JsObject(
+ "evidenceId" -> evidence.evidenceId.toJson,
+ "evidenceText" -> evidence.evidenceText.toJson,
+ "labelValue" -> evidence.labelValue.toJson,
+ "document" -> evidence.document.toJson,
+ "isPrimaryValue" -> evidence.isPrimaryValue.toJson
+ )
+ }
+
+ override def read(json: JsValue): Evidence = {
+ json match {
+ case JsObject(fields) =>
+ val evidenceId = fields
+ .get("evidenceId")
+ .map(_.convertTo[Id[Evidence]])
+
+ val evidenceText = fields
+ .get("evidenceText")
+ .map(_.convertTo[String])
+ .getOrElse(deserializationError(s"Evidence json object do not contain 'evidenceText' field: $json"))
+
+ val labelValue = fields
+ .get("labelValue")
+ .map(_.convertTo[LabelValue])
+ .getOrElse(deserializationError(s"Evidence json object do not contain 'labelValue' field: $json"))
+
+ val isDriverDocument = fields
+ .get("document")
+ .flatMap {
+ case JsObject(fieldMap) =>
+ fieldMap
+ .get("isDriverDocument")
+ .map(_.convertTo[Boolean])
+ case _ => deserializationError(s"Expected Json Object as 'isDriverDocument', but got $json")
+ }
+ .getOrElse(deserializationError(s"Evidence json object do not contain 'document' field: $json"))
+
+ val document = customDocumentParser(isDriverDocument, fields, json)
+
+ val isPrimaryValue = fields
+ .get("isPrimaryValue")
+ .map(_.convertTo[Option[Boolean]])
+ .getOrElse(deserializationError(s"Evidence json object do not contain 'isPrimaryValue' field: $json"))
+
+ Evidence(evidenceId, evidenceText, labelValue, document, isPrimaryValue)
+ case _ => deserializationError(s"Expected Json Object as 'Evidence', but got $json")
+ }
+ }
+
+ def customDocumentParser(isDriverDocument: Boolean,
+ fields: Map[String, JsValue],
+ json: JsValue): EvidenceDocument = {
+ fields.get("document").fold { deserializationError(s"Expected Json Object as 'Document', but got $json") } {
+ document =>
+ if (isDriverDocument) document.convertTo[MolecularEvidenceDocument]
+ else document.convertTo[ClinicalEvidenceDocument]
+ }
+ }
+ }
+
+ implicit def labelWithEvidenceJsonFormat: RootJsonFormat[LabelWithEvidence] = jsonFormat2(LabelWithEvidence)
+
+ implicit def labelRankingFormat: RootJsonFormat[LabelMismatchRank] = jsonFormat4(LabelMismatchRank)
+ implicit def labelRankingsFormat: RootJsonFormat[MismatchRankedLabels] = jsonFormat2(MismatchRankedLabels)
+
+ implicit def matchedPatientFormat: RootJsonFormat[MatchedPatient] = jsonFormat6(MatchedPatient)
+}
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 2a1fe46..39d5c59 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,7 +1,8 @@
package xyz.driver.pdsuidomain.formats.json.sprayformats
import spray.json._
-import xyz.driver.pdsuidomain.entities.{Arm, Criterion, Label}
+import xyz.driver.entities.labels.Label
+import xyz.driver.pdsuidomain.entities.{Arm, Criterion}
import xyz.driver.pdsuidomain.entities.export.patient._
import xyz.driver.pdsuidomain.entities.export.trial.{ExportTrialArm, ExportTrialLabelCriterion, ExportTrialWithLabels}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala
index 42473bc..d6eadbd 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala
@@ -1,6 +1,7 @@
package xyz.driver.pdsuidomain.formats.json.sprayformats
import spray.json._
+import xyz.driver.entities.labels.{Label, LabelCategory}
import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, TextJson}
import xyz.driver.pdsuidomain.entities._
import xyz.driver.pdsuidomain.services.ExtractedDataService.RichExtractedData
@@ -39,7 +40,7 @@ object extracteddata {
val categoryId = fields
.get("categoryId")
- .map(_.convertTo[LongId[Category]])
+ .map(_.convertTo[LongId[LabelCategory]])
val value = fields
.get("value")
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala
index 53e927d..b091746 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala
@@ -1,6 +1,7 @@
package xyz.driver.pdsuidomain.formats.json.sprayformats
import spray.json._
+import xyz.driver.entities.labels.Label
import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId}
import xyz.driver.pdsuidomain.entities._
import xyz.driver.pdsuidomain.services.PatientCriterionService.DraftPatientCriterion
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/providerttype.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/providertype.scala
index 385feb2..385feb2 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/providerttype.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/providertype.scala