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{} {