home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / browser / imagecache.java < prev    next >
Text File  |  1995-08-11  |  4KB  |  131 lines

  1. /*
  2.  * @(#)ImageCache.java    1.13 95/04/13 Chris Warth
  3.  *
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software
  7.  * and its documentation for NON-COMMERCIAL purposes and without
  8.  * fee is hereby granted provided that this copyright notice
  9.  * appears in all copies. Please refer to the file "copyright.html"
  10.  * for further important copyright and licensing information.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  13.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  14.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  16.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  17.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  18.  */
  19. package browser;
  20.  
  21. import awt.Image;
  22. import awt.Window;
  23. import net.www.html.URL;
  24. import java.util.Hashtable;
  25. import java.util.Enumeration;
  26. import java.util.Vector;
  27.  
  28. public class ImageCache extends Object {
  29.     private static Hashtable img_table = new Hashtable(10);
  30.     private static ImageCache fetcher = null;
  31.     private static ImageReader imageReader;
  32.  
  33.     public static void stopFetch() {
  34.     if (imageReader != null) {
  35.         imageReader.stop();
  36.         imageReader = null;
  37.     }
  38.     }    
  39.  
  40.     public static void flush() {
  41.     fetcher = null;
  42.     stopFetch();
  43.     img_table = new Hashtable(10);
  44.     }
  45.  
  46.     static boolean emptyQueue() {
  47.     return imageReader.emptyQueue();
  48.     }
  49.  
  50.  
  51.     /*
  52.      * put a new key into the cache.  if the key is already there
  53.      * simply return the handle associated with the existing entry.
  54.      * Otherwise create a new entry and put it into the cache.
  55.      */
  56.     public static ImageHandle lookupHandle(Window win, URL url) {
  57.     return lookupHandle(win, url, -1, -1);
  58.     }
  59.  
  60.     public static ImageHandle lookupHandle(Window win, URL url, int w, int h) {
  61.     String rawkey = url.toExternalForm();
  62.     String key = rawkey;
  63.     ImageHandle ih;
  64.  
  65.     if (w > 0 || h > 0)
  66.         key = rawkey + "@" + w + "x" + h;
  67.     ih = (ImageHandle) img_table.get(key);
  68.     if (ih == null) {
  69.         if (key != rawkey) {
  70.         ih = (ImageHandle) img_table.get(rawkey);
  71.         }
  72.         if (ih == null) {
  73.         ih = new ImageHandle(win, url);
  74.         if (img_table.put(rawkey, ih) != null) {
  75.             System.out.println("Overrode " + ih);
  76.         }
  77.         }
  78.         if (key != rawkey) {
  79.         ih = new ScaledImageHandle(ih, w, h);
  80.         if (img_table.put(key, ih) != null) {
  81.             System.out.println("Overrode " + ih);
  82.         }
  83.         }
  84.     }
  85.     return ih;
  86.     }
  87.  
  88.     public static void flushHandle(URL url) {
  89.     flushHandle(url, -1, -1);
  90.     }
  91.  
  92.     public static void flushHandle(URL url, int w, int h) {
  93.     String key = url.toExternalForm();
  94.  
  95.     if (w > 0 || h > 0)
  96.         key = key + "@" + w + "x" + h;
  97.     img_table.remove(key);
  98.     }
  99.  
  100.     public static void fetch(ImageHandle ih) {
  101.     if (!ih.isFetching()) {
  102.         if (imageReader == null)  {
  103.         imageReader = new ImageReader();
  104.         }
  105.         ih.setFetching();
  106.         imageReader.add(ih);
  107.     }
  108.     }
  109.     public static void cancelFetch(ImageHandle ih) {
  110.     if (ih.isFetching() && (imageReader != null)) {
  111.         imageReader.remove(ih);
  112.         ih.fetching = false;
  113.     }
  114.     }
  115.  
  116.     /**
  117.      * Returns an enumeration of all the images in the cache.
  118.      */
  119.     public static Enumeration getImages() {
  120.     return img_table.elements();
  121.     }
  122.  
  123.     public static void print() {
  124.     System.out.println("-- IMAGE CACHE --");
  125.     for (Enumeration e = img_table.keys() ; e.hasMoreElements() ;) {
  126.         System.out.println(e.nextElement());
  127.     }
  128.     }
  129. }
  130.  
  131.