textualize/ipc/ProcessedDocument.go
2023-03-24 19:19:53 -05:00

171 lines
4.0 KiB
Go

package ipc
import (
"sort"
document "textualize/core/Document"
)
func serializeBoundingBox(bbox document.ProcessedBoundingBox) ProcessedBoundingBox {
return ProcessedBoundingBox{
X0: bbox.X0,
Y0: bbox.Y0,
X1: bbox.X1,
Y1: bbox.Y1,
}
}
func serializeSymbol(symbol document.ProcessedSymbol) ProcessedSymbol {
return ProcessedSymbol{
Text: symbol.Text,
Confidence: symbol.Confidence,
BoundingBox: serializeBoundingBox(symbol.BoundingBox),
}
}
func serialzeWord(word document.ProcessedWord) ProcessedWord {
var symbols []ProcessedSymbol
for _, symbol := range word.Symbols {
symbols = append(symbols, serializeSymbol(symbol))
}
return ProcessedWord{
FullText: word.FullText,
Symbols: symbols,
Confidence: word.Confidence,
Direction: word.Direction,
BoundingBox: serializeBoundingBox(word.BoundingBox),
}
}
func serializeLine(line document.ProcessedLine) ProcessedLine {
var words []ProcessedWord
for _, word := range line.Words {
words = append(words, serialzeWord((word)))
}
return ProcessedLine{
FullText: line.FullText,
Words: words,
}
}
func serializeProcessedArea(area document.ProcessedArea) ProcessedArea {
var lines []ProcessedLine
for _, line := range area.Lines {
lines = append(lines, serializeLine(line))
}
return ProcessedArea{
Id: area.Id,
DocumentId: area.DocumentId,
FullText: area.FullText,
Order: area.Order,
Lines: lines,
}
}
func (c *Channel) GetProcessedAreasByDocumentId(id string) []ProcessedArea {
areas := document.GetProcessedAreaCollection().GetAreasByDocumentId(id)
var response []ProcessedArea
for _, a := range areas {
response = append(response, serializeProcessedArea(*a))
}
sort.Slice(response, func(i, j int) bool {
return response[i].Order < response[j].Order
})
return response
}
func deserializeBoundingBox(bbox ProcessedBoundingBox) document.ProcessedBoundingBox {
return document.ProcessedBoundingBox{
X0: bbox.X0,
Y0: bbox.Y0,
X1: bbox.X1,
Y1: bbox.Y1,
}
}
func deserializeSymbol(symbol ProcessedSymbol) document.ProcessedSymbol {
return document.ProcessedSymbol{
Text: symbol.Text,
Confidence: symbol.Confidence,
BoundingBox: deserializeBoundingBox(symbol.BoundingBox),
}
}
func deserialzeWord(word ProcessedWord) document.ProcessedWord {
var symbols []document.ProcessedSymbol
for _, symbol := range word.Symbols {
symbols = append(symbols, deserializeSymbol(symbol))
}
return document.ProcessedWord{
FullText: word.FullText,
Symbols: symbols,
Confidence: word.Confidence,
Direction: word.Direction,
BoundingBox: deserializeBoundingBox(word.BoundingBox),
}
}
func deserializeLine(line ProcessedLine) document.ProcessedLine {
var words []document.ProcessedWord
for _, word := range line.Words {
words = append(words, deserialzeWord((word)))
}
return document.ProcessedLine{
FullText: line.FullText,
Words: words,
}
}
func deserializeProcessedArea(area ProcessedArea) document.ProcessedArea {
var lines []document.ProcessedLine
for _, line := range area.Lines {
lines = append(lines, deserializeLine(line))
}
return document.ProcessedArea{
Id: area.Id,
DocumentId: area.DocumentId,
Order: area.Order,
FullText: area.FullText,
Lines: lines,
}
}
func (c *Channel) RequestAddProcessedArea(processedArea ProcessedArea) ProcessedArea {
doesAreaAlreadyExist := false
processedAreasOfDocument := document.GetProcessedAreaCollection().GetAreasByDocumentId(processedArea.DocumentId)
for _, a := range processedAreasOfDocument {
if a.Order == processedArea.Order {
doesAreaAlreadyExist = true
break
}
}
deserializedProcessedArea := deserializeProcessedArea(processedArea)
if doesAreaAlreadyExist {
storedProcessedArea := document.GetProcessedAreaCollection().GetAreaById(processedArea.Id)
if storedProcessedArea.Id != "" {
storedProcessedArea = &deserializedProcessedArea
}
} else {
document.GetProcessedAreaCollection().AddProcessedArea((deserializedProcessedArea))
}
return processedArea
}