comparison 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
comparison
equal deleted inserted replaced
1238:442399fc1b71 1239:d842d9d10872
23 "io/ioutil" 23 "io/ioutil"
24 "log" 24 "log"
25 "net/http" 25 "net/http"
26 "os" 26 "os"
27 "path/filepath" 27 "path/filepath"
28 "strconv"
28 "sync" 29 "sync"
29 "time" 30 "time"
31
32 "github.com/gorilla/mux"
30 33
31 "gemma.intevation.de/gemma/pkg/auth" 34 "gemma.intevation.de/gemma/pkg/auth"
32 "gemma.intevation.de/gemma/pkg/common" 35 "gemma.intevation.de/gemma/pkg/common"
33 "gemma.intevation.de/gemma/pkg/config" 36 "gemma.intevation.de/gemma/pkg/config"
34 "gemma.intevation.de/gemma/pkg/imports" 37 "gemma.intevation.de/gemma/pkg/imports"
35 "gemma.intevation.de/gemma/pkg/misc" 38 "gemma.intevation.de/gemma/pkg/misc"
36 "gemma.intevation.de/gemma/pkg/models" 39 "gemma.intevation.de/gemma/pkg/models"
37 "github.com/gorilla/mux"
38 ) 40 )
39 41
40 const ( 42 const (
41 maxSoundingResultSize = 25 * 1024 * 1024 43 maxSoundingResultSize = 25 * 1024 * 1024
42 soundingResultName = "soundingresult" 44 soundingResultName = "soundingresult"
99 } 101 }
100 102
101 return dir, nil 103 return dir, nil
102 } 104 }
103 105
106 func fetchSoundingResultMetaOverrides(sr *imports.SoundingResult, req *http.Request) error {
107
108 if v := req.FormValue("epsg"); v != "" {
109 epsg, err := strconv.ParseUint(v, 10, 32)
110 if err != nil {
111 return err
112 }
113 srid := uint(epsg)
114 sr.EPSG = &srid
115 }
116
117 if v := req.FormValue("date"); v != "" {
118 date, err := time.Parse(models.SoundingResultDateFormat, v)
119 if err != nil {
120 return err
121 }
122 sr.Date = &models.SoundingResultDate{date}
123 }
124
125 if v := req.FormValue("depth-reference"); v != "" {
126 sr.DepthReference = &v
127 }
128
129 if v := req.FormValue("bottleneck"); v != "" {
130 sr.Bottleneck = &v
131 }
132
133 return nil
134 }
135
104 func importSoundingResult(rw http.ResponseWriter, req *http.Request) { 136 func importSoundingResult(rw http.ResponseWriter, req *http.Request) {
105 137
138 sr := new(imports.SoundingResult)
139
140 if err := fetchSoundingResultMetaOverrides(sr, req); err != nil {
141 log.Printf("error: %v\n", err)
142 http.Error(rw, "error: "+err.Error(), http.StatusBadRequest)
143 return
144 }
145
106 dir, err := fetchSoundingResult(req) 146 dir, err := fetchSoundingResult(req)
107 if err != nil { 147 if err != nil {
108 log.Printf("error: %v\n", err) 148 log.Printf("error: %v\n", err)
109 http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) 149 http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError)
110 return 150 return
111 } 151 }
152 sr.Dir = dir
153
154 serialized, err := sr.ToString()
155 if err != nil {
156 log.Printf("error: %v\n", err)
157 http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError)
158 return
159 }
112 160
113 session, _ := auth.GetSession(req) 161 session, _ := auth.GetSession(req)
114 162
115 jobID, err := imports.AddJob(imports.SRJobKind, session.User, dir) 163 jobID, err := imports.AddJob(imports.SRJobKind, session.User, serialized)
116 if err != nil { 164 if err != nil {
117 log.Printf("error: %v\n", err) 165 log.Printf("error: %v\n", err)
118 http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) 166 http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError)
119 return 167 return
120 } 168 }