home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1998 September / dppcpro0998.iso / Rwc / Sybase / Install.exe / java.z / SimpleClassLoader.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-25  |  7.1 KB  |  404 lines

  1. package sun.beanbox;
  2.  
  3. import java.io.ByteArrayInputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.InputStream;
  7. import java.net.URL;
  8. import java.util.Enumeration;
  9. import java.util.Hashtable;
  10. import java.util.Properties;
  11. import java.util.Vector;
  12. import sun.awt.image.ByteArrayImageSource;
  13.  
  14. public class SimpleClassLoader extends ClassLoader {
  15.    public static final String urlPrefix = "SIMPLE";
  16.    private static boolean debug;
  17.    private String cookie;
  18.    private static Hashtable loaders = new Hashtable();
  19.    public static SimpleClassLoader ourLoader;
  20.    private String localResourceDirectory;
  21.    private Hashtable localOverrides = new Hashtable();
  22.    private Hashtable resourceHash = new Hashtable();
  23.    private Hashtable mimeHash = new Hashtable();
  24.    private Hashtable bytecodes = new Hashtable();
  25.  
  26.    public void setDefinition(String var1, byte[] var2) {
  27.       this.bytecodes.put(var1, var2);
  28.    }
  29.  
  30.    public synchronized void applyDefinitions(Vector var1) {
  31.       String var2 = "ApplyDefinitions/START";
  32.       if (debug) {
  33.          System.err.println("SimpleClassLoader:: " + var2);
  34.       }
  35.  
  36.       Enumeration var10 = var1.elements();
  37.  
  38.       while(var10.hasMoreElements()) {
  39.          String var3 = (String)var10.nextElement();
  40.          String var4 = "ApplyDefinitions/Considering " + var3;
  41.          if (debug) {
  42.             System.err.println("SimpleClassLoader:: " + var4);
  43.          }
  44.  
  45.          Class var12 = ((ClassLoader)this).findLoadedClass(var3);
  46.          if (var12 == null) {
  47.             boolean var7 = true;
  48.             String var8 = "applyDefinition(" + var3 + ")";
  49.             if (debug) {
  50.                System.err.println("SimpleClassLoader:: " + var8);
  51.             }
  52.  
  53.             byte[] var13 = (byte[])this.bytecodes.get(var3);
  54.             if (var13 == null) {
  55.                String var9 = "  is null";
  56.                if (debug) {
  57.                   System.err.println("SimpleClassLoader:: " + var9);
  58.                }
  59.  
  60.                Object var10000 = null;
  61.             } else {
  62.                Class var14 = super.defineClass((String)null, var13, 0, var13.length);
  63.                if (var14 != null && var7) {
  64.                   ((ClassLoader)this).resolveClass(var14);
  65.                }
  66.             }
  67.          }
  68.       }
  69.  
  70.       String var11 = "ApplyDefinitions/END";
  71.       if (debug) {
  72.          System.err.println("SimpleClassLoader:: " + var11);
  73.       }
  74.  
  75.    }
  76.  
  77.    public Class loadFromFile(String var1) {
  78.       String var2 = "loadFromFile/START";
  79.       if (debug) {
  80.          System.err.println("SimpleClassLoader:: " + var2);
  81.       }
  82.  
  83.       try {
  84.          FileInputStream var10 = new FileInputStream(var1);
  85.          FileInputStream var11 = var10;
  86.          int var6 = 0;
  87.          byte[] var7 = new byte[512];
  88.  
  89.          while(true) {
  90.             if (var6 == var7.length) {
  91.                byte[] var8 = new byte[var7.length * 2];
  92.                System.arraycopy(var7, 0, var8, 0, var6);
  93.                var7 = var8;
  94.             }
  95.  
  96.             int var14 = ((InputStream)var11).read(var7, var6, var7.length - var6);
  97.             if (var14 < 0) {
  98.                Class var12 = super.defineClass((String)null, var7, 0, var7.length);
  99.                String var13 = "loadFromFile/END-OK";
  100.                if (debug) {
  101.                   System.err.println("SimpleClassLoader:: " + var13);
  102.                }
  103.  
  104.                if (var12 != null) {
  105.                   ((ClassLoader)this).resolveClass(var12);
  106.                }
  107.  
  108.                return var12;
  109.             }
  110.  
  111.             var6 += var14;
  112.          }
  113.       } catch (Exception var9) {
  114.          String var5 = "LoadFromFile/caught " + var9 + " when loading from file " + var1;
  115.          if (debug) {
  116.             System.err.println("SimpleClassLoader:: " + var5);
  117.          }
  118.  
  119.          return null;
  120.       }
  121.    }
  122.  
  123.    public Class findClass(String var1) {
  124.       return ((ClassLoader)this).findLoadedClass(var1);
  125.    }
  126.  
  127.    protected Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
  128.       String var3 = "loadClass(" + var1 + ", " + var2 + ")";
  129.       if (debug) {
  130.          System.err.println("SimpleClassLoader:: " + var3);
  131.       }
  132.  
  133.       Class var10 = ((ClassLoader)this).findLoadedClass(var1);
  134.       if (var10 != null) {
  135.          if (var10 == null) {
  136.             throw new ClassNotFoundException(var1);
  137.          } else {
  138.             if (var2) {
  139.                ((ClassLoader)this).resolveClass(var10);
  140.             }
  141.  
  142.             return var10;
  143.          }
  144.       } else {
  145.          String var4 = "  not loaded";
  146.          if (debug) {
  147.             System.err.println("SimpleClassLoader:: " + var4);
  148.          }
  149.  
  150.          try {
  151.             Class var5 = ((ClassLoader)this).findSystemClass(var1);
  152.             String var6 = "  findSystemClass returned " + var5;
  153.             if (debug) {
  154.                System.err.println("SimpleClassLoader:: " + var6);
  155.             }
  156.  
  157.             return var5;
  158.          } catch (ClassNotFoundException var9) {
  159.             var4 = "  will try applyDefinition";
  160.             if (debug) {
  161.                System.err.println("SimpleClassLoader:: " + var4);
  162.             }
  163.  
  164.             String var7 = "applyDefinition(" + var1 + ")";
  165.             if (debug) {
  166.                System.err.println("SimpleClassLoader:: " + var7);
  167.             }
  168.  
  169.             byte[] var12 = (byte[])this.bytecodes.get(var1);
  170.             Class var10000;
  171.             if (var12 == null) {
  172.                String var8 = "  is null";
  173.                if (debug) {
  174.                   System.err.println("SimpleClassLoader:: " + var8);
  175.                }
  176.  
  177.                var10000 = null;
  178.             } else {
  179.                Class var13 = super.defineClass((String)null, var12, 0, var12.length);
  180.                if (var13 != null && var2) {
  181.                   ((ClassLoader)this).resolveClass(var13);
  182.                }
  183.  
  184.                var10000 = var13;
  185.             }
  186.  
  187.             return var10000;
  188.          }
  189.       }
  190.    }
  191.  
  192.    public void setLocalResourceSource(String var1, InputStreamProducer var2) {
  193.       this.localOverrides.put(var1, var2);
  194.    }
  195.  
  196.    void putLocalResource(String var1, byte[] var2, String var3) {
  197.       String var4 = "putLocalResource for " + var1 + " is " + var2;
  198.       if (debug) {
  199.          System.err.println("SimpleClassLoader:: " + var4);
  200.       }
  201.  
  202.       this.resourceHash.put(var1, var2);
  203.       this.mimeHash.put(var1, var3);
  204.    }
  205.  
  206.    public URL getResource(String var1) {
  207.       String var2 = "getResource(" + var1 + ")";
  208.       if (debug) {
  209.          System.err.println("SimpleClassLoader:: " + var2);
  210.       }
  211.  
  212.       URL var4 = ClassLoader.getSystemResource(var1);
  213.       if (var4 != null) {
  214.          String var3 = "getResource(" + var1 + "): " + var4;
  215.          if (debug) {
  216.             System.err.println("SimpleClassLoader:: " + var3);
  217.          }
  218.  
  219.          return var4;
  220.       } else {
  221.          return this.getLocalResource(var1);
  222.       }
  223.    }
  224.  
  225.    public InputStream getResourceAsStream(String var1) {
  226.       InputStream var2 = ClassLoader.getSystemResourceAsStream(var1);
  227.       if (var2 != null) {
  228.          String var3 = "getResourceAsStream(" + var1 + ") is a system resource";
  229.          if (debug) {
  230.             System.err.println("SimpleClassLoader:: " + var3);
  231.          }
  232.  
  233.          return var2;
  234.       } else {
  235.          return this.getLocalResourceAsStream(var1);
  236.       }
  237.    }
  238.  
  239.    public static SimpleClassLoader createLoader(String var0, String var1) {
  240.       SimpleClassLoader var2 = (SimpleClassLoader)loaders.get(var0);
  241.       if (var2 != null) {
  242.          if (!var2.localResourceDirectory.equals(var1)) {
  243.             throw new Error("internal error!");
  244.          } else {
  245.             return var2;
  246.          }
  247.       } else {
  248.          return new SimpleClassLoader(var0, var1);
  249.       }
  250.    }
  251.  
  252.    public static Object getLocalResource(String var0, String var1) {
  253.       String var2 = "getLocalResource(" + var0 + ", " + var1 + ")";
  254.       if (debug) {
  255.          System.err.println("SimpleClassLoader:: " + var2);
  256.       }
  257.  
  258.       SimpleClassLoader var9 = (SimpleClassLoader)loaders.get(var0);
  259.       Object var3 = var9.localOverrides.get(var1);
  260.       if (var3 != null) {
  261.          return ((InputStreamProducer)var3).getInputStream();
  262.       } else {
  263.          String var4 = (String)var9.mimeHash.get(var1);
  264.          if (var4 != null) {
  265.             byte[] var10 = (byte[])var9.resourceHash.get(var1);
  266.             return var4.startsWith("image") ? new ByteArrayImageSource(var10) : new ByteArrayInputStream(var10);
  267.          } else {
  268.             if (var9.localResourceDirectory != null) {
  269.                File var5 = new File(var9.localResourceDirectory, var1);
  270.                if (var5.exists()) {
  271.                   try {
  272.                      URL var7 = new URL("file", (String)null, var5.getAbsolutePath());
  273.                      return var7.getContent();
  274.                   } catch (Exception var8) {
  275.                      throw new Error("no such resource");
  276.                   }
  277.                }
  278.             }
  279.  
  280.             return null;
  281.          }
  282.       }
  283.    }
  284.  
  285.    public static InputStream getLocalResourceAsStream(String var0, String var1) {
  286.       SimpleClassLoader var2 = (SimpleClassLoader)loaders.get(var0);
  287.       return var2.getLocalResourceAsStream(var1);
  288.    }
  289.  
  290.    static {
  291.       Properties var0 = new Properties(System.getProperties());
  292.       ((Hashtable)var0).put("java.protocol.handler.pkgs", var0.getProperty("java.protocol.handler.pkgs") + "|sun.beanbox");
  293.       System.setProperties(var0);
  294.       Object var2 = null;
  295.       String var1 = "BeanBox";
  296.       SimpleClassLoader var3 = (SimpleClassLoader)loaders.get(var1);
  297.       SimpleClassLoader var10000;
  298.       if (var3 != null) {
  299.          if (!var3.localResourceDirectory.equals(var2)) {
  300.             throw new Error("internal error!");
  301.          }
  302.  
  303.          var10000 = var3;
  304.       } else {
  305.          var10000 = new SimpleClassLoader(var1, (String)var2);
  306.       }
  307.  
  308.       ourLoader = var10000;
  309.    }
  310.  
  311.    private SimpleClassLoader(String var1, String var2) {
  312.       String var3 = "(" + var1 + ")";
  313.       if (debug) {
  314.          System.err.println("SimpleClassLoader:: " + var3);
  315.       }
  316.  
  317.       this.cookie = var1;
  318.       this.localResourceDirectory = var2;
  319.       loaders.put(var1, this);
  320.    }
  321.  
  322.    private final URL getLocalResource(String var1) {
  323.       String var2 = "getLocalResource(" + var1 + ")";
  324.       if (debug) {
  325.          System.err.println("SimpleClassLoader:: " + var2);
  326.       }
  327.  
  328.       Object var7 = this.localOverrides.get(var1);
  329.       if (var7 == null) {
  330.          String var3 = "ResourceHash check on " + var1;
  331.          if (debug) {
  332.             System.err.println("SimpleClassLoader:: " + var3);
  333.          }
  334.  
  335.          var7 = this.resourceHash.get(var1);
  336.       }
  337.  
  338.       if (var7 == null && this.localResourceDirectory != null) {
  339.          File var8 = new File(this.localResourceDirectory, var1);
  340.          if (var8.exists()) {
  341.             var7 = new Integer("1");
  342.          }
  343.       }
  344.  
  345.       if (var7 != null) {
  346.          try {
  347.             URL var4 = new URL("simpleresource", (String)null, "/SIMPLE" + this.cookie + "/+/" + var1);
  348.             String var9 = "  " + var4.toExternalForm();
  349.             if (debug) {
  350.                System.err.println("SimpleClassLoader:: " + var9);
  351.             }
  352.  
  353.             return var4;
  354.          } catch (Exception var6) {
  355.             String var5 = "Exception " + var6 + " while building a resource URL";
  356.             if (debug) {
  357.                System.err.println("SimpleClassLoader:: " + var5);
  358.             }
  359.  
  360.             return null;
  361.          }
  362.       } else {
  363.          return null;
  364.       }
  365.    }
  366.  
  367.    private final InputStream getLocalResourceAsStream(String var1) {
  368.       String var2 = "getLocalResourceAsStream(" + var1 + ")";
  369.       if (debug) {
  370.          System.err.println("SimpleClassLoader:: " + var2);
  371.       }
  372.  
  373.       Object var6 = this.localOverrides.get(var1);
  374.       if (var6 != null) {
  375.          return ((InputStreamProducer)var6).getInputStream();
  376.       } else {
  377.          var6 = this.resourceHash.get(var1);
  378.          if (var6 != null) {
  379.             String var8 = "Found resource: " + var1 + " in the classloader: " + this.cookie;
  380.             if (debug) {
  381.                System.err.println("SimpleClassLoader:: " + var8);
  382.             }
  383.  
  384.             byte[] var9 = (byte[])var6;
  385.             return new ByteArrayInputStream(var9);
  386.          } else if (this.localResourceDirectory != null) {
  387.             File var3 = new File(this.localResourceDirectory, var1);
  388.             String var4 = "getLocalResourceAsStream for " + var1 + "? " + var3;
  389.             if (debug) {
  390.                System.err.println("SimpleClassLoader:: " + var4);
  391.             }
  392.  
  393.             try {
  394.                return new FileInputStream(var3);
  395.             } catch (Exception var5) {
  396.                return null;
  397.             }
  398.          } else {
  399.             return null;
  400.          }
  401.       }
  402.    }
  403. }
  404.