diff options
author | Ivo Hinkelmann <ihi@openoffice.org> | 2008-02-05 12:38:03 +0000 |
---|---|---|
committer | Ivo Hinkelmann <ihi@openoffice.org> | 2008-02-05 12:38:03 +0000 |
commit | b61f10b60f35ae1cc201628302dcc642b9cb6570 (patch) | |
tree | e35bcadb3760e4c684774d17f34599441b9a5726 /javainstaller2 | |
parent | e000c184a4932edc05d25f5789a6ca4ed4042556 (diff) |
INTEGRATION: CWS native127 (1.4.6); FILE MERGED
2008/01/28 16:00:44 is 1.4.6.4: #i85281# improve performance
2008/01/25 16:23:57 is 1.4.6.3: #i85474# not all language modules deselectable
2008/01/25 11:29:29 is 1.4.6.2: #i85474# not all language modules deselectable
2008/01/25 09:56:19 is 1.4.6.1: #i85474# one and only language not selectable
Diffstat (limited to 'javainstaller2')
-rwxr-xr-x | javainstaller2/src/JavaSetup/org/openoffice/setup/Util/ModuleCtrl.java | 230 |
1 files changed, 219 insertions, 11 deletions
diff --git a/javainstaller2/src/JavaSetup/org/openoffice/setup/Util/ModuleCtrl.java b/javainstaller2/src/JavaSetup/org/openoffice/setup/Util/ModuleCtrl.java index 8c5c40d97a3b..4818208967e7 100755 --- a/javainstaller2/src/JavaSetup/org/openoffice/setup/Util/ModuleCtrl.java +++ b/javainstaller2/src/JavaSetup/org/openoffice/setup/Util/ModuleCtrl.java @@ -4,9 +4,9 @@ * * $RCSfile: ModuleCtrl.java,v $ * - * $Revision: 1.4 $ + * $Revision: 1.5 $ * - * last change: $Author: obo $ $Date: 2008-01-07 12:33:51 $ + * last change: $Author: ihi $ $Date: 2008-02-05 13:38:03 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -339,13 +339,21 @@ public class ModuleCtrl { } else { if ( isInstalled ) { - boolean installedPackageIsOlder = installer.isInstalledPackageOlder(packageData, installData); - if ( ! installedPackageIsOlder ) { - // The package is already installed in the same or in a newer version - packageData.setSelectionState(PackageDescription.IGNORE); - } else { - // This is also something like migrating feature states - packageData.setSelectionState(PackageDescription.INSTALL); + if ( packageData.isJavaPackage() ) { // only selected checks, because of performance reasons + boolean installedPackageIsOlder = installer.isInstalledPackageOlder(packageData, installData); + if ( ! installedPackageIsOlder ) { + // The package is already installed in the same or in a newer version + packageData.setSelectionState(PackageDescription.IGNORE); + } else { + // This is also something like migrating feature states + packageData.setSelectionState(PackageDescription.INSTALL); + } + } else { // no version check done -> so what is a good setting for already installed packages? + if ( installData.olderVersionExists() ) { // should never be the case in this function + packageData.setSelectionState(PackageDescription.INSTALL); + } else { + packageData.setSelectionState(PackageDescription.IGNORE); + } } } else { @@ -353,8 +361,10 @@ public class ModuleCtrl { // This can be deinstalled by hand for example. boolean isRequiredCoreModule = checkRequiredCoreModule(packageData); if ( isRequiredCoreModule ) { - packageData.setSelectionState(PackageDescription.INSTALL); - LogManager.addLogfileComment("<b>Adding required package:</b> " + packageData.getPackageName() + "</br>"); + if ( packageData.getSelectionState() != PackageDescription.INSTALL ) { + packageData.setSelectionState(PackageDescription.INSTALL); + LogManager.addLogfileComment("<b>Adding required package:</b> " + packageData.getPackageName() + "</br>"); + } // This package has to exist! if ( ! packageExists(packageData, installData) ) { @@ -404,6 +414,23 @@ public class ModuleCtrl { } } + static public void setHiddenLanguageModuleDefaultSettings(PackageDescription packageData) { + + // This function is needed during installation for the language modules, + // if there is only one language in the installation set. In this case the language + // modules are hidden (no selection possible) and therefore get no value in + // setDefaultModuleSettings(). This default value is set now. + + if ( packageData.showMultiLingualOnly() ) { + packageData.setSelectionState(PackageDescription.INSTALL); + } + + for (Enumeration e = packageData.children(); e.hasMoreElements(); ) { + PackageDescription child = (PackageDescription) e.nextElement(); + setHiddenLanguageModuleDefaultSettings(child); + } + } + static private boolean packageExists(PackageDescription packageData, InstallData installData) { boolean fileExists = false; String packagePath = installData.getPackagePath(); @@ -465,6 +492,42 @@ public class ModuleCtrl { } } + static public void checkApplicationSelection(PackageDescription packageData, InstallData data) { + boolean setToTrue = false; + + if (( packageData.isApplicationPackage() ) && + ( ! packageData.isHidden() ) && + ( packageData.getSelectionState() == packageData.INSTALL )) { + setToTrue = true; + data.setApplicationModulesChecked(true); + } + + if ( ! setToTrue ) { + for (Enumeration e = packageData.children(); e.hasMoreElements(); ) { + PackageDescription child = (PackageDescription) e.nextElement(); + checkApplicationSelection(child, data); + } + } + } + + static public void checkLanguageSelection(PackageDescription packageData, InstallData data) { + boolean setToTrue = false; + + if (( packageData.showMultiLingualOnly() ) && + ( ! packageData.isHidden() ) && + ( packageData.getSelectionState() == packageData.INSTALL )) { + setToTrue = true; + data.setLanguageModulesChecked(true); + } + + if ( ! setToTrue ) { + for (Enumeration e = packageData.children(); e.hasMoreElements(); ) { + PackageDescription child = (PackageDescription) e.nextElement(); + checkLanguageSelection(child, data); + } + } + } + static public void checkVisibleModulesUninstall(PackageDescription packageData, InstallData data) { boolean setToTrue = false; @@ -484,6 +547,50 @@ public class ModuleCtrl { } } + static public void checkApplicationModulesUninstall(PackageDescription packageData, InstallData data) { + boolean setToTrue = false; + + // At least one language module should not be uninstalled. Then this function returns true. + // An exeption is the complete uninstallation or the masked complete uninstallation. + + if (( packageData.isApplicationPackage() ) && + ( ! packageData.isHidden() ) && + ( packageData.getSelectionState() != packageData.IGNORE ) && + ( packageData.getSelectionState() != packageData.REMOVE )) { + setToTrue = true; + data.setApplicationModulesChecked(true); + } + + if ( ! setToTrue ) { + for (Enumeration e = packageData.children(); e.hasMoreElements(); ) { + PackageDescription child = (PackageDescription) e.nextElement(); + checkApplicationModulesUninstall(child, data); + } + } + } + + static public void checkLanguageModulesUninstall(PackageDescription packageData, InstallData data) { + boolean setToTrue = false; + + // At least one language module should not be uninstalled. Then this function returns true. + // An exeption is the complete uninstallation or the masked complete uninstallation. + + if (( packageData.showMultiLingualOnly() ) && + ( ! packageData.isHidden() ) && + ( packageData.getSelectionState() != packageData.IGNORE ) && + ( packageData.getSelectionState() != packageData.REMOVE )) { + setToTrue = true; + data.setLanguageModulesChecked(true); + } + + if ( ! setToTrue ) { + for (Enumeration e = packageData.children(); e.hasMoreElements(); ) { + PackageDescription child = (PackageDescription) e.nextElement(); + checkLanguageModulesUninstall(child, data); + } + } + } + static public void checkMaskedCompleteUninstallation(PackageDescription packageData, InstallData data) { boolean setToFalse = false; @@ -616,4 +723,105 @@ public class ModuleCtrl { } } + static public void defaultDatabaseAnalysis(InstallData data) { + + PackageDescription packageData = SetupDataProvider.getPackageDescription(); + Installer installer = InstallerFactory.getInstance(); + + // restore default settings + if ( data.startSelectionStateSaved() ) { + // System.err.println("Restoring start selection states"); + ModuleCtrl.restoreStartSelectionStates(packageData); + } else { + ModuleCtrl.saveStartSelectionStates(packageData); + data.setStartSelectionStateSaved(true); + } + + // Special ToDos, if this is an update installation of an older product. + // In this case, "chooseInstallationType" and "chooseComponents" are not called. + // Is it necessary to call "analyzeDatabase" ? + if ( data.olderVersionExists() ) { + // Calculation of size is not necessary, because only + // already installed packages will be updated. + + if ( data.logModuleStates() ) { + Dumper.logModuleStates(packageData, "ChooseDirectory: Before setUpdateOlderProductSettings"); + } + + // Updating only those packages that are installed. + System.err.println("setUpdateOlderProductSettings: Start"); + ModuleCtrl.setUpdateOlderProductSettings(packageData, data, installer); + System.err.println("setUpdateOlderProductSettings: End"); + + if ( data.logModuleStates() ) { + Dumper.logModuleStates(packageData, "ChooseDirectory: After setUpdateOlderProductSettings"); + } + + // Checking, if all packages are available + ModuleCtrl.disableNonExistingPackages(packageData, data); + + if ( data.logModuleStates() ) { + Dumper.logModuleStates(packageData, "ChooseDirectory: After disableNonExistingPackages"); + } + + // disable packages, that are not valid in user installation + if ( data.isUserInstallation() ) { + ModuleCtrl.setShowInUserInstallFlags(packageData); + + if ( data.logModuleStates() ) { + Dumper.logModuleStates(packageData, "ChooseDirectory: After setShowInUserInstallFlags"); + } + } + + // Collecting packages to install + // This has to be done here, because "ChooseInstallationType" and "ChooseComponents" + // are not called. + Vector installPackages = new Vector(); + PackageCollector.collectInstallPackages(packageData, installPackages); + data.setInstallPackages(installPackages); + + } else { // same version exists or no version exists + + // database changed -> ignore saved states + data.setTypicalSelectionStateSaved(false); + data.setCustomSelectionStateSaved(false); + + if ( data.logModuleStates() ) { + Dumper.logModuleStates(packageData, "analyzeDatabase: Start"); + } + + // searching in the database for already installed packages + LogManager.setCommandsHeaderLine("Analyzing system database"); + ModuleCtrl.setDatabaseSettings(packageData, data, installer); + + if ( data.logModuleStates() ) { + Dumper.logModuleStates(packageData, "analyzeDatabase: After setDatabaseSettings"); + } + + // ModuleCtrl.analyzeDatabase(); + ModuleCtrl.disableNonExistingPackages(packageData, data); + + if ( data.logModuleStates() ) { + Dumper.logModuleStates(packageData, "ChooseDirectory: After disableNonExistingPackages"); + } + + // disable packages, that are not valid in user installation + if ( data.isUserInstallation() ) { + ModuleCtrl.setShowInUserInstallFlags(packageData); + + if ( data.logModuleStates() ) { + Dumper.logModuleStates(packageData, "ChooseDirectory: After setShowInUserInstallFlags"); + } + } + + // Problem: If all submodules have flag IGNORE, the parent can also get IGNORE + // That is interesting for language packs with three submodules. + ModuleCtrl.setParentDefaultModuleSettings(packageData); + + if ( data.logModuleStates() ) { + Dumper.logModuleStates(packageData, "ChooseDirectory: After setParentDefaultModuleSettings"); + } + } + } + } |