home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / tools / java / ClassPath.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  3.8 KB  |  166 lines

  1. package sun.tools.java;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.util.Enumeration;
  6. import java.util.Hashtable;
  7. import java.util.zip.ZipEntry;
  8. import java.util.zip.ZipException;
  9. import java.util.zip.ZipFile;
  10.  
  11. public class ClassPath {
  12.    static final char dirSeparator;
  13.    String pathstr;
  14.    private ClassPathEntry[] path;
  15.    private final String fileSeparatorChar;
  16.  
  17.    public ClassPath(String var1) {
  18.       this.fileSeparatorChar = String.valueOf(File.separatorChar);
  19.       this.pathstr = var1;
  20.       int var4 = 0;
  21.  
  22.       for(int var11 = 0; (var11 = var1.indexOf(dirSeparator, var11)) != -1; ++var11) {
  23.          ++var4;
  24.       }
  25.  
  26.       ClassPathEntry[] var5 = new ClassPathEntry[var4 + 1];
  27.       int var6 = var1.length();
  28.       var4 = 0;
  29.  
  30.       int var3;
  31.       for(int var12 = 0; var12 < var6; var12 = var3 + 1) {
  32.          if ((var3 = var1.indexOf(dirSeparator, var12)) == -1) {
  33.             var3 = var6;
  34.          }
  35.  
  36.          if (var12 == var3) {
  37.             var5[var4] = new ClassPathEntry();
  38.             var5[var4++].dir = new File(".");
  39.          } else {
  40.             File var7 = new File(var1.substring(var12, var3));
  41.             if (var7.isFile()) {
  42.                try {
  43.                   ZipFile var8 = new ZipFile(var7);
  44.                   var5[var4] = new ClassPathEntry();
  45.                   var5[var4++].zip = var8;
  46.                } catch (ZipException var9) {
  47.                } catch (IOException var10) {
  48.                }
  49.             } else {
  50.                var5[var4] = new ClassPathEntry();
  51.                var5[var4++].dir = var7;
  52.             }
  53.          }
  54.       }
  55.  
  56.       this.path = new ClassPathEntry[var4];
  57.       System.arraycopy(var5, 0, this.path, 0, var4);
  58.    }
  59.  
  60.    public ClassFile getDirectory(String var1) {
  61.       return this.getFile(var1, true);
  62.    }
  63.  
  64.    public ClassFile getFile(String var1) {
  65.       return this.getFile(var1, false);
  66.    }
  67.  
  68.    private ClassFile getFile(String var1, boolean var2) {
  69.       String var3 = var1;
  70.       String var4 = "";
  71.       if (!var2) {
  72.          int var5 = var1.lastIndexOf(File.separatorChar);
  73.          var3 = var1.substring(0, var5 + 1);
  74.          var4 = var1.substring(var5 + 1);
  75.       } else if (!var1.equals("") && !var1.endsWith(this.fileSeparatorChar)) {
  76.          var3 = var1 + File.separatorChar;
  77.          var1 = var3;
  78.       }
  79.  
  80.       for(int var9 = 0; var9 < this.path.length; ++var9) {
  81.          if (this.path[var9].zip != null) {
  82.             String var10 = var1.replace(File.separatorChar, '/');
  83.             ZipEntry var11 = this.path[var9].zip.getEntry(var10);
  84.             if (var11 != null) {
  85.                return new ClassFile(this.path[var9].zip, var11);
  86.             }
  87.          } else {
  88.             File var6 = new File(this.path[var9].dir.getPath(), var1);
  89.             String[] var7 = this.path[var9].getFiles(var3);
  90.             if (var2) {
  91.                if (var7.length > 0) {
  92.                   return new ClassFile(var6);
  93.                }
  94.             } else {
  95.                for(int var8 = 0; var8 < var7.length; ++var8) {
  96.                   if (var4.equals(var7[var8])) {
  97.                      return new ClassFile(var6);
  98.                   }
  99.                }
  100.             }
  101.          }
  102.       }
  103.  
  104.       return null;
  105.    }
  106.  
  107.    public Enumeration getFiles(String var1, String var2) {
  108.       Hashtable var3 = new Hashtable();
  109.       int var4 = this.path.length;
  110.  
  111.       while(true) {
  112.          --var4;
  113.          if (var4 < 0) {
  114.             return var3.elements();
  115.          }
  116.  
  117.          if (this.path[var4].zip != null) {
  118.             Enumeration var9 = this.path[var4].zip.entries();
  119.  
  120.             while(var9.hasMoreElements()) {
  121.                ZipEntry var10 = (ZipEntry)var9.nextElement();
  122.                String var12 = var10.getName();
  123.                var12 = var12.replace('/', File.separatorChar);
  124.                if (var12.startsWith(var1) && var12.endsWith(var2)) {
  125.                   var3.put(var12, new ClassFile(this.path[var4].zip, var10));
  126.                }
  127.             }
  128.          } else {
  129.             String[] var5 = this.path[var4].getFiles(var1);
  130.  
  131.             for(int var6 = 0; var6 < var5.length; ++var6) {
  132.                String var7 = var5[var6];
  133.                if (var7.endsWith(var2)) {
  134.                   var7 = var1 + File.separatorChar + var7;
  135.                   File var8 = new File(this.path[var4].dir.getPath(), var7);
  136.                   var3.put(var7, new ClassFile(var8));
  137.                }
  138.             }
  139.          }
  140.       }
  141.    }
  142.  
  143.    public void close() throws IOException {
  144.       int var1 = this.path.length;
  145.  
  146.       while(true) {
  147.          --var1;
  148.          if (var1 < 0) {
  149.             return;
  150.          }
  151.  
  152.          if (this.path[var1].zip != null) {
  153.             this.path[var1].zip.close();
  154.          }
  155.       }
  156.    }
  157.  
  158.    public String toString() {
  159.       return this.pathstr;
  160.    }
  161.  
  162.    static {
  163.       dirSeparator = File.pathSeparatorChar;
  164.    }
  165. }
  166.