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()