Mercurial > gemma
view pkg/imports/ugm.go @ 5448:25d0d3159376 uiimprovements
Esc/click to stop operation.
author | Thomas Junk <thomas.junk@intevation.de> |
---|---|
date | Tue, 13 Jul 2021 15:22:37 +0200 |
parents | 56c589f7435d |
children | 6270951dda28 |
line wrap: on
line source
// 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 ( "context" "database/sql" "errors" "os" "path/filepath" "gemma.intevation.de/gemma/pkg/soap" "gemma.intevation.de/gemma/pkg/soap/nts" ) // UploadedGaugeMeasurement is an Jon to extract gauge measurement data // from an uploaded XML file and stores it into the database. type UploadedGaugeMeasurement struct { Dir string `json:"dir"` } // UGMJobKind is the unique name of this import job type. const UGMJobKind JobKind = "ugm" type ugmJobCreator struct{} func init() { RegisterJobCreator(UGMJobKind, ugmJobCreator{}) } func (ugmJobCreator) Description() string { return "uploaded gauge measurements" } func (ugmJobCreator) Create() Job { return new(UploadedGaugeMeasurement) } func (ugmJobCreator) Depends() [2][]string { return gmJobCreator{}.Depends() } func (ugmJobCreator) AutoAccept() bool { return true } // StageDone is a NOP for gauge measurements imports. func (ugmJobCreator) StageDone(context.Context, *sql.Tx, int64, Feedback) error { return nil } // CleanUp removes the temporary files from the filesystem. func (ugm *UploadedGaugeMeasurement) CleanUp() error { return os.RemoveAll(ugm.Dir) } // Do executes the actual uploaded gauge measurement import. func (ugm *UploadedGaugeMeasurement) Do( ctx context.Context, importID int64, conn *sql.Conn, feedback Feedback, ) (interface{}, error) { fetch := func() ([]*nts.RIS_Message_Type, error) { var dst nts.Get_messages_result if err := soap.ValidateFile( filepath.Join(ugm.Dir, "data.xml"), "NtS.xsd", &dst, ); err != nil { return nil, err } if len(dst.Result_message) == 0 { return nil, errors.New("no gauge measurements found") } return dst.Result_message, nil } return storeGaugeMeasurements( ctx, importID, fetch, conn, feedback, ) }