1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
package xyz.driver.pdsuidomain.fakes.entities.rep
import xyz.driver.core.generators
import xyz.driver.core.generators._
import xyz.driver.entities.labels.{Label, LabelCategory, LabelValue}
import xyz.driver.pdsuicommon.domain.{LongId, TextJson}
import xyz.driver.pdsuidomain.entities._
import xyz.driver.pdsuidomain.entities.ExtractedData.Meta
import xyz.driver.pdsuidomain.fakes.entities.common._
import xyz.driver.pdsuidomain.services.ExtractedDataService.RichExtractedData
object ExtractedDataGen {
private val maxItemsInCollectionNumber = 50
private val maxPageNumber = 100
private val maxIndexNumber = 100
private val maxOffsetNumber = 10
implicit private class TextLayerPositionOrdering(textLayerPosition: ExtractedData.Meta.TextLayerPosition)
extends Ordered[ExtractedData.Meta.TextLayerPosition] {
override def compare(that: Meta.TextLayerPosition): Int = {
if (this.textLayerPosition.page < that.page) -1
else if (this.textLayerPosition.page > that.page) 1
else if (this.textLayerPosition.index < that.index) -1
else if (this.textLayerPosition.index > that.index) 1
else if (this.textLayerPosition.offset < that.offset) -1
else if (this.textLayerPosition.offset > that.offset) 1
else 0
}
}
def nextExtractedDataMetaKeyword(): Meta.Keyword = {
ExtractedData.Meta.Keyword(
page = nextInt(maxPageNumber, minValue = 0),
pageRatio = nextOption(nextDouble()),
index = nextInt(maxIndexNumber, minValue = 0),
sortIndex = nextString()
)
}
def nextExtractedDataMetaTextLayerPosition(): Meta.TextLayerPosition = {
ExtractedData.Meta.TextLayerPosition(
page = nextInt(maxPageNumber, minValue = 0),
index = nextInt(maxIndexNumber, minValue = 0),
offset = nextInt(maxOffsetNumber, minValue = 0)
)
}
def nextExtractedDataMetaEvidence(): Meta.Evidence = {
val layersPosition =
genBoundedRange[ExtractedData.Meta.TextLayerPosition](
nextExtractedDataMetaTextLayerPosition(),
nextExtractedDataMetaTextLayerPosition()
)
ExtractedData.Meta.Evidence(
pageRatio = nextDouble(),
start = layersPosition._1,
end = layersPosition._2
)
}
def nextExtractedDataMeta(): Meta = {
ExtractedData.Meta(
nextExtractedDataMetaKeyword(),
nextExtractedDataMetaEvidence()
)
}
def nextExtractedDataMetaJson(): TextJson[Meta] =
TextJson(ExtractedData.Meta(nextExtractedDataMetaKeyword(), nextExtractedDataMetaEvidence()))
def nextExtractedData(documentId: LongId[Document]): ExtractedData = {
ExtractedData(
id = nextLongId[ExtractedData],
documentId = documentId,
keywordId = nextOption(nextLongId[xyz.driver.pdsuidomain.entities.Keyword]),
evidenceText = nextOption(nextString()),
meta = nextOption(nextExtractedDataMetaJson())
)
}
def nextExtractedDataLabel(): ExtractedDataLabel = {
ExtractedDataLabel(
id = nextLongId[ExtractedDataLabel],
dataId = nextLongId[ExtractedData],
labelId = nextOption(nextLongId[Label]),
categoryId = nextOption(nextLongId[LabelCategory]),
value = nextOption(generators.oneOf[LabelValue](LabelValue.Yes, LabelValue.No, LabelValue.Maybe))
)
}
def nextRichExtractedData(documentId: LongId[Document] = nextLongId): RichExtractedData = {
RichExtractedData(
extractedData = nextExtractedData(documentId),
labels = List.fill(
nextInt(maxItemsInCollectionNumber, minValue = 0)
)(nextExtractedDataLabel())
)
}
}
|