View Javadoc

1   // BSD License (http://www.galagosearch.org/license)
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          // make parent directories
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; // good news
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          // this will search upwards and verify that we can make
69          // the necessary directory structure to store this file.
70          Verification.requireWriteableFile(f.toString(), handler);
71      }
72  }