diff options
author | Kseniya Tomskikh <ktomskih@datamonsters.co> | 2017-10-20 16:25:04 +0700 |
---|---|---|
committer | Kseniya Tomskikh <ktomskih@datamonsters.co> | 2017-10-20 16:25:04 +0700 |
commit | 54b15dae509212f6661dc1f1bc4ca248cb487443 (patch) | |
tree | 85b1ceafd9a56da511513797bd263977f52b556c /src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibility.scala | |
parent | 6d6e732368e97e319653f00e498189afceeb4671 (diff) | |
download | rest-query-54b15dae509212f6661dc1f1bc4ca248cb487443.tar.gz rest-query-54b15dae509212f6661dc1f1bc4ca248cb487443.tar.bz2 rest-query-54b15dae509212f6661dc1f1bc4ca248cb487443.zip |
PDSUI-2336 Deleted api classes of play format, userhistory and message services
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibility.scala')
-rw-r--r-- | src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibility.scala | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibility.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibility.scala new file mode 100644 index 0000000..571cbde --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibility.scala @@ -0,0 +1,103 @@ +package xyz.driver.pdsuidomain.formats.json + +import spray.json.DefaultJsonProtocol._ +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 export._ + 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.document._ + import xyz.driver.pdsuidomain.formats.json.record._ + import xyz.driver.pdsuidomain.formats.json.export._ + + implicit val molecularDocumentFormat: RootJsonFormat[MolecularEvidenceDocument] = jsonFormat7( + MolecularEvidenceDocument) + implicit val clinicalDocumentFormat: RootJsonFormat[ClinicalEvidenceDocument] = jsonFormat7(ClinicalEvidenceDocument) + + implicit val evidenceDocumentFormat: RootJsonFormat[EvidenceDocument] = + GadtJsonFormat.create[EvidenceDocument]("evidenceDocumentType") { + 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[LabelEvidence] = jsonFormat2(LabelEvidence) + + implicit def labelRankingFormat: RootJsonFormat[LabelMismatchRank] = jsonFormat4(LabelMismatchRank) + implicit def labelRankingsFormat: RootJsonFormat[MismatchRankedLabels] = jsonFormat2(MismatchRankedLabels) + + implicit def matchedPatientFormat: RootJsonFormat[MatchedPatient] = jsonFormat6(MatchedPatient) +} |