View Javadoc

1   /***
2    * 
3    */
4   package com.fernsroth.squashfs;
5   
6   import java.io.File;
7   import java.io.FileNotFoundException;
8   import java.io.IOException;
9   
10  import com.fernsroth.easyio.EasyIORandomAccessFile;
11  import com.fernsroth.easyio.IRandomAccessSource;
12  import com.fernsroth.squashfs.model.BaseFile;
13  import com.fernsroth.squashfs.model.Manifest;
14  import com.fernsroth.squashfs.model.SFSSourceFile;
15  
16  /***
17   * 
18   * @author Joseph M. Ferner (Near Infinity Corporation)
19   */
20  public class FileSystemDataProvider implements DataProvider {
21  
22      /***
23       * the source directory.
24       */
25      private File sourceDir;
26  
27      /***
28       * ino counter.
29       */
30      private static int ino = 1;
31  
32      /***
33       * @param sourceDir
34       */
35      public FileSystemDataProvider(File sourceDir) {
36          this.sourceDir = sourceDir;
37      }
38  
39      /***
40       * {@inheritDoc}
41       */
42      public IRandomAccessSource getData(Manifest source, BaseFile bf)
43              throws IOException {
44          if (bf instanceof SFSSourceFile
45                  && ((SFSSourceFile) bf).getSourceFile() != null) {
46              return new EasyIORandomAccessFile(((SFSSourceFile) bf)
47                      .getSourceFile(), "r");
48          } else {
49              String path = source.getPath(bf);
50              File f = new File(this.sourceDir, path);
51              return new EasyIORandomAccessFile(f, "r");
52          }
53      }
54  
55      /***
56       * {@inheritDoc}
57       */
58      public int getIno(Manifest source, BaseFile bf) {
59          return ino++;
60      }
61  
62      /***
63       * {@inheritDoc}
64       */
65      public long getLength(Manifest source, BaseFile bf) throws IOException {
66          if (bf == null || bf.getName() == null) {
67              return 0;
68          }
69          String path = source.getPath(bf);
70          if (path == null) {
71              throw new FileNotFoundException("could not file '" + bf.getName()
72                      + "'");
73          }
74          File f = new File(this.sourceDir, path);
75          return f.length();
76      }
77  }