xref: /AOO41X/main/javainstaller2/src/JavaSetup/org/openoffice/setup/Util/InstallChangeCtrl.java (revision 67e470dafe1997e73f56ff7ff4878983707e3e07)
1*9a1eeea9SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*9a1eeea9SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*9a1eeea9SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*9a1eeea9SAndrew Rist  * distributed with this work for additional information
6*9a1eeea9SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*9a1eeea9SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*9a1eeea9SAndrew Rist  * "License"); you may not use this file except in compliance
9*9a1eeea9SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*9a1eeea9SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*9a1eeea9SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*9a1eeea9SAndrew Rist  * software distributed under the License is distributed on an
15*9a1eeea9SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*9a1eeea9SAndrew Rist  * KIND, either express or implied.  See the License for the
17*9a1eeea9SAndrew Rist  * specific language governing permissions and limitations
18*9a1eeea9SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*9a1eeea9SAndrew Rist  *************************************************************/
21*9a1eeea9SAndrew Rist 
22*9a1eeea9SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir package org.openoffice.setup.Util;
25cdf0e10cSrcweir 
26cdf0e10cSrcweir import org.openoffice.setup.InstallData;
27cdf0e10cSrcweir import org.openoffice.setup.Installer.Installer;
28cdf0e10cSrcweir import org.openoffice.setup.Installer.InstallerFactory;
29cdf0e10cSrcweir import org.openoffice.setup.Panel.ChooseDirectory;
30cdf0e10cSrcweir import org.openoffice.setup.ResourceManager;
31cdf0e10cSrcweir import org.openoffice.setup.SetupData.PackageDescription;
32cdf0e10cSrcweir import org.openoffice.setup.SetupData.SetupDataProvider;
33cdf0e10cSrcweir import java.util.Enumeration;
34cdf0e10cSrcweir 
35cdf0e10cSrcweir 
36cdf0e10cSrcweir public class InstallChangeCtrl {
37cdf0e10cSrcweir 
InstallChangeCtrl()38cdf0e10cSrcweir     private InstallChangeCtrl() {
39cdf0e10cSrcweir     }
40cdf0e10cSrcweir 
setUpdatePackage(PackageDescription packageData, InstallData installData)41cdf0e10cSrcweir     static private void setUpdatePackage(PackageDescription packageData, InstallData installData) {
42cdf0e10cSrcweir         if (( packageData.isUpdatePackage() == true )) {
43cdf0e10cSrcweir             installData.setUpdatePackage(packageData);
44cdf0e10cSrcweir         } else {
45cdf0e10cSrcweir             for (Enumeration e = packageData.children(); e.hasMoreElements(); ) {
46cdf0e10cSrcweir                 PackageDescription child = (PackageDescription) e.nextElement();
47cdf0e10cSrcweir                 setUpdatePackage(child, installData);
48cdf0e10cSrcweir             }
49cdf0e10cSrcweir         }
50cdf0e10cSrcweir     }
51cdf0e10cSrcweir 
setChangeInstallDir(InstallData installData, Installer installer)52cdf0e10cSrcweir     static private void setChangeInstallDir(InstallData installData, Installer installer) {
53cdf0e10cSrcweir         // setting the new install dir after analyzing the installation directory
54cdf0e10cSrcweir         // of the installed update package.
55cdf0e10cSrcweir         if ( installData.isRootInstallation() ) {
56cdf0e10cSrcweir         	String changeInstallDir = "/";
57cdf0e10cSrcweir             installData.setInstallDir(changeInstallDir);
58cdf0e10cSrcweir         } else {
59cdf0e10cSrcweir             String changeInstallDir = installer.getChangeInstallDir(installData.getUpdatePackage());
60cdf0e10cSrcweir             installData.setInstallDir(changeInstallDir);
61cdf0e10cSrcweir         }
62cdf0e10cSrcweir     }
63cdf0e10cSrcweir 
64cdf0e10cSrcweir     // static public void checkInstallChange(InstallData data, ChooseDirectory panel) {
checkInstallChange(InstallData data)65cdf0e10cSrcweir     static public void checkInstallChange(InstallData data) {
66cdf0e10cSrcweir 
67cdf0e10cSrcweir         Installer installer = InstallerFactory.getInstance();
68cdf0e10cSrcweir         PackageDescription packageData = SetupDataProvider.getPackageDescription();
69cdf0e10cSrcweir 
70cdf0e10cSrcweir         if ( data.getUpdatePackage() == null ) {
71cdf0e10cSrcweir             setUpdatePackage(packageData, data);
72cdf0e10cSrcweir         }
73cdf0e10cSrcweir 
74cdf0e10cSrcweir         if ( data.getUpdatePackage() != null ) {
75cdf0e10cSrcweir 
76cdf0e10cSrcweir             // resetting values, if database was changed during user installation
77cdf0e10cSrcweir             data.setOlderVersionExists(false);
78cdf0e10cSrcweir             data.setNewerVersionExists(false);
79cdf0e10cSrcweir             data.setSameVersionExists(false);
80cdf0e10cSrcweir 
81cdf0e10cSrcweir             boolean packageIsInstalled = installer.isPackageInstalled(data.getUpdatePackage(), data);
82cdf0e10cSrcweir             if ( packageIsInstalled ) {
83cdf0e10cSrcweir 
84cdf0e10cSrcweir             	// Checking version of installed package:
85cdf0e10cSrcweir             	// If installed package is older: Force update mode, no selection of packages
86cdf0e10cSrcweir             	// If installed package is equal: Force maintenance mode, only selection of packages
87cdf0e10cSrcweir             	// If installed package is newer: Abort installation with message
88cdf0e10cSrcweir 
89cdf0e10cSrcweir                 // Setting specific values for the different update scenarios
90cdf0e10cSrcweir                 if ( installer.isInstalledPackageOlder(data.getUpdatePackage(), data) ) {
91cdf0e10cSrcweir                     data.setOlderVersionExists(true);
92cdf0e10cSrcweir                     // All installed packages will be updated -> determining which packages are installed
93cdf0e10cSrcweir                     System.err.println("An older product is installed");
94cdf0e10cSrcweir                     // But if this is a kind of Major Upgrade with different Minor and therefore different package names,
95cdf0e10cSrcweir                     // it is necessary to remove the old product.
96cdf0e10cSrcweir                     if ( data.getProductMinor() > data.getInstalledProductMinor() )
97cdf0e10cSrcweir                     {
98cdf0e10cSrcweir                     	data.setMajorUpgrade(true);
99cdf0e10cSrcweir                         System.err.println("Major Upgrade");
100cdf0e10cSrcweir                     }
101cdf0e10cSrcweir                 } else if ( installer.isInstallSetPackageOlder(data.getUpdatePackage(), data) ) {
102cdf0e10cSrcweir                     data.setNewerVersionExists(true);
103cdf0e10cSrcweir                     System.err.println("A newer product is installed");
104cdf0e10cSrcweir                 } else {
105cdf0e10cSrcweir                     data.setSameVersionExists(true);
106cdf0e10cSrcweir                     System.err.println("Same product is installed");
107cdf0e10cSrcweir                 }
108cdf0e10cSrcweir 
109cdf0e10cSrcweir             	// If installed package is older or equal, the installdir has to be fixed
110cdf0e10cSrcweir             	// if this is a root installation
111cdf0e10cSrcweir             	if ( data.isRootInstallation() ) {
112cdf0e10cSrcweir                     setChangeInstallDir(data, installer);
113cdf0e10cSrcweir                     data.setIsChangeInstallation(true);
114cdf0e10cSrcweir                 }
115cdf0e10cSrcweir 
116cdf0e10cSrcweir             	// Exit installation, if update is not wanted and this is a root installation.
117cdf0e10cSrcweir             	// In installations without root privileges, the user can choose another installation
118cdf0e10cSrcweir             	// directory (ChooseDirectoryCtrl.java).
119cdf0e10cSrcweir             	if ( data.isRootInstallation() && data.dontUpdate() && data.olderVersionExists() ) {
120cdf0e10cSrcweir                     System.err.println("Error: An older version is already installed in directory " + data.getInstallDir() + "!");
121cdf0e10cSrcweir                     String message1 = ResourceManager.getString("String_Older_Version_Installed_Found")
122cdf0e10cSrcweir                                     + "\n" + data.getInstallDir() + "\n";
123cdf0e10cSrcweir                     String message2 = ResourceManager.getString("String_Older_Version_Installed_Remove");
124cdf0e10cSrcweir                     String message = message1 + "\n" + message2;
125cdf0e10cSrcweir                     String title = ResourceManager.getString("String_Error");
126cdf0e10cSrcweir                     Informer.showErrorMessage(message, title);
127cdf0e10cSrcweir                     System.exit(1);
128cdf0e10cSrcweir             	}
129cdf0e10cSrcweir             }
130cdf0e10cSrcweir         }
131cdf0e10cSrcweir     }
132cdf0e10cSrcweir 
133cdf0e10cSrcweir }
134