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 / sun / misc / ExtensionDependency.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  7.2 KB  |  313 lines

  1. package sun.misc;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.IOException;
  6. import java.net.MalformedURLException;
  7. import java.net.URL;
  8. import java.security.AccessController;
  9. import java.security.PrivilegedActionException;
  10. import java.util.Enumeration;
  11. import java.util.StringTokenizer;
  12. import java.util.Vector;
  13. import java.util.jar.Attributes;
  14. import java.util.jar.JarFile;
  15. import java.util.jar.Manifest;
  16. import java.util.jar.Attributes.Name;
  17. import sun.security.action.GetPropertyAction;
  18.  
  19. public class ExtensionDependency {
  20.    private static Vector providers;
  21.    static final boolean DEBUG = false;
  22.  
  23.    public static synchronized void addExtensionInstallationProvider(ExtensionInstallationProvider var0) {
  24.       if (providers == null) {
  25.          providers = new Vector();
  26.       }
  27.  
  28.       providers.add(var0);
  29.    }
  30.  
  31.    public static synchronized void removeExtensionInstallationProvider(ExtensionInstallationProvider var0) {
  32.       providers.remove(var0);
  33.    }
  34.  
  35.    public static boolean checkExtensionsDependencies(JarFile var0) {
  36.       if (providers == null) {
  37.          return true;
  38.       } else {
  39.          try {
  40.             ExtensionDependency var1 = new ExtensionDependency();
  41.             return var1.checkExtensions(var0);
  42.          } catch (ExtensionInstallationException var2) {
  43.             debug(var2.getMessage());
  44.             return false;
  45.          }
  46.       }
  47.    }
  48.  
  49.    protected boolean checkExtensions(JarFile var1) throws ExtensionInstallationException {
  50.       Manifest var2;
  51.       try {
  52.          var2 = var1.getManifest();
  53.       } catch (IOException var9) {
  54.          return false;
  55.       }
  56.  
  57.       if (var2 == null) {
  58.          return true;
  59.       } else {
  60.          boolean var3 = true;
  61.          Attributes var4 = var2.getMainAttributes();
  62.          if (var4 != null) {
  63.             String var5 = var4.getValue(Name.EXTENSION_LIST);
  64.             if (var5 != null) {
  65.                StringTokenizer var6 = new StringTokenizer(var5);
  66.  
  67.                while(var6.hasMoreTokens()) {
  68.                   String var7 = var6.nextToken();
  69.                   debug("The file " + var1.getName() + " appears to depend on " + var7);
  70.                   String var8 = var7 + "-" + Name.EXTENSION_NAME.toString();
  71.                   if (var4.getValue(var8) == null) {
  72.                      debug("The jar file " + var1.getName() + " appers to depend on " + var7 + " but does not define the " + var8 + " attribute in its manifest ");
  73.                   } else if (!this.checkExtension(var7, var4)) {
  74.                      debug("Failed installing " + var7);
  75.                      var3 = false;
  76.                   }
  77.                }
  78.             } else {
  79.                debug("No dependencies for " + var1.getName());
  80.             }
  81.          }
  82.  
  83.          return var3;
  84.       }
  85.    }
  86.  
  87.    protected synchronized boolean checkExtension(String var1, Attributes var2) throws ExtensionInstallationException {
  88.       debug("Checking extension " + var1);
  89.       if (this.checkExtensionAgainstInstalled(var1, var2)) {
  90.          return true;
  91.       } else {
  92.          debug("Extension not currently installed ");
  93.          ExtensionInfo var3 = new ExtensionInfo(var1, var2);
  94.          return this.installExtension(var3, (ExtensionInfo)null);
  95.       }
  96.    }
  97.  
  98.    boolean checkExtensionAgainstInstalled(String var1, Attributes var2) throws ExtensionInstallationException {
  99.       File var3 = this.checkExtensionExists(var1);
  100.       if (var3 != null) {
  101.          try {
  102.             if (this.checkExtensionAgainst(var1, var2, var3)) {
  103.                return true;
  104.             }
  105.          } catch (FileNotFoundException var7) {
  106.             this.debugException(var7);
  107.          } catch (IOException var8) {
  108.             this.debugException(var8);
  109.          }
  110.  
  111.          return false;
  112.       } else {
  113.          File[] var4;
  114.          try {
  115.             var4 = this.getInstalledExtensions();
  116.          } catch (IOException var11) {
  117.             this.debugException(var11);
  118.             return false;
  119.          }
  120.  
  121.          for(int var5 = 0; var5 < var4.length; ++var5) {
  122.             try {
  123.                if (this.checkExtensionAgainst(var1, var2, var4[var5])) {
  124.                   return true;
  125.                }
  126.             } catch (FileNotFoundException var9) {
  127.                this.debugException(var9);
  128.             } catch (IOException var10) {
  129.                this.debugException(var10);
  130.             }
  131.          }
  132.  
  133.          return false;
  134.       }
  135.    }
  136.  
  137.    protected boolean checkExtensionAgainst(String var1, Attributes var2, File var3) throws IOException, FileNotFoundException, ExtensionInstallationException {
  138.       debug("Checking extension " + var1 + " against " + var3.getName());
  139.  
  140.       Manifest var4;
  141.       try {
  142.          var4 = (Manifest)AccessController.doPrivileged(new 1(this, var3));
  143.       } catch (PrivilegedActionException var9) {
  144.          if (var9.getException() instanceof FileNotFoundException) {
  145.             throw (FileNotFoundException)var9.getException();
  146.          }
  147.  
  148.          throw (IOException)var9.getException();
  149.       }
  150.  
  151.       ExtensionInfo var5 = new ExtensionInfo(var1, var2);
  152.       debug("Requested Extension : " + var5);
  153.       int var6 = 4;
  154.       Object var7 = null;
  155.       if (var4 != null) {
  156.          Attributes var8 = var4.getMainAttributes();
  157.          if (var8 != null) {
  158.             ExtensionInfo var11 = new ExtensionInfo((String)null, var8);
  159.             debug("Extension Installed " + var11);
  160.             var6 = var11.isCompatibleWith(var5);
  161.             switch (var6) {
  162.                case 0:
  163.                   debug("Extensions are compatible");
  164.                   return true;
  165.                case 4:
  166.                   debug("Extensions are incompatible");
  167.                   return false;
  168.                default:
  169.                   debug("Extensions require an upgrade or vendor switch");
  170.                   return this.installExtension(var5, var11);
  171.             }
  172.          }
  173.       }
  174.  
  175.       return false;
  176.    }
  177.  
  178.    protected boolean installExtension(ExtensionInfo var1, ExtensionInfo var2) throws ExtensionInstallationException {
  179.       Vector var3;
  180.       synchronized(providers) {
  181.          var3 = (Vector)providers.clone();
  182.       }
  183.  
  184.       Enumeration var4 = var3.elements();
  185.  
  186.       while(var4.hasMoreElements()) {
  187.          ExtensionInstallationProvider var5 = (ExtensionInstallationProvider)var4.nextElement();
  188.          if (var5 != null && var5.installExtension(var1, var2)) {
  189.             debug(var1.name + " installation successful");
  190.             Launcher.ExtClassLoader var6 = (Launcher.ExtClassLoader)Launcher.getLauncher().getClassLoader().getParent();
  191.             this.addNewExtensionsToClassLoader(var6);
  192.             return true;
  193.          }
  194.       }
  195.  
  196.       debug(var1.name + " installation failed");
  197.       return false;
  198.    }
  199.  
  200.    private File checkExtensionExists(String var1) {
  201.       String[] var3 = new String[]{".jar", ".zip"};
  202.       return (File)AccessController.doPrivileged(new 2(this, var3, var1));
  203.    }
  204.  
  205.    private static File[] getExtDirs() {
  206.       String var0 = (String)AccessController.doPrivileged(new GetPropertyAction("java.ext.dirs"));
  207.       File[] var1;
  208.       if (var0 != null) {
  209.          StringTokenizer var2 = new StringTokenizer(var0, File.pathSeparator);
  210.          int var3 = var2.countTokens();
  211.          debug("getExtDirs count " + var3);
  212.          var1 = new File[var3];
  213.  
  214.          for(int var4 = 0; var4 < var3; ++var4) {
  215.             var1[var4] = new File(var2.nextToken());
  216.             debug("getExtDirs dirs[" + var4 + "] " + var1[var4]);
  217.          }
  218.       } else {
  219.          var1 = new File[0];
  220.          debug("getExtDirs dirs " + var1);
  221.       }
  222.  
  223.       debug("getExtDirs dirs.length " + var1.length);
  224.       return var1;
  225.    }
  226.  
  227.    private static File[] getExtFiles(File[] var0) throws IOException {
  228.       Vector var1 = new Vector();
  229.  
  230.       for(int var2 = 0; var2 < var0.length; ++var2) {
  231.          String[] var3 = var0[var2].list(new JarFilter());
  232.          if (var3 != null) {
  233.             debug("getExtFiles files.length " + var3.length);
  234.  
  235.             for(int var4 = 0; var4 < var3.length; ++var4) {
  236.                File var5 = new File(var0[var2], var3[var4]);
  237.                var1.add(var5);
  238.                debug("getExtFiles f[" + var4 + "] " + var5);
  239.             }
  240.          }
  241.       }
  242.  
  243.       File[] var6 = new File[var1.size()];
  244.       var1.copyInto(var6);
  245.       debug("getExtFiles ua.length " + var6.length);
  246.       return var6;
  247.    }
  248.  
  249.    private File[] getInstalledExtensions() throws IOException {
  250.       return (File[])AccessController.doPrivileged(new 3(this));
  251.    }
  252.  
  253.    private Boolean addNewExtensionsToClassLoader(Launcher.ExtClassLoader var1) {
  254.       try {
  255.          File[] var2 = this.getInstalledExtensions();
  256.  
  257.          for(int var3 = 0; var3 < var2.length; ++var3) {
  258.             File var4 = var2[var3];
  259.             URL var5 = (URL)AccessController.doPrivileged(new 4(this, var4));
  260.             if (var5 != null) {
  261.                URL[] var6 = var1.getURLs();
  262.                boolean var7 = false;
  263.  
  264.                for(int var8 = 0; var8 < var6.length; ++var8) {
  265.                   debug("URL[" + var8 + "] is " + var6[var8] + " looking for " + var5);
  266.                   if (var6[var8].toString().compareToIgnoreCase(var5.toString()) == 0) {
  267.                      var7 = true;
  268.                      debug("Found !");
  269.                   }
  270.                }
  271.  
  272.                if (!var7) {
  273.                   debug("Not Found ! adding to the classloader " + var5);
  274.                   var1.addExtURL(var5);
  275.                }
  276.             }
  277.          }
  278.       } catch (MalformedURLException var9) {
  279.          var9.printStackTrace();
  280.       } catch (IOException var10) {
  281.          var10.printStackTrace();
  282.       }
  283.  
  284.       return Boolean.TRUE;
  285.    }
  286.  
  287.    private static void debug(String var0) {
  288.    }
  289.  
  290.    private void debugException(Throwable var1) {
  291.    }
  292.  
  293.    // $FF: synthetic method
  294.    static File[] access$000() {
  295.       return getExtDirs();
  296.    }
  297.  
  298.    // $FF: synthetic method
  299.    static void access$100(String var0) {
  300.       debug(var0);
  301.    }
  302.  
  303.    // $FF: synthetic method
  304.    static void access$200(ExtensionDependency var0, Throwable var1) {
  305.       var0.debugException(var1);
  306.    }
  307.  
  308.    // $FF: synthetic method
  309.    static File[] access$300(File[] var0) throws IOException {
  310.       return getExtFiles(var0);
  311.    }
  312. }
  313.