View Javadoc
1   /***
2    * 
3    */
4   package com.fernsroth.squashfs.model;
5   
6   /***
7    * 
8    * @author Joseph M. Ferner (Near Infinity Corporation)
9    */
10  public class Manifest {
11  
12      /***
13       * the root directory.
14       */
15      private Directory root;
16  
17      /***
18       * gets the root directory.
19       * @return the root directory.
20       */
21      public Directory getRoot() {
22          return this.root;
23      }
24  
25      /***
26       * @param root the root to set
27       */
28      public void setRoot(Directory root) {
29          this.root = root;
30      }
31  
32      /***
33       * @param filename the file name to find.
34       * @return the BaseFile with that path.
35       */
36      public BaseFile find(String filename) {
37          return find(getRoot(), filename);
38      }
39  
40      /***
41       * @param start the start node.
42       * @param filename the filename to find.
43       * @return the base file with that path.
44       */
45      private BaseFile find(Directory start, String filename) {
46          int i = filename.indexOf('/');
47          String toFind;
48          String left;
49          if (i == -1) {
50              toFind = filename;
51              left = null;
52          } else {
53              toFind = filename.substring(0, i);
54              left = filename.substring(i + 1);
55          }
56          if (toFind.equals(".")) {
57              return find(start, left);
58          } else {
59              for (BaseFile bf : start.getSubentries()) {
60                  if (bf.getName().equals(toFind)) {
61                      if (left == null) {
62                          return bf;
63                      } else {
64                          return find((Directory) bf, left);
65                      }
66                  }
67              }
68          }
69          return null;
70      }
71  
72      /***
73       * get the path to a file.
74       * @param bf the file to find path to.
75       * @return the path.
76       */
77      public String getPath(BaseFile bf) {
78          return getPath(getRoot(), bf);
79      }
80  
81      /***
82       * get the path to a file.
83       * @param start the start point.
84       * @param bf the file to find.
85       * @return the path.
86       */
87      private String getPath(Directory start, BaseFile bf) {
88          for (BaseFile f : start.getSubentries()) {
89              if (f == bf) {
90                  return bf.getName();
91              }
92              if (f instanceof Directory) {
93                  String path = getPath((Directory) f, bf);
94                  if (path != null) {
95                      return f.getName() + "/" + path;
96                  }
97              }
98          }
99          return null;
100     }
101 }