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