aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/ExtractedDataGen.scala
blob: 48eaf7942378a37a3d0dbd2d553c3c1c0aceebe7 (plain) (blame)
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
package xyz.driver.pdsuidomain.fakes.entities.rep

import xyz.driver.core.generators._
import xyz.driver.pdsuidomain.entities.{Document, ExtractedData}
import xyz.driver.pdsuidomain.entities.ExtractedData.Meta
import xyz.driver.pdsuidomain.fakes.entities.common._


object ExtractedDataGen {
  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 =
      Common.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 nextExtractedData() = {
    ExtractedData.apply(
      id = nextLongId[ExtractedData],
      documentId = nextLongId[Document],
      keywordId = nextOption(nextLongId[xyz.driver.pdsuidomain.entities.Keyword]),
      evidenceText = nextOption(nextString()),
      ???
    )
  }
}