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)