Mercurial > gemma
changeset 2038:42a33f9e1f95 unify_imports
Imports: Moved model conversion into a table in the imports package.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 25 Jan 2019 12:31:50 +0100 |
parents | 11cb57f85c60 |
children | 8b5cc2dffbde |
files | pkg/controllers/manualimports.go pkg/controllers/routes.go pkg/imports/modelconvert.go |
diffstat | 3 files changed, 153 insertions(+), 117 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/controllers/manualimports.go Fri Jan 25 11:53:28 2019 +0100 +++ b/pkg/controllers/manualimports.go Fri Jan 25 12:31:50 2019 +0100 @@ -26,120 +26,22 @@ "gemma.intevation.de/gemma/pkg/models" ) -func importBottleneck(input interface{}) interface{} { - bi := input.(*models.BottleneckImport) - return &imports.Bottleneck{ - URL: bi.URL, - Insecure: bi.Insecure, - } -} - -func importGaugeMeasurement(input interface{}) interface{} { - gi := input.(*models.GaugeMeasurementImport) - return &imports.GaugeMeasurement{ - URL: gi.URL, - Insecure: gi.Insecure, - } -} - -func importFairwayAvailability(input interface{}) interface{} { - fai := input.(*models.FairwayAvailabilityImport) - return &imports.FairwayAvailability{ - URL: fai.URL, - Insecure: fai.Insecure, - } -} - -func importWaterwayAxis(input interface{}) interface{} { - wxi := input.(*models.WaterwayAxisImport) - return &imports.WaterwayAxis{ - URL: wxi.URL, - FeatureType: wxi.FeatureType, - SortBy: nilString(wxi.SortBy), - } -} - -func importWaterwayArea(input interface{}) interface{} { - wai := input.(*models.WaterwayAreaImport) - return &imports.WaterwayArea{ - URL: wai.URL, - FeatureType: wai.FeatureType, - SortBy: nilString(wai.SortBy), - } -} - -func importWaterwayGauge(input interface{}) interface{} { - wgi := input.(*models.WaterwayGaugeImport) - return &imports.WaterwayGauge{ - Username: nilString(wgi.User), - Password: nilString(wgi.Password), - Insecure: wgi.Insecure, - } -} - -func importDistancemarksVirtual(input interface{}) interface{} { - dmvi := input.(*models.DistanceMarksVirtualImport) - return &imports.DistanceMarksVirtual{ - URL: dmvi.URL, - Username: nilString(dmvi.User), - Password: nilString(dmvi.Password), - Insecure: dmvi.Insecure, - } -} - -func importFairwayDimension(input interface{}) interface{} { - fdi := input.(*models.FairwayDimensionImport) - return &imports.FairwayDimension{ - URL: fdi.URL, - FeatureType: fdi.FeatureType, - SortBy: nilString(fdi.SortBy), - LOS: fdi.LOS, - MinWidth: fdi.MinWidth, - MaxWidth: fdi.MaxWidth, - Depth: fdi.Depth, - SourceOrganization: fdi.SourceOrganization, - } -} - -func importDistanceMarksAshore(input interface{}) interface{} { - dmai := input.(*models.DistanceMarksAshoreImport) - return &imports.DistanceMarksAshore{ - URL: dmai.URL, - FeatureType: dmai.FeatureType, - SortBy: nilString(dmai.SortBy), - } -} - -func importStretch(input interface{}) interface{} { - sti := input.(*models.StretchImport) - return &imports.Stretch{ - Name: sti.Name, - From: sti.From, - To: sti.To, - ObjNam: sti.ObjNam, - NObjNam: sti.NObjNam, - Source: sti.Source, - Date: sti.Date, - Countries: sti.Countries, - } -} - -func nilString(s *string) string { - if s != nil { - return *s - } - return "" -} - func manualImport( kind imports.JobKind, - setup func(interface{}) interface{}, ) func(interface{}, *http.Request, *sql.Conn) (JSONResult, error) { return func(input interface{}, req *http.Request, _ *sql.Conn) ( jr JSONResult, err error) { - what := setup(input) + what := imports.ConvertToInternal(kind, input) + if what == nil { + err = JSONError{ + Code: http.StatusInternalServerError, + Message: "Unable to convert import models", + } + return + } + var serialized string if serialized, err = common.ToJSONString(what); err != nil { return
--- a/pkg/controllers/routes.go Fri Jan 25 11:53:28 2019 +0100 +++ b/pkg/controllers/routes.go Fri Jan 25 12:31:50 2019 +0100 @@ -177,61 +177,61 @@ api.Handle("/imports/bottleneck", waterwayAdmin(&JSONHandler{ Input: func() interface{} { return new(models.BottleneckImport) }, - Handle: manualImport(imports.BNJobKind, importBottleneck), + Handle: manualImport(imports.BNJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/gaugemeasurement", waterwayAdmin(&JSONHandler{ Input: func() interface{} { return new(models.GaugeMeasurementImport) }, - Handle: manualImport(imports.GMJobKind, importGaugeMeasurement), + Handle: manualImport(imports.GMJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/fairwayavailability", waterwayAdmin(&JSONHandler{ Input: func() interface{} { return new(models.FairwayAvailabilityImport) }, - Handle: manualImport(imports.FAJobKind, importFairwayAvailability), + Handle: manualImport(imports.FAJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/waterwayaxis", waterwayAdmin(&JSONHandler{ Input: func() interface{} { return new(models.WaterwayAxisImport) }, - Handle: manualImport(imports.WXJobKind, importWaterwayAxis), + Handle: manualImport(imports.WXJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/waterwayarea", waterwayAdmin(&JSONHandler{ Input: func() interface{} { return new(models.WaterwayAreaImport) }, - Handle: manualImport(imports.WAJobKind, importWaterwayArea), + Handle: manualImport(imports.WAJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/waterwaygauge", waterwayAdmin(&JSONHandler{ Input: func() interface{} { return new(models.WaterwayGaugeImport) }, - Handle: manualImport(imports.WGJobKind, importWaterwayGauge), + Handle: manualImport(imports.WGJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/distancemarksvirtual", waterwayAdmin(&JSONHandler{ Input: func() interface{} { return new(models.DistanceMarksVirtualImport) }, - Handle: manualImport(imports.DMVJobKind, importDistancemarksVirtual), + Handle: manualImport(imports.DMVJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/fairwaydimension", waterwayAdmin(&JSONHandler{ Input: func() interface{} { return new(models.FairwayDimensionImport) }, - Handle: manualImport(imports.FDJobKind, importFairwayDimension), + Handle: manualImport(imports.FDJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/distancemarks", waterwayAdmin(&JSONHandler{ Input: func() interface{} { return new(models.DistanceMarksAshoreImport) }, - Handle: manualImport(imports.DMAJobKind, importDistanceMarksAshore), + Handle: manualImport(imports.DMAJobKind), NoConn: true, })).Methods(http.MethodPost) api.Handle("/imports/stretch", sysAdmin(&JSONHandler{ Input: func() interface{} { return new(models.StretchImport) }, - Handle: manualImport(imports.STJobKind, importStretch), + Handle: manualImport(imports.STJobKind), NoConn: true, })).Methods(http.MethodPost)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/imports/modelconvert.go Fri Jan 25 12:31:50 2019 +0100 @@ -0,0 +1,134 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSES/AGPL-3.0.txt +// +// Copyright (C) 2018 by via donau +// – Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Sascha L. Teichmann <sascha.teichmann@intevation.de> + +package imports + +import ( + "gemma.intevation.de/gemma/pkg/models" +) + +var convertModel = map[JobKind]func(interface{}) interface{}{ + + BNJobKind: func(input interface{}) interface{} { + bi := input.(*models.BottleneckImport) + return &Bottleneck{ + URL: bi.URL, + Insecure: bi.Insecure, + } + }, + + GMJobKind: func(input interface{}) interface{} { + gi := input.(*models.GaugeMeasurementImport) + return &GaugeMeasurement{ + URL: gi.URL, + Insecure: gi.Insecure, + } + }, + + FAJobKind: func(input interface{}) interface{} { + fai := input.(*models.FairwayAvailabilityImport) + return &FairwayAvailability{ + URL: fai.URL, + Insecure: fai.Insecure, + } + }, + + WXJobKind: func(input interface{}) interface{} { + wxi := input.(*models.WaterwayAxisImport) + return &WaterwayAxis{ + URL: wxi.URL, + FeatureType: wxi.FeatureType, + SortBy: nilString(wxi.SortBy), + } + }, + + WAJobKind: func(input interface{}) interface{} { + wai := input.(*models.WaterwayAreaImport) + return &WaterwayArea{ + URL: wai.URL, + FeatureType: wai.FeatureType, + SortBy: nilString(wai.SortBy), + } + }, + + WGJobKind: func(input interface{}) interface{} { + wgi := input.(*models.WaterwayGaugeImport) + return &WaterwayGauge{ + Username: nilString(wgi.User), + Password: nilString(wgi.Password), + Insecure: wgi.Insecure, + } + }, + + DMVJobKind: func(input interface{}) interface{} { + dmvi := input.(*models.DistanceMarksVirtualImport) + return &DistanceMarksVirtual{ + URL: dmvi.URL, + Username: nilString(dmvi.User), + Password: nilString(dmvi.Password), + Insecure: dmvi.Insecure, + } + }, + + FDJobKind: func(input interface{}) interface{} { + fdi := input.(*models.FairwayDimensionImport) + return &FairwayDimension{ + URL: fdi.URL, + FeatureType: fdi.FeatureType, + SortBy: nilString(fdi.SortBy), + LOS: fdi.LOS, + MinWidth: fdi.MinWidth, + MaxWidth: fdi.MaxWidth, + Depth: fdi.Depth, + SourceOrganization: fdi.SourceOrganization, + } + }, + + DMAJobKind: func(input interface{}) interface{} { + dmai := input.(*models.DistanceMarksAshoreImport) + return &DistanceMarksAshore{ + URL: dmai.URL, + FeatureType: dmai.FeatureType, + SortBy: nilString(dmai.SortBy), + } + }, + + STJobKind: func(input interface{}) interface{} { + sti := input.(*models.StretchImport) + return &Stretch{ + Name: sti.Name, + From: sti.From, + To: sti.To, + ObjNam: sti.ObjNam, + NObjNam: sti.NObjNam, + Source: sti.Source, + Date: sti.Date, + Countries: sti.Countries, + } + }, +} + +func nilString(s *string) string { + if s != nil { + return *s + } + return "" +} + +func ConvertToInternal(kind JobKind, src interface{}) interface{} { + fn := convertModel[kind] + if fn == nil { + return nil + } + return fn(src) +}