
* feat: make new connections * refact: context groups | feat: area detection and a bunch of small things. hate yourself for this massive commit
174 lines
4.2 KiB
Go
174 lines
4.2 KiB
Go
package entities
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
type IndependentTranslatedWord struct {
|
|
Id string
|
|
ProcessedWordId string
|
|
Value string
|
|
}
|
|
|
|
type LinkedProcessedArea struct {
|
|
Area ProcessedArea
|
|
Previous *LinkedProcessedArea
|
|
Next *LinkedProcessedArea
|
|
}
|
|
|
|
type SerializedLinkedProcessedArea struct {
|
|
AreaId string `json:"areaId"`
|
|
PreviousId string `json:"previousId"`
|
|
NextId string `json:"nextId"`
|
|
}
|
|
|
|
type ContextGroupCollection struct {
|
|
Groups []LinkedAreaList
|
|
}
|
|
|
|
type LinkedAreaList struct {
|
|
Id string
|
|
DocumentId string
|
|
TranslationText string
|
|
Head *LinkedProcessedArea
|
|
Tail *LinkedProcessedArea
|
|
}
|
|
|
|
func (l *LinkedAreaList) First() *LinkedProcessedArea {
|
|
return l.Head
|
|
}
|
|
|
|
func (linkedProcessedWord *LinkedProcessedArea) GetNext() *LinkedProcessedArea {
|
|
return linkedProcessedWord.Next
|
|
}
|
|
|
|
func (linkedProcessedWord *LinkedProcessedArea) GetPrevious() *LinkedProcessedArea {
|
|
return linkedProcessedWord.Previous
|
|
}
|
|
|
|
// Create new node with value
|
|
func (l *LinkedAreaList) Push(processedArea ProcessedArea) *LinkedAreaList {
|
|
n := &LinkedProcessedArea{Area: processedArea}
|
|
if l.Head == nil {
|
|
l.Head = n // First node
|
|
} else {
|
|
l.Tail.Next = n // Add after prev last node
|
|
n.Previous = l.Tail // Link back to prev last node
|
|
}
|
|
l.Tail = n // reset tail to newly added node
|
|
return l
|
|
}
|
|
|
|
func (l *LinkedAreaList) Find(id string) *LinkedProcessedArea {
|
|
found := false
|
|
var ret *LinkedProcessedArea = nil
|
|
for n := l.First(); n != nil && !found; n = n.GetNext() {
|
|
if n.Area.Id == id {
|
|
found = true
|
|
ret = n
|
|
}
|
|
}
|
|
return ret
|
|
}
|
|
|
|
func (l *LinkedAreaList) Delete(id string) bool {
|
|
success := false
|
|
node2del := l.Find(id)
|
|
if node2del != nil {
|
|
fmt.Println("Delete - FOUND: ", id)
|
|
prev_node := node2del.Previous
|
|
next_node := node2del.Next
|
|
// Remove this node
|
|
prev_node.Next = node2del.Next
|
|
next_node.Previous = node2del.Previous
|
|
success = true
|
|
}
|
|
return success
|
|
}
|
|
|
|
var errEmpty = errors.New("ERROR - List is empty")
|
|
|
|
// Pop last item from list
|
|
func (l *LinkedAreaList) Pop() (processedArea ProcessedArea, err error) {
|
|
if l.Tail == nil {
|
|
err = errEmpty
|
|
} else {
|
|
processedArea = l.Tail.Area
|
|
l.Tail = l.Tail.Previous
|
|
if l.Tail == nil {
|
|
l.Head = nil
|
|
}
|
|
}
|
|
return processedArea, err
|
|
}
|
|
|
|
func (l *LinkedAreaList) InsertAfter(id string, processedArea ProcessedArea) bool {
|
|
found := false
|
|
for n := l.First(); n != nil && !found; n = n.GetNext() {
|
|
if n.Area.Id == id {
|
|
found = true
|
|
newNode := &LinkedProcessedArea{Area: processedArea}
|
|
newNode.Next = n.Next
|
|
newNode.Previous = n
|
|
n.Next = newNode
|
|
}
|
|
}
|
|
return found
|
|
}
|
|
|
|
func (l *LinkedAreaList) InsertBefore(id string, processedArea ProcessedArea) bool {
|
|
found := false
|
|
for n := l.First(); n != nil && !found; n = n.GetNext() {
|
|
if n.Area.Id == id {
|
|
found = true
|
|
newNode := &LinkedProcessedArea{Area: processedArea}
|
|
newNode.Next = n
|
|
newNode.Previous = n.Previous
|
|
n.Previous = newNode
|
|
}
|
|
}
|
|
return found
|
|
}
|
|
|
|
func (l *LinkedAreaList) Serialize() []SerializedLinkedProcessedArea {
|
|
var serialized []SerializedLinkedProcessedArea
|
|
for n := l.First(); n != nil; n = n.GetNext() {
|
|
areaId := n.Area.Id
|
|
previousId := ""
|
|
if n.Previous != nil {
|
|
previousId = n.Previous.Area.Id
|
|
}
|
|
nextId := ""
|
|
if n.Next != nil {
|
|
nextId = n.Next.Area.Id
|
|
}
|
|
|
|
serialized = append(serialized, SerializedLinkedProcessedArea{
|
|
AreaId: areaId,
|
|
PreviousId: previousId,
|
|
NextId: nextId,
|
|
})
|
|
}
|
|
return serialized
|
|
}
|
|
|
|
func DeserializeLinkedAreaList(serialized []SerializedLinkedProcessedArea) LinkedAreaList {
|
|
linkedAreaList := LinkedAreaList{}
|
|
for _, serializedLinkedProcessedArea := range serialized {
|
|
linkedAreaList.Push(ProcessedArea{
|
|
Id: serializedLinkedProcessedArea.AreaId,
|
|
})
|
|
}
|
|
for _, serializedLinkedProcessedArea := range serialized {
|
|
linkedProcessedArea := linkedAreaList.Find(serializedLinkedProcessedArea.AreaId)
|
|
if serializedLinkedProcessedArea.PreviousId != "" {
|
|
linkedProcessedArea.Previous = linkedAreaList.Find(serializedLinkedProcessedArea.PreviousId)
|
|
}
|
|
if serializedLinkedProcessedArea.NextId != "" {
|
|
linkedProcessedArea.Next = linkedAreaList.Find(serializedLinkedProcessedArea.NextId)
|
|
}
|
|
}
|
|
return linkedAreaList
|
|
}
|