aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/formats
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats')
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/category/ApiCategory.scala23
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/keyword/ApiKeyword.scala23
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala5
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala5
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiLabel.scala22
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala3
-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
13 files changed, 116 insertions, 77 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/category/ApiCategory.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/category/ApiCategory.scala
deleted file mode 100644
index f1e15f3..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/category/ApiCategory.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.category
-
-import play.api.libs.functional.syntax._
-import play.api.libs.json.{Format, JsPath}
-import xyz.driver.pdsuidomain.entities.CategoryWithLabels
-import xyz.driver.pdsuidomain.formats.json.label.ApiLabel
-
-final case class ApiCategory(id: Long, name: String, labels: List[ApiLabel])
-
-object ApiCategory {
-
- implicit val format: Format[ApiCategory] = (
- (JsPath \ "id").format[Long] and
- (JsPath \ "name").format[String] and
- (JsPath \ "labels").format[List[ApiLabel]]
- )(ApiCategory.apply, unlift(ApiCategory.unapply))
-
- def fromDomain(categoryWithLabels: CategoryWithLabels) = ApiCategory(
- id = categoryWithLabels.category.id.id,
- name = categoryWithLabels.category.name,
- labels = categoryWithLabels.labels.map(x => ApiLabel(x.id.id, x.name, x.categoryId.id))
- )
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/keyword/ApiKeyword.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/keyword/ApiKeyword.scala
deleted file mode 100644
index a9d02fc..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/keyword/ApiKeyword.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.keyword
-
-import xyz.driver.pdsuidomain.entities.KeywordWithLabels
-import play.api.libs.functional.syntax._
-import play.api.libs.json.{Format, JsPath}
-import xyz.driver.pdsuidomain.formats.json.label.ApiLabel
-
-final case class ApiKeyword(id: Long, keyword: String, labels: List[ApiLabel])
-
-object ApiKeyword {
-
- implicit val format: Format[ApiKeyword] = (
- (JsPath \ "id").format[Long] and
- (JsPath \ "keyword").format[String] and
- (JsPath \ "labels").format[List[ApiLabel]]
- )(ApiKeyword.apply, unlift(ApiKeyword.unapply))
-
- def fromDomain(keywordWithLabels: KeywordWithLabels) = ApiKeyword(
- id = keywordWithLabels.keyword.id.id,
- keyword = keywordWithLabels.keyword.keyword,
- labels = keywordWithLabels.labels.map(x => ApiLabel(x.id.id, x.name, x.categoryId.id))
- )
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala
index 7a65af8..d486749 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala
@@ -1,10 +1,11 @@
package xyz.driver.pdsuidomain.formats.json.label
import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId}
-import xyz.driver.pdsuidomain.entities.{Category, Criterion, CriterionLabel, Label}
+import xyz.driver.pdsuidomain.entities.{Criterion, CriterionLabel}
import play.api.data.validation.ValidationError
import play.api.libs.functional.syntax._
import play.api.libs.json._
+import xyz.driver.entities.labels.{Label, LabelCategory}
/**
* @param value Yes|No
@@ -18,7 +19,7 @@ final case class ApiCriterionLabel(labelId: Option[Long],
id = LongId(0L),
labelId = labelId.map(LongId[Label]),
criterionId = criterionId,
- categoryId = categoryId.map(LongId[Category]),
+ categoryId = categoryId.map(LongId[LabelCategory]),
value = value.map {
case "Yes" => true
case "No" => false
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala
index cb45025..f8161af 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala
@@ -1,10 +1,11 @@
package xyz.driver.pdsuidomain.formats.json.label
import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId}
-import xyz.driver.pdsuidomain.entities.{Category, ExtractedData, ExtractedDataLabel, Label}
+import xyz.driver.pdsuidomain.entities.{ExtractedData, ExtractedDataLabel}
import play.api.data.validation.ValidationError
import play.api.libs.functional.syntax._
import play.api.libs.json._
+import xyz.driver.entities.labels.{Label, LabelCategory}
final case class ApiExtractedDataLabel(id: Option[Long], categoryId: Option[Long], value: Option[String]) {
@@ -12,7 +13,7 @@ final case class ApiExtractedDataLabel(id: Option[Long], categoryId: Option[Long
id = LongId(0),
dataId = dataId,
labelId = id.map(LongId[Label]),
- categoryId = categoryId.map(LongId[Category]),
+ categoryId = categoryId.map(LongId[LabelCategory]),
value = value.map(FuzzyValue.fromString)
)
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiLabel.scala
deleted file mode 100644
index 042b380..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiLabel.scala
+++ /dev/null
@@ -1,22 +0,0 @@
-package xyz.driver.pdsuidomain.formats.json.label
-
-import play.api.libs.functional.syntax._
-import play.api.libs.json.{Format, JsPath}
-import xyz.driver.pdsuidomain.entities.Label
-
-final case class ApiLabel(id: Long, name: String, categoryId: Long)
-
-object ApiLabel {
-
- implicit val format: Format[ApiLabel] = (
- (JsPath \ "id").format[Long] and
- (JsPath \ "name").format[String] and
- (JsPath \ "categoryId").format[Long]
- )(ApiLabel.apply, unlift(ApiLabel.unapply))
-
- def fromDomain(x: Label) = ApiLabel(
- id = x.id.id,
- name = x.name,
- categoryId = x.categoryId.id
- )
-}
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
index 75347f4..6eeb40b 100644
--- 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
@@ -3,10 +3,11 @@ package xyz.driver.pdsuidomain.formats.json.patient.trial
import java.time.{ZoneId, ZonedDateTime}
import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId}
-import xyz.driver.pdsuidomain.entities.{Label, PatientCriterion, PatientCriterionArm}
+import xyz.driver.pdsuidomain.entities.{PatientCriterion, PatientCriterionArm}
import play.api.data.validation.ValidationError
import play.api.libs.functional.syntax._
import play.api.libs.json.{Format, JsPath, Reads, Writes}
+import xyz.driver.entities.labels.Label
final case class ApiPatientCriterion(id: Long,
labelId: Long,
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