package core import ( "bufio" "github.com/pkg/errors" "log" "os" "path/filepath" "strings" ) // A Collecter that crawls the local file system at Path // for ULO/RDF files. type FileSystemCollecter struct { Path string } func (fsc *FileSystemCollecter) Collect(dest Importer) error { return filepath.Walk(fsc.Path, func(path string, f os.FileInfo, err error) error { return fsc.visit(dest, path, f, err) }) } // This method is called on every file found by Collect. func (fsc *FileSystemCollecter) visit(dest Importer, path string, f os.FileInfo, err error) error { if err != nil { log.Print(err) return nil } if f.IsDir() { return nil } if strings.HasSuffix(path, ".rdf") { return fsc.handleRdfFile(dest, path, f) } log.Printf("ignoring path=%v", path) return nil } // Import ULO/RDF file at path with im. func (fsc *FileSystemCollecter) handleRdfFile(im Importer, path string, f os.FileInfo) error { fd, err := os.Open(path) if err != nil { return err } defer fd.Close() reader := bufio.NewReader(fd) if err := im.Import(reader); err != nil { return errors.Wrapf(err, "importing path=%v failed", path) } return nil }