aboutsummaryrefslogblamecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/ExtractedDataGen.scala
blob: 8e774459b2e11ce10b5db74e3ae5d4d9bcede056 (plain) (tree)
1
2
3
4
5
6
7
8
9


                                                 
                                                        

                                                       

                                                         
                                                                             
 
                         

                                             

                                   


                                                                                                           
                                                             





























                                                                          
                                                            






                                                 
                             









                                       

                                                                                                 
 

                                                                        
                                     
                              

                                                                                  
                                                    


     




                                                      

                                                         


     
                                                                                             




                                                         


     
package xyz.driver.pdsuidomain.fakes.entities.rep

import xyz.driver.core.generators._
import xyz.driver.entities.labels.{Label, LabelCategory}
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(nextFuzzyValue())
    )
  }

  def nextRichExtractedData(documentId: LongId[Document] = nextLongId): RichExtractedData = {
    RichExtractedData(
      extractedData = nextExtractedData(documentId),
      labels = List.fill(
        nextInt(maxItemsInCollectionNumber, minValue = 0)
      )(nextExtractedDataLabel())
    )
  }
}