Mercurial > gemma
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 } |