diff pkg/imports/wg.go @ 1812:4910bcfab319

Waterway gauge import: Work around the expected (but nonetheless silly) namespace issues with the SOAP interface.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 16 Jan 2019 00:51:51 +0100
parents 7ee9bdaac336
children b4b9089c2d79
line wrap: on
line diff
--- a/pkg/imports/wg.go	Tue Jan 15 19:46:41 2019 +0100
+++ b/pkg/imports/wg.go	Wed Jan 16 00:51:51 2019 +0100
@@ -18,6 +18,7 @@
 	"database/sql"
 	"errors"
 	"log"
+	"strings"
 
 	"gemma.intevation.de/gemma/pkg/common"
 	"gemma.intevation.de/gemma/pkg/soap"
@@ -73,6 +74,10 @@
 
 func (*WaterwayGauge) CleanUp() error { return nil }
 
+const (
+	selectCurrentUserCountrySQL = `SELECT users.current_user_country()`
+)
+
 func (wg *WaterwayGauge) Do(
 	ctx context.Context,
 	importID int64,
@@ -80,6 +85,24 @@
 	feedback Feedback,
 ) (interface{}, error) {
 
+	tx, err := conn.BeginTx(ctx, nil)
+	if err != nil {
+		return nil, err
+	}
+	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:
+		return nil, err
+	}
+
+	country = strings.ToUpper(country)
+	feedback.Info("Using country '%s'.", country)
+
 	var auth *soap.BasicAuth
 	if wg.Username != "" {
 		auth = &soap.BasicAuth{
@@ -92,13 +115,11 @@
 
 	request := &erdms.GetRisDataXML{
 		GetRisDataXMLType: &erdms.GetRisDataXMLType{
-			Subcode: "AT%",
-			Funcode: "wtwgag",
+			Subcode: erdms.NoNS{Text: country + "%"},
+			Funcode: erdms.NoNS{Text: "wtwgag"},
 		},
 	}
 
-	log.Printf("user: %s password: %s\n", wg.Username, wg.Password)
-
 	data, err := client.GetRisDataXML(request)
 
 	if err != nil {
@@ -106,7 +127,18 @@
 		return nil, err
 	}
 
-	_ = data
+	for _, dr := range data.RisdataReturn {
+		if dr.RisidxCode == nil {
+			log.Printf("warn: RisidxCode == nil")
+			continue
+		}
+		if dr.Objname.Loc == nil {
+			log.Printf("warn: Objname == nil")
+			continue
+		}
+		log.Printf("RisidxCode: %s\n", *dr.RisidxCode)
+		log.Printf("\tObjname: %s\n", *dr.Objname.Loc)
+	}
 
 	// TODO: Implement me!
 	return nil, errors.New("Not implemented, yet!")