home *** CD-ROM | disk | FTP | other *** search
Wrap
package com.zerog.ia.download.utility; import com.zerog.ia.download.WebInstallerApplet; import com.zerog.ia.download.dialogs.ErrorDialog; import com.zerog.ia.download.dialogs.ProgressDialog; import com.zerog.ia.download.downloaders.BrowserDownloader; import com.zerog.ia.download.downloaders.FileDownloader; import com.zerog.ia.download.downloaders.ZGDownloader; import com.zerog.ia.download.outputListeners.GUIDownloadListener; import com.zerog.ia.download.outputListeners.TimeoutListener; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; import java.util.Observable; import java.util.Observer; import netscape.security.PrivilegeManager; public class DiskSpaceCheckForDownload implements Runnable, Observer { private URL urlSource = null; private File diskSpaceCheckFile = null; private ProgressDialog progressDialog = null; private WebInstallerApplet applet = null; public static long contentLength; public static InputStream input = null; private boolean enoughDiskSpace = false; private boolean continueChecking = true; private boolean fileAlreadyExists = false; public DiskSpaceCheckForDownload(URL var1, File var2, ProgressDialog var3, WebInstallerApplet var4) { this.urlSource = var1; this.diskSpaceCheckFile = var2; this.progressDialog = var3; this.applet = var4; } public void run() { Object var1 = null; boolean var2 = false; System.err.println("DiskSpaceCheck: beginning check for disk space availability..."); if (Gestalt.isNetscapeSecurityModelAvailable()) { PrivilegeManager.enablePrivilege(Gestalt.NETSCAPE_FILE_ACCESS); } if (!Util.makeLeadingDirectories(this.diskSpaceCheckFile)) { System.err.println("DiskSpaceCheck: failure to create download directories: '" + this.diskSpaceCheckFile.toString() + "'"); } else { System.err.println("DiskSpaceCheck: download directories created: '" + this.diskSpaceCheckFile.toString() + "'"); this.lengthOfDownloadFile(); System.err.println("DiskSpaceCheck: space required for download: " + contentLength); if (this.diskSpaceCheckFile.length() == contentLength) { System.err.println("DiskSpaceCheck: Installer already present on machine (same size), aborting re-download"); this.progressDialog.setProgressDialogText(0, (String)null, this.diskSpaceCheckFile.toString()); this.progressDialog.pack(); this.progressDialog.show(); this.fileAlreadyExists = true; this.enoughDiskSpace = true; this.continueChecking = true; } } if (!this.fileAlreadyExists) { System.err.println("DiskSpaceCheck: Installer not present on machine, downloading..."); this.progressDialog.show(); Object var3 = null; try { var32 = new FileOutputStream(this.diskSpaceCheckFile); System.err.println("DiskSpaceCheck: FileOutputStream created"); } catch (IOException var28) { System.err.println("DiskSpaceCheck: FileOutputStream failed creation, unable to determine disk space availability"); ((Throwable)var28).printStackTrace(); var32 = null; this.enoughDiskSpace = false; var2 = true; } if (var32 != null) { byte[] var4 = new byte[1024]; long var5 = 0L; int var7 = 0; int var8 = 0; try { for(long var9 = 0L; var9 < contentLength / 1024L && this.continueChecking; ++var9) { var32.write(var4, 0, 1024); var5 += 1024L; var7 = (int)(var5 * 100L / contentLength); if (var7 != var8) { this.progressDialog.setPercentDone(var7); var8 = var7; } } var32.write(var4, 0, (int)(contentLength % 1024L)); this.enoughDiskSpace = true; } catch (Exception var29) { this.enoughDiskSpace = false; } finally { try { if (var32 != null) { ((OutputStream)var32).flush(); var32.close(); var3 = null; } } catch (IOException var27) { ((Throwable)var27).printStackTrace(); this.enoughDiskSpace = false; } boolean var13 = false; if (this.diskSpaceCheckFile.exists()) { System.err.println("DiskSpaceCheck: attempting to delete disk space check file: " + this.diskSpaceCheckFile.toString()); var13 = this.diskSpaceCheckFile.delete(); if (var13) { System.err.println(" - disk space check file deleted"); } } else { System.err.println("DiskSpaceCheck: disk space check file: " + this.diskSpaceCheckFile.toString()); System.err.println(" - did not exist. There may not be enough disk space to continue"); } Object var14 = null; File var15 = null; try { var41 = this.diskSpaceCheckFile.getCanonicalPath(); } catch (Exception var26) { var41 = this.diskSpaceCheckFile.getAbsolutePath(); } if (var41 != null) { var41 = (new File(var41)).getParent(); } if (var41 != null) { var15 = new File(var41); } System.err.println("DiskSpaceCheck: attempting to delete parent directories: " + var15.toString()); var13 = var15.delete(); if (var13) { System.err.println(" - disk space check file deleted"); } } } } this.progressDialog.deleteObserver(this); if (this.continueChecking) { System.err.println("DiskSpaceCheck: confirming disk space availability results"); if (!this.hasEnoughDiskSpace()) { Object var34 = null; Object var36 = null; String var35; if (var2) { System.err.println("DiskSpaceCheck: an error occurred attempting to verify disk space availability"); var35 = "An error occurred while determining available disk space."; } else { System.err.println("DiskSpaceCheck: insufficient disk space"); var35 = "Unable to verify disk space on this volume."; } String var37 = "Either write permissions do not exist on this volume or there\nmay not have been sufficient space to download the installer.\n\nYou will be asked to choose another location on your system\nin which to save the installer. Once downloaded, the installer\nmay be run manually from the new location."; new ErrorDialog(this.applet.getParentFrame(), var35, var37, this.applet); this.progressDialog.setVisible(false); this.progressDialog.dispose(); BrowserDownloader var6 = new BrowserDownloader(this.applet); ((FileDownloader)var6).setFileToDownload(this.urlSource); ((FileDownloader)var6).start(); this.applet.downloadStopped(); } else { System.err.println("DiskSpaceCheck: disk space okay (" + this.continueChecking + "," + this.progressDialog.isShowing() + ")"); if (this.continueChecking && this.progressDialog.isShowing()) { System.err.println("DiskSpaceCheck: preparing downloader/executor object"); ZGDownloader var31 = new ZGDownloader(this.applet, this.progressDialog); ((FileDownloader)var31).addDownloadListener(new TimeoutListener(var31, 30000L)); ((FileDownloader)var31).addDownloadListener(new GUIDownloadListener(var31, this.progressDialog)); ((FileDownloader)var31).setFileToDownload(this.urlSource); ((ZGDownloader)var31).setFileDestination(this.diskSpaceCheckFile); System.err.println("DiskSpaceCheck: destination file = '" + this.diskSpaceCheckFile + "'"); System.err.println("DiskSpaceCheck: initiating downloader/executor object..."); ((FileDownloader)var31).start(); } } } else { System.err.println("DiskSpaceCheck: user has cancelled download/disk space checking"); this.progressDialog.setVisible(false); this.progressDialog.dispose(); this.applet.downloadStopped(); } } private void lengthOfDownloadFile() { URLConnection var1 = null; try { var1 = this.urlSource.openConnection(); var1.connect(); input = var1.getInputStream(); } catch (Exception var3) { System.err.println("DiskSpaceCheck.lengthOfDownloadFile(): exception establishing URL connection"); ((Throwable)var3).printStackTrace(); } contentLength = (long)var1.getContentLength(); } public boolean hasEnoughDiskSpace() { return this.enoughDiskSpace; } public void update(Observable var1, Object var2) { this.continueChecking = false; System.err.println("DiskSpaceCheck: cancelling disk space check on user request."); try { if (input != null) { input.close(); } System.err.println("DiskSpaceCheck: streams have been closed"); } catch (Exception var4) { System.err.println("DiskSpaceCheck: exception while attempting to close streams"); ((Throwable)var4).printStackTrace(); } } }