1
2 package org.galagosearch.tupleflow;
3
4 import java.io.File;
5 import java.io.IOException;
6 import java.util.List;
7 import org.galagosearch.tupleflow.Parameters.Value;
8 import org.galagosearch.tupleflow.execution.ErrorHandler;
9 import org.galagosearch.tupleflow.types.FileName;
10
11 /***
12 *
13 * @author trevor
14 */
15 @OutputClass(className = "org.galagosearch.tupleflow.types.FileName", order = {"+filename"})
16 public class FileSource implements ExNihiloSource<FileName> {
17 TupleFlowParameters parameters;
18 public Processor<FileName> processor;
19
20 /*** Creates a new instance of FileSource */
21 public FileSource(TupleFlowParameters parameters) {
22 this.parameters = parameters;
23 }
24
25 private void processDirectory(File root) throws IOException {
26 for (File file : root.listFiles()) {
27 if (file.isHidden()) {
28 continue;
29 }
30 if (file.isDirectory()) {
31 processDirectory(file);
32 } else {
33 processor.process(new FileName(file.toString()));
34 }
35 }
36 }
37
38 public void run() throws IOException {
39 if (parameters.getXML().containsKey("directory")) {
40 List<Value> directories = parameters.getXML().list("directory");
41
42 for (Value directory : directories) {
43 File directoryFile = new File(directory.toString());
44 processDirectory(directoryFile);
45 }
46 } else if (parameters.getXML().containsKey("filename")) {
47 List<Value> files = parameters.getXML().list("filename");
48
49 for (Value file : files) {
50 String filename = file.toString();
51 processor.process(new FileName(filename));
52 }
53 }
54
55 processor.close();
56 }
57
58 public void close() throws IOException {
59 processor.close();
60 }
61
62 public void setProcessor(Step nextStage) throws IncompatibleProcessorException {
63 Linkage.link(this, nextStage);
64 }
65
66 public static void verify(TupleFlowParameters parameters, ErrorHandler handler) {
67 if (!(parameters.getXML().containsKey("directory") || parameters.getXML().containsKey("filename"))) {
68 handler.addError("FileSource requires either at least one directory or filename parameter.");
69 return;
70 }
71
72 if (parameters.getXML().containsKey("directory")) {
73 List<Value> directories = parameters.getXML().list("directory");
74
75 for (Value directory : directories) {
76 File directoryFile = new File(directory.toString());
77
78 if (directoryFile.exists() == false) {
79 handler.addError("Directory " + directoryFile.toString() + " doesn't exist.");
80 } else if (directoryFile.isDirectory() == false) {
81 handler.addError(directoryFile.toString() + " exists, but it isn't a directory.");
82 }
83 }
84 } else if (parameters.getXML().containsKey("filename")) {
85 List<Value> files = parameters.getXML().list("filename");
86
87 for (Value file : files) {
88 File f = new File(file.toString());
89
90 if (f.exists() == false) {
91 handler.addError("File " + file.toString() + " doesn't exist.");
92 } else if (f.isFile() == false) {
93 handler.addError(file.toString() + " exists, but isn't a file.");
94 }
95 }
96 }
97 }
98 }