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 / applet / AppletResourceLoader.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  8.6 KB  |  331 lines

  1. package sun.applet;
  2.  
  3. import java.applet.AudioClip;
  4. import java.awt.Image;
  5. import java.awt.Toolkit;
  6. import java.io.BufferedInputStream;
  7. import java.io.ByteArrayInputStream;
  8. import java.io.ByteArrayOutputStream;
  9. import java.io.FilterInputStream;
  10. import java.io.IOException;
  11. import java.io.InputStream;
  12. import java.net.HttpURLConnection;
  13. import java.net.MalformedURLException;
  14. import java.net.URL;
  15. import java.net.URLConnection;
  16. import java.security.Identity;
  17. import java.security.IdentityScope;
  18. import java.util.Enumeration;
  19. import java.util.Hashtable;
  20. import java.util.Vector;
  21. import java.util.zip.ZipInputStream;
  22. import sun.misc.Ref;
  23. import sun.tools.jar.JarImageSource;
  24. import sun.tools.jar.JarVerifierStream;
  25.  
  26. public class AppletResourceLoader {
  27.    static boolean debug;
  28.    static boolean verboseResourceLoading;
  29.    private static Hashtable imgHash = new Hashtable();
  30.    private static Hashtable audioHash = new Hashtable();
  31.    private static Hashtable resourceHash = new Hashtable();
  32.    private static Hashtable mimeHash = new Hashtable();
  33.    AppletClassLoader loader;
  34.    IdentityScope scope;
  35.  
  36.    private void verbose(String var1) {
  37.       if (verboseResourceLoading) {
  38.          System.out.println(var1);
  39.       }
  40.  
  41.    }
  42.  
  43.    static void debug(String var0) {
  44.       if (debug) {
  45.          System.out.println(var0);
  46.       }
  47.  
  48.    }
  49.  
  50.    static void debug(String var0, Throwable var1) {
  51.       if (debug) {
  52.          var1.printStackTrace();
  53.       }
  54.  
  55.       System.out.println("sun.applet.AppletResourceLoader:::" + var0);
  56.    }
  57.  
  58.    public AppletResourceLoader(AppletClassLoader var1) {
  59.       this.loader = var1;
  60.       this.scope = IdentityScope.getSystemScope();
  61.    }
  62.  
  63.    void loadJar(URL var1, String var2) throws IOException {
  64.       this.loadJar(var1, (new URL(var1, var2)).openStream());
  65.    }
  66.  
  67.    public void loadJar(URL var1, InputStream var2) throws IOException {
  68.       JarVerifierStream var3 = null;
  69.       Hashtable var4 = new Hashtable();
  70.  
  71.       try {
  72.          var3 = new JarVerifierStream(var2);
  73.          Object var7 = null;
  74.          byte[] var8 = new byte[2048];
  75.  
  76.          while((var21 = var3.getNextEntry()) != null) {
  77.             String var9 = var21.getName();
  78.             String var10 = null;
  79.             Object var11 = null;
  80.             ByteArrayOutputStream var12 = new ByteArrayOutputStream();
  81.  
  82.             int var13;
  83.             while((var13 = ((FilterInputStream)var3).read(var8)) > 0) {
  84.                var12.write(var8, 0, var13);
  85.             }
  86.  
  87.             byte[] var14 = var12.toByteArray();
  88.             if (var10 == null) {
  89.                var10 = this.guessManifestType(var9);
  90.             }
  91.  
  92.             if (var10 == null) {
  93.                ByteArrayInputStream var15 = new ByteArrayInputStream(var14);
  94.                var10 = URLConnection.guessContentTypeFromStream(var15);
  95.             }
  96.  
  97.             if (var10 == null) {
  98.                var10 = "input-stream/input-stream";
  99.             }
  100.  
  101.             debug("loading " + var9 + " (most likely guessed mime-type: " + var10 + ")");
  102.             if (var10.startsWith("image")) {
  103.                this.putLocalResource(new URL(var1, var9), var14, var10);
  104.                var11 = this.createImage(var14, var1, var9, var10);
  105.             } else if (var10.startsWith("audio")) {
  106.                URL var24 = new URL(var1, var9);
  107.                this.putLocalResource(var24, var14, var10);
  108.                AppletAudioClip var16 = new AppletAudioClip(var14);
  109.                audioHash.put(var24, var16);
  110.                var11 = var16;
  111.             } else if (var10.startsWith("application/java-vm")) {
  112.                this.putLocalResource(new URL(var1, var9), var14, var10);
  113.                String var25 = var9.substring(0, var9.length() - 6).replace('/', '.');
  114.                var11 = this.loader.defineClassFromBytes(var25, var14, 0, var14.length);
  115.             } else if (!var10.equals("manifest/manifest") && !var10.equals("manifest/signature-bin")) {
  116.                this.putLocalResource(new URL(var1, var9), var14, var10);
  117.                ByteArrayInputStream var26 = new ByteArrayInputStream(var14);
  118.                var11 = var26;
  119.             }
  120.  
  121.             if (var11 != null) {
  122.                var4.put(var9, var11);
  123.                var11 = null;
  124.             }
  125.          }
  126.  
  127.          Enumeration var22 = var3.getBlocks();
  128.          var3.getNameToHash();
  129.          var3.getManifest();
  130.          if (var22 != null) {
  131.             this.signObjects(var3.getVerifiedSignatures(), var4);
  132.          } else {
  133.             debug("BLOCK is null");
  134.          }
  135.       } catch (IOException var19) {
  136.          debug("IOException loading archive: " + var19);
  137.          ((Throwable)var19).printStackTrace();
  138.       } finally {
  139.          debug("Closing jar input stream");
  140.          if (var3 != null) {
  141.             ((ZipInputStream)var3).close();
  142.          }
  143.  
  144.       }
  145.  
  146.    }
  147.  
  148.    private void signObjects(Hashtable var1, Hashtable var2) {
  149.       Enumeration var3 = var1.keys();
  150.  
  151.       while(var3.hasMoreElements()) {
  152.          String var4 = (String)var3.nextElement();
  153.          Vector var5 = (Vector)var1.get(var4);
  154.          Object var6 = var2.get(var4);
  155.          Identity[] var7 = new Identity[var5.size()];
  156.          var5.copyInto(var7);
  157.          AppletClassEntry var8;
  158.          if (var6 instanceof AppletClassEntry && (var8 = (AppletClassEntry)this.loader.rawClasses.get(var6)) != null && var8 == var6) {
  159.             var8.ids = var7;
  160.          }
  161.       }
  162.  
  163.    }
  164.  
  165.    String guessManifestType(String var1) {
  166.       var1 = var1.toUpperCase();
  167.       if (var1.startsWith("/")) {
  168.          var1 = var1.substring(1);
  169.       }
  170.  
  171.       if (!var1.startsWith("META-INF/")) {
  172.          return null;
  173.       } else if (var1.equalsIgnoreCase("META-INF/MANIFEST.MF")) {
  174.          return "manifest/manifest";
  175.       } else if (!var1.endsWith("DSA") && !var1.endsWith("PK7") && !var1.endsWith("PGP")) {
  176.          return var1.endsWith("SF") ? "manifest/signature-asc" : null;
  177.       } else {
  178.          return "manifest/signature-bin";
  179.       }
  180.    }
  181.  
  182.    public static synchronized AudioClip getAudioClip(URL var0) {
  183.       System.getSecurityManager().checkConnect(var0.getHost(), var0.getPort());
  184.       Object var1 = (AudioClip)audioHash.get(var0);
  185.       if (var1 == null) {
  186.          audioHash.put(var0, var1 = new AppletAudioClip(var0));
  187.       }
  188.  
  189.       return (AudioClip)var1;
  190.    }
  191.  
  192.    Image createImage(byte[] var1, URL var2, String var3, String var4) throws MalformedURLException {
  193.       debug("creating image: " + var3);
  194.       BufferedInputStream var5 = new BufferedInputStream(new ByteArrayInputStream(var1));
  195.       JarImageSource var6 = new JarImageSource(var2, var5, var4);
  196.       Image var7 = Toolkit.getDefaultToolkit().createImage(var6);
  197.       URL var8 = new URL(var2, var3);
  198.       AppletImageRef var9 = new AppletImageRef(var8);
  199.       ((Ref)var9).setThing(var7);
  200.       imgHash.put(var8, var9);
  201.       return var7;
  202.    }
  203.  
  204.    public static synchronized Image getImage(URL var0) {
  205.       return (Image)getImageRef(var0).get();
  206.    }
  207.  
  208.    public static synchronized Ref getImageRef(URL var0) {
  209.       AppletImageRef var1 = (AppletImageRef)imgHash.get(var0);
  210.       if (var1 == null) {
  211.          var1 = new AppletImageRef(var0);
  212.          imgHash.put(var0, var1);
  213.       }
  214.  
  215.       return var1;
  216.    }
  217.  
  218.    public static void flushImages() {
  219.       imgHash = new Hashtable();
  220.    }
  221.  
  222.    void putLocalResource(URL var1, byte[] var2, String var3) {
  223.       resourceHash.put(var1, var2);
  224.       mimeHash.put(var1, var3);
  225.    }
  226.  
  227.    public static synchronized Object getLocalResource(URL var0) {
  228.       Object var1 = mimeHash.get(var0);
  229.       if (var1 == null) {
  230.          return null;
  231.       } else {
  232.          String var2 = (String)var1;
  233.          if (var2.startsWith("audio") && (var1 = audioHash.get(var0)) != null) {
  234.             return var1;
  235.          } else {
  236.             byte[] var3 = (byte[])resourceHash.get(var0);
  237.             BufferedInputStream var4 = new BufferedInputStream(new ByteArrayInputStream(var3));
  238.             if (var2.startsWith("image")) {
  239.                JarImageSource var5 = new JarImageSource(var0, var4, var2);
  240.                return var5;
  241.             } else {
  242.                return var4;
  243.             }
  244.          }
  245.       }
  246.    }
  247.  
  248.    public static InputStream getLocalResourceStream(URL var0) {
  249.       Object var1 = null;
  250.       if ((var1 = resourceHash.get(var0)) != null) {
  251.          byte[] var2 = (byte[])var1;
  252.          BufferedInputStream var4 = new BufferedInputStream(new ByteArrayInputStream(var2));
  253.          return (InputStream)var4;
  254.       } else {
  255.          return null;
  256.       }
  257.    }
  258.  
  259.    public String getResourceAsName(String var1) {
  260.       this.verbose("AppletResourceLoader.getResourceAsName for name: " + var1);
  261.       URL var2 = this.loader.getCodeBase();
  262.  
  263.       URL var3;
  264.       try {
  265.          var3 = new URL(var2, var1);
  266.       } catch (Exception var7) {
  267.          return null;
  268.       }
  269.  
  270.       Object var4 = resourceHash.get(var3);
  271.       if (var4 != null) {
  272.          this.verbose("Found resource: " + var1 + " in some jar archive for base: " + var2);
  273.  
  274.          try {
  275.             var3 = new URL("appletresource", var2.getHost(), var2.getPort(), "/" + var2.toExternalForm() + "/+/" + var1);
  276.             return var3.toExternalForm();
  277.          } catch (Exception var6) {
  278.             this.verbose("Exception " + var6 + " while building a resource URL");
  279.             return null;
  280.          }
  281.       } else {
  282.          return var3.toExternalForm();
  283.       }
  284.    }
  285.  
  286.    public InputStream getResourceAsStream(String var1) {
  287.       this.verbose("AppletResourceLoader.getResourceAsStream for name: " + var1);
  288.       URL var2 = this.loader.getCodeBase();
  289.  
  290.       URL var3;
  291.       try {
  292.          var3 = new URL(var2, var1);
  293.       } catch (Exception var9) {
  294.          return null;
  295.       }
  296.  
  297.       InputStream var4 = getLocalResourceStream(var3);
  298.       if (var4 != null) {
  299.          this.verbose("Found resource: " + var1 + " in jar archive file");
  300.          return var4;
  301.       } else {
  302.          this.verbose("Opening stream to: " + var3 + " to get resource " + var1);
  303.  
  304.          try {
  305.             URLConnection var5 = var3.openConnection();
  306.             if (var5 instanceof HttpURLConnection) {
  307.                HttpURLConnection var6 = (HttpURLConnection)var5;
  308.                int var7 = var6.getResponseCode();
  309.                if (var7 == 200) {
  310.                   var4 = var3.openStream();
  311.                }
  312.  
  313.                if (var7 >= 400) {
  314.                   var4 = null;
  315.                }
  316.             } else {
  317.                var4 = var3.openStream();
  318.             }
  319.  
  320.             return var4;
  321.          } catch (Exception var8) {
  322.             return null;
  323.          }
  324.       }
  325.    }
  326.  
  327.    void resetLocalResources() {
  328.       resourceHash.clear();
  329.    }
  330. }
  331.