home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / plugins / print.jar / com / extensibility / plugin / PluginClassLoader.class (.txt) next >
Encoding:
Java Class File  |  2000-04-11  |  3.2 KB  |  124 lines

  1. package com.extensibility.plugin;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.File;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.InputStreamReader;
  8. import java.util.Enumeration;
  9. import java.util.Hashtable;
  10. import java.util.zip.ZipEntry;
  11. import java.util.zip.ZipFile;
  12.  
  13. class PluginClassLoader extends ClassLoader {
  14.    private Hashtable classes = new Hashtable();
  15.    private Hashtable unloadedClasses = new Hashtable();
  16.  
  17.    public String enumerateClasses(File var1) throws IOException {
  18.       ZipFile var2 = new ZipFile(var1);
  19.       Enumeration var3 = var2.entries();
  20.       String var4 = null;
  21.  
  22.       while(var3.hasMoreElements()) {
  23.          ZipEntry var5 = (ZipEntry)var3.nextElement();
  24.          String var6 = var5.getName();
  25.          String var7 = var6.toLowerCase();
  26.          if (var7.endsWith(".class")) {
  27.             String var8 = var5.getName().replace('/', '.');
  28.             var8 = var8.substring(0, var8.length() - 6);
  29.             PluginClassInfo var9 = new PluginClassInfo((PluginClassLoader)null);
  30.             var9.file = var2;
  31.             var9.entry = var5;
  32.             this.unloadedClasses.put(var8, var9);
  33.          } else if (var7.endsWith(".mf")) {
  34.             var4 = this.extractMainClassFromManifest(var2, var5);
  35.          }
  36.       }
  37.  
  38.       return var4;
  39.    }
  40.  
  41.    protected String extractMainClassFromManifest(ZipFile var1, ZipEntry var2) throws IOException {
  42.       BufferedReader var3 = new BufferedReader(new InputStreamReader(var1.getInputStream(var2)));
  43.       String var4 = null;
  44.  
  45.       try {
  46.          boolean var5 = false;
  47.  
  48.          while(!var5) {
  49.             String var6 = var3.readLine();
  50.             if (var6.startsWith("Main-Class:")) {
  51.                var4 = var6.substring(11).trim();
  52.                var5 = true;
  53.             }
  54.          }
  55.       } catch (Exception var7) {
  56.       }
  57.  
  58.       var3.close();
  59.       return var4;
  60.    }
  61.  
  62.    protected byte[] loadClassData(String var1) {
  63.       Object var2 = this.unloadedClasses.get(var1);
  64.       byte[] var3 = null;
  65.       if (var2 != null) {
  66.          PluginClassInfo var4 = (PluginClassInfo)var2;
  67.          ZipEntry var5 = var4.entry;
  68.          int var6 = (int)var5.getSize();
  69.          var3 = new byte[var6];
  70.  
  71.          try {
  72.             InputStream var7 = var4.file.getInputStream(var5);
  73.             int var8 = 0;
  74.  
  75.             for(int var9 = 0; var6 > 0 && var9 >= 0; var8 += var9) {
  76.                var9 = var7.read(var3, var8, var6);
  77.                var6 -= var9;
  78.             }
  79.  
  80.             var7.close();
  81.          } catch (Exception var10) {
  82.             var3 = null;
  83.          }
  84.  
  85.          this.unloadedClasses.remove(var1);
  86.       }
  87.  
  88.       return var3;
  89.    }
  90.  
  91.    public synchronized Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
  92.       Class var3 = (Class)this.classes.get(var1);
  93.       if (var3 != null) {
  94.          return var3;
  95.       } else {
  96.          try {
  97.             var3 = super.findSystemClass(var1);
  98.             return var3;
  99.          } catch (Exception var7) {
  100.             if (var1.startsWith("java.")) {
  101.                throw new ClassNotFoundException();
  102.             } else {
  103.                byte[] var4 = this.loadClassData(var1);
  104.                if (var4 == null) {
  105.                   throw new ClassNotFoundException();
  106.                } else {
  107.                   try {
  108.                      var3 = ((ClassLoader)this).defineClass(var1, var4, 0, var4.length);
  109.                   } catch (Error var6) {
  110.                      throw var6;
  111.                   }
  112.  
  113.                   if (var2) {
  114.                      ((ClassLoader)this).resolveClass(var3);
  115.                   }
  116.  
  117.                   return var3;
  118.                }
  119.             }
  120.          }
  121.       }
  122.    }
  123. }
  124.