diff --git a/ferag.go b/ferag.go index 272bbd9..7150157 100644 --- a/ferag.go +++ b/ferag.go @@ -11,6 +11,8 @@ type FeragString struct { TitleEnd *TitleEnd ProductReferences []*ProductReference ProductReferencesNr int + Routes []*Route + RouteCount int RouteListEntries []*RouteListEntry RouteListEntryCount int RouteInfoEntries []*RouteInfo @@ -40,21 +42,32 @@ func (fs *FeragString) PrintOut() string { info += pr.Message() } - for _, rl := range fs.RouteListEntries { - info += rl.Message() + // create route list entries for every route + for _, rt := range fs.Routes { + info += rt.GetRouteListEntry().Message() } - for _, ri := range fs.RouteInfoEntries { - info += ri.Message() + // create route info for every route + // including embedded production drops + for _, rt := range fs.Routes { + info += rt.GetRouteMessage() } - for _, pd := range fs.ProductionDropEntries { - info += pd.Message() - } - - for _, re := range fs.RouteEndEntries { - info += re.Message() - } + //for _, rl := range fs.RouteListEntries { + // info += rl.Message() + //} + // + //for _, ri := range fs.RouteInfoEntries { + // info += ri.Message() + //} + // + //for _, pd := range fs.ProductionDropEntries { + // info += pd.Message() + //} + // + //for _, re := range fs.RouteEndEntries { + // info += re.Message() + //} // +2441 | last message is the corresponding title end info += fs.TitleEnd.Message() @@ -71,6 +84,17 @@ func (fs *FeragString) AddProductReference(pr *ProductReference) error { return nil } +func (fs *FeragString) AddRoute(r *Route) error { + fs.RouteCount++ + fs.Routes = append(fs.Routes, r) + return nil +} + +func (fs *FeragString) NextRouteCode() int { + return fs.RouteCount + 1 + //return fs.RouteListEntryCount + 1 +} + func (fs *FeragString) AddRouteListEntry(rl *RouteListEntry) error { fs.RouteListEntryCount++ //if rl.routeCode == 0 { @@ -80,10 +104,6 @@ func (fs *FeragString) AddRouteListEntry(rl *RouteListEntry) error { return nil } -func (fs *FeragString) NextRouteCode() int { - return fs.RouteListEntryCount + 1 -} - func (fs *FeragString) AddRouteInfo(ri *RouteInfo) error { fs.RouteInfoEntries = append(fs.RouteInfoEntries, ri) return nil diff --git a/production_drop.go b/production_drop.go index 615baa9..c143f45 100644 --- a/production_drop.go +++ b/production_drop.go @@ -6,6 +6,48 @@ type ProductionDrop struct { FeragMessage agentName string numberOfCopies int + dontProduce bool + topsheetData string +} + +func (pd *ProductionDrop) TopsheetData() string { + if pd.topsheetData == "" { + return "" + } + tsd := pd.topsheetData + if len(tsd) > 5996 { + tsd = tsd[:5996] + } + + tsdSegment := fmt.Sprintf("+58%s", tsd) + + fm := FeragMessage{ + messageStart: "2414", + messageEnd: "!", + } + message := fm.MessageTemplate() + return message(&fm, tsdSegment) +} + +func (pd *ProductionDrop) SetTopsheetData(topsheetData string) { + pd.topsheetData = topsheetData +} + +func (pd *ProductionDrop) ControlCharacter() string { + var ccCount int + var cc string + if pd.dontProduce == true { + cc += "D" + ccCount++ + } + if ccCount == 0 { + return "" + } + return fmt.Sprintf("+14%-16s", cc) +} + +func (pd *ProductionDrop) SetDontProduce() { + pd.dontProduce = true } func (pd *ProductionDrop) NumberOfCopies() string { @@ -30,6 +72,7 @@ func NewProductionDrop() *ProductionDrop { messageStart: "2403", messageEnd: "!", }, + dontProduce: false, } return &pd } @@ -37,6 +80,7 @@ func NewProductionDrop() *ProductionDrop { func (pd *ProductionDrop) Payload() string { data := pd.AgentName() data += pd.NumberOfCopies() + data += pd.ControlCharacter() return data } diff --git a/route.go b/route.go index f43903c..9ad3e7e 100644 --- a/route.go +++ b/route.go @@ -1 +1,111 @@ package feragstring + +type Route struct { + routeName string + routeCode int + rampNumber int + copiesInRoute int + limit int + maxStack int + standard int + parameterN int + maxBundle int + parameterSz int + topsheetMarker int + eaMarker int + eaAddressDefinition int + topsheetTemplateDirectory int + editionName string + productReferenceNumber int + ProductionDrops []*ProductionDrop +} + +func (r *Route) GetRouteListEntry() *RouteListEntry { + rle := NewRouteListEntry() + rle.SetRouteName(r.routeName) + rle.SetRouteCode(r.routeCode) + rle.SetRampNumber(r.rampNumber) + rle.SetCopiesInRoute(r.copiesInRoute) + return rle +} + +func (r *Route) GetRouteMessage() string { + ri := NewRouteInfo() + ri.SetRouteName(r.routeName) + info := ri.Message() + + for _, pd := range r.ProductionDrops { + info += pd.Message() + info += pd.TopsheetData() + } + + re := NewRouteEnd() + re.SetRouteName(r.routeName) + info += re.Message() + + return info +} + +func (r *Route) AddProductionDrop(pd *ProductionDrop) error { + r.ProductionDrops = append(r.ProductionDrops, pd) + return nil +} + +func (r *Route) SetRouteName(routeName string) { + r.routeName = routeName +} + +func (r *Route) SetRouteCode(routeCode int) { + r.routeCode = routeCode +} + +func (r *Route) SetRampNumber(rampNumber int) { + r.rampNumber = rampNumber +} + +func (r *Route) SetCopiesInRoute(copiesInRoute int) { + r.copiesInRoute = copiesInRoute +} + +func (ri *Route) SetLimit(limit int) { + ri.limit = limit +} + +func (ri *Route) SetMaxStack(maxStack int) { + ri.maxStack = maxStack +} + +func (ri *Route) SetStandard(standard int) { + ri.standard = standard +} + +func (ri *Route) SetParameterN(parameterN int) { + ri.parameterN = parameterN +} + +func (ri *Route) SetMaxBundle(maxBundle int) { + ri.maxBundle = maxBundle +} + +func (ri *Route) SetTopsheetMarker(topsheetMarker int) { + ri.topsheetMarker = topsheetMarker +} + +func (ri *Route) SetEaMarker(eaMarker int) { + ri.eaMarker = eaMarker +} + +func (ri *Route) SetTopsheetTemplateDirectory(topsheetTemplateDirectory int) { + ri.topsheetTemplateDirectory = topsheetTemplateDirectory +} + +func (ri *Route) SetProductReferenceNumber(productReferenceNumber int) { + ri.productReferenceNumber = productReferenceNumber +} + +func NewRoute() *Route { + r := Route{ + rampNumber: -1, + } + return &r +}