Mercurial > gemma
comparison pkg/imports/sr.go @ 1225:4d7c44f7044e
Factored out som zip lookup code to be reusable in sounding result upload controller.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 19 Nov 2018 17:28:35 +0100 |
parents | bc4b642c8d04 |
children | d842d9d10872 |
comparison
equal
deleted
inserted
replaced
1224:bc4b642c8d04 | 1225:4d7c44f7044e |
---|---|
150 return err | 150 return err |
151 } | 151 } |
152 defer z.Close() | 152 defer z.Close() |
153 | 153 |
154 feedback.Info("Looking for 'meta.json'") | 154 feedback.Info("Looking for 'meta.json'") |
155 mf := find("meta.json", z.File) | 155 mf := common.FindInZIP(z, "meta.json") |
156 if mf == nil { | 156 if mf == nil { |
157 return errors.New("Cannot find 'meta.json'") | 157 return errors.New("Cannot find 'meta.json'") |
158 } | 158 } |
159 | 159 |
160 m, err := loadMeta(mf) | 160 m, err := loadMeta(mf) |
165 if err := m.Validate(conn, ctx); err != nil { | 165 if err := m.Validate(conn, ctx); err != nil { |
166 return common.ToError(err) | 166 return common.ToError(err) |
167 } | 167 } |
168 | 168 |
169 feedback.Info("Looking for '*.xyz'") | 169 feedback.Info("Looking for '*.xyz'") |
170 xyzf := find(".xyz", z.File) | 170 xyzf := common.FindInZIP(z, ".xyz") |
171 if xyzf == nil { | 171 if xyzf == nil { |
172 return errors.New("Cannot find any *.xyz file") | 172 return errors.New("Cannot find any *.xyz file") |
173 } | 173 } |
174 | 174 |
175 xyz, err := loadXYZ(xyzf, feedback) | 175 xyz, err := loadXYZ(xyzf, feedback) |
271 | 271 |
272 func (sr SoundingResult) CleanUp() error { | 272 func (sr SoundingResult) CleanUp() error { |
273 return os.RemoveAll(string(sr)) | 273 return os.RemoveAll(string(sr)) |
274 } | 274 } |
275 | 275 |
276 func find(needle string, haystack []*zip.File) *zip.File { | |
277 needle = strings.ToLower(needle) | |
278 for _, straw := range haystack { | |
279 if strings.HasSuffix(strings.ToLower(straw.Name), needle) { | |
280 return straw | |
281 } | |
282 } | |
283 return nil | |
284 } | |
285 | |
286 func loadMeta(f *zip.File) (*models.SoundingResultMeta, error) { | 276 func loadMeta(f *zip.File) (*models.SoundingResultMeta, error) { |
287 r, err := f.Open() | 277 r, err := f.Open() |
288 if err != nil { | 278 if err != nil { |
289 return nil, err | 279 return nil, err |
290 } | 280 } |
343 defer r.Close() | 333 defer r.Close() |
344 return loadXYZReader(r, feedback) | 334 return loadXYZReader(r, feedback) |
345 } | 335 } |
346 | 336 |
347 func loadBoundary(z *zip.ReadCloser) (Polygon, error) { | 337 func loadBoundary(z *zip.ReadCloser) (Polygon, error) { |
348 shpF := find(".shp", z.File) | 338 shpF := common.FindInZIP(z, ".shp") |
349 if shpF == nil { | 339 if shpF == nil { |
350 return nil, nil | 340 return nil, nil |
351 } | 341 } |
352 prefix := strings.TrimSuffix(shpF.Name, path.Ext(shpF.Name)) | 342 prefix := strings.TrimSuffix(shpF.Name, path.Ext(shpF.Name)) |
353 dbfF := find(prefix+".dbf", z.File) | 343 dbfF := common.FindInZIP(z, prefix+".dbf") |
354 if dbfF == nil { | 344 if dbfF == nil { |
355 return nil, fmt.Errorf("No DBF file found for %s", shpF.Name) | 345 return nil, fmt.Errorf("No DBF file found for %s", shpF.Name) |
356 } | 346 } |
357 | 347 |
358 shpR, err := shpF.Open() | 348 shpR, err := shpF.Open() |