# HG changeset patch # User Sascha L. Teichmann # Date 1548417473 -3600 # Node ID f1e32babb58776da62d1b1ffb7d827b8c3e7807b # Parent 8b5cc2dffbde0d1261995336d7ddaac92a02e475 Imports: Moved constructor functions for import models to a table in the import package to be re-used by the configure/scheduled import. diff -r 8b5cc2dffbde -r f1e32babb587 pkg/controllers/routes.go --- a/pkg/controllers/routes.go Fri Jan 25 12:43:08 2019 +0100 +++ b/pkg/controllers/routes.go Fri Jan 25 12:57:53 2019 +0100 @@ -176,61 +176,61 @@ http.HandlerFunc(importApprovedGaugeMeasurements))).Methods(http.MethodPost) api.Handle("/imports/bottleneck", waterwayAdmin(&JSONHandler{ - Input: func() interface{} { return new(models.BottleneckImport) }, + Input: imports.MustImportModel(imports.BNJobKind), Handle: manualImport(imports.BNJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/gaugemeasurement", waterwayAdmin(&JSONHandler{ - Input: func() interface{} { return new(models.GaugeMeasurementImport) }, + Input: imports.MustImportModel(imports.GMJobKind), Handle: manualImport(imports.GMJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/fairwayavailability", waterwayAdmin(&JSONHandler{ - Input: func() interface{} { return new(models.FairwayAvailabilityImport) }, + Input: imports.MustImportModel(imports.FAJobKind), Handle: manualImport(imports.FAJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/waterwayaxis", waterwayAdmin(&JSONHandler{ - Input: func() interface{} { return new(models.WaterwayAxisImport) }, + Input: imports.MustImportModel(imports.WXJobKind), Handle: manualImport(imports.WXJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/waterwayarea", waterwayAdmin(&JSONHandler{ - Input: func() interface{} { return new(models.WaterwayAreaImport) }, + Input: imports.MustImportModel(imports.WAJobKind), Handle: manualImport(imports.WAJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/waterwaygauge", waterwayAdmin(&JSONHandler{ - Input: func() interface{} { return new(models.WaterwayGaugeImport) }, + Input: imports.MustImportModel(imports.WGJobKind), Handle: manualImport(imports.WGJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/distancemarksvirtual", waterwayAdmin(&JSONHandler{ - Input: func() interface{} { return new(models.DistanceMarksVirtualImport) }, + Input: imports.MustImportModel(imports.DMVJobKind), Handle: manualImport(imports.DMVJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/fairwaydimension", waterwayAdmin(&JSONHandler{ - Input: func() interface{} { return new(models.FairwayDimensionImport) }, + Input: imports.MustImportModel(imports.FDJobKind), Handle: manualImport(imports.FDJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/distancemarks", waterwayAdmin(&JSONHandler{ - Input: func() interface{} { return new(models.DistanceMarksAshoreImport) }, + Input: imports.MustImportModel(imports.DMAJobKind), Handle: manualImport(imports.DMAJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/stretch", sysAdmin(&JSONHandler{ - Input: func() interface{} { return new(models.StretchImport) }, + Input: imports.MustImportModel(imports.STJobKind), Handle: manualImport(imports.STJobKind), NoConn: true, })).Methods(http.MethodPost) diff -r 8b5cc2dffbde -r f1e32babb587 pkg/imports/modelconvert.go --- a/pkg/imports/modelconvert.go Fri Jan 25 12:43:08 2019 +0100 +++ b/pkg/imports/modelconvert.go Fri Jan 25 12:57:53 2019 +0100 @@ -14,9 +14,31 @@ package imports import ( + "fmt" + "gemma.intevation.de/gemma/pkg/models" ) +var kindToImportModel = map[JobKind]func() interface{}{ + BNJobKind: func() interface{} { return new(models.BottleneckImport) }, + GMJobKind: func() interface{} { return new(models.GaugeMeasurementImport) }, + FAJobKind: func() interface{} { return new(models.FairwayAvailabilityImport) }, + WXJobKind: func() interface{} { return new(models.WaterwayAxisImport) }, + WAJobKind: func() interface{} { return new(models.WaterwayAreaImport) }, + WGJobKind: func() interface{} { return new(models.WaterwayGaugeImport) }, + DMVJobKind: func() interface{} { return new(models.DistanceMarksVirtualImport) }, + FDJobKind: func() interface{} { return new(models.FairwayDimensionImport) }, + DMAJobKind: func() interface{} { return new(models.DistanceMarksAshoreImport) }, + STJobKind: func() interface{} { return new(models.StretchImport) }, +} + +func MustImportModel(kind JobKind) func() interface{} { + if ctor := kindToImportModel[kind]; ctor != nil { + return ctor + } + panic(fmt.Sprintf("Cannot find import model for kind '%s'.", kind)) +} + var convertModel = map[JobKind]func(interface{}) interface{}{ BNJobKind: func(input interface{}) interface{} {