Mercurial > gemma
changeset 2040:f1e32babb587 unify_imports
Imports: Moved constructor functions for import models to a table in the import package to be re-used by the configure/scheduled import.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 25 Jan 2019 12:57:53 +0100 |
parents | 8b5cc2dffbde |
children | d61ca2b3fc12 |
files | pkg/controllers/routes.go pkg/imports/modelconvert.go |
diffstat | 2 files changed, 32 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- 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)
--- 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{} {