PageRenderTime 63ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 1ms

/carrot-jdk7-jnlp-decompile-javaws/src/main/java/com/sun/javaws/LaunchDownload.java

https://github.com/carrot-garden/carrot-jnlper
Java | 1346 lines | 1267 code | 75 blank | 4 comment | 288 complexity | 7209d66f17f684958e46850543c60795 MD5 | raw file
  1. package com.sun.javaws;
  2. import com.sun.applet2.preloader.CancelException;
  3. import com.sun.applet2.preloader.Preloader;
  4. import com.sun.applet2.preloader.event.DownloadErrorEvent;
  5. import com.sun.applet2.preloader.event.DownloadEvent;
  6. import com.sun.deploy.Environment;
  7. import com.sun.deploy.appcontext.AppContext;
  8. import com.sun.deploy.cache.Cache;
  9. import com.sun.deploy.cache.LocalApplicationProperties;
  10. import com.sun.deploy.config.Config;
  11. import com.sun.deploy.config.JREInfo;
  12. import com.sun.deploy.net.DownloadEngine;
  13. import com.sun.deploy.net.DownloadEngine.DownloadDelegate;
  14. import com.sun.deploy.perf.DeployPerfUtil;
  15. import com.sun.deploy.resources.ResourceManager;
  16. import com.sun.deploy.trace.Trace;
  17. import com.sun.deploy.trace.TraceLevel;
  18. import com.sun.deploy.uitoolkit.ToolkitStore;
  19. import com.sun.deploy.uitoolkit.UIToolkit;
  20. import com.sun.javaws.exceptions.BadFieldException;
  21. import com.sun.javaws.exceptions.FailedDownloadingResourceException;
  22. import com.sun.javaws.exceptions.JNLPException;
  23. import com.sun.javaws.exceptions.JNLParseException;
  24. import com.sun.javaws.exceptions.LaunchDescException;
  25. import com.sun.javaws.exceptions.MissingFieldException;
  26. import com.sun.javaws.exceptions.MultipleHostsException;
  27. import com.sun.javaws.exceptions.NativeLibViolationException;
  28. import com.sun.javaws.jnl.AppletDesc;
  29. import com.sun.javaws.jnl.ApplicationDesc;
  30. import com.sun.javaws.jnl.ExtensionDesc;
  31. import com.sun.javaws.jnl.IconDesc;
  32. import com.sun.javaws.jnl.InformationDesc;
  33. import com.sun.javaws.jnl.InstallerDesc;
  34. import com.sun.javaws.jnl.JARDesc;
  35. import com.sun.javaws.jnl.JREDesc;
  36. import com.sun.javaws.jnl.JavaFXAppDesc;
  37. import com.sun.javaws.jnl.LaunchDesc;
  38. import com.sun.javaws.jnl.LaunchDescFactory;
  39. import com.sun.javaws.jnl.ResourceVisitor;
  40. import com.sun.javaws.jnl.ResourcesDesc;
  41. import com.sun.javaws.progress.PreloaderDelegate;
  42. import com.sun.javaws.security.JNLPSignedResourcesHelper;
  43. import java.io.File;
  44. import java.io.FileNotFoundException;
  45. import java.io.IOException;
  46. import java.net.MalformedURLException;
  47. import java.net.URL;
  48. import java.util.ArrayList;
  49. import java.util.Arrays;
  50. import java.util.HashSet;
  51. import java.util.Iterator;
  52. import java.util.List;
  53. import java.util.concurrent.Callable;
  54. import java.util.concurrent.ExecutionException;
  55. import java.util.concurrent.ExecutorService;
  56. import java.util.concurrent.Executors;
  57. import java.util.concurrent.Future;
  58. import java.util.concurrent.ThreadFactory;
  59. import java.util.jar.Attributes;
  60. import java.util.jar.JarFile;
  61. import java.util.jar.Manifest;
  62. public class LaunchDownload
  63. {
  64. private static boolean updateAvailable = false;
  65. private static int _numThread = 0;
  66. private static JNLPException _exception = null;
  67. private static final Object syncObj = new Object();
  68. public static final String APPCONTEXT_THREADPOOL_KEY = "deploy-launchdownloadthreadpoolinappcontext";
  69. public static LaunchDesc updateLaunchDescInCache(LaunchDesc paramLaunchDesc)
  70. {
  71. return updateLaunchDescInCache(paramLaunchDesc, null, null);
  72. }
  73. public static LaunchDesc updateLaunchDescInCache(LaunchDesc paramLaunchDesc, URL paramURL1, URL paramURL2)
  74. {
  75. if (!Cache.isCacheEnabled())
  76. return paramLaunchDesc;
  77. int i = paramLaunchDesc.getLocation() == null ? 1 : 0;
  78. URL localURL = i != 0 ? paramLaunchDesc.getCanonicalHome() : paramLaunchDesc.getLocation();
  79. try
  80. {
  81. File localFile = DownloadEngine.getCachedFile(localURL);
  82. if (localFile == null)
  83. {
  84. Cache.createOrUpdateCacheEntry(localURL, paramLaunchDesc.getBytes());
  85. return paramLaunchDesc;
  86. }
  87. Trace.println("Loaded descriptor from cache at: " + localURL, TraceLevel.BASIC);
  88. LaunchDesc localLaunchDesc = LaunchDescFactory.buildDescriptor(localFile, paramURL1, paramURL2, null);
  89. if (paramLaunchDesc.hasIdenticalContent(localLaunchDesc))
  90. return localLaunchDesc;
  91. Cache.createOrUpdateCacheEntry(localURL, paramLaunchDesc.getBytes());
  92. return paramLaunchDesc;
  93. }
  94. catch (IOException localIOException)
  95. {
  96. Trace.ignoredException(localIOException);
  97. }
  98. catch (BadFieldException localBadFieldException)
  99. {
  100. Trace.ignoredException(localBadFieldException);
  101. }
  102. catch (MissingFieldException localMissingFieldException)
  103. {
  104. Trace.ignoredException(localMissingFieldException);
  105. }
  106. catch (JNLParseException localJNLParseException)
  107. {
  108. Trace.ignoredException(localJNLParseException);
  109. }
  110. return paramLaunchDesc;
  111. }
  112. public static LaunchDesc getUpdatedLaunchDesc(URL paramURL1, URL paramURL2)
  113. throws JNLPException, IOException
  114. {
  115. if (paramURL1 == null)
  116. return null;
  117. boolean bool;
  118. try
  119. {
  120. bool = DownloadEngine.isUpdateAvailable(paramURL1, null);
  121. }
  122. catch (IOException localIOException)
  123. {
  124. Trace.ignored(localIOException);
  125. bool = false;
  126. }
  127. if (!bool)
  128. {
  129. Trace.println("Update JNLP: no update for: " + paramURL1, TraceLevel.BASIC);
  130. return null;
  131. }
  132. Trace.println("Update JNLP: " + paramURL1 + ", thisCodebase: " + paramURL2, TraceLevel.BASIC);
  133. File localFile = null;
  134. try
  135. {
  136. DownloadEngine.getResource(paramURL1, null, null, null, true);
  137. localFile = DownloadEngine.getCachedFile(paramURL1);
  138. }
  139. catch (FileNotFoundException localFileNotFoundException)
  140. {
  141. Trace.ignoredException(localFileNotFoundException);
  142. }
  143. try
  144. {
  145. if (localFile != null)
  146. {
  147. LaunchDesc localLaunchDesc = null;
  148. try
  149. {
  150. localLaunchDesc = LaunchDescFactory.buildDescriptor(localFile, paramURL2, paramURL1, paramURL1);
  151. return localLaunchDesc;
  152. }
  153. catch (LaunchDescException localLaunchDescException)
  154. {
  155. localLaunchDesc = LaunchDescFactory.buildDescriptor(localFile);
  156. if (localLaunchDesc == null)
  157. throw localLaunchDescException;
  158. return localLaunchDesc;
  159. }
  160. }
  161. return LaunchDescFactory.buildDescriptor(paramURL1, paramURL1);
  162. }
  163. catch (JNLPException localJNLPException)
  164. {
  165. }
  166. throw localJNLPException;
  167. }
  168. public static boolean isJnlpCached(LaunchDesc paramLaunchDesc)
  169. {
  170. try
  171. {
  172. return DownloadEngine.isResourceCached(paramLaunchDesc.getCanonicalHome(), null, null);
  173. }
  174. catch (Exception localException)
  175. {
  176. Trace.ignored(localException);
  177. }
  178. return false;
  179. }
  180. public static boolean isInCache(LaunchDesc paramLaunchDesc)
  181. {
  182. return isInCache(paramLaunchDesc, false);
  183. }
  184. public static boolean isInCache(LaunchDesc paramLaunchDesc, boolean paramBoolean)
  185. {
  186. ResourcesDesc localResourcesDesc = paramLaunchDesc.getResources();
  187. if (localResourcesDesc == null)
  188. return true;
  189. try
  190. {
  191. if ((paramLaunchDesc.getLocation() != null) && (!DownloadEngine.isResourceCached(paramLaunchDesc.getLocation(), null, null)))
  192. return false;
  193. if (!paramBoolean)
  194. {
  195. boolean bool = getCachedExtensions(paramLaunchDesc);
  196. if (!bool)
  197. return false;
  198. }
  199. JARDesc[] arrayOfJARDesc = localResourcesDesc.getEagerOrAllJarDescs(false);
  200. for (int i = 0; i < arrayOfJARDesc.length; i++)
  201. {
  202. if (!DownloadEngine.isResourceCached(arrayOfJARDesc[i].getLocation(), null, arrayOfJARDesc[i].getVersion(), arrayOfJARDesc[i].isNativeLib() ? 272 : 1))
  203. return false;
  204. if (!DownloadEngine.isJarFileCorrupted(arrayOfJARDesc[i].getLocation(), arrayOfJARDesc[i].getVersion()))
  205. continue;
  206. DownloadEngine.removeCachedResource(arrayOfJARDesc[i].getLocation(), null, arrayOfJARDesc[i].getVersion());
  207. return false;
  208. }
  209. }
  210. catch (JNLPException localJNLPException)
  211. {
  212. Trace.ignoredException(localJNLPException);
  213. return false;
  214. }
  215. catch (IOException localIOException)
  216. {
  217. Trace.ignoredException(localIOException);
  218. return false;
  219. }
  220. return true;
  221. }
  222. private static void updateCheck(URL paramURL, String paramString, boolean paramBoolean)
  223. {
  224. updateCheck(paramURL, paramString, paramBoolean, false);
  225. }
  226. private static void updateCheck(URL paramURL, String paramString, boolean paramBoolean1, boolean paramBoolean2)
  227. {
  228. updateCheck(paramURL, paramString, paramBoolean1, paramBoolean2, false);
  229. }
  230. private static void updateCheck(URL paramURL, String paramString, boolean paramBoolean1, boolean paramBoolean2, boolean paramBoolean3)
  231. {
  232. if (paramString != null)
  233. return;
  234. synchronized (syncObj)
  235. {
  236. _numThread += 1;
  237. }
  238. new Thread(new Runnable(paramURL, paramString, paramBoolean3, paramBoolean2)
  239. {
  240. private final URL val$url;
  241. private final String val$version;
  242. private final boolean val$isPack200;
  243. private final boolean val$isIcon;
  244. public void run()
  245. {
  246. Object localObject1 = null;
  247. try
  248. {
  249. boolean bool = DownloadEngine.isUpdateAvailable(this.val$url, this.val$version, this.val$isPack200);
  250. if ((this.val$isIcon) && (bool))
  251. Globals.setIconImageUpdated(true);
  252. synchronized (LaunchDownload.syncObj)
  253. {
  254. if ((bool) && (!LaunchDownload.updateAvailable))
  255. LaunchDownload.access$102(true);
  256. }
  257. }
  258. catch (IOException bool)
  259. {
  260. localObject1 = new FailedDownloadingResourceException(this.val$url, this.val$version, ???);
  261. }
  262. finally
  263. {
  264. synchronized (LaunchDownload.syncObj)
  265. {
  266. if (LaunchDownload._exception == null)
  267. LaunchDownload.access$202((JNLPException)localObject1);
  268. LaunchDownload.access$310();
  269. }
  270. }
  271. }
  272. }).start();
  273. }
  274. public static boolean isUpdateAvailable(LaunchDesc paramLaunchDesc)
  275. throws JNLPException
  276. {
  277. URL localURL1 = paramLaunchDesc.getLocation();
  278. if (localURL1 != null)
  279. try
  280. {
  281. boolean bool = DownloadEngine.isUpdateAvailable(localURL1, null);
  282. if (bool)
  283. return true;
  284. }
  285. catch (IOException localIOException1)
  286. {
  287. throw new FailedDownloadingResourceException(localURL1, null, localIOException1);
  288. }
  289. ResourcesDesc localResourcesDesc = paramLaunchDesc.getResources();
  290. if (localResourcesDesc == null)
  291. return false;
  292. ExtensionDesc[] arrayOfExtensionDesc = localResourcesDesc.getExtensionDescs();
  293. for (int i = 0; i < arrayOfExtensionDesc.length; i++)
  294. {
  295. URL localURL2 = arrayOfExtensionDesc[i].getLocation();
  296. if (localURL2 == null)
  297. continue;
  298. updateCheck(localURL2, arrayOfExtensionDesc[i].getVersion(), false);
  299. }
  300. JARDesc[] arrayOfJARDesc = localResourcesDesc.getEagerOrAllJarDescs(true);
  301. Object localObject1;
  302. for (int j = 0; j < arrayOfJARDesc.length; j++)
  303. {
  304. URL localURL3 = arrayOfJARDesc[j].getLocation();
  305. localObject1 = arrayOfJARDesc[j].getVersion();
  306. try
  307. {
  308. if (DownloadEngine.isResourceCached(localURL3, null, (String)localObject1))
  309. updateCheck(localURL3, (String)localObject1, arrayOfJARDesc[j].isLazyDownload(), false, arrayOfJARDesc[j].isPack200Enabled());
  310. }
  311. catch (IOException localIOException2)
  312. {
  313. Trace.ignoredException(localIOException2);
  314. }
  315. }
  316. IconDesc[] arrayOfIconDesc = paramLaunchDesc.getInformation().getIcons();
  317. if (arrayOfIconDesc != null)
  318. for (int k = 0; k < arrayOfIconDesc.length; k++)
  319. {
  320. localObject1 = arrayOfIconDesc[k].getLocation();
  321. String str = arrayOfIconDesc[k].getVersion();
  322. try
  323. {
  324. if (DownloadEngine.getCachedFile((URL)localObject1, str) != null)
  325. updateCheck((URL)localObject1, str, false, true);
  326. }
  327. catch (IOException localIOException3)
  328. {
  329. Trace.ignoredException(localIOException3);
  330. }
  331. }
  332. while (_numThread > 0)
  333. synchronized (syncObj)
  334. {
  335. if (updateAvailable)
  336. break;
  337. if (_exception != null)
  338. throw _exception;
  339. }
  340. return updateAvailable;
  341. }
  342. public static void downloadExtensions(LaunchDesc paramLaunchDesc, Preloader paramPreloader, int paramInt, ArrayList paramArrayList)
  343. throws IOException, JNLPException
  344. {
  345. downloadExtensionsHelper(paramLaunchDesc, paramPreloader, paramInt, false, paramArrayList);
  346. }
  347. public static boolean getCachedExtensions(LaunchDesc paramLaunchDesc)
  348. throws IOException, JNLPException
  349. {
  350. return downloadExtensionsHelper(paramLaunchDesc, null, 0, true, null);
  351. }
  352. private static boolean downloadExtensionsHelper(LaunchDesc paramLaunchDesc, Preloader paramPreloader, int paramInt, boolean paramBoolean, ArrayList paramArrayList)
  353. throws IOException, JNLPException
  354. {
  355. int i = DownloadEngine.incrementInternalUse();
  356. try
  357. {
  358. boolean bool = _downloadExtensionsHelper(paramLaunchDesc, paramPreloader, paramInt, paramBoolean, paramArrayList);
  359. return bool;
  360. }
  361. finally
  362. {
  363. DownloadEngine.decrementInternalUse(i);
  364. }
  365. throw localObject;
  366. }
  367. private static boolean _downloadExtensionsHelper(LaunchDesc paramLaunchDesc, Preloader paramPreloader, int paramInt, boolean paramBoolean, ArrayList paramArrayList)
  368. throws IOException, JNLPException
  369. {
  370. ResourcesDesc localResourcesDesc = paramLaunchDesc.getResources();
  371. if (localResourcesDesc == null)
  372. return true;
  373. String str1 = JREInfo.getKnownPlatforms();
  374. ArrayList localArrayList = new ArrayList();
  375. localResourcesDesc.visit(new ResourceVisitor(localArrayList)
  376. {
  377. private final ArrayList val$list;
  378. public void visitExtensionDesc(ExtensionDesc paramExtensionDesc)
  379. {
  380. this.val$list.add(paramExtensionDesc);
  381. }
  382. });
  383. paramInt += localArrayList.size();
  384. for (int i = 0; i < localArrayList.size(); i++)
  385. {
  386. ExtensionDesc localExtensionDesc = (ExtensionDesc)localArrayList.get(i);
  387. String str2 = localExtensionDesc.getName();
  388. if (str2 == null)
  389. {
  390. str2 = localExtensionDesc.getLocation().toString();
  391. int j = str2.lastIndexOf('/');
  392. if (j > 0)
  393. str2 = str2.substring(j + 1, str2.length());
  394. }
  395. paramInt--;
  396. if (paramPreloader != null)
  397. paramPreloader.handleEvent(new DownloadEvent(0, localExtensionDesc.getLocation(), localExtensionDesc.getVersion(), str2, paramInt, localArrayList.size(), localArrayList.size()));
  398. File localFile = DownloadEngine.getCachedFile(localExtensionDesc.getLocation(), localExtensionDesc.getVersion(), !paramBoolean, false, JREInfo.getKnownPlatforms());
  399. Trace.println("Downloaded extension: " + localExtensionDesc.getLocation() + "\n\tcodebase: " + localExtensionDesc.getCodebase() + "\n\tld parentCodebase: " + paramLaunchDesc.getCodebase() + "\n\tfile: " + localFile, TraceLevel.NETWORK);
  400. if (localFile == null)
  401. return false;
  402. LaunchDesc localLaunchDesc = LaunchDescFactory.buildDescriptor(localFile, localExtensionDesc.getCodebase(), localExtensionDesc.getLocation(), localExtensionDesc.getLocation());
  403. int k = 0;
  404. if (localLaunchDesc.getLaunchType() == 3)
  405. {
  406. k = 1;
  407. }
  408. else if (localLaunchDesc.getLaunchType() == 4)
  409. {
  410. localExtensionDesc.setInstaller(true);
  411. LocalApplicationProperties localLocalApplicationProperties = Cache.getLocalApplicationProperties(localExtensionDesc.getLocation(), localExtensionDesc.getVersion(), false);
  412. k = !localLocalApplicationProperties.isExtensionInstalled() ? 1 : 0;
  413. if ((paramArrayList != null) && ((isUpdateAvailable(localLaunchDesc)) || (k != 0)))
  414. paramArrayList.add(localFile);
  415. if ((paramBoolean) && (k != 0))
  416. return false;
  417. }
  418. else
  419. {
  420. throw new MissingFieldException(localLaunchDesc.getSource(), "<component-desc>|<installer-desc>");
  421. }
  422. if (k == 0)
  423. continue;
  424. localExtensionDesc.setExtensionDesc(localLaunchDesc);
  425. boolean bool = downloadExtensionsHelper(localLaunchDesc, paramPreloader, paramInt, paramBoolean, paramArrayList);
  426. if (!bool)
  427. return false;
  428. }
  429. return true;
  430. }
  431. public static void downloadJRE(LaunchDesc paramLaunchDesc, Preloader paramPreloader, ArrayList paramArrayList)
  432. throws JNLPException, IOException
  433. {
  434. JREDesc localJREDesc = paramLaunchDesc.getResources().getSelectedJRE();
  435. String str1 = localJREDesc.getVersion();
  436. URL localURL = localJREDesc.getHref();
  437. boolean bool = localURL == null;
  438. if (localURL == null)
  439. {
  440. str2 = Config.getStringProperty("deployment.javaws.installURL");
  441. if (str2 != null)
  442. try
  443. {
  444. localURL = new URL(str2);
  445. }
  446. catch (MalformedURLException localMalformedURLException)
  447. {
  448. }
  449. }
  450. paramPreloader.handleEvent(new DownloadEvent(0, localURL, str1, str1, 0L, 1000L, 0));
  451. String str2 = JREInfo.getKnownPlatforms();
  452. File localFile = DownloadEngine.getUpdatedFile(localURL, str1, bool, str2);
  453. LaunchDesc localLaunchDesc = LaunchDescFactory.buildDescriptor(localFile, null, null, null);
  454. if (localLaunchDesc.getLaunchType() != 4)
  455. throw new MissingFieldException(localLaunchDesc.getSource(), "<installer-desc>");
  456. if (paramArrayList != null)
  457. paramArrayList.add(localFile);
  458. localJREDesc.setExtensionDesc(localLaunchDesc);
  459. downloadExtensionsHelper(localLaunchDesc, paramPreloader, 0, false, paramArrayList);
  460. }
  461. public static void downloadResource(LaunchDesc paramLaunchDesc, URL paramURL, String paramString, Preloader paramPreloader, boolean paramBoolean)
  462. throws IOException, JNLPException
  463. {
  464. ResourcesDesc localResourcesDesc = paramLaunchDesc.getResources();
  465. if (localResourcesDesc == null)
  466. return;
  467. int i = localResourcesDesc.getConcurrentDownloads();
  468. JARDesc[] arrayOfJARDesc = localResourcesDesc.getResource(paramURL, paramString);
  469. downloadJarFiles(arrayOfJARDesc, paramPreloader, paramBoolean, i);
  470. }
  471. public static void downloadParts(LaunchDesc paramLaunchDesc, String[] paramArrayOfString, Preloader paramPreloader, boolean paramBoolean)
  472. throws IOException, JNLPException
  473. {
  474. ResourcesDesc localResourcesDesc = paramLaunchDesc.getResources();
  475. if (localResourcesDesc == null)
  476. return;
  477. int i = localResourcesDesc.getConcurrentDownloads();
  478. JARDesc[] arrayOfJARDesc = localResourcesDesc.getPartJars(paramArrayOfString);
  479. downloadJarFiles(arrayOfJARDesc, paramPreloader, paramBoolean, i);
  480. }
  481. public static void downloadExtensionPart(LaunchDesc paramLaunchDesc, URL paramURL, String paramString, String[] paramArrayOfString, Preloader paramPreloader, boolean paramBoolean)
  482. throws IOException, JNLPException
  483. {
  484. ResourcesDesc localResourcesDesc = paramLaunchDesc.getResources();
  485. if (localResourcesDesc == null)
  486. return;
  487. int i = localResourcesDesc.getConcurrentDownloads();
  488. JARDesc[] arrayOfJARDesc = localResourcesDesc.getExtensionPart(paramURL, paramString, paramArrayOfString);
  489. downloadJarFiles(arrayOfJARDesc, paramPreloader, paramBoolean, i);
  490. }
  491. public static void downloadEagerorAll(LaunchDesc paramLaunchDesc, boolean paramBoolean1, Preloader paramPreloader, boolean paramBoolean2)
  492. throws IOException, JNLPException
  493. {
  494. ResourcesDesc localResourcesDesc = paramLaunchDesc.getResources();
  495. if (localResourcesDesc == null)
  496. return;
  497. Object localObject1 = localResourcesDesc.getEagerOrAllJarDescs(paramBoolean1);
  498. if (!paramBoolean1)
  499. {
  500. JARDesc[] arrayOfJARDesc1 = localResourcesDesc.getEagerOrAllJarDescs(true);
  501. if (arrayOfJARDesc1.length != localObject1.length)
  502. {
  503. localObject2 = new HashSet(Arrays.asList(localObject1));
  504. int j = 0;
  505. for (int k = 0; k < arrayOfJARDesc1.length; k++)
  506. {
  507. URL localURL = arrayOfJARDesc1[k].getLocation();
  508. String str = arrayOfJARDesc1[k].getVersion();
  509. if ((!((HashSet)localObject2).contains(arrayOfJARDesc1[k])) && (DownloadEngine.getCachedJarFile(localURL, str) != null))
  510. j++;
  511. else
  512. arrayOfJARDesc1[k] = null;
  513. }
  514. if (j > 0)
  515. {
  516. JARDesc[] arrayOfJARDesc2 = new JARDesc[localObject1.length + j];
  517. System.arraycopy(localObject1, 0, arrayOfJARDesc2, 0, localObject1.length);
  518. int m = localObject1.length;
  519. for (int n = 0; n < arrayOfJARDesc1.length; n++)
  520. {
  521. if (arrayOfJARDesc1[n] == null)
  522. continue;
  523. arrayOfJARDesc2[(m++)] = arrayOfJARDesc1[n];
  524. }
  525. localObject1 = arrayOfJARDesc2;
  526. }
  527. }
  528. }
  529. int i = paramLaunchDesc.getResources().getConcurrentDownloads();
  530. Trace.println("LaunchDownload: concurrent downloads from LD: " + i, TraceLevel.NETWORK);
  531. downloadJarFiles(localObject1, paramPreloader, paramBoolean2, i);
  532. Object localObject2 = paramLaunchDesc.getInformation().getIconLocation(48, 0);
  533. if (localObject2 != null)
  534. try
  535. {
  536. DownloadEngine.getResource(((IconDesc)localObject2).getLocation(), null, ((IconDesc)localObject2).getVersion(), null, true, 1);
  537. Trace.println("Downloaded " + ((IconDesc)localObject2).getLocation(), TraceLevel.NETWORK);
  538. }
  539. catch (Exception localException)
  540. {
  541. Trace.ignored(localException);
  542. }
  543. }
  544. public static void reverse(JARDesc[] paramArrayOfJARDesc)
  545. {
  546. int i = 0;
  547. for (int j = paramArrayOfJARDesc.length - 1; i < j; j--)
  548. {
  549. JARDesc localJARDesc = paramArrayOfJARDesc[i];
  550. paramArrayOfJARDesc[i] = paramArrayOfJARDesc[j];
  551. paramArrayOfJARDesc[j] = localJARDesc;
  552. i++;
  553. }
  554. }
  555. public static int getDownloadType(JARDesc paramJARDesc)
  556. {
  557. int i = 256;
  558. if (paramJARDesc.isNativeLib())
  559. i |= 16;
  560. if (paramJARDesc.isPack200Enabled())
  561. i |= 4096;
  562. if (paramJARDesc.isVersionEnabled())
  563. i |= 65536;
  564. return i;
  565. }
  566. public static void prepareCustomProgress(LaunchDesc paramLaunchDesc, PreloaderDelegate paramPreloaderDelegate, JNLPSignedResourcesHelper paramJNLPSignedResourcesHelper, Runnable paramRunnable1, Runnable paramRunnable2, boolean paramBoolean)
  567. {
  568. prepareCustomProgress(paramLaunchDesc, paramPreloaderDelegate, paramJNLPSignedResourcesHelper, paramRunnable1, paramRunnable2, paramBoolean, true);
  569. }
  570. static void prepareCustomProgress(LaunchDesc paramLaunchDesc, PreloaderDelegate paramPreloaderDelegate, JNLPSignedResourcesHelper paramJNLPSignedResourcesHelper, Runnable paramRunnable1, Runnable paramRunnable2, boolean paramBoolean1, boolean paramBoolean2)
  571. {
  572. DeployPerfUtil.put("begining of prepareCustomProgress()");
  573. paramPreloaderDelegate.setPreloaderClass(paramLaunchDesc.getProgressClassName());
  574. paramPreloaderDelegate.markLoadingStarted();
  575. 3 local3 = new Runnable(paramBoolean1, paramLaunchDesc, paramPreloaderDelegate, paramRunnable1, paramJNLPSignedResourcesHelper, paramRunnable2)
  576. {
  577. private final boolean val$doUpdate;
  578. private final LaunchDesc val$ld;
  579. private final PreloaderDelegate val$delegate;
  580. private final Runnable val$okAction;
  581. private final JNLPSignedResourcesHelper val$signingHelper;
  582. private final Runnable val$failAction;
  583. public void run()
  584. {
  585. try
  586. {
  587. if (this.val$doUpdate)
  588. LaunchDownload.downloadProgressJars(this.val$ld, this.val$delegate);
  589. if (this.val$okAction != null)
  590. this.val$okAction.run();
  591. this.val$delegate.markLoaded(null);
  592. this.val$signingHelper.warmup();
  593. }
  594. catch (Exception localException2)
  595. {
  596. Exception localException2;
  597. if ((localException1 instanceof RuntimeException))
  598. localException2 = (localException1.getCause() instanceof Exception) ? (Exception)localException1.getCause() : localException1;
  599. Trace.println("Error preparing preloader : " + localException2, TraceLevel.PRELOADER);
  600. Trace.ignored(localException2);
  601. this.val$delegate.markLoaded(localException2);
  602. if (this.val$failAction != null)
  603. this.val$failAction.run();
  604. }
  605. }
  606. };
  607. if (paramBoolean2)
  608. {
  609. Thread localThread = new Thread(local3, "Loading Custom Progress");
  610. localThread.setDaemon(true);
  611. localThread.start();
  612. }
  613. else
  614. {
  615. local3.run();
  616. }
  617. }
  618. static void downloadProgressJars(LaunchDesc paramLaunchDesc, PreloaderDelegate paramPreloaderDelegate)
  619. throws IOException, JNLPException
  620. {
  621. ExecutorService localExecutorService = null;
  622. List localList = null;
  623. ResourcesDesc localResourcesDesc = paramLaunchDesc.getResources();
  624. if (localResourcesDesc == null)
  625. return;
  626. localExecutorService = getThreadPool(2);
  627. if (localExecutorService == null)
  628. return;
  629. JARDesc[] arrayOfJARDesc = localResourcesDesc.getEagerOrAllJarDescs(false);
  630. ArrayList localArrayList = new ArrayList(2);
  631. for (int i = 0; i < arrayOfJARDesc.length; i++)
  632. {
  633. JARDesc localJARDesc = arrayOfJARDesc[i];
  634. if (!localJARDesc.isProgressJar())
  635. continue;
  636. DownloadTask localDownloadTask = new DownloadTask(localJARDesc.getLocation(), null, localJARDesc.getVersion(), null, true, getDownloadType(localJARDesc), null, null, null);
  637. if (localArrayList.contains(localDownloadTask))
  638. continue;
  639. localArrayList.add(localDownloadTask);
  640. }
  641. if (localArrayList.size() > 0)
  642. {
  643. try
  644. {
  645. localList = localExecutorService.invokeAll(localArrayList);
  646. }
  647. catch (InterruptedException localInterruptedException)
  648. {
  649. Trace.ignored(localInterruptedException);
  650. localExecutorService.shutdownNow();
  651. }
  652. localExecutorService.shutdown();
  653. validateResults(localList, localArrayList, null);
  654. }
  655. }
  656. private static void downloadJarFiles(JARDesc[] paramArrayOfJARDesc, Preloader paramPreloader, boolean paramBoolean, int paramInt)
  657. throws JNLPException, IOException
  658. {
  659. if (paramArrayOfJARDesc == null)
  660. return;
  661. DeployPerfUtil.put("LaunchDownload.downloadJarFiles - begin");
  662. if (Globals.isReverseMode())
  663. reverse(paramArrayOfJARDesc);
  664. long l = 0L;
  665. DownloadCallbackHelper localDownloadCallbackHelper = new DownloadCallbackHelper(paramPreloader);
  666. int i = 0;
  667. int j = 1;
  668. for (int k = 0; k < paramArrayOfJARDesc.length; k++)
  669. {
  670. m = paramArrayOfJARDesc[k].getSize();
  671. if (paramArrayOfJARDesc[k].isProgressJar())
  672. continue;
  673. if (m > 0)
  674. {
  675. i++;
  676. l += m;
  677. }
  678. else
  679. {
  680. j = 0;
  681. }
  682. }
  683. k = 0;
  684. for (int m = 0; m < paramArrayOfJARDesc.length; m++)
  685. {
  686. int n = paramArrayOfJARDesc[m].getSize();
  687. if (paramArrayOfJARDesc[m].isProgressJar())
  688. continue;
  689. if (n <= 0)
  690. localDownloadCallbackHelper.register(paramArrayOfJARDesc[m].getLocation().toString(), paramArrayOfJARDesc[m].getVersion(), 0, 1.0D);
  691. else if (n > 0)
  692. localDownloadCallbackHelper.register(paramArrayOfJARDesc[m].getLocation().toString(), paramArrayOfJARDesc[m].getVersion(), n, 0.5D + n * i / l);
  693. k++;
  694. }
  695. if (j == 0)
  696. l = -1L;
  697. Trace.println("Total size to download: " + l, TraceLevel.NETWORK);
  698. if (l == 0L)
  699. return;
  700. localDownloadCallbackHelper.setTotalSize(l);
  701. localDownloadCallbackHelper.setNumOfJars(paramArrayOfJARDesc.length);
  702. int[] arrayOfInt = new int[1];
  703. arrayOfInt[0] = 0;
  704. ExecutorService localExecutorService = getThreadPool(paramInt);
  705. if (localExecutorService != null)
  706. {
  707. ToolkitStore.get().getAppContext().put("deploy-launchdownloadthreadpoolinappcontext", localExecutorService);
  708. localDownloadCallbackHelper.setNumOfJars(k);
  709. }
  710. ArrayList localArrayList = new ArrayList(paramArrayOfJARDesc.length);
  711. for (int i1 = 0; i1 < paramArrayOfJARDesc.length; i1++)
  712. {
  713. JARDesc localJARDesc = paramArrayOfJARDesc[i1];
  714. try
  715. {
  716. int i2 = getDownloadType(localJARDesc);
  717. Object localObject;
  718. if (localExecutorService == null)
  719. {
  720. localObject = DownloadEngine.getResource(localJARDesc.getLocation(), null, localJARDesc.getVersion(), localDownloadCallbackHelper, true, i2);
  721. arrayOfInt[0] += 1;
  722. localDownloadCallbackHelper.setJarsDone(arrayOfInt[0]);
  723. if ((Cache.isCacheEnabled()) && (localObject == null) && (!Environment.isImportMode()))
  724. throw new FailedDownloadingResourceException(null, localJARDesc.getLocation(), localJARDesc.getVersion(), null);
  725. }
  726. else if (!localJARDesc.isProgressJar())
  727. {
  728. localObject = new DownloadTask(localJARDesc.getLocation(), null, localJARDesc.getVersion(), localDownloadCallbackHelper, true, i2, paramPreloader, arrayOfInt, localDownloadCallbackHelper);
  729. if (!localArrayList.contains(localObject))
  730. localArrayList.add(localObject);
  731. }
  732. }
  733. catch (JNLPException localJNLPException)
  734. {
  735. if (paramPreloader != null)
  736. paramPreloader.handleEvent(new DownloadErrorEvent(localJARDesc.getLocation(), localJARDesc.getVersion()));
  737. throw localJNLPException;
  738. }
  739. }
  740. List localList = null;
  741. try
  742. {
  743. if (localExecutorService != null)
  744. localList = localExecutorService.invokeAll(localArrayList);
  745. }
  746. catch (Exception localException)
  747. {
  748. Trace.ignored(localException);
  749. }
  750. if (localExecutorService != null)
  751. {
  752. ToolkitStore.get().getAppContext().remove("deploy-launchdownloadthreadpoolinappcontext");
  753. localExecutorService.shutdown();
  754. validateResults(localList, localArrayList, paramPreloader);
  755. }
  756. DeployPerfUtil.put("LaunchDownload.downloadJarFiles - end");
  757. }
  758. private static void validateResults(List paramList, ArrayList paramArrayList, Preloader paramPreloader)
  759. throws IOException, JNLPException
  760. {
  761. if (paramList != null)
  762. {
  763. int i = 0;
  764. Iterator localIterator = paramList.iterator();
  765. while (localIterator.hasNext())
  766. {
  767. Future localFuture = (Future)localIterator.next();
  768. URL localURL = ((DownloadTask)paramArrayList.get(i)).getURL();
  769. String str = ((DownloadTask)paramArrayList.get(i)).getVersion();
  770. i++;
  771. try
  772. {
  773. localFuture.get();
  774. }
  775. catch (ExecutionException localExecutionException)
  776. {
  777. Throwable localThrowable = localExecutionException.getCause();
  778. if (null != localThrowable)
  779. {
  780. if ((localThrowable instanceof IOException))
  781. {
  782. if (paramPreloader != null)
  783. paramPreloader.handleEvent(new DownloadErrorEvent(localURL, str, localThrowable));
  784. throw ((IOException)localThrowable);
  785. }
  786. if ((localThrowable instanceof JNLPException))
  787. {
  788. if (paramPreloader != null)
  789. paramPreloader.handleEvent(new DownloadErrorEvent(localURL, str));
  790. throw ((JNLPException)localThrowable);
  791. }
  792. throw new IOException("JNLP Jar download failure.");
  793. }
  794. }
  795. catch (InterruptedException localInterruptedException)
  796. {
  797. Trace.ignored(localInterruptedException);
  798. }
  799. }
  800. }
  801. }
  802. private static synchronized void notifyProgress(DownloadCallbackHelper paramDownloadCallbackHelper, int[] paramArrayOfInt, URL paramURL)
  803. {
  804. if ((paramArrayOfInt != null) && (paramDownloadCallbackHelper != null))
  805. {
  806. paramArrayOfInt[0] += 1;
  807. Trace.println("Download Progress: jarsDone: " + paramArrayOfInt[0], TraceLevel.NETWORK);
  808. paramDownloadCallbackHelper.jarDone(paramURL);
  809. paramDownloadCallbackHelper.setJarsDone(paramArrayOfInt[0]);
  810. }
  811. }
  812. private static ExecutorService getThreadPool(int paramInt)
  813. {
  814. if (Config.isJavaVersionAtLeast15())
  815. {
  816. ExecutorService localExecutorService = Executors.newFixedThreadPool(paramInt, new ThreadFactory()
  817. {
  818. public Thread newThread(Runnable paramRunnable)
  819. {
  820. Thread localThread = new Thread(paramRunnable);
  821. localThread.setDaemon(true);
  822. return localThread;
  823. }
  824. });
  825. return localExecutorService;
  826. }
  827. return null;
  828. }
  829. public static void checkJNLPSecurity(LaunchDesc paramLaunchDesc)
  830. throws MultipleHostsException, NativeLibViolationException
  831. {
  832. boolean[] arrayOfBoolean1 = new boolean[1];
  833. boolean[] arrayOfBoolean2 = new boolean[1];
  834. ResourcesDesc localResourcesDesc = paramLaunchDesc.getResources();
  835. if (localResourcesDesc == null)
  836. return;
  837. JARDesc localJARDesc = paramLaunchDesc.getResources().getMainJar(true);
  838. if (localJARDesc == null)
  839. return;
  840. checkJNLPSecurityHelper(paramLaunchDesc, localJARDesc.getLocation().getHost(), arrayOfBoolean2, arrayOfBoolean1);
  841. if (arrayOfBoolean2[0] != 0)
  842. throw new MultipleHostsException();
  843. if (arrayOfBoolean1[0] != 0)
  844. throw new NativeLibViolationException();
  845. }
  846. private static void checkJNLPSecurityHelper(LaunchDesc paramLaunchDesc, String paramString, boolean[] paramArrayOfBoolean1, boolean[] paramArrayOfBoolean2)
  847. {
  848. if (paramLaunchDesc.getSecurityModel() != 0)
  849. return;
  850. ResourcesDesc localResourcesDesc = paramLaunchDesc.getResources();
  851. if (localResourcesDesc == null)
  852. return;
  853. localResourcesDesc.visit(new ResourceVisitor(paramArrayOfBoolean1, paramString, paramArrayOfBoolean2)
  854. {
  855. private final boolean[] val$hostViolation;
  856. private final String val$host;
  857. private final boolean[] val$nativeLibViolation;
  858. public void visitJARDesc(JARDesc paramJARDesc)
  859. {
  860. String str = paramJARDesc.getLocation().getHost();
  861. this.val$hostViolation[0] = ((this.val$hostViolation[0] != 0) || (!this.val$host.equals(str)) ? 1 : false);
  862. this.val$nativeLibViolation[0] = ((this.val$nativeLibViolation[0] != 0) || (paramJARDesc.isNativeLib()) ? 1 : false);
  863. }
  864. public void visitExtensionDesc(ExtensionDesc paramExtensionDesc)
  865. {
  866. if ((this.val$hostViolation[0] == 0) && (this.val$nativeLibViolation[0] == 0))
  867. {
  868. LaunchDesc localLaunchDesc = paramExtensionDesc.getExtensionDesc();
  869. String str = paramExtensionDesc.getLocation().getHost();
  870. if ((localLaunchDesc != null) && (localLaunchDesc.getSecurityModel() == 0) && (this.val$hostViolation[0] == 0))
  871. LaunchDownload.access$500(localLaunchDesc, str, this.val$hostViolation, this.val$nativeLibViolation);
  872. }
  873. }
  874. });
  875. }
  876. public static long getCachedSize(LaunchDesc paramLaunchDesc)
  877. {
  878. long l = 0L;
  879. ResourcesDesc localResourcesDesc = paramLaunchDesc.getResources();
  880. if (localResourcesDesc == null)
  881. return l;
  882. JARDesc[] arrayOfJARDesc = localResourcesDesc.getEagerOrAllJarDescs(true);
  883. for (int i = 0; i < arrayOfJARDesc.length; i++)
  884. try
  885. {
  886. l += DownloadEngine.getCachedSize(arrayOfJARDesc[i].getLocation(), null, arrayOfJARDesc[i].getVersion(), null);
  887. }
  888. catch (IOException localIOException1)
  889. {
  890. Trace.ignoredException(localIOException1);
  891. }
  892. IconDesc[] arrayOfIconDesc = paramLaunchDesc.getInformation().getIcons();
  893. if (arrayOfIconDesc != null)
  894. for (int j = 0; j < arrayOfIconDesc.length; j++)
  895. try
  896. {
  897. l += DownloadEngine.getCachedSize(arrayOfIconDesc[j].getLocation(), null, arrayOfIconDesc[j].getVersion(), null);
  898. }
  899. catch (IOException localIOException2)
  900. {
  901. Trace.ignoredException(localIOException2);
  902. }
  903. return l;
  904. }
  905. static String getMainClassName(LaunchDesc paramLaunchDesc, boolean paramBoolean)
  906. throws IOException, JNLPException, LaunchDescException
  907. {
  908. String str1 = null;
  909. ApplicationDesc localApplicationDesc = paramLaunchDesc.getApplicationDescriptor();
  910. if (localApplicationDesc != null)
  911. str1 = localApplicationDesc.getMainClass();
  912. InstallerDesc localInstallerDesc = paramLaunchDesc.getInstallerDescriptor();
  913. if (localInstallerDesc != null)
  914. str1 = localInstallerDesc.getMainClass();
  915. AppletDesc localAppletDesc = paramLaunchDesc.getAppletDescriptor();
  916. if (localAppletDesc != null)
  917. str1 = localAppletDesc.getAppletClass();
  918. JavaFXAppDesc localJavaFXAppDesc = paramLaunchDesc.getJavaFXAppDescriptor();
  919. if (localJavaFXAppDesc != null)
  920. str1 = localJavaFXAppDesc.getMainClass();
  921. if ((str1 != null) && (str1.length() == 0))
  922. str1 = null;
  923. if (str1 != null)
  924. return str1;
  925. if (paramLaunchDesc.getResources() == null)
  926. return null;
  927. JARDesc localJARDesc = paramLaunchDesc.getResources().getMainJar(paramBoolean);
  928. if (localJARDesc == null)
  929. return null;
  930. JarFile localJarFile = null;
  931. try
  932. {
  933. localJarFile = new JarFile(DownloadEngine.getCachedResourceFilePath(localJARDesc.getLocation(), localJARDesc.getVersion()), false);
  934. if ((localJarFile != null) && (str1 == null) && (paramLaunchDesc.getLaunchType() != 2))
  935. {
  936. localObject1 = localJarFile.getManifest();
  937. str1 = localObject1 != null ? ((Manifest)localObject1).getMainAttributes().getValue("Main-Class") : null;
  938. }
  939. if (str1 == null)
  940. throw new LaunchDescException(paramLaunchDesc, ResourceManager.getString("launch.error.nomainclassspec"), null);
  941. Object localObject1 = str1.replace('.', '/') + ".class";
  942. if (localJarFile.getEntry((String)localObject1) == null)
  943. throw new LaunchDescException(paramLaunchDesc, ResourceManager.getString("launch.error.nomainclass", str1, localJARDesc.getLocation().toString()), null);
  944. String str2 = str1;
  945. return str2;
  946. }
  947. finally
  948. {
  949. if (localJarFile != null)
  950. localJarFile.close();
  951. }
  952. throw localObject2;
  953. }
  954. public static boolean inCache(JARDesc paramJARDesc)
  955. {
  956. try
  957. {
  958. return DownloadEngine.isResourceCached(paramJARDesc.getLocation(), null, paramJARDesc.getVersion(), 256);
  959. }
  960. catch (IOException localIOException)
  961. {
  962. if (Config.getDeployDebug())
  963. Trace.ignored(localIOException);
  964. }
  965. return false;
  966. }
  967. private static class DownloadCallbackHelper
  968. implements DownloadEngine.DownloadDelegate
  969. {
  970. Preloader _preloader;
  971. long _totalSize = -1L;
  972. final ArrayList _records;
  973. int _numOfJars = 1;
  974. int _jarsDone = 0;
  975. public DownloadCallbackHelper(Preloader paramPreloader)
  976. {
  977. this._preloader = paramPreloader;
  978. this._records = new ArrayList();
  979. }
  980. public void register(String paramString1, String paramString2, int paramInt, double paramDouble)
  981. {
  982. LaunchDownload.ProgressRecord localProgressRecord = getProgressRecord(paramString1);
  983. if (localProgressRecord == null)
  984. {
  985. localProgressRecord = new LaunchDownload.ProgressRecord(paramString1, paramString2, paramInt);
  986. localProgressRecord.setWeight(paramDouble);
  987. synchronized (this._records)
  988. {
  989. this._records.add(localProgressRecord);
  990. }
  991. }
  992. else
  993. {
  994. localProgressRecord.setWeight(paramDouble);
  995. localProgressRecord.setSize(paramInt);
  996. }
  997. }
  998. public void setTotalSize(long paramLong)
  999. {
  1000. this._totalSize = paramLong;
  1001. }
  1002. public void setNumOfJars(int paramInt)
  1003. {
  1004. this._numOfJars = paramInt;
  1005. }
  1006. public void setJarsDone(int paramInt)
  1007. {
  1008. this._jarsDone = paramInt;
  1009. }
  1010. public void downloading(URL paramURL, String paramString, int paramInt1, int paramInt2, boolean paramBoolean)
  1011. throws CancelException
  1012. {
  1013. if (this._preloader != null)
  1014. {
  1015. String str = paramURL.toString();
  1016. LaunchDownload.ProgressRecord localProgressRecord = getProgressRecord(str);
  1017. if (localProgressRecord == null)
  1018. {
  1019. localProgressRecord = new LaunchDownload.ProgressRecord(str, paramString, paramInt2);
  1020. synchronized (this._records)
  1021. {
  1022. this._records.add(localProgressRecord);
  1023. }
  1024. }
  1025. else
  1026. {
  1027. localProgressRecord.setSize(paramInt2);
  1028. }
  1029. localProgressRecord.downloadProgress(paramInt1);
  1030. int i = getOverallPercent();
  1031. this._preloader.handleEvent(new DownloadEvent(0, paramURL, paramString, null, paramInt1, paramInt2, i));
  1032. }
  1033. }
  1034. public void patching(URL paramURL, String paramString, int paramInt)
  1035. throws CancelException
  1036. {
  1037. if (this._preloader != null)
  1038. {
  1039. String str = paramURL.toString();
  1040. LaunchDownload.ProgressRecord localProgressRecord = getProgressRecord(str);
  1041. if (localProgressRecord != null)
  1042. {
  1043. localProgressRecord.patchProgress(paramInt);
  1044. int i = getOverallPercent();
  1045. this._preloader.handleEvent(new DownloadEvent(2, paramURL, paramString, null, paramInt, 100L, i));
  1046. }
  1047. }
  1048. }
  1049. public void validating(URL paramURL, int paramInt1, int paramInt2)
  1050. throws CancelException
  1051. {
  1052. if (this._preloader != null)
  1053. {
  1054. String str = paramURL.toString();
  1055. LaunchDownload.ProgressRecord localProgressRecord = getProgressRecord(str);
  1056. if (localProgressRecord != null)
  1057. {
  1058. localProgressRecord.validateProgress(paramInt1, paramInt2);
  1059. int i = getOverallPercent();
  1060. this._preloader.handleEvent(new DownloadEvent(1, paramURL, null, null, paramInt1, paramInt2, i));
  1061. }
  1062. }
  1063. }
  1064. public LaunchDownload.ProgressRecord getProgressRecord(String paramString)
  1065. {
  1066. synchronized (this._records)
  1067. {
  1068. Iterator localIterator = this._records.iterator();
  1069. while (localIterator.hasNext())
  1070. {
  1071. LaunchDownload.ProgressRecord localProgressRecord = (LaunchDownload.ProgressRecord)localIterator.next();
  1072. if ((paramString != null) && (paramString.equals(localProgressRecord.getUrl())))
  1073. return localProgressRecord;
  1074. }
  1075. }
  1076. return null;
  1077. }
  1078. public int getOverallPercent()
  1079. {
  1080. double d1 = 0.0D;
  1081. double d2 = 0.0D;
  1082. synchronized (this._records)
  1083. {
  1084. Iterator localIterator = this._records.iterator();
  1085. while (localIterator.hasNext())
  1086. {
  1087. LaunchDownload.ProgressRecord localProgressRecord = (LaunchDownload.ProgressRecord)localIterator.next();
  1088. d1 += localProgressRecord.getPercent() * localProgressRecord.getWeight();
  1089. d2 += localProgressRecord.getWeight();
  1090. }
  1091. }
  1092. int i = (int)(d1 * 100.0D / d2);
  1093. if (i > 100)
  1094. i = 100;
  1095. return i;
  1096. }
  1097. public void downloadFailed(URL paramURL, String paramString)
  1098. {
  1099. if (this._preloader != null)
  1100. try
  1101. {
  1102. this._preloader.handleEvent(new DownloadErrorEvent(paramURL, paramString));
  1103. }
  1104. catch (CancelException localCancelException)
  1105. {
  1106. }
  1107. }
  1108. void jarDone(URL paramURL)
  1109. {
  1110. if (this._preloader != null)
  1111. {
  1112. String str = paramURL.toString();
  1113. LaunchDownload.ProgressRecord localProgressRecord = getProgressRecord(str);
  1114. if ((localProgressRecord != null) && (localProgressRecord.getPercent() < 1.0D))
  1115. {
  1116. LaunchDownload.ProgressRecord.access$400(localProgressRecord);
  1117. int i = getOverallPercent();
  1118. }
  1119. }
  1120. }
  1121. }
  1122. private static class DownloadTask
  1123. implements Callable
  1124. {
  1125. private URL url;
  1126. private int downloadType;
  1127. private String resourceID;
  1128. private String versionString;
  1129. private DownloadEngine.DownloadDelegate dd;
  1130. private final boolean doDownload;
  1131. private Preloader dp;
  1132. private int[] counterBox;
  1133. private LaunchDownload.DownloadCallbackHelper dch;
  1134. public DownloadTask(URL paramURL, String paramString1, String paramString2, DownloadEngine.DownloadDelegate paramDownloadDelegate, boolean paramBoolean, int paramInt, Preloader paramPreloader, int[] paramArrayOfInt, LaunchDownload.DownloadCallbackHelper paramDownloadCallbackHelper)
  1135. {
  1136. this.url = paramURL;
  1137. this.downloadType = paramInt;
  1138. this.resourceID = paramString1;
  1139. this.versionString = paramString2;
  1140. this.dd = paramDownloadDelegate;
  1141. this.doDownload = paramBoolean;
  1142. this.dp = paramPreloader;
  1143. this.counterBox = paramArrayOfInt;
  1144. this.dch = paramDownloadCallbackHelper;
  1145. }
  1146. public URL getURL()
  1147. {
  1148. return this.url;
  1149. }
  1150. public String getVersion()
  1151. {
  1152. return this.versionString;
  1153. }
  1154. public int hashCode()
  1155. {
  1156. if (this.url == null)
  1157. return 0;
  1158. return this.url.hashCode();
  1159. }
  1160. public String toString()
  1161. {
  1162. return this.url.toString() + (this.versionString != null ? ":" + this.versionString : "");
  1163. }
  1164. public boolean equals(Object paramObject)
  1165. {
  1166. if ((paramObject instanceof DownloadTask))
  1167. {
  1168. DownloadTask localDownloadTask = (DownloadTask)paramObject;
  1169. URL localURL = localDownloadTask.getURL();
  1170. String str = localDownloadTask.getVersion();
  1171. if (this.url.toString().equals(localURL.toString()))
  1172. {
  1173. if ((this.versionString == null) && (str == null))
  1174. return true;
  1175. if ((this.versionString != null) && (str != null) && (this.versionString.equals(str)))
  1176. return true;
  1177. }
  1178. }
  1179. return false;
  1180. }
  1181. public Object call()
  1182. throws IOException, JNLPException
  1183. {
  1184. int i = DownloadEngine.incrementInternalUse();
  1185. try
  1186. {
  1187. URL localURL = DownloadEngine.getResource(this.url, this.resourceID, this.versionString, this.dch, this.doDownload, this.downloadType);
  1188. if ((Cache.isCacheEnabled()) && (localURL == null) && (!Environment.isImportMode()))
  1189. throw new FailedDownloadingResourceException(null, this.url, this.versionString, null);
  1190. LaunchDownload.access$600(this.dch, this.counterBox, this.url);
  1191. }
  1192. finally
  1193. {
  1194. DownloadEngine.decrementInternalUse(i);
  1195. }
  1196. return null;
  1197. }
  1198. }
  1199. private static class ProgressRecord
  1200. {
  1201. private String _url;
  1202. private String _ver;
  1203. private int _size;
  1204. private double _percent;
  1205. private double _weight;
  1206. public ProgressRecord(String paramString1, String paramString2, int paramInt)
  1207. {
  1208. this._url = paramString1;
  1209. this._ver = paramString2;
  1210. this._size = paramInt;
  1211. this._weight = 1.0D;
  1212. this._percent = 0.0D;
  1213. }
  1214. public void setWeight(double paramDouble)
  1215. {
  1216. this._weight = paramDouble;
  1217. }
  1218. public void setSize(int paramInt)
  1219. {
  1220. this._size = paramInt;
  1221. }
  1222. public double getPercent()
  1223. {
  1224. return this._percent;
  1225. }
  1226. public String getUrl()
  1227. {
  1228. return this._url;
  1229. }
  1230. public int hashCode()
  1231. {
  1232. int i = 7;
  1233. i = 79 * i + (this._url != null ? this._url.hashCode() : 0);
  1234. return i;
  1235. }
  1236. public boolean equals(Object paramObject)
  1237. {
  1238. return this._url.equals(((ProgressRecord)paramObject)._url);
  1239. }
  1240. public double getWeight()
  1241. {
  1242. return this._weight;
  1243. }
  1244. public void downloadProgress(int paramInt)
  1245. {
  1246. if (this._size != 0)
  1247. this._percent = (paramInt / this._size * 0.8D);
  1248. else
  1249. this._percent = 0.8D;
  1250. }
  1251. public void patchProgress(int paramInt)
  1252. {
  1253. this._percent = (paramInt / 100.0D * 0.1D + 0.8D);
  1254. }
  1255. public void validateProgress(int paramInt1, int paramInt2)
  1256. {
  1257. if (paramInt2 != 0)
  1258. this._percent = (paramInt1 / paramInt2 * 0.05D + 0.9D);
  1259. else
  1260. this._percent = 0.95D;
  1261. }
  1262. private void markComplete()
  1263. {
  1264. this._percent = 1.0D;
  1265. }
  1266. }
  1267. }
  1268. /* Location: /opt/sun/java32/jdk1.7.0_04/jre/lib/javaws.jar
  1269. * Qualified Name: com.sun.javaws.LaunchDownload
  1270. * JD-Core Version: 0.6.0
  1271. */