diff options
author | vlad <vlad@driver.xyz> | 2017-06-27 17:13:02 -0700 |
---|---|---|
committer | vlad <vlad@driver.xyz> | 2017-06-27 17:13:02 -0700 |
commit | 5832f63b84d7388441d1200f2442dc1e9de0225c (patch) | |
tree | 32f63acdc920c14effc3d0d2822c05c125ad49e4 /src/main/scala/xyz/driver/pdsuidomain/formats/json/extracteddata/ApiExtractedData.scala | |
parent | 9dd50590d4c8f8b9442d7c21ddd1def9dd453d5e (diff) | |
download | rest-query-5832f63b84d7388441d1200f2442dc1e9de0225c.tar.gz rest-query-5832f63b84d7388441d1200f2442dc1e9de0225c.tar.bz2 rest-query-5832f63b84d7388441d1200f2442dc1e9de0225c.zip |
All PDS UI domain models, API case classes, service traits and necessary utils moved to pdsui-commonv0.1.11
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json/extracteddata/ApiExtractedData.scala')
-rw-r--r-- | src/main/scala/xyz/driver/pdsuidomain/formats/json/extracteddata/ApiExtractedData.scala | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/extracteddata/ApiExtractedData.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/extracteddata/ApiExtractedData.scala new file mode 100644 index 0000000..dad7a1e --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/extracteddata/ApiExtractedData.scala @@ -0,0 +1,44 @@ +package xyz.driver.pdsuidomain.formats.json.extracteddata + +import xyz.driver.pdsuidomain.formats.json.label.ApiExtractedDataLabel +import play.api.libs.json._ +import play.api.data.validation._ +import play.api.libs.functional.syntax._ +import xyz.driver.pdsuicommon.json.JsonSerializer +import xyz.driver.pdsuidomain.services.ExtractedDataService.RichExtractedData + +// The specification: https://driverinc.atlassian.net/wiki/pages/viewpage.action?pageId=33423387 +// Note, that there is "Extracted data object or Temporary extracted data object" in specification +// ApiExtractedData represents both types +final case class ApiExtractedData(id: Long, + documentId: Long, + keywordId: Option[Long], + evidence: Option[String], + meta: Option[String], + // An empty list and no-existent list are different cases + labels: Option[List[ApiExtractedDataLabel]]) + +object ApiExtractedData { + + implicit val format: Format[ApiExtractedData] = ( + (JsPath \ "id").format[Long] and + (JsPath \ "documentId").format[Long] and + (JsPath \ "keywordId").formatNullable[Long] and + (JsPath \ "evidence").formatNullable[String] and + (JsPath \ "meta").formatNullable[String] and + (JsPath \ "labels").formatNullable[List[ApiExtractedDataLabel]](Format( + Reads.of[List[ApiExtractedDataLabel]].filter(ValidationError("empty labels"))({ + case x if x.nonEmpty => true + case _ => false + }), Writes.of[List[ApiExtractedDataLabel]])) + ) (ApiExtractedData.apply, unlift(ApiExtractedData.unapply)) + + def fromDomain(extractedDataWithLabels: RichExtractedData) = ApiExtractedData( + id = extractedDataWithLabels.extractedData.id.id, + documentId = extractedDataWithLabels.extractedData.documentId.id, + keywordId = extractedDataWithLabels.extractedData.keywordId.map(_.id), + evidence = extractedDataWithLabels.extractedData.evidenceText, + meta = extractedDataWithLabels.extractedData.meta.map(x => JsonSerializer.serialize(x.content)), + labels = Option(extractedDataWithLabels.labels.map(ApiExtractedDataLabel.fromDomain)) + ) +} |