1
2
3 package org.galagosearch.core.index;
4
5 import org.galagosearch.tupleflow.InputClass;
6 import org.galagosearch.tupleflow.TupleFlowParameters;
7 import org.galagosearch.tupleflow.Parameters;
8 import org.galagosearch.tupleflow.Processor;
9 import org.galagosearch.tupleflow.execution.ErrorHandler;
10 import org.galagosearch.tupleflow.execution.Verification;
11 import org.galagosearch.tupleflow.types.XMLFragment;
12 import java.io.File;
13 import java.io.IOException;
14
15 /***
16 *
17 * @author trevor
18 */
19 @InputClass(className = "org.galagosearch.tupleflow.types.XMLFragment")
20 public class ManifestWriter implements Processor<XMLFragment> {
21 String filename;
22 Parameters result;
23
24 /*** Creates a new instance of ManifestWriter */
25 public ManifestWriter(TupleFlowParameters p) throws IOException {
26 if (p.getXML().containsKey("xml")) {
27 Parameters.Value value = p.getXML().value().map().get("xml").get(0);
28 result = new Parameters(value);
29 } else {
30 result = new Parameters();
31 }
32
33 filename = p.getXML().get("filename");
34 }
35
36 public void process(XMLFragment object) throws IOException {
37 result.add(object.nodePath, object.innerText);
38 }
39
40 public void close() throws IOException {
41 File f = new File(filename);
42 String parent = f.getParent();
43
44
45 if (parent != null) {
46 new File(parent).mkdirs();
47 }
48 result.write(filename);
49 }
50
51 public static void verify(TupleFlowParameters parameters, ErrorHandler handler) {
52 if (!parameters.getXML().containsKey("filename")) {
53 handler.addError("ManifestWriter requires a 'filename' parameter.");
54 return;
55 }
56
57 File f = new File(parameters.getXML().get("filename"));
58
59 if (f.isFile() && f.canWrite()) {
60 return;
61 }
62 if (f.isDirectory()) {
63 handler.addError("Pathname " + f.toString() + " exists, and it is a directory, but " +
64 "ManifestWriter would like to write a file there.");
65 return;
66 }
67
68
69
70 Verification.requireWriteableFile(f.toString(), handler);
71 }
72 }