diff pkg/imports/modelconvert.go @ 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
children f1e32babb587
line wrap: on
line diff
--- /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)
+}