Mercurial > gemma
diff pkg/imports/dmv.go @ 2633:eb1d119f253f
Fetch data from ERDMS for all allowed countries
This will enable a sys_admin to import data for all countries while
a waterway_admin still can only import data for his own country.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Wed, 13 Mar 2019 18:19:44 +0100 |
parents | 5f300bd7316f |
children | d9903cb34842 |
line wrap: on
line diff
--- a/pkg/imports/dmv.go Wed Mar 13 17:13:15 2019 +0100 +++ b/pkg/imports/dmv.go Wed Mar 13 18:19:44 2019 +0100 @@ -17,14 +17,9 @@ "context" "database/sql" "errors" - "fmt" - "log" - "strings" "time" "gemma.intevation.de/gemma/pkg/models" - "gemma.intevation.de/gemma/pkg/soap" - "gemma.intevation.de/gemma/pkg/soap/erdms" ) type DistanceMarksVirtual struct { @@ -97,42 +92,19 @@ } defer tx.Rollback() - var country string - err = tx.QueryRowContext(ctx, selectCurrentUserCountrySQL).Scan(&country) - switch { - case err == sql.ErrNoRows: - return nil, errors.New("Cannot figure out user country") - case err != nil: + responseData, err := getRisData( + tx, + ctx, + feedback, + dmv.Username, + dmv.Password, + dmv.URL, + dmv.Insecure, + "dismar") + if err != nil { return nil, err } - country = strings.ToUpper(country) - feedback.Info("Using country '%s'.", country) - - var auth *soap.BasicAuth - if dmv.Username != "" { - auth = &soap.BasicAuth{ - Login: dmv.Username, - Password: dmv.Password, - } - } - - client := erdms.NewRefService(dmv.URL, dmv.Insecure, auth) - - request := &erdms.GetRisDataXML{ - GetRisDataXMLType: &erdms.GetRisDataXMLType{ - Subcode: erdms.NoNS{Text: country + "%"}, - Funcode: erdms.NoNS{Text: "DISMAR"}, - }, - } - - data, err := client.GetRisDataXML(request) - - if err != nil { - log.Printf("error: %v\n", err) - return nil, fmt.Errorf("Error requesting ERDMS service: %v", err) - } - insertStmt, err := tx.PrepareContext(ctx, insertDistanceMarksVirtualSQL) if err != nil { return nil, err @@ -141,44 +113,46 @@ var ignored, features int - for _, dr := range data.RisdataReturn { - if dr.RisidxCode == nil { - ignored++ - continue - } + for _, data := range responseData { + for _, dr := range data.RisdataReturn { + if dr.RisidxCode == nil { + ignored++ + continue + } - code, err := models.IsrsFromString(string(*dr.RisidxCode)) - if err != nil { - feedback.Warn("invalid ISRS code %v", err) - ignored++ - continue - } + code, err := models.IsrsFromString(string(*dr.RisidxCode)) + if err != nil { + feedback.Warn("invalid ISRS code %v", err) + ignored++ + continue + } - if dr.Lat == nil || dr.Lon == nil { - feedback.Warn("missing lat/lon: %s", code) - ignored++ - continue - } + if dr.Lat == nil || dr.Lon == nil { + feedback.Warn("missing lat/lon: %s", code) + ignored++ + continue + } - if dr.Relenc == nil { - feedback.Warn("missing relenc: %s", code) - ignored++ - continue - } + if dr.Relenc == nil { + feedback.Warn("missing relenc: %s", code) + ignored++ + continue + } - if _, err := insertStmt.ExecContext( - ctx, - code.CountryCode, - code.LoCode, - code.FairwaySection, - code.Orc, - code.Hectometre, - float64(*dr.Lon), float64(*dr.Lat), - string(*dr.Relenc), - ); err != nil { - return nil, err + if _, err := insertStmt.ExecContext( + ctx, + code.CountryCode, + code.LoCode, + code.FairwaySection, + code.Orc, + code.Hectometre, + float64(*dr.Lon), float64(*dr.Lat), + string(*dr.Relenc), + ); err != nil { + return nil, err + } + features++ } - features++ } feedback.Info("ignored: %d", ignored) feedback.Info("features: %d", features)