home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / util / ResourceBundle.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  11.1 KB  |  499 lines

  1. package java.util;
  2.  
  3. import java.lang.ref.Reference;
  4. import java.lang.ref.ReferenceQueue;
  5. import java.util.concurrent.ConcurrentHashMap;
  6. import java.util.concurrent.ConcurrentMap;
  7.  
  8. public abstract class ResourceBundle {
  9.    private static final int INITIAL_CACHE_SIZE = 32;
  10.    private static final ResourceBundle NONEXISTENT_BUNDLE = new 1();
  11.    private static final ConcurrentMap<CacheKey, BundleReference> cacheList = new ConcurrentHashMap(32);
  12.    private static final ConcurrentMap<CacheKey, Thread> underConstruction = new ConcurrentHashMap();
  13.    private static final ReferenceQueue referenceQueue = new ReferenceQueue();
  14.    protected ResourceBundle parent = null;
  15.    private Locale locale = null;
  16.    private String name;
  17.    private volatile boolean expired;
  18.    private volatile CacheKey cacheKey;
  19.    private volatile Set<String> keySet;
  20.  
  21.    public final String getString(String var1) {
  22.       return (String)this.getObject(var1);
  23.    }
  24.  
  25.    public final String[] getStringArray(String var1) {
  26.       return (String[])this.getObject(var1);
  27.    }
  28.  
  29.    public final Object getObject(String var1) {
  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 static ClassLoader getLoader() {
  49.       Class[] var0 = getClassContext();
  50.       Class var1 = var0[2];
  51.       Object var2 = var1 == null ? null : var1.getClassLoader();
  52.       if (var2 == null) {
  53.          var2 = java.util.ResourceBundle.RBClassLoader.access$000();
  54.       }
  55.  
  56.       return (ClassLoader)var2;
  57.    }
  58.  
  59.    private static native Class[] getClassContext();
  60.  
  61.    protected void setParent(ResourceBundle var1) {
  62.       assert var1 != NONEXISTENT_BUNDLE;
  63.  
  64.       this.parent = var1;
  65.    }
  66.  
  67.    public static final ResourceBundle getBundle(String var0) {
  68.       return getBundleImpl(var0, Locale.getDefault(), getLoader(), java.util.ResourceBundle.Control.access$300());
  69.    }
  70.  
  71.    public static final ResourceBundle getBundle(String var0, Control var1) {
  72.       return getBundleImpl(var0, Locale.getDefault(), getLoader(), var1);
  73.    }
  74.  
  75.    public static final ResourceBundle getBundle(String var0, Locale var1) {
  76.       return getBundleImpl(var0, var1, getLoader(), java.util.ResourceBundle.Control.access$300());
  77.    }
  78.  
  79.    public static final ResourceBundle getBundle(String var0, Locale var1, Control var2) {
  80.       return getBundleImpl(var0, var1, getLoader(), var2);
  81.    }
  82.  
  83.    public static ResourceBundle getBundle(String var0, Locale var1, ClassLoader var2) {
  84.       if (var2 == null) {
  85.          throw new NullPointerException();
  86.       } else {
  87.          return getBundleImpl(var0, var1, var2, java.util.ResourceBundle.Control.access$300());
  88.       }
  89.    }
  90.  
  91.    public static ResourceBundle getBundle(String var0, Locale var1, ClassLoader var2, Control var3) {
  92.       if (var2 != null && var3 != null) {
  93.          return getBundleImpl(var0, var1, var2, var3);
  94.       } else {
  95.          throw new NullPointerException();
  96.       }
  97.    }
  98.  
  99.    private static ResourceBundle getBundleImpl(String var0, Locale var1, ClassLoader var2, Control var3) {
  100.       if (var1 != null && var3 != null) {
  101.          CacheKey var4 = new CacheKey(var0, var1, var2);
  102.          ResourceBundle var5 = null;
  103.          BundleReference var6 = (BundleReference)cacheList.get(var4);
  104.          if (var6 != null) {
  105.             var5 = (ResourceBundle)var6.get();
  106.             Object var13 = null;
  107.          }
  108.  
  109.          if (isValidBundle(var5) && hasValidParentChain(var5)) {
  110.             return var5;
  111.          } else {
  112.             boolean var7 = var3 == java.util.ResourceBundle.Control.access$300() || var3 instanceof SingleFormatControl;
  113.             List var8 = var3.getFormats(var0);
  114.             if (!var7 && !checkList(var8)) {
  115.                throw new IllegalArgumentException("Invalid Control: getFormats");
  116.             } else {
  117.                ResourceBundle var9 = null;
  118.  
  119.                for(Locale var10 = var1; var10 != null; var10 = var3.getFallbackLocale(var0, var10)) {
  120.                   List var11 = var3.getCandidateLocales(var0, var10);
  121.                   if (!var7 && !checkList(var11)) {
  122.                      throw new IllegalArgumentException("Invalid Control: getCandidateLocales");
  123.                   }
  124.  
  125.                   var5 = findBundle(var4, var11, var8, 0, var3, var9);
  126.                   if (isValidBundle(var5)) {
  127.                      boolean var12 = Locale.ROOT.equals(var5.locale);
  128.                      if (!var12 || var5.locale.equals(var1) || var11.size() == 1 && var5.locale.equals(var11.get(0))) {
  129.                         break;
  130.                      }
  131.  
  132.                      if (var12 && var9 == null) {
  133.                         var9 = var5;
  134.                      }
  135.                   }
  136.                }
  137.  
  138.                if (var5 == null) {
  139.                   if (var9 == null) {
  140.                      throwMissingResourceException(var0, var1, java.util.ResourceBundle.CacheKey.access$400(var4));
  141.                   }
  142.  
  143.                   var5 = var9;
  144.                }
  145.  
  146.                return var5;
  147.             }
  148.          }
  149.       } else {
  150.          throw new NullPointerException();
  151.       }
  152.    }
  153.  
  154.    private static final boolean checkList(List var0) {
  155.       boolean var1 = var0 != null && var0.size() != 0;
  156.       if (var1) {
  157.          int var2 = var0.size();
  158.  
  159.          for(int var3 = 0; var1 && var3 < var2; ++var3) {
  160.             var1 = var0.get(var3) != null;
  161.          }
  162.       }
  163.  
  164.       return var1;
  165.    }
  166.  
  167.    private static final ResourceBundle findBundle(CacheKey var0, List<Locale> var1, List<String> var2, int var3, Control var4, ResourceBundle var5) {
  168.       Locale var6 = (Locale)var1.get(var3);
  169.       ResourceBundle var7 = null;
  170.       if (var3 != var1.size() - 1) {
  171.          var7 = findBundle(var0, var1, var2, var3 + 1, var4, var5);
  172.       } else if (var5 != null && Locale.ROOT.equals(var6)) {
  173.          return var5;
  174.       }
  175.  
  176.       Reference var8;
  177.       while((var8 = referenceQueue.poll()) != null) {
  178.          cacheList.remove(((CacheKeyReference)var8).getCacheKey());
  179.       }
  180.  
  181.       boolean var9 = false;
  182.       var0.setLocale(var6);
  183.       ResourceBundle var10 = findBundleInCache(var0, var4);
  184.       if (isValidBundle(var10)) {
  185.          var9 = var10.expired;
  186.          if (!var9) {
  187.             if (var10.parent == var7) {
  188.                return var10;
  189.             }
  190.  
  191.             BundleReference var11 = (BundleReference)cacheList.get(var0);
  192.             if (var11 != null && var11.get() == var10) {
  193.                cacheList.remove(var0, var11);
  194.             }
  195.          }
  196.       }
  197.  
  198.       if (var10 != NONEXISTENT_BUNDLE) {
  199.          CacheKey var16 = (CacheKey)var0.clone();
  200.  
  201.          while(!beginLoading(var16)) {
  202.             var10 = findBundleInCache(var0, var4);
  203.             if (var10 != null) {
  204.                if (var10 == NONEXISTENT_BUNDLE) {
  205.                   return var7;
  206.                }
  207.  
  208.                var9 = var10.expired;
  209.                if (!var9) {
  210.                   if (var10.parent == var7) {
  211.                      return var10;
  212.                   }
  213.  
  214.                   BundleReference var12 = (BundleReference)cacheList.get(var0);
  215.                   if (var12 != null && var12.get() == var10) {
  216.                      cacheList.remove(var0, var12);
  217.                   }
  218.                }
  219.             }
  220.          }
  221.  
  222.          var10 = loadBundle(var0, var2, var4, var9);
  223.          if (var10 != null) {
  224.             if (var10.parent == null) {
  225.                var10.setParent(var7);
  226.             }
  227.  
  228.             var10.locale = var6;
  229.             var10 = putBundleInCache(var0, var10, var4);
  230.             endLoading(var16);
  231.             return var10;
  232.          }
  233.  
  234.          putBundleInCache(var0, NONEXISTENT_BUNDLE, var4);
  235.          endLoading(var16);
  236.       }
  237.  
  238.       assert underConstruction.get(var0) != Thread.currentThread();
  239.  
  240.       return var7;
  241.    }
  242.  
  243.    private static final ResourceBundle loadBundle(CacheKey var0, List<String> var1, Control var2, boolean var3) {
  244.       assert underConstruction.get(var0) == Thread.currentThread();
  245.  
  246.       Locale var4 = var0.getLocale();
  247.       ResourceBundle var5 = null;
  248.       int var6 = var1.size();
  249.  
  250.       for(int var7 = 0; var7 < var6; ++var7) {
  251.          String var8 = (String)var1.get(var7);
  252.  
  253.          try {
  254.             var5 = var2.newBundle(var0.getName(), var4, var8, var0.getLoader(), var3);
  255.          } catch (Throwable var10) {
  256.             java.util.ResourceBundle.CacheKey.access$500(var0, var10);
  257.          }
  258.  
  259.          if (var5 != null) {
  260.             var0.setFormat(var8);
  261.             var5.name = var0.getName();
  262.             var5.locale = var4;
  263.             var5.expired = false;
  264.             break;
  265.          }
  266.       }
  267.  
  268.       assert underConstruction.get(var0) == Thread.currentThread();
  269.  
  270.       return var5;
  271.    }
  272.  
  273.    private static final boolean isValidBundle(ResourceBundle var0) {
  274.       return var0 != null && var0 != NONEXISTENT_BUNDLE;
  275.    }
  276.  
  277.    private static final boolean hasValidParentChain(ResourceBundle var0) {
  278.       for(long var1 = System.currentTimeMillis(); var0 != null; var0 = var0.parent) {
  279.          if (var0.expired) {
  280.             return false;
  281.          }
  282.  
  283.          CacheKey var3 = var0.cacheKey;
  284.          if (var3 != null) {
  285.             long var4 = java.util.ResourceBundle.CacheKey.access$600(var3);
  286.             if (var4 >= 0L && var4 <= var1) {
  287.                return false;
  288.             }
  289.          }
  290.       }
  291.  
  292.       return true;
  293.    }
  294.  
  295.    private static final boolean beginLoading(CacheKey var0) {
  296.       Thread var1 = Thread.currentThread();
  297.       Thread var2;
  298.       if ((var2 = (Thread)underConstruction.putIfAbsent(var0, var1)) != null && var2 != var1) {
  299.          synchronized(var2) {
  300.             while(underConstruction.get(var0) == var2) {
  301.                try {
  302.                   var2.wait();
  303.                } catch (InterruptedException var6) {
  304.                }
  305.             }
  306.  
  307.             return false;
  308.          }
  309.       } else {
  310.          return true;
  311.       }
  312.    }
  313.  
  314.    private static final void endLoading(CacheKey var0) {
  315.       Thread var1 = Thread.currentThread();
  316.  
  317.       assert underConstruction.get(var0) == var1;
  318.  
  319.       underConstruction.remove(var0);
  320.       synchronized(var1) {
  321.          var1.notifyAll();
  322.       }
  323.    }
  324.  
  325.    private static final void throwMissingResourceException(String var0, Locale var1, Throwable var2) {
  326.       if (var2 instanceof MissingResourceException) {
  327.          var2 = null;
  328.       }
  329.  
  330.       throw new MissingResourceException("Can't find bundle for base name " + var0 + ", locale " + var1, var0 + "_" + var1, "", var2);
  331.    }
  332.  
  333.    private static final ResourceBundle findBundleInCache(CacheKey var0, Control var1) {
  334.       BundleReference var2 = (BundleReference)cacheList.get(var0);
  335.       if (var2 == null) {
  336.          return null;
  337.       } else {
  338.          ResourceBundle var3 = (ResourceBundle)var2.get();
  339.          if (var3 == null) {
  340.             return null;
  341.          } else {
  342.             ResourceBundle var4 = var3.parent;
  343.  
  344.             assert var4 != NONEXISTENT_BUNDLE;
  345.  
  346.             if (var4 != null && var4.expired) {
  347.                assert var3 != NONEXISTENT_BUNDLE;
  348.  
  349.                var3.expired = true;
  350.                var3.cacheKey = null;
  351.                cacheList.remove(var0, var2);
  352.                var3 = null;
  353.             } else {
  354.                CacheKey var5 = var2.getCacheKey();
  355.                long var6 = java.util.ResourceBundle.CacheKey.access$600(var5);
  356.                if (!var3.expired && var6 >= 0L && var6 <= System.currentTimeMillis()) {
  357.                   if (var3 != NONEXISTENT_BUNDLE) {
  358.                      synchronized(var3) {
  359.                         var6 = java.util.ResourceBundle.CacheKey.access$600(var5);
  360.                         if (!var3.expired && var6 >= 0L && var6 <= System.currentTimeMillis()) {
  361.                            try {
  362.                               var3.expired = var1.needsReload(var5.getName(), var5.getLocale(), var5.getFormat(), var5.getLoader(), var3, java.util.ResourceBundle.CacheKey.access$700(var5));
  363.                            } catch (Exception var11) {
  364.                               java.util.ResourceBundle.CacheKey.access$500(var0, var11);
  365.                            }
  366.  
  367.                            if (var3.expired) {
  368.                               var3.cacheKey = null;
  369.                               cacheList.remove(var0, var2);
  370.                            } else {
  371.                               setExpirationTime(var5, var1);
  372.                            }
  373.                         }
  374.                      }
  375.                   } else {
  376.                      cacheList.remove(var0, var2);
  377.                      var3 = null;
  378.                   }
  379.                }
  380.             }
  381.  
  382.             return var3;
  383.          }
  384.       }
  385.    }
  386.  
  387.    private static final ResourceBundle putBundleInCache(CacheKey var0, ResourceBundle var1, Control var2) {
  388.       setExpirationTime(var0, var2);
  389.       if (java.util.ResourceBundle.CacheKey.access$600(var0) != -1L) {
  390.          CacheKey var3 = (CacheKey)var0.clone();
  391.          BundleReference var4 = new BundleReference(var1, referenceQueue, var3);
  392.          var1.cacheKey = var3;
  393.          BundleReference var5 = (BundleReference)cacheList.putIfAbsent(var3, var4);
  394.          if (var5 != null) {
  395.             ResourceBundle var6 = (ResourceBundle)var5.get();
  396.             if (var6 != null && !var6.expired) {
  397.                var1.cacheKey = null;
  398.                var1 = var6;
  399.                var4.clear();
  400.             } else {
  401.                cacheList.put(var3, var4);
  402.             }
  403.          }
  404.       }
  405.  
  406.       return var1;
  407.    }
  408.  
  409.    private static final void setExpirationTime(CacheKey var0, Control var1) {
  410.       long var2 = var1.getTimeToLive(var0.getName(), var0.getLocale());
  411.       if (var2 >= 0L) {
  412.          long var4 = System.currentTimeMillis();
  413.          java.util.ResourceBundle.CacheKey.access$702(var0, var4);
  414.          java.util.ResourceBundle.CacheKey.access$602(var0, var4 + var2);
  415.       } else {
  416.          if (var2 < -2L) {
  417.             throw new IllegalArgumentException("Invalid Control: TTL=" + var2);
  418.          }
  419.  
  420.          java.util.ResourceBundle.CacheKey.access$602(var0, var2);
  421.       }
  422.  
  423.    }
  424.  
  425.    public static final void clearCache() {
  426.       clearCache(getLoader());
  427.    }
  428.  
  429.    public static final void clearCache(ClassLoader var0) {
  430.       if (var0 == null) {
  431.          throw new NullPointerException();
  432.       } else {
  433.          Set var1 = cacheList.keySet();
  434.  
  435.          for(CacheKey var3 : var1) {
  436.             if (var3.getLoader() == var0) {
  437.                var1.remove(var3);
  438.             }
  439.          }
  440.  
  441.       }
  442.    }
  443.  
  444.    protected abstract Object handleGetObject(String var1);
  445.  
  446.    public abstract Enumeration<String> getKeys();
  447.  
  448.    public boolean containsKey(String var1) {
  449.       if (var1 == null) {
  450.          throw new NullPointerException();
  451.       } else {
  452.          for(ResourceBundle var2 = this; var2 != null; var2 = var2.parent) {
  453.             if (var2.handleKeySet().contains(var1)) {
  454.                return true;
  455.             }
  456.          }
  457.  
  458.          return false;
  459.       }
  460.    }
  461.  
  462.    public Set<String> keySet() {
  463.       HashSet var1 = new HashSet();
  464.  
  465.       for(ResourceBundle var2 = this; var2 != null; var2 = var2.parent) {
  466.          var1.addAll(var2.handleKeySet());
  467.       }
  468.  
  469.       return var1;
  470.    }
  471.  
  472.    protected Set<String> handleKeySet() {
  473.       if (this.keySet == null) {
  474.          synchronized(this) {
  475.             if (this.keySet == null) {
  476.                HashSet var2 = new HashSet();
  477.                Enumeration var3 = this.getKeys();
  478.  
  479.                while(var3.hasMoreElements()) {
  480.                   String var4 = (String)var3.nextElement();
  481.                   if (this.handleGetObject(var4) != null) {
  482.                      var2.add(var4);
  483.                   }
  484.                }
  485.  
  486.                this.keySet = var2;
  487.             }
  488.          }
  489.       }
  490.  
  491.       return this.keySet;
  492.    }
  493.  
  494.    // $FF: synthetic method
  495.    static ReferenceQueue access$200() {
  496.       return referenceQueue;
  497.    }
  498. }
  499.