View Javadoc

1   package org.catacomb.druid.load;
2   
3   
4   import java.util.ArrayList;
5   
6   import org.catacomb.report.E;
7   import org.catacomb.druid.manifest.DecFile;
8   import org.catacomb.druid.manifest.DecManifest;
9   
10  import java.io.File;
11  import java.util.HashMap;
12  
13  
14  public class XMLStore {
15  
16      private final static String MULTICODE = "___MULTI";
17  
18      private HashMap<String, String> shortToFullID;
19      private HashMap<String, DecFile> fullIDToSource;
20  
21      private HashMap<String, ArrayList<String>> shortToFullMulti;
22  
23  
24      public XMLStore() {
25          shortToFullID = new HashMap<String, String>();
26          fullIDToSource = new HashMap<String, DecFile>();
27          shortToFullMulti = new HashMap<String, ArrayList<String>>();
28      }
29  
30  
31  
32      public void addClasspathManifest(DecManifest manifest) {
33          for (DecFile df : manifest.getFiles()) {
34              df.setClasspathAccess();
35              addSource(df);
36          }
37      }
38  
39  
40  
41      public void addFileSystemManifest(DecManifest manifest, File fdir) {
42          String cproot = manifest.getRootPath();
43          for (DecFile df : manifest.getFiles()) {
44              df.setFileSystemAccess(fdir, cproot);
45              addSource(df);
46          }
47      }
48  
49  
50      public boolean containsSource(String fnm) {
51          boolean ret = false;
52          if (shortToFullID.containsKey(fnm) ||
53                  fullIDToSource.containsKey(fnm)) {
54              ret = true;
55          }
56          return ret;
57      }
58  
59  
60      public boolean hasMultipleSources(String locator) {
61          boolean ret = false;
62          if (shortToFullID.containsKey(locator)) {
63              String v = shortToFullID.get(locator);
64              if (v.equals(MULTICODE)) {
65                  ret = true;
66              }
67          }
68          return ret;
69      }
70  
71  
72      public ArrayList<DecFile> getSources(String locator) {
73          ArrayList<DecFile> ret = new ArrayList<DecFile>();
74          for (String path : shortToFullMulti.get(locator)) {
75              ret.add(fullIDToSource.get(path));
76          }
77          return ret;
78      }
79  
80  
81  
82      public DecFile getSource(String locator) {
83          DecFile ret = null;
84  
85          if (shortToFullMulti.containsKey(locator)) {
86              E.error("multiple possible sources for " + locator + " use getSources");
87              return null;
88          }
89  
90          if (shortToFullID.containsKey(locator)) {
91              String path = shortToFullID.get(locator);
92              ret = fullIDToSource.get(path);
93  
94          } else if (fullIDToSource.containsKey(locator)) {
95              ret = fullIDToSource.get(locator);
96  
97          } else {
98              E.error("cant find resource at " + locator);
99              dumpStore();
100         }
101         return ret;
102     }
103 
104 
105     private void dumpStore() {
106         E.info("Known names:");
107         for (String sk : shortToFullID.keySet()) {
108             E.info("   " + sk);
109         }
110         E.info("Known names:");
111         for (String sk : shortToFullID.keySet()) {
112             E.info("   " + sk);
113         }
114     }
115 
116 
117 
118 
119     public void addSource(DecFile decFile) {
120         String dfnm = decFile.getName();
121         String fullid = decFile.getFullID();
122 
123         if (shortToFullID.containsKey(dfnm)) {
124             if (shortToFullMulti.containsKey(dfnm)) {
125                 shortToFullMulti.get(dfnm).add(fullid);
126 
127             } else {
128                 ArrayList<String> al = new ArrayList<String>();
129                 al.add(shortToFullID.get(dfnm));
130                 al.add(fullid);
131                 shortToFullMulti.put(dfnm, al);
132 
133                 shortToFullID.put(dfnm, MULTICODE);
134             }
135 
136         } else {
137             shortToFullID.put(dfnm, fullid);
138         }
139         fullIDToSource.put(fullid, decFile);
140     }
141 
142 
143 
144     public void newSourceFile(File f, File rootFolder) {
145         DecFile df = new DecFile(f, rootFolder);
146         addSource(df);
147     }
148 
149 
150 }