comparison 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
comparison
equal deleted inserted replaced
1811:c21f72775f6b 1812:4910bcfab319
16 import ( 16 import (
17 "context" 17 "context"
18 "database/sql" 18 "database/sql"
19 "errors" 19 "errors"
20 "log" 20 "log"
21 "strings"
21 22
22 "gemma.intevation.de/gemma/pkg/common" 23 "gemma.intevation.de/gemma/pkg/common"
23 "gemma.intevation.de/gemma/pkg/soap" 24 "gemma.intevation.de/gemma/pkg/soap"
24 "gemma.intevation.de/gemma/pkg/soap/erdms" 25 "gemma.intevation.de/gemma/pkg/soap/erdms"
25 ) 26 )
71 return nil 72 return nil
72 } 73 }
73 74
74 func (*WaterwayGauge) CleanUp() error { return nil } 75 func (*WaterwayGauge) CleanUp() error { return nil }
75 76
77 const (
78 selectCurrentUserCountrySQL = `SELECT users.current_user_country()`
79 )
80
76 func (wg *WaterwayGauge) Do( 81 func (wg *WaterwayGauge) Do(
77 ctx context.Context, 82 ctx context.Context,
78 importID int64, 83 importID int64,
79 conn *sql.Conn, 84 conn *sql.Conn,
80 feedback Feedback, 85 feedback Feedback,
81 ) (interface{}, error) { 86 ) (interface{}, error) {
87
88 tx, err := conn.BeginTx(ctx, nil)
89 if err != nil {
90 return nil, err
91 }
92 defer tx.Rollback()
93
94 var country string
95 err = tx.QueryRowContext(ctx, selectCurrentUserCountrySQL).Scan(&country)
96 switch {
97 case err == sql.ErrNoRows:
98 return nil, errors.New("Cannot figure out user country")
99 case err != nil:
100 return nil, err
101 }
102
103 country = strings.ToUpper(country)
104 feedback.Info("Using country '%s'.", country)
82 105
83 var auth *soap.BasicAuth 106 var auth *soap.BasicAuth
84 if wg.Username != "" { 107 if wg.Username != "" {
85 auth = &soap.BasicAuth{ 108 auth = &soap.BasicAuth{
86 Login: wg.Username, 109 Login: wg.Username,
90 113
91 client := erdms.NewRefService(wg.URL, wg.Insecure, auth) 114 client := erdms.NewRefService(wg.URL, wg.Insecure, auth)
92 115
93 request := &erdms.GetRisDataXML{ 116 request := &erdms.GetRisDataXML{
94 GetRisDataXMLType: &erdms.GetRisDataXMLType{ 117 GetRisDataXMLType: &erdms.GetRisDataXMLType{
95 Subcode: "AT%", 118 Subcode: erdms.NoNS{Text: country + "%"},
96 Funcode: "wtwgag", 119 Funcode: erdms.NoNS{Text: "wtwgag"},
97 }, 120 },
98 } 121 }
99
100 log.Printf("user: %s password: %s\n", wg.Username, wg.Password)
101 122
102 data, err := client.GetRisDataXML(request) 123 data, err := client.GetRisDataXML(request)
103 124
104 if err != nil { 125 if err != nil {
105 log.Printf("error: %v\n", err) 126 log.Printf("error: %v\n", err)
106 return nil, err 127 return nil, err
107 } 128 }
108 129
109 _ = data 130 for _, dr := range data.RisdataReturn {
131 if dr.RisidxCode == nil {
132 log.Printf("warn: RisidxCode == nil")
133 continue
134 }
135 if dr.Objname.Loc == nil {
136 log.Printf("warn: Objname == nil")
137 continue
138 }
139 log.Printf("RisidxCode: %s\n", *dr.RisidxCode)
140 log.Printf("\tObjname: %s\n", *dr.Objname.Loc)
141 }
110 142
111 // TODO: Implement me! 143 // TODO: Implement me!
112 return nil, errors.New("Not implemented, yet!") 144 return nil, errors.New("Not implemented, yet!")
113 } 145 }