Mercurial > gemma
changeset 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 | c21f72775f6b |
children | 423a18913d0e |
files | pkg/imports/wg.go pkg/soap/erdms/service.go pkg/soap/ifaf/service.go |
diffstat | 3 files changed, 52 insertions(+), 21 deletions(-) [+] |
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!")
--- a/pkg/soap/erdms/service.go Tue Jan 15 19:46:41 2019 +0100 +++ b/pkg/soap/erdms/service.go Wed Jan 16 00:51:51 2019 +0100 @@ -20,10 +20,6 @@ "gemma.intevation.de/gemma/pkg/soap" ) -// against "unused imports" -var _ time.Time -var _ xml.Name - // adn (dgs goods) internal adn code (unnr + seqnr: to make each adn good unique) type AdnCodeType string @@ -564,14 +560,21 @@ RefdataReturn []*RefdataReturnType `xml:"refdataReturn,omitempty"` } +// NoNS is a helper type to allow string tags without a namespace. +type NoNS struct { + NS string `xml:"xmlns,attr"` + Text string `xml:",chardata"` +} + type GetRisDataXMLType struct { - XMLName xml.Name `xml:"http://rwsreftool/ getRisDataXMLType"` - - Subcode string `xml:"subcode,omitempty"` - - Funcode string `xml:"funcode,omitempty"` - - Version *RefrecVersionType `xml:"version,omitempty"` + // XMLName xml.Name `xml:"http://rwsreftool/ getRisDataXMLType"` + + //Subcode string `xml:"subcode,omitempty"` + Subcode NoNS `xml:"subcode,omitempty"` + + Funcode NoNS `xml:"funcode,omitempty"` + + Version *RefrecVersionType `xml:"http://rwsreftool/ version,omitempty"` } type GetRisDataXMLResponseType struct { @@ -695,7 +698,7 @@ } type Ris_idxType struct { - XMLName xml.Name `xml:"http://rwsreftool/ ris_idxType"` + //XMLName xml.Name `xml:"http://rwsreftool/ ris_idxType"` // Be sure to edit, change the basic Simpletypes, dont edit any of the (sub)elements from here!!! RisidxCode *RisCodeType `xml:"risidxCode,omitempty"`
--- a/pkg/soap/ifaf/service.go Tue Jan 15 19:46:41 2019 +0100 +++ b/pkg/soap/ifaf/service.go Wed Jan 16 00:51:51 2019 +0100 @@ -23,10 +23,6 @@ "gemma.intevation.de/gemma/pkg/soap" ) -// against "unused imports" -var _ time.Time -var _ xml.Name - type Get_bottleneck_fa struct { XMLName xml.Name `xml:"http://www.ris.eu/fairwayavailability/3.0 get_bottleneck_fa"`