home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIPHEFT062001.ISO / browser / nc32lyc / comm.z / java40.jar / netscape / softupdate / SoftwareUpdate.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-08-15  |  19.4 KB  |  1,017 lines

  1. package netscape.softupdate;
  2.  
  3. import java.util.Enumeration;
  4. import java.util.Hashtable;
  5. import java.util.Vector;
  6. import netscape.javascript.JSObject;
  7. import netscape.security.AppletSecurity;
  8. import netscape.security.AppletSecurityException;
  9. import netscape.security.ForbiddenTargetException;
  10. import netscape.security.Principal;
  11. import netscape.security.PrivilegeManager;
  12. import netscape.security.Target;
  13.  
  14. public final class SoftwareUpdate {
  15.    public static final int LIMITED_INSTALL = 0;
  16.    public static final int FULL_INSTALL = 1;
  17.    public static final int NO_STATUS_DLG = 2;
  18.    public static final int NO_FINALIZE_DLG = 4;
  19.    protected static final String IMPERSONATOR = "Impersonator";
  20.    public static final String INSTALL_PRIV = "SoftwareInstall";
  21.    public static final String SILENT_PRIV = "SilentInstall";
  22.    public static final String FOLDER_FILE_URL = "file:///";
  23.    public static final int BAD_PACKAGE_NAME = -200;
  24.    public static final int UNEXPECTED_ERROR = -201;
  25.    public static final int ACCESS_DENIED = -202;
  26.    public static final int TOO_MANY_CERTIFICATES = -203;
  27.    public static final int NO_INSTALLER_CERTIFICATE = -204;
  28.    public static final int NO_CERTIFICATE = -205;
  29.    public static final int NO_MATCHING_CERTIFICATE = -206;
  30.    public static final int UNKNOWN_JAR_FILE = -207;
  31.    public static final int INVALID_ARGUMENTS = -208;
  32.    public static final int ILLEGAL_RELATIVE_PATH = -209;
  33.    public static final int USER_CANCELLED = -210;
  34.    public static final int INSTALL_NOT_STARTED = -211;
  35.    public static final int SILENT_MODE_DENIED = -212;
  36.    public static final int NO_SUCH_COMPONENT = -213;
  37.    public static final int FILE_DOES_NOT_EXIST = -214;
  38.    public static final int FILE_READ_ONLY = -215;
  39.    public static final int FILE_IS_DIRECTORY = -216;
  40.    public static final int NETWORK_FILE_IS_IN_USE = -217;
  41.    public static final int APPLE_SINGLE_ERR = -218;
  42.    public static final int INVALID_PATH_ERR = -219;
  43.    public static final int PATCH_BAD_DIFF = -220;
  44.    public static final int PATCH_BAD_CHECKSUM_TARGET = -221;
  45.    public static final int PATCH_BAD_CHECKSUM_RESULT = -222;
  46.    public static final int UNINSTALL_FAILED = -223;
  47.    public static final int SUCCESS = 0;
  48.    public static final int REBOOT_NEEDED = 999;
  49.    protected String packageName;
  50.    protected String userPackageName;
  51.    protected Vector installedFiles;
  52.    protected Hashtable patchList;
  53.    protected VersionInfo versionInfo;
  54.    private boolean bShowProgress;
  55.    private boolean bShowFinalize;
  56.    private FolderSpec packageFolder;
  57.    private ProgressDetails confdlg;
  58.    private int userChoice;
  59.    private int progwin;
  60.    private boolean silent;
  61.    private boolean force;
  62.    private boolean bUninstallPackage;
  63.    private boolean bRegisterPackage;
  64.    private boolean bUserCancelled;
  65.    private int lastError;
  66.    private String filesep;
  67.    private String installerJarName;
  68.    private String jarName;
  69.    private String jarCharset;
  70.    private int zigPtr;
  71.    private Principal installPrincipal;
  72.  
  73.    private native long NativeDiskSpaceAvailable(String var1);
  74.  
  75.    private native String NativeFileURLToNative(String var1);
  76.  
  77.    private native String[] ExtractDirEntries(String var1);
  78.  
  79.    public SoftwareUpdate(JSObject var1, String var2) {
  80.       this.userPackageName = var2;
  81.       this.installPrincipal = null;
  82.       this.packageName = null;
  83.       this.packageFolder = null;
  84.       this.confdlg = null;
  85.       this.progwin = 0;
  86.       this.patchList = new Hashtable();
  87.       this.zigPtr = 0;
  88.       this.userChoice = -1;
  89.       this.lastError = 0;
  90.       this.bUninstallPackage = false;
  91.       this.bRegisterPackage = false;
  92.       this.bShowProgress = true;
  93.       this.bShowFinalize = true;
  94.       this.bUserCancelled = false;
  95.       this.VerifyJSObject(var1);
  96.       this.jarName = (String)var1.getMember("src");
  97.       this.jarCharset = (String)var1.getMember("jarCharset");
  98.  
  99.       try {
  100.          this.silent = (Boolean)var1.getMember("silent");
  101.          this.force = (Boolean)var1.getMember("force");
  102.       } catch (Throwable var3) {
  103.          System.out.println("Unexpected throw getting silent/force");
  104.          this.silent = false;
  105.          this.force = false;
  106.       }
  107.  
  108.       if (System.getProperty("os.name").equalsIgnoreCase("Mac OS")) {
  109.          this.filesep = ":";
  110.       } else {
  111.          this.filesep = System.getProperty("file.separator");
  112.       }
  113.    }
  114.  
  115.    protected void finalize() throws Throwable {
  116.       this.CleanUp();
  117.       super.finalize();
  118.    }
  119.  
  120.    private native void VerifyJSObject(JSObject var1);
  121.  
  122.    private void InitializeInstallerCertificate() throws SoftUpdateException {
  123.       Object var1 = null;
  124.       var1 = this.getCertificates(this.zigPtr, this.installerJarName);
  125.       if (var1 != null && ((Object[])var1).length != 0) {
  126.          if (((Object[])var1).length > 1) {
  127.             throw new SoftUpdateException(Strings.error_TooManyCertificates(), -203);
  128.          } else {
  129.             this.installPrincipal = new Principal(14, (byte[])((Object[])var1)[0]);
  130.          }
  131.       } else {
  132.          throw new SoftUpdateException(Strings.error_NoCertificate(), -204);
  133.       }
  134.    }
  135.  
  136.    private void CheckSilentPrivileges() {
  137.       if (this.silent) {
  138.          try {
  139.             PrivilegeManager var1 = AppletSecurity.getPrivilegeManager();
  140.             Target var2 = Target.findTarget("Impersonator");
  141.             var1.enablePrivilege(var2);
  142.             Target var3 = Target.findTarget("SilentInstall");
  143.             var1.checkPrivilegeGranted(var3, this.GetPrincipal(), (Object)null);
  144.          } catch (Throwable var4) {
  145.             System.out.println(Strings.error_SilentModeDenied());
  146.             this.silent = false;
  147.          }
  148.       }
  149.    }
  150.  
  151.    private void RequestSecurityPrivileges() {
  152.       PrivilegeManager var1 = AppletSecurity.getPrivilegeManager();
  153.       Target var2 = Target.findTarget("Impersonator");
  154.       var1.enablePrivilege(var2);
  155.       Target var3 = Target.findTarget("SoftwareInstall");
  156.       var1.enablePrivilege(var3, this.GetPrincipal());
  157.    }
  158.  
  159.    protected final Principal GetPrincipal() {
  160.       return this.installPrincipal;
  161.    }
  162.  
  163.    protected final String GetUserPackageName() {
  164.       return this.userPackageName;
  165.    }
  166.  
  167.    protected final String GetRegPackageName() {
  168.       return this.packageName;
  169.    }
  170.  
  171.    protected final boolean GetSilent() {
  172.       return this.silent;
  173.    }
  174.  
  175.    protected final Enumeration GetInstallQueue() {
  176.       return this.installedFiles != null ? this.installedFiles.elements() : null;
  177.    }
  178.  
  179.    public int GetLastError() {
  180.       return this.lastError;
  181.    }
  182.  
  183.    public void ResetError() {
  184.       this.lastError = 0;
  185.    }
  186.  
  187.    private int saveError(int var1) {
  188.       if (var1 != 0) {
  189.          this.lastError = var1;
  190.       }
  191.  
  192.       return var1;
  193.    }
  194.  
  195.    public FolderSpec GetComponentFolder(String var1) {
  196.       FolderSpec var3 = null;
  197.  
  198.       try {
  199.          String var4 = this.GetQualifiedPackageName(var1);
  200.          String var2 = VersionRegistry.getDefaultDirectory(var4);
  201.          if (var2 == null) {
  202.             var2 = VersionRegistry.componentPath(var4);
  203.             int var5;
  204.             if (var2 != null && (var5 = var2.lastIndexOf(this.filesep)) > 0) {
  205.                char[] var6 = new char[var5 + 1];
  206.                var2.getChars(0, var5 + 1, var6, 0);
  207.                var2 = new String(var6);
  208.             }
  209.          }
  210.  
  211.          if (var2 != null) {
  212.             if (!var2.endsWith(this.filesep)) {
  213.                var2 = var2 + this.filesep;
  214.             }
  215.  
  216.             var3 = new FolderSpec("Installed", var2, this.userPackageName);
  217.          }
  218.       } catch (SoftUpdateException var7) {
  219.          var7.GetError();
  220.       }
  221.  
  222.       return var3;
  223.    }
  224.  
  225.    public FolderSpec GetComponentFolder(String var1, String var2) {
  226.       return this.GetFolder(this.GetComponentFolder(var1), var2);
  227.    }
  228.  
  229.    public void SetPackageFolder(FolderSpec var1) {
  230.       this.packageFolder = var1;
  231.    }
  232.  
  233.    public Object GetWinProfile(FolderSpec var1, String var2) {
  234.       WinProfile var3 = null;
  235.       String var4 = System.getProperty("os.name");
  236.  
  237.       try {
  238.          this.SanityCheck();
  239.          if (var4.indexOf("Windows") >= 0 || var4.equals("Win32s") || var4.equals("OS/2")) {
  240.             var3 = new WinProfile(this, var1, var2);
  241.          }
  242.       } catch (Throwable var6) {
  243.          var3 = null;
  244.          var6.printStackTrace();
  245.       }
  246.  
  247.       return var3;
  248.    }
  249.  
  250.    public Object GetWinRegistry() {
  251.       WinReg var1 = null;
  252.       String var2 = System.getProperty("os.name");
  253.  
  254.       try {
  255.          this.SanityCheck();
  256.          if (var2.indexOf("Windows") >= 0 || var2.equals("Win32s")) {
  257.             var1 = new WinReg(this);
  258.          }
  259.       } catch (Throwable var4) {
  260.          var1 = null;
  261.          var4.printStackTrace();
  262.       }
  263.  
  264.       return var1;
  265.    }
  266.  
  267.    private native void OpenJARFile() throws SoftUpdateException;
  268.  
  269.    private native void CloseJARFile();
  270.  
  271.    private native Object[] getCertificates(int var1, String var2);
  272.  
  273.    protected String ExtractJARFile(String var1, String var2) throws SoftUpdateException, AppletSecurityException {
  274.       if (this.zigPtr == 0) {
  275.          throw new SoftUpdateException("JAR file has not been opened", -207);
  276.       } else {
  277.          PrivilegeManager var4 = AppletSecurity.getPrivilegeManager();
  278.          Target var3 = Target.findTarget("SoftwareInstall");
  279.          var4.checkPrivilegeEnabled(var3);
  280.          boolean var6 = false;
  281.          Object var7 = null;
  282.          var7 = this.getCertificates(this.zigPtr, var1);
  283.          if (var7 != null && ((Object[])var7).length != 0) {
  284.             for(int var5 = 0; var5 < ((Object[])var7).length; ++var5) {
  285.                Principal var8 = new Principal(14, (byte[])((Object[])var7)[var5]);
  286.                if (this.installPrincipal.equals(var8)) {
  287.                   var6 = true;
  288.                   break;
  289.                }
  290.             }
  291.  
  292.             if (!var6) {
  293.                throw new SoftUpdateException(Strings.error_MismatchedCertificate() + var1, -206);
  294.             } else {
  295.                String var10 = this.NativeExtractJARFile(var1, var2);
  296.                return var10;
  297.             }
  298.          } else {
  299.             throw new SoftUpdateException("Missing certificate for " + var1, -205);
  300.          }
  301.       }
  302.    }
  303.  
  304.    private void ParseFlags(int var1) {
  305.       if ((var1 & 2) == 2) {
  306.          this.bShowProgress = false;
  307.       }
  308.  
  309.       if ((var1 & 4) == 4) {
  310.          this.bShowFinalize = false;
  311.       }
  312.  
  313.    }
  314.  
  315.    private native String NativeExtractJARFile(String var1, String var2) throws SoftUpdateException;
  316.  
  317.    public int StartInstall(String var1, VersionInfo var2, int var3) {
  318.       int var4 = 0;
  319.       this.ResetError();
  320.       this.ParseFlags(var3);
  321.       this.bUserCancelled = false;
  322.       this.packageName = null;
  323.  
  324.       try {
  325.          if (var1 == null) {
  326.             throw new SoftUpdateException(Strings.error_BadPackageName(), -200);
  327.          }
  328.  
  329.          char[] var5;
  330.          for(this.packageName = this.GetQualifiedPackageName(var1); this.packageName.endsWith("/"); this.packageName = new String(var5)) {
  331.             var5 = new char[this.packageName.length() - 1];
  332.             this.packageName.getChars(0, this.packageName.length() - 1, var5, 0);
  333.          }
  334.  
  335.          this.versionInfo = var2;
  336.          this.installedFiles = new Vector();
  337.          this.OpenJARFile();
  338.          this.InitializeInstallerCertificate();
  339.          this.CheckSilentPrivileges();
  340.          this.RequestSecurityPrivileges();
  341.          if (this.bShowProgress) {
  342.             this.OpenProgressDialog();
  343.          }
  344.  
  345.          String var9 = VersionRegistry.getDefaultDirectory(this.packageName);
  346.          if (var9 != null) {
  347.             this.packageFolder = new FolderSpec("Installed", var9, this.userPackageName);
  348.          }
  349.       } catch (SoftUpdateException var6) {
  350.          var4 = var6.GetError();
  351.          this.packageName = null;
  352.       } catch (ForbiddenTargetException var7) {
  353.          var4 = -202;
  354.          this.packageName = null;
  355.       } catch (Exception var8) {
  356.          ((Throwable)var8).printStackTrace();
  357.          var4 = -201;
  358.          this.packageName = null;
  359.       }
  360.  
  361.       this.saveError(var4);
  362.       return var4;
  363.    }
  364.  
  365.    public int StartInstall(String var1, String var2) {
  366.       return this.StartInstall(var1, (VersionInfo)(new VersionInfo(var2)), 0);
  367.    }
  368.  
  369.    public int StartInstall(String var1, String var2, int var3) {
  370.       return this.StartInstall(var1, new VersionInfo(var2), var3);
  371.    }
  372.  
  373.    protected void UserCancelled() {
  374.       this.userChoice = 0;
  375.    }
  376.  
  377.    protected void UserApproved() {
  378.       this.userChoice = 1;
  379.    }
  380.  
  381.    public int FinalizeInstall() {
  382.       boolean var1 = false;
  383.       int var2 = 0;
  384.  
  385.       try {
  386.          this.SanityCheck();
  387.          if (this.installedFiles == null || this.installedFiles.size() == 0) {
  388.             this.CleanUp();
  389.             byte var24 = 0;
  390.             return var24;
  391.          }
  392.  
  393.          if (!this.silent && this.UserWantsConfirm()) {
  394.             this.confdlg = new ProgressDetails(this);
  395.  
  396.             while(this.userChoice == -1) {
  397.                Thread.sleep(10L);
  398.             }
  399.  
  400.             this.confdlg = null;
  401.             if (this.userChoice != 1) {
  402.                this.AbortInstall();
  403.                int var3 = this.saveError(-210);
  404.                return var3;
  405.             }
  406.          }
  407.  
  408.          if (this.bShowFinalize) {
  409.             this.OpenProgressDialog();
  410.          } else {
  411.             this.CloseProgressDialog();
  412.          }
  413.  
  414.          this.SetProgressDialogItem("");
  415.          this.SetProgressDialogRange(this.installedFiles.size());
  416.          Enumeration var6 = this.GetInstallQueue();
  417.          InstallObject var7 = null;
  418.  
  419.          try {
  420.             int var8 = 0;
  421.             if (this.bUninstallPackage) {
  422.                VersionRegistry.uninstallCreate(this.packageName, this.userPackageName);
  423.             }
  424.  
  425.             while(var6.hasMoreElements()) {
  426.                var7 = (InstallObject)var6.nextElement();
  427.  
  428.                try {
  429.                   var7.Complete();
  430.                } catch (SoftUpdateException var18) {
  431.                   if (var18.GetError() != 999) {
  432.                      throw var18;
  433.                   }
  434.  
  435.                   var1 = true;
  436.                }
  437.  
  438.                ++var8;
  439.                this.SetProgressDialogThermo(var8);
  440.             }
  441.          } catch (Throwable var19) {
  442.             if (var7 != null) {
  443.                var7.Abort();
  444.             }
  445.  
  446.             while(var6.hasMoreElements()) {
  447.                try {
  448.                   var7 = (InstallObject)var6.nextElement();
  449.                   var7.Abort();
  450.                } catch (Throwable var17) {
  451.                }
  452.             }
  453.  
  454.             throw var19;
  455.          }
  456.  
  457.          if (this.versionInfo != null && this.bRegisterPackage) {
  458.             var2 = VersionRegistry.installComponent(this.packageName, (String)null, this.versionInfo);
  459.             if (this.packageFolder != null) {
  460.                VersionRegistry.setDefaultDirectory(this.packageName, this.packageFolder.toString());
  461.             }
  462.          }
  463.       } catch (SoftUpdateException var20) {
  464.          var2 = var20.GetError();
  465.       } catch (ForbiddenTargetException var21) {
  466.          var2 = -202;
  467.       } catch (Throwable var22) {
  468.          var22.printStackTrace();
  469.          System.out.println(Strings.error_Unexpected() + " FinalizeInstall");
  470.          var2 = -201;
  471.       } finally {
  472.          if (this.installedFiles != null) {
  473.             this.installedFiles.removeAllElements();
  474.          }
  475.  
  476.          this.CleanUp();
  477.       }
  478.  
  479.       if (var2 == 0 && var1) {
  480.          var2 = 999;
  481.       }
  482.  
  483.       this.saveError(var2);
  484.       return var2;
  485.    }
  486.  
  487.    public synchronized void AbortInstall() {
  488.       try {
  489.          if (this.installedFiles != null) {
  490.             Enumeration var3 = this.GetInstallQueue();
  491.  
  492.             while(var3.hasMoreElements()) {
  493.                InstallObject var4 = (InstallObject)var3.nextElement();
  494.  
  495.                try {
  496.                   var4.Abort();
  497.                } catch (Throwable var11) {
  498.                }
  499.             }
  500.  
  501.             this.installedFiles.removeAllElements();
  502.             this.installedFiles = null;
  503.          }
  504.  
  505.          this.CloseJARFile();
  506.       } catch (Throwable var12) {
  507.          System.out.println(Strings.error_Unexpected() + " AbortInstall");
  508.          var12.printStackTrace();
  509.       } finally {
  510.          try {
  511.             this.CleanUp();
  512.          } catch (Throwable var10) {
  513.             var10.printStackTrace();
  514.          }
  515.  
  516.       }
  517.  
  518.    }
  519.  
  520.    private synchronized void CleanUp() {
  521.       this.CloseJARFile();
  522.       this.confdlg = null;
  523.       this.zigPtr = 0;
  524.       if (this.installedFiles != null) {
  525.          Enumeration var1 = this.GetInstallQueue();
  526.  
  527.          while(var1.hasMoreElements()) {
  528.             InstallObject var2 = (InstallObject)var1.nextElement();
  529.             var2.Abort();
  530.          }
  531.  
  532.          this.installedFiles.removeAllElements();
  533.       }
  534.  
  535.       this.installedFiles = null;
  536.       this.packageName = null;
  537.       this.CloseProgressDialog();
  538.    }
  539.  
  540.    protected void ScheduleForInstall(InstallObject var1) throws SoftUpdateException {
  541.       this.SetProgressDialogItem(var1.toString());
  542.       var1.Prepare();
  543.       this.installedFiles.addElement(var1);
  544.       if (var1.CanUninstall()) {
  545.          this.bUninstallPackage = true;
  546.       }
  547.  
  548.       if (var1.RegisterPackageNode()) {
  549.          this.bRegisterPackage = true;
  550.       }
  551.  
  552.    }
  553.  
  554.    private String GetQualifiedRegName(String var1) throws SoftUpdateException {
  555.       String var2 = this.packageName.length() == 0 ? "" : this.packageName + "/";
  556.       if (var1.toUpperCase().startsWith("=COMM=/")) {
  557.          var1 = (var1.substring(7) + "===").substring(0, var1.length() - 7);
  558.       } else if (var1.toUpperCase().startsWith("=USER=/")) {
  559.          var1 = this.CurrentUserNode() + var1.substring(7);
  560.       } else if (var1.charAt(0) != '/') {
  561.          var1 = var2 + var1;
  562.       }
  563.  
  564.       if (this.BadRegName(var1)) {
  565.          throw new SoftUpdateException(Strings.error_BadPackageName(), -200);
  566.       } else {
  567.          return var1;
  568.       }
  569.    }
  570.  
  571.    private String GetQualifiedPackageName(String var1) throws SoftUpdateException {
  572.       if (var1.toUpperCase().startsWith("=USER=/")) {
  573.          var1 = this.CurrentUserNode() + var1.substring(7);
  574.       }
  575.  
  576.       if (this.BadRegName(var1)) {
  577.          throw new SoftUpdateException(Strings.error_BadPackageName(), -200);
  578.       } else {
  579.          return var1;
  580.       }
  581.    }
  582.  
  583.    private void SanityCheck() throws SoftUpdateException {
  584.       if (this.packageName == null) {
  585.          throw new SoftUpdateException(Strings.error_MustCallStart(), -211);
  586.       } else if (this.bUserCancelled) {
  587.          this.AbortInstall();
  588.          this.saveError(-210);
  589.          throw new SoftUpdateException("", -210);
  590.       }
  591.    }
  592.  
  593.    private native String NativeProfileName();
  594.  
  595.    private String CurrentUserNode() {
  596.       return "/Netscape/Users/" + this.NativeProfileName() + "/";
  597.    }
  598.  
  599.    private boolean BadRegName(String var1) {
  600.       if (var1 == null) {
  601.          return true;
  602.       } else if (!var1.startsWith(" ") && !var1.endsWith(" ")) {
  603.          if (var1.indexOf("//") > -1) {
  604.             return true;
  605.          } else if (var1.indexOf("/ ") <= -1 && var1.indexOf(" /") <= -1) {
  606.             return var1.indexOf("=") > -1;
  607.          } else {
  608.             return true;
  609.          }
  610.       } else {
  611.          return true;
  612.       }
  613.    }
  614.  
  615.    public int AddSubcomponent(String var1, VersionInfo var2, String var3, FolderSpec var4, String var5, boolean var6) {
  616.       int var8 = 0;
  617.  
  618.       try {
  619.          if (var3 == null || var3.length() == 0 || var4 == null) {
  620.             throw new SoftUpdateException("", -208);
  621.          }
  622.  
  623.          this.SanityCheck();
  624.          if (var1 != null && var1.length() != 0) {
  625.             var1 = this.GetQualifiedRegName(var1);
  626.          } else {
  627.             var1 = this.GetQualifiedRegName(var3);
  628.          }
  629.  
  630.          if (var5 == null || var5.length() == 0) {
  631.             var5 = var3;
  632.          }
  633.  
  634.          boolean var9 = false;
  635.          if (!var6 && var2 != null && VersionRegistry.validateComponent(var1) == 0) {
  636.             VersionInfo var10 = VersionRegistry.componentVersion(var1);
  637.             if (var2.compareTo(var10) >= 0) {
  638.                var9 = true;
  639.             }
  640.          } else {
  641.             var9 = true;
  642.          }
  643.  
  644.          if (var9) {
  645.             InstallFile var7 = new InstallFile(this, var1, var2, var3, var4, var5, var6);
  646.             this.ScheduleForInstall(var7);
  647.          }
  648.       } catch (SoftUpdateException var11) {
  649.          var8 = var11.GetError();
  650.       } catch (ForbiddenTargetException var12) {
  651.          var8 = -202;
  652.       } catch (Throwable var13) {
  653.          System.out.println(Strings.error_Unexpected() + "AddSubcomponent");
  654.          var13.printStackTrace();
  655.          var8 = -201;
  656.       }
  657.  
  658.       this.saveError(var8);
  659.       return var8;
  660.    }
  661.  
  662.    public int AddSubcomponent(String var1) {
  663.       return this.AddSubcomponent("", this.versionInfo, var1, this.packageFolder, "", this.force);
  664.    }
  665.  
  666.    public int AddSubcomponent(String var1, String var2, FolderSpec var3, String var4) {
  667.       return this.AddSubcomponent(var1, this.versionInfo, var2, var3, var4, this.force);
  668.    }
  669.  
  670.    public int AddSubcomponent(String var1, String var2, String var3, FolderSpec var4, String var5) {
  671.       return this.AddSubcomponent(var1, new VersionInfo(var2), var3, var4, var5, this.force);
  672.    }
  673.  
  674.    public int AddSubcomponent(String var1, String var2, String var3, FolderSpec var4, String var5, boolean var6) {
  675.       return this.AddSubcomponent(var1, new VersionInfo(var2), var3, var4, var5, var6);
  676.    }
  677.  
  678.    public int Execute(String var1) {
  679.       return this.Execute(var1, (String)null);
  680.    }
  681.  
  682.    public int Execute(String var1, String var2) {
  683.       int var3 = 0;
  684.  
  685.       try {
  686.          this.SanityCheck();
  687.          InstallExecute var4 = new InstallExecute(this, var1, var2);
  688.          this.ScheduleForInstall(var4);
  689.       } catch (SoftUpdateException var5) {
  690.          var3 = var5.GetError();
  691.       } catch (ForbiddenTargetException var6) {
  692.          var3 = -202;
  693.       } catch (Throwable var7) {
  694.          var7.printStackTrace();
  695.          System.out.println(Strings.error_Unexpected() + "Execute");
  696.          var3 = -201;
  697.       }
  698.  
  699.       this.saveError(var3);
  700.       return var3;
  701.    }
  702.  
  703.    public int[] Gestalt(String var1) {
  704.       int[] var2 = new int[]{0, 0};
  705.  
  706.       try {
  707.          var2[1] = this.NativeGestalt(var1);
  708.       } catch (SoftUpdateException var4) {
  709.          var2[0] = var4.GetError();
  710.       } catch (Throwable var5) {
  711.          var2[0] = -1;
  712.          System.out.println(Strings.error_Unexpected() + "Gestalt");
  713.       }
  714.  
  715.       return var2;
  716.    }
  717.  
  718.    private native int NativeGestalt(String var1) throws SoftUpdateException;
  719.  
  720.    public int Patch(String var1, VersionInfo var2, String var3, FolderSpec var4, String var5) {
  721.       if (var4 != null && var1 != null && var1.length() != 0 && var3 != null) {
  722.          int var6 = 0;
  723.  
  724.          try {
  725.             this.SanityCheck();
  726.             String var7 = this.GetQualifiedRegName(var1);
  727.             InstallPatch var8 = new InstallPatch(this, var7, var2, var3, var4, var5);
  728.             this.ScheduleForInstall(var8);
  729.          } catch (SoftUpdateException var9) {
  730.             var6 = var9.GetError();
  731.          } catch (ForbiddenTargetException var10) {
  732.             var6 = -202;
  733.          } catch (Throwable var11) {
  734.             System.out.println(Strings.error_Unexpected() + "Patch");
  735.             var11.printStackTrace();
  736.             var6 = -201;
  737.          }
  738.  
  739.          this.saveError(var6);
  740.          return var6;
  741.       } else {
  742.          return this.saveError(-208);
  743.       }
  744.    }
  745.  
  746.    public int Patch(String var1, String var2, FolderSpec var3, String var4) {
  747.       return this.Patch(var1, this.versionInfo, var2, var3, var4);
  748.    }
  749.  
  750.    public int Patch(String var1, String var2, String var3, FolderSpec var4, String var5) {
  751.       return this.Patch(var1, new VersionInfo(var2), var3, var4, var5);
  752.    }
  753.  
  754.    private native int NativeMakeDirectory(String var1);
  755.  
  756.    public int DeleteFile(FolderSpec var1, String var2) {
  757.       int var3 = 0;
  758.  
  759.       try {
  760.          this.SanityCheck();
  761.          InstallDelete var4 = new InstallDelete(this, var1, var2);
  762.          this.ScheduleForInstall(var4);
  763.       } catch (SoftUpdateException var5) {
  764.          var3 = var5.GetError();
  765.          if (var3 == -214) {
  766.             var3 = 0;
  767.          }
  768.       } catch (ForbiddenTargetException var6) {
  769.          var3 = -202;
  770.       } catch (Throwable var7) {
  771.          var7.printStackTrace();
  772.          var3 = -201;
  773.       }
  774.  
  775.       this.saveError(var3);
  776.       return var3;
  777.    }
  778.  
  779.    public int DeleteComponent(String var1) {
  780.       int var2 = 0;
  781.  
  782.       try {
  783.          this.SanityCheck();
  784.          String var3 = this.GetQualifiedRegName(var1);
  785.          InstallDelete var4 = new InstallDelete(this, var3);
  786.          this.ScheduleForInstall(var4);
  787.       } catch (SoftUpdateException var5) {
  788.          var2 = var5.GetError();
  789.          if (var2 == -214) {
  790.             var2 = 0;
  791.          }
  792.       } catch (ForbiddenTargetException var6) {
  793.          var2 = -202;
  794.       } catch (Throwable var7) {
  795.          var7.printStackTrace();
  796.          var2 = -201;
  797.       }
  798.  
  799.       if (var2 == -214) {
  800.          var2 = 0;
  801.       }
  802.  
  803.       this.saveError(var2);
  804.       return var2;
  805.    }
  806.  
  807.    public FolderSpec GetFolder(String var1) {
  808.       try {
  809.          if (!var1.equalsIgnoreCase("Installed") && !var1.equalsIgnoreCase("file:///")) {
  810.             FolderSpec var2 = new FolderSpec(var1, this.packageName, this.userPackageName);
  811.             return var2.GetDirectoryPath() == null ? null : var2;
  812.          } else {
  813.             return null;
  814.          }
  815.       } catch (Throwable var3) {
  816.          return null;
  817.       }
  818.    }
  819.  
  820.    public FolderSpec GetFolder(Object var1, String var2) {
  821.       if (var1 instanceof FolderSpec) {
  822.          return this.GetFolder((FolderSpec)var1, var2);
  823.       } else {
  824.          return var1 instanceof String ? this.GetFolder((String)var1, var2) : null;
  825.       }
  826.    }
  827.  
  828.    public FolderSpec GetFolder(String var1, String var2) {
  829.       if (var1 == null) {
  830.          return null;
  831.       } else if (var1.equalsIgnoreCase("file:///")) {
  832.          String var4 = this.NativeFileURLToNative("/" + var2);
  833.          if (var4 != null) {
  834.             if (var4.endsWith(this.filesep)) {
  835.                return new FolderSpec("Installed", var4, this.userPackageName);
  836.             } else {
  837.                String var3 = var4 + this.filesep;
  838.                return new FolderSpec("Installed", var3, this.userPackageName);
  839.             }
  840.          } else {
  841.             return null;
  842.          }
  843.       } else {
  844.          return this.GetFolder(this.GetFolder(var1), var2);
  845.       }
  846.    }
  847.  
  848.    public FolderSpec GetFolder(FolderSpec var1, String var2) {
  849.       if (var2 != null && var2.length() != 0) {
  850.          if (var1 != null) {
  851.             String var3;
  852.             try {
  853.                var3 = var1.MakeFullPath(var2);
  854.             } catch (Exception var5) {
  855.                return null;
  856.             }
  857.  
  858.             if (var3 != null) {
  859.                if (var3.endsWith(this.filesep)) {
  860.                   return new FolderSpec("Installed", var3, this.userPackageName);
  861.                }
  862.  
  863.                String var4 = var3 + this.filesep;
  864.                return new FolderSpec("Installed", var4, this.userPackageName);
  865.             }
  866.          }
  867.  
  868.          return null;
  869.       } else {
  870.          return var1;
  871.       }
  872.    }
  873.  
  874.    public long DiskSpaceAvailable(FolderSpec var1) {
  875.       String var2 = var1.toString();
  876.       return var2 == null ? 0L : this.NativeDiskSpaceAvailable(var2);
  877.    }
  878.  
  879.    public int AddDirectory(String var1, VersionInfo var2, String var3, FolderSpec var4, String var5, boolean var6) {
  880.       int var8 = 0;
  881.  
  882.       try {
  883.          if (var3 == null || var3.length() == 0 || var4 == null) {
  884.             throw new SoftUpdateException("", -208);
  885.          }
  886.  
  887.          this.SanityCheck();
  888.          if (var1 != null && var1.length() != 0) {
  889.             var1 = this.GetQualifiedRegName(var1);
  890.          } else {
  891.             var1 = this.GetQualifiedRegName(var3);
  892.          }
  893.  
  894.          if (var5 == null) {
  895.             var5 = "";
  896.          } else if (var5.length() != 0) {
  897.             var5 = var5 + "/";
  898.          }
  899.  
  900.          String[] var12 = this.ExtractDirEntries(var3);
  901.  
  902.          for(int var9 = 0; var9 < var12.length; ++var9) {
  903.             String var13 = var1 + "/" + var12[var9];
  904.             boolean var10;
  905.             if (!var6 && var2 != null && VersionRegistry.validateComponent(var13) == 0) {
  906.                VersionInfo var11 = VersionRegistry.componentVersion(var13);
  907.                var10 = var2.compareTo(var11) >= 0;
  908.             } else {
  909.                var10 = true;
  910.             }
  911.  
  912.             if (var10) {
  913.                InstallFile var7 = new InstallFile(this, var13, var2, var3 + "/" + var12[var9], var4, var5 + var12[var9], var6);
  914.                this.ScheduleForInstall(var7);
  915.             }
  916.          }
  917.       } catch (SoftUpdateException var15) {
  918.          var8 = var15.GetError();
  919.       } catch (ForbiddenTargetException var16) {
  920.          var8 = -202;
  921.       } catch (Throwable var17) {
  922.          var17.printStackTrace();
  923.          System.out.println(Strings.error_Unexpected() + "AddDirectory");
  924.          var8 = -201;
  925.       }
  926.  
  927.       this.saveError(var8);
  928.       return var8;
  929.    }
  930.  
  931.    public int AddDirectory(String var1) {
  932.       return this.AddDirectory("", this.versionInfo, var1, this.packageFolder, "", this.force);
  933.    }
  934.  
  935.    public int AddDirectory(String var1, String var2, FolderSpec var3, String var4) {
  936.       return this.AddDirectory(var1, this.versionInfo, var2, var3, var4, this.force);
  937.    }
  938.  
  939.    public int AddDirectory(String var1, String var2, String var3, FolderSpec var4, String var5) {
  940.       return this.AddDirectory(var1, new VersionInfo(var2), var3, var4, var5, this.force);
  941.    }
  942.  
  943.    public int AddDirectory(String var1, String var2, String var3, FolderSpec var4, String var5, boolean var6) {
  944.       return this.AddDirectory(var1, new VersionInfo(var2), var3, var4, var5, var6);
  945.    }
  946.  
  947.    public int Uninstall(String var1) {
  948.       int var2 = 0;
  949.  
  950.       try {
  951.          this.SanityCheck();
  952.          String var3 = this.GetQualifiedPackageName(var1);
  953.          UninstallObject var4 = new UninstallObject(this, var3);
  954.          this.ScheduleForInstall(var4);
  955.       } catch (SoftUpdateException var5) {
  956.          var2 = var5.GetError();
  957.       } catch (ForbiddenTargetException var6) {
  958.          var2 = -202;
  959.       } catch (Throwable var7) {
  960.          var7.printStackTrace();
  961.          System.out.println(Strings.error_Unexpected() + "Uninstall");
  962.          var2 = -201;
  963.       }
  964.  
  965.       this.saveError(var2);
  966.       return var2;
  967.    }
  968.  
  969.    void OpenProgressDialog() {
  970.       if (!this.silent && this.progwin == 0) {
  971.          this.progwin = this.NativeOpenProgDlg(this.GetUserPackageName());
  972.       }
  973.  
  974.    }
  975.  
  976.    void CloseProgressDialog() {
  977.       if (this.progwin != 0) {
  978.          this.NativeCloseProgDlg(this.progwin);
  979.          this.progwin = 0;
  980.       }
  981.  
  982.    }
  983.  
  984.    void SetProgressDialogItem(String var1) {
  985.       if (this.progwin != 0) {
  986.          this.NativeSetProgDlgItem(this.progwin, var1);
  987.       }
  988.  
  989.    }
  990.  
  991.    void SetProgressDialogRange(int var1) {
  992.       if (this.progwin != 0) {
  993.          this.NativeSetProgDlgRange(this.progwin, var1);
  994.       }
  995.  
  996.    }
  997.  
  998.    void SetProgressDialogThermo(int var1) {
  999.       if (this.progwin != 0) {
  1000.          this.NativeSetProgDlgThermo(this.progwin, var1);
  1001.       }
  1002.  
  1003.    }
  1004.  
  1005.    private native int NativeOpenProgDlg(String var1);
  1006.  
  1007.    private native void NativeCloseProgDlg(int var1);
  1008.  
  1009.    private native void NativeSetProgDlgItem(int var1, String var2);
  1010.  
  1011.    private native void NativeSetProgDlgRange(int var1, int var2);
  1012.  
  1013.    private native void NativeSetProgDlgThermo(int var1, int var2);
  1014.  
  1015.    private native boolean UserWantsConfirm();
  1016. }
  1017.