1 Clazz.declarePackage ("jalview.util");
2 Clazz.load (null, "jalview.util.BrowserLauncher", ["jalview.bin.Cache", "jalview.util.MessageManager", "java.io.File", "$.IOException", "java.lang.Double", "$.Runtime"], function () {
3 c$ = Clazz.declareType (jalview.util, "BrowserLauncher");
4 c$.loadClasses = Clazz.defineMethod (c$, "loadClasses",
6 switch (jalview.util.BrowserLauncher.jvm) {
9 var aeTargetClass = Clazz._4Name ("com.apple.MacOS.AETarget");
10 var osUtilsClass = Clazz._4Name ("com.apple.MacOS.OSUtils");
11 var appleEventClass = Clazz._4Name ("com.apple.MacOS.AppleEvent");
12 var aeClass = Clazz._4Name ("com.apple.MacOS.ae");
13 jalview.util.BrowserLauncher.aeDescClass = Clazz._4Name ("com.apple.MacOS.AEDesc");
14 jalview.util.BrowserLauncher.aeTargetConstructor = aeTargetClass.getDeclaredConstructor ( Clazz.newArray (-1, [Number]));
15 jalview.util.BrowserLauncher.appleEventConstructor = appleEventClass.getDeclaredConstructor ( Clazz.newArray (-1, [Number, Number, aeTargetClass, Number, Number]));
16 jalview.util.BrowserLauncher.aeDescConstructor = jalview.util.BrowserLauncher.aeDescClass.getDeclaredConstructor ( Clazz.newArray (-1, [String]));
17 jalview.util.BrowserLauncher.makeOSType = osUtilsClass.getDeclaredMethod ("makeOSType", Clazz.newArray (-1, [String]));
18 jalview.util.BrowserLauncher.putParameter = appleEventClass.getDeclaredMethod ("putParameter", Clazz.newArray (-1, [Number, jalview.util.BrowserLauncher.aeDescClass]));
19 jalview.util.BrowserLauncher.sendNoReply = appleEventClass.getDeclaredMethod ("sendNoReply", Clazz.newArray (-1, []));
20 var keyDirectObjectField = aeClass.getDeclaredField ("keyDirectObject");
21 jalview.util.BrowserLauncher.keyDirectObject = keyDirectObjectField.get (null);
22 var autoGenerateReturnIDField = appleEventClass.getDeclaredField ("kAutoGenerateReturnID");
23 jalview.util.BrowserLauncher.kAutoGenerateReturnID = autoGenerateReturnIDField.get (null);
24 var anyTransactionIDField = appleEventClass.getDeclaredField ("kAnyTransactionID");
25 jalview.util.BrowserLauncher.kAnyTransactionID = anyTransactionIDField.get (null);
27 if (Clazz.exceptionOf (e$$, ClassNotFoundException)) {
30 jalview.util.BrowserLauncher.errorMessage = cnfe.getMessage ();
33 } else if (Clazz.exceptionOf (e$$, NoSuchMethodException)) {
36 jalview.util.BrowserLauncher.errorMessage = nsme.getMessage ();
39 } else if (Clazz.exceptionOf (e$$, NoSuchFieldException)) {
42 jalview.util.BrowserLauncher.errorMessage = nsfe.getMessage ();
45 } else if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
48 jalview.util.BrowserLauncher.errorMessage = iae.getMessage ();
58 jalview.util.BrowserLauncher.mrjFileUtilsClass = Clazz._4Name ("com.apple.mrj.MRJFileUtils");
59 jalview.util.BrowserLauncher.mrjOSTypeClass = Clazz._4Name ("com.apple.mrj.MRJOSType");
60 var systemFolderField = jalview.util.BrowserLauncher.mrjFileUtilsClass.getDeclaredField ("kSystemFolderType");
61 jalview.util.BrowserLauncher.kSystemFolderType = systemFolderField.get (null);
62 jalview.util.BrowserLauncher.findFolder = jalview.util.BrowserLauncher.mrjFileUtilsClass.getDeclaredMethod ("findFolder", Clazz.newArray (-1, [jalview.util.BrowserLauncher.mrjOSTypeClass]));
63 jalview.util.BrowserLauncher.getFileCreator = jalview.util.BrowserLauncher.mrjFileUtilsClass.getDeclaredMethod ("getFileCreator", Clazz.newArray (-1, [java.io.File]));
64 jalview.util.BrowserLauncher.getFileType = jalview.util.BrowserLauncher.mrjFileUtilsClass.getDeclaredMethod ("getFileType", Clazz.newArray (-1, [java.io.File]));
66 if (Clazz.exceptionOf (e$$, ClassNotFoundException)) {
69 jalview.util.BrowserLauncher.errorMessage = cnfe.getMessage ();
72 } else if (Clazz.exceptionOf (e$$, NoSuchFieldException)) {
75 jalview.util.BrowserLauncher.errorMessage = nsfe.getMessage ();
78 } else if (Clazz.exceptionOf (e$$, NoSuchMethodException)) {
81 jalview.util.BrowserLauncher.errorMessage = nsme.getMessage ();
84 } else if (Clazz.exceptionOf (e$$, SecurityException)) {
87 jalview.util.BrowserLauncher.errorMessage = se.getMessage ();
90 } else if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
93 jalview.util.BrowserLauncher.errorMessage = iae.getMessage ();
103 var linker = Clazz._4Name ("com.apple.mrj.jdirect.Linker");
104 var constructor = linker.getConstructor ( Clazz.newArray (-1, [Class]));
105 jalview.util.BrowserLauncher.linkage = constructor.newInstance ( Clazz.newArray (-1, [jalview.util.BrowserLauncher]));
107 if (Clazz.exceptionOf (e$$, ClassNotFoundException)) {
110 jalview.util.BrowserLauncher.errorMessage = cnfe.getMessage ();
113 } else if (Clazz.exceptionOf (e$$, NoSuchMethodException)) {
116 jalview.util.BrowserLauncher.errorMessage = nsme.getMessage ();
119 } else if (Clazz.exceptionOf (e$$, java.lang.reflect.InvocationTargetException)) {
122 jalview.util.BrowserLauncher.errorMessage = ite.getMessage ();
125 } else if (Clazz.exceptionOf (e$$, InstantiationException)) {
128 jalview.util.BrowserLauncher.errorMessage = ie.getMessage ();
131 } else if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
134 jalview.util.BrowserLauncher.errorMessage = iae.getMessage ();
144 jalview.util.BrowserLauncher.mrjFileUtilsClass = Clazz._4Name ("com.apple.mrj.MRJFileUtils");
145 jalview.util.BrowserLauncher.$openURL = jalview.util.BrowserLauncher.mrjFileUtilsClass.getDeclaredMethod ("openURL", Clazz.newArray (-1, [String]));
147 if (Clazz.exceptionOf (e$$, ClassNotFoundException)) {
150 jalview.util.BrowserLauncher.errorMessage = cnfe.getMessage ();
153 } else if (Clazz.exceptionOf (e$$, NoSuchMethodException)) {
156 jalview.util.BrowserLauncher.errorMessage = nsme.getMessage ();
169 c$.locateBrowser = Clazz.defineMethod (c$, "locateBrowser",
171 if (jalview.util.BrowserLauncher.browser != null) {
172 return jalview.util.BrowserLauncher.browser;
173 }switch (jalview.util.BrowserLauncher.jvm) {
176 var finderCreatorCode = jalview.util.BrowserLauncher.makeOSType.invoke (null, Clazz.newArray (-1, ["MACS"]));
177 var aeTarget = jalview.util.BrowserLauncher.aeTargetConstructor.newInstance ( Clazz.newArray (-1, [finderCreatorCode]));
178 var gurlType = jalview.util.BrowserLauncher.makeOSType.invoke (null, Clazz.newArray (-1, ["GURL"]));
179 var appleEvent = jalview.util.BrowserLauncher.appleEventConstructor.newInstance ( Clazz.newArray (-1, [gurlType, gurlType, aeTarget, jalview.util.BrowserLauncher.kAutoGenerateReturnID, jalview.util.BrowserLauncher.kAnyTransactionID]));
182 if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
185 jalview.util.BrowserLauncher.browser = null;
186 jalview.util.BrowserLauncher.errorMessage = iae.getMessage ();
187 return jalview.util.BrowserLauncher.browser;
189 } else if (Clazz.exceptionOf (e$$, InstantiationException)) {
192 jalview.util.BrowserLauncher.browser = null;
193 jalview.util.BrowserLauncher.errorMessage = ie.getMessage ();
194 return jalview.util.BrowserLauncher.browser;
196 } else if (Clazz.exceptionOf (e$$, java.lang.reflect.InvocationTargetException)) {
199 jalview.util.BrowserLauncher.browser = null;
200 jalview.util.BrowserLauncher.errorMessage = ite.getMessage ();
201 return jalview.util.BrowserLauncher.browser;
210 systemFolder = jalview.util.BrowserLauncher.findFolder.invoke (null, Clazz.newArray (-1, [jalview.util.BrowserLauncher.kSystemFolderType]));
212 if (Clazz.exceptionOf (e$$, IllegalArgumentException)) {
215 jalview.util.BrowserLauncher.browser = null;
216 jalview.util.BrowserLauncher.errorMessage = iare.getMessage ();
217 return jalview.util.BrowserLauncher.browser;
219 } else if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
222 jalview.util.BrowserLauncher.browser = null;
223 jalview.util.BrowserLauncher.errorMessage = iae.getMessage ();
224 return jalview.util.BrowserLauncher.browser;
226 } else if (Clazz.exceptionOf (e$$, java.lang.reflect.InvocationTargetException)) {
229 jalview.util.BrowserLauncher.browser = null;
230 jalview.util.BrowserLauncher.errorMessage = ite.getTargetException ().getClass () + ": " + ite.getTargetException ().getMessage ();
231 return jalview.util.BrowserLauncher.browser;
237 var systemFolderFiles = systemFolder.list ();
238 for (var i = 0; i < systemFolderFiles.length; i++) {
240 var file = new java.io.File (systemFolder, systemFolderFiles[i]);
241 if (!file.isFile ()) {
243 }var fileType = jalview.util.BrowserLauncher.getFileType.invoke (null, Clazz.newArray (-1, [file]));
244 if ("FNDR".equals (fileType.toString ())) {
245 var fileCreator = jalview.util.BrowserLauncher.getFileCreator.invoke (null, Clazz.newArray (-1, [file]));
246 if ("MACS".equals (fileCreator.toString ())) {
247 jalview.util.BrowserLauncher.browser = file.toString ();
248 return jalview.util.BrowserLauncher.browser;
250 if (Clazz.exceptionOf (e$$, IllegalArgumentException)) {
253 jalview.util.BrowserLauncher.errorMessage = iare.getMessage ();
256 } else if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
259 jalview.util.BrowserLauncher.browser = null;
260 jalview.util.BrowserLauncher.errorMessage = iae.getMessage ();
261 return jalview.util.BrowserLauncher.browser;
263 } else if (Clazz.exceptionOf (e$$, java.lang.reflect.InvocationTargetException)) {
266 jalview.util.BrowserLauncher.browser = null;
267 jalview.util.BrowserLauncher.errorMessage = ite.getTargetException ().getClass () + ": " + ite.getTargetException ().getMessage ();
268 return jalview.util.BrowserLauncher.browser;
275 jalview.util.BrowserLauncher.browser = null;
279 jalview.util.BrowserLauncher.browser = "";
282 jalview.util.BrowserLauncher.browser = "cmd.exe";
285 jalview.util.BrowserLauncher.browser = "command.com";
289 jalview.util.BrowserLauncher.browser = jalview.bin.Cache.getDefault ("DEFAULT_BROWSER", "firefox");
292 return jalview.util.BrowserLauncher.browser;
294 c$.resetBrowser = Clazz.defineMethod (c$, "resetBrowser",
296 jalview.util.BrowserLauncher.browser = null;
298 c$.openURL = Clazz.defineMethod (c$, "openURL",
300 if (!jalview.util.BrowserLauncher.loadedWithoutErrors) {
301 throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.browser_not_found", Clazz.newArray (-1, [jalview.util.BrowserLauncher.errorMessage])));
302 }var browser = jalview.util.BrowserLauncher.locateBrowser ();
303 if (browser == null) {
304 throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.browser_unable_to_locate", Clazz.newArray (-1, [jalview.util.BrowserLauncher.errorMessage])));
305 }switch (jalview.util.BrowserLauncher.jvm) {
309 aeDesc = jalview.util.BrowserLauncher.aeDescConstructor.newInstance ( Clazz.newArray (-1, [url]));
310 jalview.util.BrowserLauncher.putParameter.invoke (browser, Clazz.newArray (-1, [jalview.util.BrowserLauncher.keyDirectObject, aeDesc]));
311 jalview.util.BrowserLauncher.sendNoReply.invoke (browser, Clazz.newArray (-1, []));
313 if (Clazz.exceptionOf (e$$, java.lang.reflect.InvocationTargetException)) {
316 throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.invocation_target_exception_creating_aedesc", Clazz.newArray (-1, [ite.getMessage ()])));
318 } else if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
321 throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.illegal_access_building_apple_evt", Clazz.newArray (-1, [iae.getMessage ()])));
323 } else if (Clazz.exceptionOf (e$$, InstantiationException)) {
326 throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.illegal_access_building_apple_evt", Clazz.newArray (-1, [ie.getMessage ()])));
337 Runtime.getRuntime ().exec ( Clazz.newArray (-1, [browser, url]));
340 var instance = Clazz.newIntArray (1, 0);
341 var result = jalview.util.BrowserLauncher.ICStart (instance, 0);
343 var selectionStart = Clazz.newIntArray (-1, [0]);
344 var urlBytes = url.getBytes ();
345 var selectionEnd = Clazz.newIntArray (-1, [urlBytes.length]);
346 result = jalview.util.BrowserLauncher.ICLaunchURL (instance[0], Clazz.newByteArray (-1, [0]), urlBytes, urlBytes.length, selectionStart, selectionEnd);
348 jalview.util.BrowserLauncher.ICStop (instance);
350 throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.unable_to_launch_url", Clazz.newArray (-1, [Integer.$valueOf (result).toString ()])));
352 throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.unable_to_create_internet_config", Clazz.newArray (-1, [Integer.$valueOf (result).toString ()])));
356 jalview.util.BrowserLauncher.$openURL.invoke (null, Clazz.newArray (-1, [url]));
358 if (Clazz.exceptionOf (e$$, java.lang.reflect.InvocationTargetException)) {
361 throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.invocation_target_calling_url", Clazz.newArray (-1, [ite.getMessage ()])));
363 } else if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
366 throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.illegal_access_calling_url", Clazz.newArray (-1, [iae.getMessage ()])));
375 var process = Runtime.getRuntime ().exec ( Clazz.newArray (-1, [browser, "/c", "start", "\"\"", '"' + url + '"']));
378 process.exitValue ();
380 if (Clazz.exceptionOf (ie, InterruptedException)) {
381 throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.interrupted_launching_browser", Clazz.newArray (-1, [ie.getMessage ()])));
388 process = Runtime.getRuntime ().exec ( Clazz.newArray (-1, [browser, "-remote", "openURL(" + url + ", new-window" + ")"]));
390 var exitCode = process.waitFor ();
392 Runtime.getRuntime ().exec ( Clazz.newArray (-1, [browser, url]));
394 if (Clazz.exceptionOf (ie, InterruptedException)) {
395 throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.interrupted_launching_browser", Clazz.newArray (-1, [ie.getMessage ()])));
402 Runtime.getRuntime ().exec ( Clazz.newArray (-1, [browser, url]));
406 Clazz.defineStatics (c$,
409 "loadedWithoutErrors", false,
410 "mrjFileUtilsClass", null,
411 "mrjOSTypeClass", null,
413 "aeTargetConstructor", null,
414 "appleEventConstructor", null,
415 "aeDescConstructor", null,
417 "getFileCreator", null,
421 "putParameter", null,
423 "kSystemFolderType", null,
424 "keyDirectObject", null,
425 "kAutoGenerateReturnID", null,
426 "kAnyTransactionID", null,
428 "JDirect_MacOSX", "/System/Library/Frameworks/Carbon.framework/Frameworks/HIToolbox.framework/HIToolbox",
436 "FINDER_TYPE", "FNDR",
437 "FINDER_CREATOR", "MACS",
438 "GURL_EVENT", "GURL",
439 "FIRST_WINDOWS_PARAMETER", "/c",
440 "SECOND_WINDOWS_PARAMETER", "start",
441 "THIRD_WINDOWS_PARAMETER", "\"\"",
442 "NETSCAPE_REMOTE_PARAMETER", "-remote",
443 "NETSCAPE_OPEN_PARAMETER_START", "openURL(",
444 "NETSCAPE_OPEN_NEW_WINDOW", ", new-window",
445 "NETSCAPE_OPEN_PARAMETER_END", ")",
446 "errorMessage", null);
448 jalview.util.BrowserLauncher.loadedWithoutErrors = true;
449 var osName = System.getProperty ("os.name");
450 if (osName.startsWith ("Mac OS")) {
451 var mrjVersion = System.getProperty ("mrj.version");
453 if (mrjVersion == null) {
454 majorMRJVersion = "3.1";
456 majorMRJVersion = mrjVersion.substring (0, 3);
458 var version = Double.$valueOf (majorMRJVersion).doubleValue ();
460 jalview.util.BrowserLauncher.jvm = 0;
461 } else if ((version >= 2.1) && (version < 3)) {
462 jalview.util.BrowserLauncher.jvm = 1;
463 } else if (version == 3.0) {
464 jalview.util.BrowserLauncher.jvm = 3;
465 } else if (version >= 3.1) {
466 jalview.util.BrowserLauncher.jvm = 4;
468 jalview.util.BrowserLauncher.loadedWithoutErrors = false;
469 jalview.util.BrowserLauncher.errorMessage = "Unsupported MRJ version: " + version;
471 if (Clazz.exceptionOf (nfe, NumberFormatException)) {
472 jalview.util.BrowserLauncher.loadedWithoutErrors = false;
473 jalview.util.BrowserLauncher.errorMessage = "Invalid MRJ version: " + mrjVersion;
478 } else if (osName.startsWith ("Windows")) {
479 if (osName.indexOf ("9") != -1) {
480 jalview.util.BrowserLauncher.jvm = 6;
482 jalview.util.BrowserLauncher.jvm = 5;
484 jalview.util.BrowserLauncher.jvm = -1;
485 }if (jalview.util.BrowserLauncher.loadedWithoutErrors) {
486 jalview.util.BrowserLauncher.loadedWithoutErrors = jalview.util.BrowserLauncher.loadClasses ();