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