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 / ServiceLoader.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  5.2 KB  |  162 lines

  1. package java.util;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7. import java.net.URL;
  8.  
  9. public final class ServiceLoader<S> implements Iterable<S> {
  10.    private static final String PREFIX = "META-INF/services/";
  11.    private Class<S> service;
  12.    private ClassLoader loader;
  13.    private LinkedHashMap<String, S> providers = new LinkedHashMap();
  14.    private ServiceLoader<S>.LazyIterator lookupIterator;
  15.  
  16.    public void reload() {
  17.       this.providers.clear();
  18.       this.lookupIterator = new LazyIterator(this, this.service, this.loader, (1)null);
  19.    }
  20.  
  21.    private ServiceLoader(Class<S> var1, ClassLoader var2) {
  22.       this.service = var1;
  23.       this.loader = var2;
  24.       this.reload();
  25.    }
  26.  
  27.    private static void fail(Class var0, String var1, Throwable var2) throws ServiceConfigurationError {
  28.       throw new ServiceConfigurationError(var0.getName() + ": " + var1, var2);
  29.    }
  30.  
  31.    private static void fail(Class var0, String var1) throws ServiceConfigurationError {
  32.       throw new ServiceConfigurationError(var0.getName() + ": " + var1);
  33.    }
  34.  
  35.    private static void fail(Class var0, URL var1, int var2, String var3) throws ServiceConfigurationError {
  36.       fail(var0, var1 + ":" + var2 + ": " + var3);
  37.    }
  38.  
  39.    private int parseLine(Class var1, URL var2, BufferedReader var3, int var4, List<String> var5) throws IOException, ServiceConfigurationError {
  40.       String var6 = var3.readLine();
  41.       if (var6 == null) {
  42.          return -1;
  43.       } else {
  44.          int var7 = var6.indexOf(35);
  45.          if (var7 >= 0) {
  46.             var6 = var6.substring(0, var7);
  47.          }
  48.  
  49.          var6 = var6.trim();
  50.          int var8 = var6.length();
  51.          if (var8 != 0) {
  52.             if (var6.indexOf(32) >= 0 || var6.indexOf(9) >= 0) {
  53.                fail(var1, var2, var4, "Illegal configuration-file syntax");
  54.             }
  55.  
  56.             int var9 = var6.codePointAt(0);
  57.             if (!Character.isJavaIdentifierStart(var9)) {
  58.                fail(var1, var2, var4, "Illegal provider-class name: " + var6);
  59.             }
  60.  
  61.             for(int var10 = Character.charCount(var9); var10 < var8; var10 += Character.charCount(var9)) {
  62.                var9 = var6.codePointAt(var10);
  63.                if (!Character.isJavaIdentifierPart(var9) && var9 != 46) {
  64.                   fail(var1, var2, var4, "Illegal provider-class name: " + var6);
  65.                }
  66.             }
  67.  
  68.             if (!this.providers.containsKey(var6) && !var5.contains(var6)) {
  69.                var5.add(var6);
  70.             }
  71.          }
  72.  
  73.          return var4 + 1;
  74.       }
  75.    }
  76.  
  77.    private Iterator<String> parse(Class var1, URL var2) throws ServiceConfigurationError {
  78.       InputStream var3 = null;
  79.       BufferedReader var4 = null;
  80.       ArrayList var5 = new ArrayList();
  81.  
  82.       try {
  83.          var3 = var2.openStream();
  84.          var4 = new BufferedReader(new InputStreamReader(var3, "utf-8"));
  85.          int var6 = 1;
  86.  
  87.          while((var6 = this.parseLine(var1, var2, var4, var6, var5)) >= 0) {
  88.          }
  89.       } catch (IOException var15) {
  90.          fail(var1, "Error reading configuration file", var15);
  91.       } finally {
  92.          try {
  93.             if (var4 != null) {
  94.                var4.close();
  95.             }
  96.  
  97.             if (var3 != null) {
  98.                var3.close();
  99.             }
  100.          } catch (IOException var14) {
  101.             fail(var1, "Error closing configuration file", var14);
  102.          }
  103.  
  104.       }
  105.  
  106.       return var5.iterator();
  107.    }
  108.  
  109.    public Iterator<S> iterator() {
  110.       return new 1(this);
  111.    }
  112.  
  113.    public static <S> ServiceLoader<S> load(Class<S> var0, ClassLoader var1) {
  114.       return new ServiceLoader<S>(var0, var1);
  115.    }
  116.  
  117.    public static <S> ServiceLoader<S> load(Class<S> var0) {
  118.       ClassLoader var1 = Thread.currentThread().getContextClassLoader();
  119.       return load(var0, var1);
  120.    }
  121.  
  122.    public static <S> ServiceLoader<S> loadInstalled(Class<S> var0) {
  123.       ClassLoader var1 = ClassLoader.getSystemClassLoader();
  124.  
  125.       ClassLoader var2;
  126.       for(var2 = null; var1 != null; var1 = var1.getParent()) {
  127.          var2 = var1;
  128.       }
  129.  
  130.       return load(var0, var2);
  131.    }
  132.  
  133.    public String toString() {
  134.       return "java.util.ServiceLoader[" + this.service.getName() + "]";
  135.    }
  136.  
  137.    // $FF: synthetic method
  138.    static void access$100(Class var0, String var1, Throwable var2) throws ServiceConfigurationError {
  139.       fail(var0, var1, var2);
  140.    }
  141.  
  142.    // $FF: synthetic method
  143.    static Iterator access$200(ServiceLoader var0, Class var1, URL var2) throws ServiceConfigurationError {
  144.       return var0.parse(var1, var2);
  145.    }
  146.  
  147.    // $FF: synthetic method
  148.    static LinkedHashMap access$300(ServiceLoader var0) {
  149.       return var0.providers;
  150.    }
  151.  
  152.    // $FF: synthetic method
  153.    static void access$400(Class var0, String var1) throws ServiceConfigurationError {
  154.       fail(var0, var1);
  155.    }
  156.  
  157.    // $FF: synthetic method
  158.    static LazyIterator access$500(ServiceLoader var0) {
  159.       return var0.lookupIterator;
  160.    }
  161. }
  162.