home *** CD-ROM | disk | FTP | other *** search
/ Dynamic HTML Construction Kit / Dynamic HTML Construction Kit.iso / earthlink / nscomm / java40.jar / java / util / ResourceBundle.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-03  |  4.5 KB  |  171 lines

  1. package java.util;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.InputStream;
  5.  
  6. public abstract class ResourceBundle {
  7.    static StackLookup stackLookup;
  8.    private static boolean debugFlag;
  9.    protected ResourceBundle parent;
  10.    private static final Integer NOTFOUND;
  11.    private static Hashtable cacheList;
  12.  
  13.    public final String getString(String var1) throws MissingResourceException {
  14.       return (String)this.getObject(var1);
  15.    }
  16.  
  17.    public final String[] getStringArray(String var1) throws MissingResourceException {
  18.       return (String[])this.getObject(var1);
  19.    }
  20.  
  21.    public final Object getObject(String var1) throws MissingResourceException {
  22.       Object var2 = this.handleGetObject(var1);
  23.       if (var2 == null) {
  24.          if (this.parent != null) {
  25.             var2 = this.parent.getObject(var1);
  26.          }
  27.  
  28.          if (var2 == null) {
  29.             throw new MissingResourceException("Can't find resource", this.getClass().getName(), var1);
  30.          }
  31.       }
  32.  
  33.       return var2;
  34.    }
  35.  
  36.    public static final ResourceBundle getBundle(String var0) throws MissingResourceException {
  37.       if (stackLookup == null) {
  38.          stackLookup = new StackLookup();
  39.       }
  40.  
  41.       return getBundle(var0, Locale.getDefault(), stackLookup.getLoader());
  42.    }
  43.  
  44.    public static final ResourceBundle getBundle(String var0, Locale var1) {
  45.       if (stackLookup == null) {
  46.          stackLookup = new StackLookup();
  47.       }
  48.  
  49.       return getBundle(var0, var1, stackLookup.getLoader());
  50.    }
  51.  
  52.    private static synchronized ResourceBundle getBundle(String var0, Locale var1, ClassLoader var2) throws MissingResourceException {
  53.       StringBuffer var3 = (new StringBuffer("_")).append(var1.toString());
  54.       ResourceBundle var4 = findBundle(var0, var3, var2, false);
  55.       if (var4 == null) {
  56.          var3.setLength(0);
  57.          var3.append("_").append(Locale.getDefault().toString());
  58.          var4 = findBundle(var0, var3, var2, true);
  59.          if (var4 == null) {
  60.             throw new MissingResourceException("can't find resource for " + var0 + "_" + var1, var0 + "_" + var1, "");
  61.          }
  62.       }
  63.  
  64.       for(ResourceBundle var5 = var4; var5 != null && var5.parent == null; var5 = var5.parent) {
  65.          int var6 = var3.toString().lastIndexOf(95);
  66.          if (var6 != -1) {
  67.             var3.setLength(var6);
  68.             debug("Searching for parent " + var0 + var3);
  69.             var5.setParent(findBundle(var0, var3, var2, true));
  70.          }
  71.       }
  72.  
  73.       return var4;
  74.    }
  75.  
  76.    protected void setParent(ResourceBundle var1) {
  77.       this.parent = var1;
  78.    }
  79.  
  80.    private static ResourceBundle findBundle(String var0, StringBuffer var1, ClassLoader var2, boolean var3) {
  81.       String var4 = var1.toString();
  82.       String var5 = var0.replace('.', '/');
  83.       Object var6 = null;
  84.       Vector var8 = new Vector();
  85.  
  86.       while(true) {
  87.          String var7 = var0 + var4;
  88.          String var11 = "[" + Integer.toString(var2.hashCode()) + "]" + var7;
  89.          var6 = cacheList.get(var11);
  90.          if (var6 == NOTFOUND) {
  91.             debug("Found " + var7 + " in cache as NOTFOUND");
  92.             var1.setLength(0);
  93.             break;
  94.          }
  95.  
  96.          if (var6 != null) {
  97.             debug("Found " + var7 + " in cache");
  98.             var1.setLength(0);
  99.             break;
  100.          }
  101.  
  102.          var8.addElement(var11);
  103.          debug("Searching for " + var7);
  104.  
  105.          try {
  106.             var6 = var2.loadClass(var7).newInstance();
  107.             break;
  108.          } catch (Exception var14) {
  109.             var7 = var5 + var4 + ".properties";
  110.             debug("Searching for " + var7);
  111.             InputStream var10 = null;
  112.  
  113.             try {
  114.                var10 = var2.getResourceAsStream(var7);
  115.             } catch (Exception var12) {
  116.             }
  117.  
  118.             if (var10 != null) {
  119.                BufferedInputStream var17 = new BufferedInputStream(var10);
  120.  
  121.                try {
  122.                   var6 = new PropertyResourceBundle(var17);
  123.                   break;
  124.                } catch (Exception var13) {
  125.                }
  126.             }
  127.  
  128.             int var9 = var4.lastIndexOf(95);
  129.             if (var9 == 0 && !var3 || var9 == -1) {
  130.                break;
  131.             }
  132.  
  133.             var4 = var4.substring(0, var9);
  134.             var1.setLength(var9);
  135.          }
  136.       }
  137.  
  138.       if (var6 != null) {
  139.          for(int var18 = 0; var18 < var8.size(); ++var18) {
  140.             cacheList.put(var8.elementAt(var18), var6);
  141.             debug("Adding " + var8.elementAt(var18) + " to cache" + (var6 == NOTFOUND ? " as NOTFOUND." : "."));
  142.          }
  143.       } else if (var3) {
  144.          for(int var19 = 0; var19 < var8.size(); ++var19) {
  145.             cacheList.put(var8.elementAt(var19), NOTFOUND);
  146.             debug("Adding " + var8.elementAt(var19) + " to cache as NOTFOUND.");
  147.          }
  148.       }
  149.  
  150.       return var6 != NOTFOUND && var6 != null ? (ResourceBundle)var6 : null;
  151.    }
  152.  
  153.    protected abstract Object handleGetObject(String var1) throws MissingResourceException;
  154.  
  155.    public abstract Enumeration getKeys();
  156.  
  157.    private static void debug(String var0) {
  158.       if (debugFlag) {
  159.          System.out.println("ResourceBundle: " + var0);
  160.       }
  161.  
  162.    }
  163.  
  164.    static {
  165.       SecurityManager.enablePrivilege("CreateSecurityManager");
  166.       stackLookup = new StackLookup();
  167.       NOTFOUND = new Integer(-1);
  168.       cacheList = new Hashtable();
  169.    }
  170. }
  171.