Mercurial > gemma
diff pkg/controllers/srimports.go @ 1239:d842d9d10872
Sounding result import: Added the feature to override bottleneck, EPSG, depth reference and date in meta.json by POST arguments.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 20 Nov 2018 17:04:06 +0100 |
parents | 17131f0f9fcb |
children | a45fa8943254 |
line wrap: on
line diff
--- a/pkg/controllers/srimports.go Tue Nov 20 13:05:50 2018 +0100 +++ b/pkg/controllers/srimports.go Tue Nov 20 17:04:06 2018 +0100 @@ -25,16 +25,18 @@ "net/http" "os" "path/filepath" + "strconv" "sync" "time" + "github.com/gorilla/mux" + "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/common" "gemma.intevation.de/gemma/pkg/config" "gemma.intevation.de/gemma/pkg/imports" "gemma.intevation.de/gemma/pkg/misc" "gemma.intevation.de/gemma/pkg/models" - "github.com/gorilla/mux" ) const ( @@ -101,18 +103,64 @@ return dir, nil } +func fetchSoundingResultMetaOverrides(sr *imports.SoundingResult, req *http.Request) error { + + if v := req.FormValue("epsg"); v != "" { + epsg, err := strconv.ParseUint(v, 10, 32) + if err != nil { + return err + } + srid := uint(epsg) + sr.EPSG = &srid + } + + if v := req.FormValue("date"); v != "" { + date, err := time.Parse(models.SoundingResultDateFormat, v) + if err != nil { + return err + } + sr.Date = &models.SoundingResultDate{date} + } + + if v := req.FormValue("depth-reference"); v != "" { + sr.DepthReference = &v + } + + if v := req.FormValue("bottleneck"); v != "" { + sr.Bottleneck = &v + } + + return nil +} + func importSoundingResult(rw http.ResponseWriter, req *http.Request) { + sr := new(imports.SoundingResult) + + if err := fetchSoundingResultMetaOverrides(sr, req); err != nil { + log.Printf("error: %v\n", err) + http.Error(rw, "error: "+err.Error(), http.StatusBadRequest) + return + } + dir, err := fetchSoundingResult(req) if err != nil { log.Printf("error: %v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) return } + sr.Dir = dir + + serialized, err := sr.ToString() + if err != nil { + log.Printf("error: %v\n", err) + http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) + return + } session, _ := auth.GetSession(req) - jobID, err := imports.AddJob(imports.SRJobKind, session.User, dir) + jobID, err := imports.AddJob(imports.SRJobKind, session.User, serialized) if err != nil { log.Printf("error: %v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError)