home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / util / ResourceBundle.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  7.4 KB  |  398 lines

  1. package java.util;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.InputStream;
  5. import java.security.AccessController;
  6. import sun.misc.SoftCache;
  7.  
  8. public abstract class ResourceBundle {
  9.    private static final ResourceCacheKey cacheKey = new ResourceCacheKey((1)null);
  10.    private static final int INITIAL_CACHE_SIZE = 25;
  11.    private static final float CACHE_LOAD_FACTOR = 1.0F;
  12.    private static final int MAX_BUNDLES_SEARCHED = 3;
  13.    private static final Hashtable underConstruction = new Hashtable(3, 1.0F);
  14.    private static final Integer DEFAULT_NOT_FOUND = new Integer(-1);
  15.    private static SoftCache cacheList = new SoftCache(25, 1.0F);
  16.    protected ResourceBundle parent = null;
  17.    private Locale locale = null;
  18.    // $FF: synthetic field
  19.    static Class class$java$util$ResourceBundle;
  20.  
  21.    public final String getString(String var1) throws MissingResourceException {
  22.       return (String)this.getObject(var1);
  23.    }
  24.  
  25.    public final String[] getStringArray(String var1) throws MissingResourceException {
  26.       return (String[])this.getObject(var1);
  27.    }
  28.  
  29.    public final Object getObject(String var1) throws MissingResourceException {
  30.       Object var2 = this.handleGetObject(var1);
  31.       if (var2 == null) {
  32.          if (this.parent != null) {
  33.             var2 = this.parent.getObject(var1);
  34.          }
  35.  
  36.          if (var2 == null) {
  37.             throw new MissingResourceException("Can't find resource for bundle " + this.getClass().getName() + ", key " + var1, this.getClass().getName(), var1);
  38.          }
  39.       }
  40.  
  41.       return var2;
  42.    }
  43.  
  44.    public Locale getLocale() {
  45.       return this.locale;
  46.    }
  47.  
  48.    private void setLocale(String var1, String var2) {
  49.       if (var1.length() == var2.length()) {
  50.          this.locale = new Locale("", "");
  51.       } else {
  52.          if (var1.length() >= var2.length()) {
  53.             throw new IllegalArgumentException();
  54.          }
  55.  
  56.          int var3 = var1.length();
  57.          String var4 = var2.substring(var3 + 1);
  58.          var3 = var4.indexOf(95);
  59.          if (var3 == -1) {
  60.             this.locale = new Locale(var4, "", "");
  61.             return;
  62.          }
  63.  
  64.          String var5 = var4.substring(0, var3);
  65.          var4 = var4.substring(var3 + 1);
  66.          var3 = var4.indexOf(95);
  67.          if (var3 == -1) {
  68.             this.locale = new Locale(var5, var4, "");
  69.             return;
  70.          }
  71.  
  72.          String var6 = var4.substring(0, var3);
  73.          var4 = var4.substring(var3 + 1);
  74.          this.locale = new Locale(var5, var6, var4);
  75.       }
  76.  
  77.    }
  78.  
  79.    private static ClassLoader getLoader() {
  80.       Class[] var0 = getClassContext();
  81.       Class var1 = var0[2];
  82.       ClassLoader var2 = var1 == null ? null : var1.getClassLoader();
  83.       if (var2 == null) {
  84.          var2 = ClassLoader.getSystemClassLoader();
  85.       }
  86.  
  87.       return var2;
  88.    }
  89.  
  90.    private static native Class[] getClassContext();
  91.  
  92.    protected void setParent(ResourceBundle var1) {
  93.       this.parent = var1;
  94.    }
  95.  
  96.    public static final ResourceBundle getBundle(String var0) throws MissingResourceException {
  97.       return getBundleImpl(var0, Locale.getDefault(), getLoader());
  98.    }
  99.  
  100.    public static final ResourceBundle getBundle(String var0, Locale var1) {
  101.       return getBundleImpl(var0, var1, getLoader());
  102.    }
  103.  
  104.    public static ResourceBundle getBundle(String var0, Locale var1, ClassLoader var2) throws MissingResourceException {
  105.       if (var2 == null) {
  106.          throw new NullPointerException();
  107.       } else {
  108.          return getBundleImpl(var0, var1, var2);
  109.       }
  110.    }
  111.  
  112.    private static ResourceBundle getBundleImpl(String var0, Locale var1, ClassLoader var2) {
  113.       if (var0 == null) {
  114.          throw new NullPointerException();
  115.       } else {
  116.          Object var3 = var2 != null ? var2 : DEFAULT_NOT_FOUND;
  117.          String var4 = var0;
  118.          String var5 = var1.toString();
  119.          if (var5.length() > 0) {
  120.             var4 = var0 + "_" + var5;
  121.          } else if (var1.getVariant().length() > 0) {
  122.             var4 = var0 + "___" + var1.getVariant();
  123.          }
  124.  
  125.          Object var6 = findBundleInCache(var2, var4);
  126.          if (var6 == var3) {
  127.             throwMissingResourceException(var0, var1);
  128.          } else if (var6 != null) {
  129.             return (ResourceBundle)var6;
  130.          }
  131.  
  132.          Object var7 = var3;
  133.  
  134.          try {
  135.             Object var8 = findBundle(var2, var0, var0, (Object)null, var3);
  136.             if (var8 == null) {
  137.                putBundleInCache(var2, var0, var3);
  138.                var8 = var3;
  139.             }
  140.  
  141.             Vector var9 = calculateBundleNames(var0, var1);
  142.             boolean var10 = var8 != var3 && var9.size() == 0;
  143.             if (!var10) {
  144.                var7 = var8;
  145.  
  146.                for(int var11 = 0; var11 < var9.size(); ++var11) {
  147.                   var4 = (String)var9.elementAt(var11);
  148.                   var6 = findBundle(var2, var4, var0, var7, var3);
  149.                   if (var6 != null) {
  150.                      var7 = var6;
  151.                      var10 = true;
  152.                   }
  153.                }
  154.             }
  155.  
  156.             var7 = var8;
  157.             if (!var10) {
  158.                Vector var21 = calculateBundleNames(var0, Locale.getDefault());
  159.  
  160.                for(int var12 = 0; var12 < var21.size(); ++var12) {
  161.                   var4 = (String)var21.elementAt(var12);
  162.                   if (var9.contains(var4)) {
  163.                      break;
  164.                   }
  165.  
  166.                   var6 = findBundle(var2, var4, var0, var7, var3);
  167.                   if (var6 != null) {
  168.                      var7 = var6;
  169.                   } else {
  170.                      putBundleInCache(var2, var4, var7);
  171.                   }
  172.                }
  173.             }
  174.  
  175.             var7 = propagate(var2, var9, var7);
  176.          } catch (Exception var13) {
  177.             cleanUpConstructionList();
  178.             throwMissingResourceException(var0, var1);
  179.          } catch (Error var14) {
  180.             cleanUpConstructionList();
  181.             throw var14;
  182.          }
  183.  
  184.          if (var7 == var3) {
  185.             throwMissingResourceException(var0, var1);
  186.          }
  187.  
  188.          return (ResourceBundle)var7;
  189.       }
  190.    }
  191.  
  192.    private static Object propagate(ClassLoader var0, Vector var1, Object var2) {
  193.       for(int var3 = 0; var3 < var1.size(); ++var3) {
  194.          String var4 = (String)var1.elementAt(var3);
  195.          Object var5 = findBundleInCache(var0, var4);
  196.          if (var5 == null) {
  197.             putBundleInCache(var0, var4, var2);
  198.          } else {
  199.             var2 = var5;
  200.          }
  201.       }
  202.  
  203.       return var2;
  204.    }
  205.  
  206.    private static void throwMissingResourceException(String var0, Locale var1) throws MissingResourceException {
  207.       throw new MissingResourceException("Can't find bundle for base name " + var0 + ", locale " + var1, var0 + "_" + var1, "");
  208.    }
  209.  
  210.    private static void cleanUpConstructionList() {
  211.       SoftCache var0 = cacheList;
  212.       synchronized(var0) {
  213.          Collection var1 = underConstruction.values();
  214.          Thread var2 = Thread.currentThread();
  215.  
  216.          while(var1.remove(var2)) {
  217.          }
  218.  
  219.       }
  220.    }
  221.  
  222.    private static Object findBundle(ClassLoader var0, String var1, String var2, Object var3, Object var4) {
  223.       SoftCache var6 = cacheList;
  224.       synchronized(var6) {
  225.          cacheKey.setKeyValues(var0, var1);
  226.          Object var5 = cacheList.get(cacheKey);
  227.          if (var5 != null) {
  228.             cacheKey.clear();
  229.             return var5;
  230.          }
  231.  
  232.          Thread var7 = (Thread)underConstruction.get(cacheKey);
  233.          boolean var8 = var7 != null && var7 != Thread.currentThread();
  234.          if (var8) {
  235.             while(var8) {
  236.                cacheKey.clear();
  237.  
  238.                try {
  239.                   cacheList.wait();
  240.                } catch (InterruptedException var13) {
  241.                }
  242.  
  243.                cacheKey.setKeyValues(var0, var1);
  244.                var8 = underConstruction.containsKey(cacheKey);
  245.             }
  246.  
  247.             var5 = cacheList.get(cacheKey);
  248.             if (var5 != null) {
  249.                cacheKey.clear();
  250.                return var5;
  251.             }
  252.          }
  253.  
  254.          Object var9 = cacheKey.clone();
  255.          underConstruction.put(var9, Thread.currentThread());
  256.          cacheKey.clear();
  257.       }
  258.  
  259.       Object var16 = loadBundle(var0, var1);
  260.       if (var16 != null) {
  261.          SoftCache var18 = cacheList;
  262.          boolean var17;
  263.          synchronized(var18) {
  264.             cacheKey.setKeyValues(var0, var1);
  265.             var17 = underConstruction.get(cacheKey) == Thread.currentThread();
  266.             cacheKey.clear();
  267.          }
  268.  
  269.          if (var17) {
  270.             ResourceBundle var11 = (ResourceBundle)var16;
  271.             if (var3 != var4) {
  272.                var11.setParent((ResourceBundle)var3);
  273.             } else {
  274.                var11.setParent((ResourceBundle)null);
  275.             }
  276.  
  277.             var11.setLocale(var2, var1);
  278.             putBundleInCache(var0, var1, var16);
  279.          }
  280.       }
  281.  
  282.       return var16;
  283.    }
  284.  
  285.    private static Vector calculateBundleNames(String var0, Locale var1) {
  286.       Vector var2 = new Vector(3);
  287.       String var3 = var1.getLanguage();
  288.       int var4 = var3.length();
  289.       String var5 = var1.getCountry();
  290.       int var6 = var5.length();
  291.       String var7 = var1.getVariant();
  292.       int var8 = var7.length();
  293.       if (var4 + var6 + var8 == 0) {
  294.          return var2;
  295.       } else {
  296.          StringBuffer var9 = new StringBuffer(var0);
  297.          var9.append('_');
  298.          var9.append(var3);
  299.          var2.addElement(var9.toString());
  300.          if (var6 + var8 == 0) {
  301.             return var2;
  302.          } else {
  303.             var9.append('_');
  304.             var9.append(var5);
  305.             var2.addElement(var9.toString());
  306.             if (var8 == 0) {
  307.                return var2;
  308.             } else {
  309.                var9.append('_');
  310.                var9.append(var7);
  311.                var2.addElement(var9.toString());
  312.                return var2;
  313.             }
  314.          }
  315.       }
  316.    }
  317.  
  318.    private static Object findBundleInCache(ClassLoader var0, String var1) {
  319.       SoftCache var2 = cacheList;
  320.       synchronized(var2) {
  321.          cacheKey.setKeyValues(var0, var1);
  322.          Object var3 = cacheList.get(cacheKey);
  323.          cacheKey.clear();
  324.          return var3;
  325.       }
  326.    }
  327.  
  328.    private static void putBundleInCache(ClassLoader var0, String var1, Object var2) {
  329.       SoftCache var3 = cacheList;
  330.       synchronized(var3) {
  331.          cacheKey.setKeyValues(var0, var1);
  332.          cacheList.put(cacheKey.clone(), var2);
  333.          underConstruction.remove(cacheKey);
  334.          cacheKey.clear();
  335.          cacheList.notifyAll();
  336.       }
  337.    }
  338.  
  339.    private static Object loadBundle(ClassLoader var0, String var1) {
  340.       try {
  341.          Class var2;
  342.          if (var0 != null) {
  343.             var2 = var0.loadClass(var1);
  344.          } else {
  345.             var2 = Class.forName(var1);
  346.          }
  347.  
  348.          if ((class$java$util$ResourceBundle == null ? (class$java$util$ResourceBundle = class$("java.util.ResourceBundle")) : class$java$util$ResourceBundle).isAssignableFrom(var2)) {
  349.             Object var22 = var2.newInstance();
  350.             Object var23 = findBundleInCache(var0, var1);
  351.             if (var23 != null) {
  352.                return var23;
  353.             }
  354.  
  355.             return var22;
  356.          }
  357.       } catch (Exception var16) {
  358.       } catch (LinkageError var17) {
  359.       }
  360.  
  361.       String var20 = var1.replace('.', '/') + ".properties";
  362.       InputStream var3 = (InputStream)AccessController.doPrivileged(new 1(var0, var20));
  363.       if (var3 != null) {
  364.          var3 = new BufferedInputStream(var3);
  365.  
  366.          PropertyResourceBundle var4;
  367.          try {
  368.             var4 = new PropertyResourceBundle(var3);
  369.          } catch (Exception var18) {
  370.             return null;
  371.          } finally {
  372.             try {
  373.                var3.close();
  374.             } catch (Exception var15) {
  375.             }
  376.  
  377.          }
  378.  
  379.          return var4;
  380.       } else {
  381.          return null;
  382.       }
  383.    }
  384.  
  385.    protected abstract Object handleGetObject(String var1) throws MissingResourceException;
  386.  
  387.    public abstract Enumeration getKeys();
  388.  
  389.    // $FF: synthetic method
  390.    static Class class$(String var0) {
  391.       try {
  392.          return Class.forName(var0);
  393.       } catch (ClassNotFoundException var2) {
  394.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  395.       }
  396.    }
  397. }
  398.