depot/go/trains/darwin/darwindb/affected.go

66 lines
1.3 KiB
Go
Raw Normal View History

2021-11-18 22:24:20 +00:00
package darwindb
import (
"fmt"
"strings"
)
// Affected tracks the TIPLOCs, RIDs and TSIDs which have been updated.
type Affected struct {
TIPLOCs map[string]bool
RIDs map[string]bool
TSIDs map[int]bool
}
// NewAffected creates a new Affected instance.
func NewAffected() *Affected {
return &Affected{
TIPLOCs: make(map[string]bool),
RIDs: make(map[string]bool),
TSIDs: make(map[int]bool),
}
}
// TIPLOC marks the given TIPLOC code as affected.
func (a *Affected) TIPLOC(t string) {
if a != nil {
a.TIPLOCs[t] = true
}
}
// RID marks the given train RID identifier as affected.
func (a *Affected) RID(r string) {
if a != nil {
a.RIDs[r] = true
}
}
// TSID marks the given train service ID (internal ID) as affected.
func (a *Affected) TSID(t int) {
if a != nil {
a.TSIDs[t] = true
}
}
// Summary returns a string summary of affected assets.
func (a *Affected) Summary() string {
if a == nil {
return "change tracking disabled"
}
var s []string
if len(a.TIPLOCs) > 0 {
s = append(s, fmt.Sprintf("%d TIPLOCs", len(a.TIPLOCs)))
}
if len(a.RIDs) > 0 {
s = append(s, fmt.Sprintf("%d RIDs", len(a.RIDs)))
}
if len(a.TSIDs) > 0 {
s = append(s, fmt.Sprintf("%d TSIDs", len(a.TSIDs)))
}
if len(s) == 0 {
return "no changes"
}
return fmt.Sprintf("%v", strings.Join(s, ", "))
}