home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2001 December / dppcpro1201.iso / Extras / maple / Viewer / WebEQ / MMLViewerInstall.cab / MMLViewerApplet.cab / webeq3 / util / BrowserLauncher.class (.txt) < prev    next >
Encoding:
Java Class File  |  2001-05-24  |  7.4 KB  |  302 lines

  1. package webeq3.util;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.lang.reflect.Constructor;
  6. import java.lang.reflect.Field;
  7. import java.lang.reflect.InvocationTargetException;
  8. import java.lang.reflect.Method;
  9.  
  10. public class BrowserLauncher {
  11.    private static int jvm;
  12.    private static Object browser;
  13.    private static boolean loadedWithoutErrors = true;
  14.    private static Class mrjFileUtilsClass;
  15.    private static Class mrjOSTypeClass;
  16.    private static Class macOSErrorClass;
  17.    private static Class aeDescClass;
  18.    private static Constructor aeTargetConstructor;
  19.    private static Constructor appleEventConstructor;
  20.    private static Constructor aeDescConstructor;
  21.    private static Method findFolder;
  22.    private static Method getFileType;
  23.    private static Method makeOSType;
  24.    private static Method putParameter;
  25.    private static Method sendNoReply;
  26.    private static Object kSystemFolderType;
  27.    private static Integer keyDirectObject;
  28.    private static Integer kAutoGenerateReturnID;
  29.    private static Integer kAnyTransactionID;
  30.    private static final int MRJ_2_0 = 0;
  31.    private static final int MRJ_2_1 = 1;
  32.    private static final int WINDOWS_NT = 2;
  33.    private static final int WINDOWS_9x = 3;
  34.    private static final int OTHER = -1;
  35.    private static final String FINDER_TYPE = "FNDR";
  36.    private static final String FINDER_CREATOR = "MACS";
  37.    private static final String GURL_EVENT = "GURL";
  38.    private static final String FIRST_WINDOWS_PARAMETER = "/c";
  39.    private static final String SECOND_WINDOWS_PARAMETER = "start";
  40.    private static final String NETSCAPE_OPEN_PARAMETER_START = " -remote 'openURL(";
  41.    private static final String NETSCAPE_OPEN_PARAMETER_END = ")'";
  42.    private static String errorMessage;
  43.    // $FF: synthetic field
  44.    static Class class$java$lang$String;
  45.    // $FF: synthetic field
  46.    static Class class$java$io$File;
  47.  
  48.    private BrowserLauncher() {
  49.    }
  50.  
  51.    private static boolean loadClasses() {
  52.       switch (jvm) {
  53.          case 0:
  54.             try {
  55.                Class var16 = Class.forName("com.apple.MacOS.AETarget");
  56.                macOSErrorClass = Class.forName("com.apple.MacOS.MacOSError");
  57.                Class var1 = Class.forName("com.apple.MacOS.OSUtils");
  58.                Class var2 = Class.forName("com.apple.MacOS.AppleEvent");
  59.                Class var3 = Class.forName("com.apple.MacOS.ae");
  60.                aeDescClass = Class.forName("com.apple.MacOS.AEDesc");
  61.                aeTargetConstructor = var16.getDeclaredConstructor(Integer.TYPE);
  62.                appleEventConstructor = var2.getDeclaredConstructor(Integer.TYPE, Integer.TYPE, var16, Integer.TYPE, Integer.TYPE);
  63.                aeDescConstructor = aeDescClass.getDeclaredConstructor(class$java$lang$String == null ? (class$java$lang$String = class$("java.lang.String")) : class$java$lang$String);
  64.                makeOSType = var1.getDeclaredMethod("makeOSType", class$java$lang$String == null ? (class$java$lang$String = class$("java.lang.String")) : class$java$lang$String);
  65.                putParameter = var2.getDeclaredMethod("putParameter", Integer.TYPE, aeDescClass);
  66.                sendNoReply = var2.getDeclaredMethod("sendNoReply");
  67.                Field var4 = var3.getDeclaredField("keyDirectObject");
  68.                keyDirectObject = (Integer)var4.get((Object)null);
  69.                Field var5 = var2.getDeclaredField("kAutoGenerateReturnID");
  70.                kAutoGenerateReturnID = (Integer)var5.get((Object)null);
  71.                Field var6 = var2.getDeclaredField("kAnyTransactionID");
  72.                kAnyTransactionID = (Integer)var6.get((Object)null);
  73.                break;
  74.             } catch (ClassNotFoundException var12) {
  75.                errorMessage = ((Throwable)var12).getMessage();
  76.                return false;
  77.             } catch (NoSuchMethodException var13) {
  78.                errorMessage = ((Throwable)var13).getMessage();
  79.                return false;
  80.             } catch (NoSuchFieldException var14) {
  81.                errorMessage = ((Throwable)var14).getMessage();
  82.                return false;
  83.             } catch (IllegalAccessException var15) {
  84.                errorMessage = ((Throwable)var15).getMessage();
  85.                return false;
  86.             }
  87.          case 1:
  88.             try {
  89.                mrjFileUtilsClass = Class.forName("com.apple.mrj.MRJFileUtils");
  90.                mrjOSTypeClass = Class.forName("com.apple.mrj.MRJOSType");
  91.                Field var0 = mrjFileUtilsClass.getDeclaredField("kSystemFolderType");
  92.                kSystemFolderType = var0.get((Object)null);
  93.                findFolder = mrjFileUtilsClass.getDeclaredMethod("findFolder", mrjOSTypeClass);
  94.                getFileType = mrjFileUtilsClass.getDeclaredMethod("getFileType", class$java$io$File == null ? (class$java$io$File = class$("java.io.File")) : class$java$io$File);
  95.             } catch (ClassNotFoundException var7) {
  96.                errorMessage = ((Throwable)var7).getMessage();
  97.                return false;
  98.             } catch (NoSuchFieldException var8) {
  99.                errorMessage = ((Throwable)var8).getMessage();
  100.                return false;
  101.             } catch (NoSuchMethodException var9) {
  102.                errorMessage = ((Throwable)var9).getMessage();
  103.                return false;
  104.             } catch (SecurityException var10) {
  105.                errorMessage = ((Throwable)var10).getMessage();
  106.                return false;
  107.             } catch (IllegalAccessException var11) {
  108.                errorMessage = ((Throwable)var11).getMessage();
  109.                return false;
  110.             }
  111.       }
  112.  
  113.       return true;
  114.    }
  115.  
  116.    private static Object locateBrowser() {
  117.       if (browser != null) {
  118.          return browser;
  119.       } else {
  120.          switch (jvm) {
  121.             case -1:
  122.             default:
  123.                browser = "netscape";
  124.                break;
  125.             case 0:
  126.                try {
  127.                   Integer var15 = (Integer)makeOSType.invoke((Object)null, "MACS");
  128.                   Object var16 = aeTargetConstructor.newInstance(var15);
  129.                   Integer var17 = (Integer)makeOSType.invoke((Object)null, "GURL");
  130.                   Object var18 = appleEventConstructor.newInstance(var17, var17, var16, kAutoGenerateReturnID, kAnyTransactionID);
  131.                   return var18;
  132.                } catch (IllegalAccessException var6) {
  133.                   browser = null;
  134.                   errorMessage = ((Throwable)var6).getMessage();
  135.                   return browser;
  136.                } catch (InstantiationException var7) {
  137.                   browser = null;
  138.                   errorMessage = ((Throwable)var7).getMessage();
  139.                   return browser;
  140.                } catch (InvocationTargetException var8) {
  141.                   browser = null;
  142.                   errorMessage = ((Throwable)var8).getMessage();
  143.                   return browser;
  144.                }
  145.             case 1:
  146.                File var0;
  147.                try {
  148.                   var0 = (File)findFolder.invoke((Object)null, kSystemFolderType);
  149.                } catch (IllegalArgumentException var9) {
  150.                   browser = null;
  151.                   errorMessage = ((Throwable)var9).getMessage();
  152.                   return browser;
  153.                } catch (IllegalAccessException var10) {
  154.                   browser = null;
  155.                   errorMessage = ((Throwable)var10).getMessage();
  156.                   return browser;
  157.                } catch (InvocationTargetException var11) {
  158.                   browser = null;
  159.                   errorMessage = var11.getTargetException().getClass() + ": " + var11.getTargetException().getMessage();
  160.                   return browser;
  161.                }
  162.  
  163.                String[] var1 = var0.list();
  164.  
  165.                for(int var2 = 0; var2 < var1.length; ++var2) {
  166.                   try {
  167.                      File var3 = new File(var0, var1[var2]);
  168.                      if (var3.isFile()) {
  169.                         Object var4 = getFileType.invoke((Object)null, var3);
  170.                         if ("FNDR".equals(var4.toString())) {
  171.                            browser = var3.toString();
  172.                            return browser;
  173.                         }
  174.                      }
  175.                   } catch (IllegalArgumentException var12) {
  176.                      browser = browser;
  177.                      errorMessage = ((Throwable)var12).getMessage();
  178.                      return null;
  179.                   } catch (IllegalAccessException var13) {
  180.                      browser = null;
  181.                      errorMessage = ((Throwable)var13).getMessage();
  182.                      return browser;
  183.                   } catch (InvocationTargetException var14) {
  184.                      browser = null;
  185.                      errorMessage = var14.getTargetException().getClass() + ": " + var14.getTargetException().getMessage();
  186.                      return browser;
  187.                   }
  188.                }
  189.  
  190.                browser = null;
  191.                break;
  192.             case 2:
  193.                browser = "cmd.exe";
  194.                break;
  195.             case 3:
  196.                browser = "command.com";
  197.          }
  198.  
  199.          return browser;
  200.       }
  201.    }
  202.  
  203.    public static void openURL(String var0) throws IOException {
  204.       if (!loadedWithoutErrors) {
  205.          throw new IOException("Exception in finding browser: " + errorMessage);
  206.       } else {
  207.          Object var1 = locateBrowser();
  208.          if (var1 == null) {
  209.             throw new IOException("Unable to locate browser: " + errorMessage);
  210.          } else {
  211.             switch (jvm) {
  212.                case -1:
  213.                   Process var3 = Runtime.getRuntime().exec((String)var1 + " -remote 'openURL(" + var0 + ")'");
  214.  
  215.                   try {
  216.                      int var4 = var3.waitFor();
  217.                      if (var4 != 0) {
  218.                         Runtime.getRuntime().exec(new String[]{(String)var1, var0});
  219.                      }
  220.                      break;
  221.                   } catch (InterruptedException var13) {
  222.                      throw new IOException("InterruptedException while launching browser: " + ((Throwable)var13).getMessage());
  223.                   }
  224.                case 0:
  225.                   Object var2 = null;
  226.  
  227.                   try {
  228.                      var2 = aeDescConstructor.newInstance(var0);
  229.                      putParameter.invoke(var1, keyDirectObject, var2);
  230.                      sendNoReply.invoke(var1);
  231.                      break;
  232.                   } catch (InvocationTargetException var14) {
  233.                      throw new IOException("InvocationTargetException while creating AEDesc: " + ((Throwable)var14).getMessage());
  234.                   } catch (IllegalAccessException var15) {
  235.                      throw new IOException("IllegalAccessException while building AppleEvent: " + ((Throwable)var15).getMessage());
  236.                   } catch (InstantiationException var16) {
  237.                      throw new IOException("InstantiationException while creating AEDesc: " + ((Throwable)var16).getMessage());
  238.                   } finally {
  239.                      var2 = null;
  240.                      var1 = null;
  241.                   }
  242.                case 1:
  243.                   Runtime.getRuntime().exec(new String[]{(String)var1, var0});
  244.                   break;
  245.                case 2:
  246.                case 3:
  247.                   Runtime.getRuntime().exec(new String[]{(String)var1, "/c", "start", var0});
  248.                   break;
  249.                default:
  250.                   Runtime.getRuntime().exec(new String[]{(String)var1, var0});
  251.             }
  252.  
  253.          }
  254.       }
  255.    }
  256.  
  257.    // $FF: synthetic method
  258.    static Class class$(String var0) {
  259.       try {
  260.          return Class.forName(var0);
  261.       } catch (ClassNotFoundException var2) {
  262.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  263.       }
  264.    }
  265.  
  266.    static {
  267.       String var0 = System.getProperty("os.name");
  268.       if ("Mac OS".equals(var0)) {
  269.          String var1 = System.getProperty("mrj.version");
  270.          String var2 = var1.substring(0, 3);
  271.  
  272.          try {
  273.             double var3 = Double.valueOf(var2);
  274.             if (var3 == (double)2.0F) {
  275.                jvm = 0;
  276.             } else if (var3 >= 2.1) {
  277.                jvm = 1;
  278.             } else {
  279.                loadedWithoutErrors = false;
  280.                errorMessage = "Unsupported MRJ version: " + var3;
  281.             }
  282.          } catch (NumberFormatException var5) {
  283.             loadedWithoutErrors = false;
  284.             errorMessage = "Invalid MRJ version: " + var1;
  285.          }
  286.       } else if (var0.startsWith("Windows")) {
  287.          if (var0.indexOf("9") != -1) {
  288.             jvm = 3;
  289.          } else {
  290.             jvm = 2;
  291.          }
  292.       } else {
  293.          jvm = -1;
  294.       }
  295.  
  296.       if (loadedWithoutErrors) {
  297.          loadedWithoutErrors = loadClasses();
  298.       }
  299.  
  300.    }
  301. }
  302.