| Code with Finding: |
class ZipDirectoryResource {
/**
* Enumerate all available children resource identifiers.
* This method <em>requires</em> that we create all our pending resources
* if we are in the extensible mode...too bad !
* @return An enumeration of all our resources.
*/
public synchronized Enumeration enumerateResourceIdentifiers(boolean all) {
File zipfile = getZipFile();
ZipFile zip = null;
Hashtable lookuped = new Hashtable(20);
try {
zip = new ZipFile(zipfile);
} catch (Exception ex) {
return new EmptyEnumeration();
}
Enumeration entries = zip.entries();
ZipEntry entry = null;
String entry_name = null;
int idx = -1;
String entry_path = getEntryPath();
if (entry_path == null) {
while (entries.hasMoreElements()) {
entry = (ZipEntry) entries.nextElement();
entry_name = entry.getName();
idx = entry_name.indexOf('/');
if (idx != -1) {
entry_name = entry_name.substring(0,idx);
directories.put(entry_name, Boolean.TRUE);
}
if (lookuped.get(entry_name) != null)
continue;
lookuped.put(entry_name, Boolean.TRUE);
if (lookup(entry_name) == null) {
createDefaultResource(entry_name);
}
}
} else {
int startidx = entry_path.length();
while (entries.hasMoreElements()) {
entry = (ZipEntry) entries.nextElement();
entry_name = entry.getName();
if (! entry_name.startsWith(entry_path))
continue;
// +1 remove "/"
if (entry_name.length() > startidx+1)
entry_name = entry_name.substring(startidx+1);
else continue;
idx = entry_name.indexOf('/');
if (idx != -1) {
entry_name = entry_name.substring(0,idx);
if (entry_name.length() == 0)
continue;
directories.put(entry_name, Boolean.TRUE);
}
if (lookuped.get(entry_name) != null)
continue;
lookuped.put(entry_name, Boolean.TRUE);
if (lookup(entry_name) == null) {
createDefaultResource(entry_name);
}
}
}
try { zip.close(); } catch (Exception ex) {}
ResourceSpace space = getSpace();
acquireChildren();
return space.enumerateResourceIdentifiers( getChildrenSpaceEntry() );
}
}
|