aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala
diff options
context:
space:
mode:
authorKseniya Tomskikh <ktomskih@datamonsters.co>2017-08-11 14:40:19 +0600
committerKseniya Tomskikh <ktomskih@datamonsters.co>2017-08-11 14:41:30 +0600
commitbfac6a54dcf37e0280cc8f2ec6ff3802dc8e8dfe (patch)
tree2d66348851ad61b43cc0cb114aa56537cedad926 /src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala
parent9e60edb6216fce615b13f9bcc68d8f86258b85c3 (diff)
downloadrest-query-bfac6a54dcf37e0280cc8f2ec6ff3802dc8e8dfe.tar.gz
rest-query-bfac6a54dcf37e0280cc8f2ec6ff3802dc8e8dfe.tar.bz2
rest-query-bfac6a54dcf37e0280cc8f2ec6ff3802dc8e8dfe.zip
PDSUI-2188 Created and fixed test for json formats for ReP and TM
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala')
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala101
1 files changed, 50 insertions, 51 deletions
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 ab27b67..42473bc 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
@@ -21,7 +21,7 @@ object extracteddata {
override def read(json: JsValue): TextJson[Meta] = TextJson(extractedDataMetaFormat.read(json))
}
- implicit val extractedDataLabelFormat: RootJsonFormat[ExtractedDataLabel] = new RootJsonFormat[ExtractedDataLabel] {
+ implicit val extractedDataLabelWriter: JsonWriter[ExtractedDataLabel] = new JsonWriter[ExtractedDataLabel] {
override def write(label: ExtractedDataLabel): JsObject = {
JsObject(
"id" -> label.labelId.toJson,
@@ -29,59 +29,57 @@ object extracteddata {
"value" -> label.value.toJson
)
}
+ }
- override def read(json: JsValue): ExtractedDataLabel = json match {
- case JsObject(fields) =>
- val labelId = fields
- .get("id")
- .map(_.convertTo[LongId[Label]])
-
- val categoryId = fields
- .get("categoryId")
- .map(_.convertTo[LongId[Category]])
-
- val value = fields
- .get("value")
- .map(_.convertTo[FuzzyValue])
-
- ExtractedDataLabel(
- id = LongId(0),
- dataId = LongId(0),
- labelId = labelId,
- categoryId = categoryId,
- value = value
- )
+ def applyLabelsForExtractedData(json: JsValue, dataId: LongId[ExtractedData]): ExtractedDataLabel = json match {
+ case JsObject(fields) =>
+ val labelId = fields
+ .get("id")
+ .map(_.convertTo[LongId[Label]])
+
+ val categoryId = fields
+ .get("categoryId")
+ .map(_.convertTo[LongId[Category]])
+
+ val value = fields
+ .get("value")
+ .map(_.convertTo[FuzzyValue])
+
+ ExtractedDataLabel(
+ id = LongId(0),
+ dataId = dataId,
+ labelId = labelId,
+ categoryId = categoryId,
+ value = value
+ )
- case _ => deserializationError(s"Expected Json Object as ExtractedDataLabel, but got $json")
- }
+ case _ => deserializationError(s"Expected Json Object as ExtractedDataLabel, but got $json")
}
def applyUpdateToExtractedData(json: JsValue, orig: RichExtractedData): RichExtractedData = json match {
case JsObject(fields) =>
- val keywordId = if (fields.contains("keywordId")) {
- fields
- .get("keywordId")
- .map(_.convertTo[LongId[Keyword]])
- } else orig.extractedData.keywordId
-
- val evidence = if (fields.contains("evidence")) {
- fields
- .get("evidence")
- .map(_.convertTo[String])
- } else orig.extractedData.evidenceText
-
- val meta = if (fields.contains("meta")) {
- fields
- .get("meta")
- .map(_.convertTo[TextJson[Meta]])
- } else orig.extractedData.meta
-
- val labels = if (fields.contains("labels")) {
- fields
- .get("labels")
- .map(_.convertTo[List[ExtractedDataLabel]])
- .getOrElse(List.empty[ExtractedDataLabel])
- } else orig.labels
+ val keywordId = fields
+ .get("keywordId")
+ .map(_.convertTo[Option[LongId[Keyword]]])
+ .getOrElse(orig.extractedData.keywordId)
+
+ val evidence = fields
+ .get("evidence")
+ .map(_.convertTo[Option[String]])
+ .getOrElse(orig.extractedData.evidenceText)
+
+ val meta = fields
+ .get("meta")
+ .map(_.convertTo[Option[TextJson[Meta]]])
+ .getOrElse(orig.extractedData.meta)
+
+ val labels = fields
+ .get("labels")
+ .map(
+ _.convertTo[Option[List[JsValue]]]
+ .getOrElse(List.empty[JsValue])
+ .map(l => applyLabelsForExtractedData(l, orig.extractedData.id)))
+ .getOrElse(orig.labels)
val extractedData = orig.extractedData.copy(
keywordId = keywordId,
@@ -105,7 +103,7 @@ object extracteddata {
"keywordId" -> richData.extractedData.keywordId.toJson,
"evidence" -> richData.extractedData.evidenceText.toJson,
"meta" -> richData.extractedData.meta.toJson,
- "labels" -> richData.labels.toJson
+ "labels" -> richData.labels.map(_.toJson).toJson
)
override def read(json: JsValue): RichExtractedData = json match {
@@ -130,8 +128,9 @@ object extracteddata {
val labels = fields
.get("labels")
- .map(_.convertTo[List[ExtractedDataLabel]])
- .getOrElse(List.empty[ExtractedDataLabel])
+ .map(_.convertTo[List[JsValue]])
+ .getOrElse(List.empty[JsValue])
+ .map(l => applyLabelsForExtractedData(l, LongId(0)))
val extractedData = ExtractedData(
documentId = documentId,