diff options
Diffstat (limited to 'javainstaller2/src/JavaSetup/org/openoffice/setup/Installer')
4 files changed, 1440 insertions, 0 deletions
diff --git a/javainstaller2/src/JavaSetup/org/openoffice/setup/Installer/Installer.java b/javainstaller2/src/JavaSetup/org/openoffice/setup/Installer/Installer.java new file mode 100755 index 000000000000..43ae1a369bd3 --- /dev/null +++ b/javainstaller2/src/JavaSetup/org/openoffice/setup/Installer/Installer.java @@ -0,0 +1,79 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +package org.openoffice.setup.Installer; + +import org.openoffice.setup.InstallData; +import org.openoffice.setup.SetupData.PackageDescription; + +public abstract class Installer { + + public Installer() { + } + + public void preInstall(PackageDescription packageData) { + } + + public void postInstall(PackageDescription packageData) { + } + + public void preUninstall(PackageDescription packageData) { + } + + public void postUninstall(PackageDescription packageData) { + } + + public void preInstallationOngoing () { + } + + public void postInstallationOngoing () { + } + + public void postUninstallationOngoing () { + } + + public void defineDatabasePath() { + } + + public String getChangeInstallDir(PackageDescription packageData) { + return null; + } + + public boolean isPackageNameInstalled(String packageName, InstallData installData) { + return false; + } + + public abstract void installPackage(PackageDescription packageData); + + public abstract void uninstallPackage(PackageDescription packageData); + + public abstract boolean isPackageInstalled(PackageDescription packageData, InstallData installData); + + public abstract boolean isInstalledPackageOlder(PackageDescription packageData, InstallData installData); + + public abstract boolean isInstallSetPackageOlder(PackageDescription packageData, InstallData installData); +} diff --git a/javainstaller2/src/JavaSetup/org/openoffice/setup/Installer/InstallerFactory.java b/javainstaller2/src/JavaSetup/org/openoffice/setup/Installer/InstallerFactory.java new file mode 100755 index 000000000000..04e2cf2b4808 --- /dev/null +++ b/javainstaller2/src/JavaSetup/org/openoffice/setup/Installer/InstallerFactory.java @@ -0,0 +1,67 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +package org.openoffice.setup.Installer; + +import org.openoffice.setup.InstallData; +import org.openoffice.setup.ResourceManager; +import org.openoffice.setup.Util.Informer; + +public class InstallerFactory +{ + private static Installer instance = null; + + private InstallerFactory() { + } + + public static Installer getInstance() + { + if (instance == null) { + instance = createInstaller(); + } + return instance; + } + + private static Installer createInstaller() { + + InstallData data = InstallData.getInstance(); + if ( data.getOSType().equalsIgnoreCase("Linux")) { + instance = new LinuxInstaller(); + } else if ( data.getOSType().equalsIgnoreCase("SunOS")) { + instance = new SolarisInstaller(); + } else { + System.err.println("Error: No installer for this OS defined!"); + String message = ResourceManager.getString("String_InstallerFactory_Os_Not_Supported"); + String title = ResourceManager.getString("String_Error"); + Informer.showErrorMessage(message, title); + System.exit(1); + } + + return instance; + } + +} diff --git a/javainstaller2/src/JavaSetup/org/openoffice/setup/Installer/LinuxInstaller.java b/javainstaller2/src/JavaSetup/org/openoffice/setup/Installer/LinuxInstaller.java new file mode 100755 index 000000000000..4383904569c0 --- /dev/null +++ b/javainstaller2/src/JavaSetup/org/openoffice/setup/Installer/LinuxInstaller.java @@ -0,0 +1,720 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +package org.openoffice.setup.Installer; + +import java.io.File; +import org.openoffice.setup.InstallData; +import org.openoffice.setup.InstallerHelper.LinuxHelper; +import org.openoffice.setup.ResourceManager; +import org.openoffice.setup.SetupData.PackageDescription; +import org.openoffice.setup.SetupData.ProductDescription; +import org.openoffice.setup.SetupData.SetupDataProvider; +import org.openoffice.setup.Util.ExecuteProcess; +import org.openoffice.setup.Util.Informer; +import org.openoffice.setup.Util.LogManager; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Vector; + +public class LinuxInstaller extends Installer { + + LinuxHelper helper = new LinuxHelper(); + + public LinuxInstaller() { + super(); + } + + public void preInstall(PackageDescription packageData) { + InstallData installData = InstallData.getInstance(); + // Collecting package names + helper.getLinuxPackageNamesFromRpmquery(packageData, installData); + helper.getLinuxFileInfo(packageData); + // Dumper.dumpAllRpmInfo(packageData); + } + + public void postInstall(PackageDescription packageData) { + InstallData data = InstallData.getInstance(); + + if ( ! data.isAbortedInstallation() ) { + data.setStillRunning(true); + // Collecting information about installed packages + // Creating a list containing pairs of package names and rpm file names + // that has to be used during uninstallation. + helper.createPackageNameFileAtPostinstall(data, packageData); + helper.saveModulesLogFile(data); + data.setStillRunning(false); + } + } + + public void preUninstall(PackageDescription packageData) { + // Collecting information about installed packages + HashMap packageNames = helper.readPackageNamesFile(); + helper.setFullPackageNameAtUninstall(packageData, packageNames); + helper.getLinuxFileInfo(packageData); + // Dumper.dumpAllRpmInfo(packageData); + } + + public void defineDatabasePath() { + + InstallData data = InstallData.getInstance(); + String oldDatabasePath = data.getDatabasePath(); + data.setDatabasePath(null); + + // Determining the database path (only for user installation). + // Important if a user installation is done into an existing + // user installation -> this methode can only be called after + // determination of installation directory. + + if ( data.isUserInstallation() ) { + String databasePath = helper.getLinuxDatabasePath(data); // the file does not need to exist! + data.setDatabasePath(databasePath); + + // If this is a new path to the database, then this database was + // not analyzed before (when going back in installation wizard) + if ( ! databasePath.equals(oldDatabasePath) ) { + data.setDatabaseAnalyzed(false); + data.setDatabaseQueried(false); + } + } + } + + public String getChangeInstallDir(PackageDescription packageData) { + String installDir = null; + InstallData installData = InstallData.getInstance(); + + String packageName = packageData.getPkgRealName(); + + if ( packageName != null ) { + String rpmCommand = "rpm -q --queryformat %{INSTALLPREFIX} " + packageName; + String[] rpmCommandArray = new String[5]; + rpmCommandArray[0] = "rpm"; + rpmCommandArray[1] = "-q"; + rpmCommandArray[2] = "--queryformat"; + rpmCommandArray[3] = "%{INSTALLPREFIX}"; + rpmCommandArray[4] = packageName; + + Vector returnVector = new Vector(); + Vector returnErrorVector = new Vector(); + int returnValue = ExecuteProcess.executeProcessReturnVector(rpmCommandArray, returnVector, returnErrorVector); + String returnString = (String) returnVector.get(0); + returnString = returnString.replaceAll("//","/"); + + String log = rpmCommand + "<br><b>Returns: " + returnString + "</b><br>"; + LogManager.addCommandsLogfileComment(log); + + installDir = returnString; + } + + return installDir; + } + + public void installPackage(PackageDescription packageData) { + // get ProductDescription for logging mechanism + ProductDescription productData = SetupDataProvider.getProductDescription(); + InstallData data = InstallData.getInstance(); + + // String log = "<br><b>Package: " + packageData.getName() + "</b>"; + // LogManager.addCommandsLogfileComment(log); + String log = ""; + + // setting installDir + String installDir = data.getInstallDir(); + String packagePath = data.getPackagePath(); + + if (( packageData.getPkgSubdir() != null ) && ( ! packageData.getPkgSubdir().equals("") )) { + File completePackageFile = new File(packagePath, packageData.getPkgSubdir()); + packagePath = completePackageFile.getPath(); + } + + String packageName = packageData.getPackageName(); + + if (( packageName.equals("")) || ( packageName == null )) { + log = "<b>No package name specified. Nothing to do</b>"; + LogManager.addCommandsLogfileComment(log); + } else { + log = "<b>Package Name: " + packageName + "</b>"; + LogManager.addCommandsLogfileComment(log); + + File completePackage = new File(packagePath, packageName); + packageName = completePackage.getPath(); + packageName = "\"" + packageName + "\""; // Quoting is necessary, if the path the the packages contains white spaces. + + if ( completePackage.exists() ) { + String relocations = helper.getRelocationString(packageData, packageName); + if ( relocations != null ) { + // Problem: If Prefix = "/" the packages are not relocatable with RPM version 3.x . + // Therefore Prefix has to be "/opt" in spec file, although packages shall not be + // relocatable (except for installations with root privileges). So /opt has to be + // listed left and right of equal sign: --relocate /opt=<installDir>/opt + // -> /opt has to be added to the installDir + File localInstallDir = new File(installDir, relocations); // "/" -> "/opt" + String localInstallDirString = localInstallDir.getPath(); + + // Fixing problem with installation directory and RPM version 3.x + String fixedInstallDir = helper.fixInstallationDirectory(localInstallDirString); + relocations = relocations + "=" + fixedInstallDir; + // relocations: "/opt/staroffice8=" + fixedInstallDir; + } + + // Some packages have to be installed with parameter "--force", if the link "/usr/bin/soffice" + // already exists. These pacakges return true with methode "useForce()". + boolean useForce = false; + if ( packageData.useForce() ) { + File sofficeLink = new File("/usr/bin/soffice"); + if ( sofficeLink.exists() ) { useForce = true; } + } + + // On Debian based systems, rpms can be installed with the switch --force-debian, if a rpm + // is installed. + + String forceDebianString = ""; + String nodepsString = ""; + + if ( ! data.debianInvestigated() ) { + helper.investigateDebian(data); + data.setDebianInvestigated(true); + } + + if ( data.isDebianSystem() ) { + nodepsString = "--nodeps"; + + if ( data.useForceDebian() ) { + forceDebianString = "--force-debian"; + } + } + + String databasePath = null; + String databaseString = ""; + boolean useLocalDatabase = false; + + if ( data.isUserInstallation() ) { + databasePath = data.getDatabasePath(); + if ( databasePath == null ) { + databasePath = helper.getLinuxDatabasePath(data); + data.setDatabasePath(databasePath); + } + } + + if (( databasePath != null ) && (! databasePath.equalsIgnoreCase("null"))) { + databaseString = "--dbpath"; + useLocalDatabase = true; + } + + // Defining a Vector that contains the full rpm command. Then the string array can be + // created dynamically. Otherwise there would be too many different scenarios. + + Vector rpmVector = new Vector(); + + rpmVector.add("rpm"); + rpmVector.add("--upgrade"); + rpmVector.add("--ignoresize"); + + if ( useForce ) { + rpmVector.add("--force"); + } + + if ( ! forceDebianString.equals("") ) { + rpmVector.add(forceDebianString); + } + + if ( ! nodepsString.equals("") ) { + rpmVector.add(nodepsString); + } + + rpmVector.add("-vh"); + + if ( relocations != null ) { + rpmVector.add("--relocate"); + rpmVector.add(relocations); + } + + if ( useLocalDatabase ) { + rpmVector.add(databaseString); + rpmVector.add(databasePath); + } + + rpmVector.add(packageName); + + // Creating String and StringArray for rpm command + + int capacity = rpmVector.size(); + + String rpmCommand = ""; + String[] rpmCommandArray = new String[capacity]; + + for (int i = 0; i < rpmVector.size(); i++) { + rpmCommandArray[i] = (String)rpmVector.get(i); + rpmCommand = rpmCommand + " " + (String)rpmVector.get(i); + } + + rpmCommand = rpmCommand.trim(); + + // Staring rpm process + + Vector returnVector = new Vector(); + Vector returnErrorVector = new Vector(); + // int returnValue = SystemManager.executeProcessReturnVector(rpmCommand, returnVector, returnErrorVector); + int returnValue = ExecuteProcess.executeProcessReturnVector(rpmCommandArray, returnVector, returnErrorVector); + + if ( returnValue == 0 ) { + log = rpmCommand + "<br><b>Returns: " + returnValue + " Successful installation</b><br>"; + LogManager.addCommandsLogfileComment(log); + } else { // an error occured during installation + if ( packageData.installCanFail() ) { + log = rpmCommand + "<br><b>Returns: " + returnValue + " Problem during installation. Can be ignored.</b><br>"; + LogManager.addCommandsLogfileComment(log); + } else { + log = rpmCommand + "<br><b>Returns: " + returnValue + " Error during installation</b><br>"; + LogManager.addCommandsLogfileComment(log); + for (int i = 0; i < returnErrorVector.size(); i++) { + LogManager.addCommandsLogfileComment((String)returnErrorVector.get(i)); + } + data.setIsErrorInstallation(true); + } + } + + // saving installation state at package + packageData.setIsNewInstalled(true); + } else { + log = "<b>Error: Did not find package " + packageName + "</b><br>"; + System.err.println(log); + String message = ResourceManager.getString("String_File_Not_Found") + ": " + packageName; + String title = ResourceManager.getString("String_Error"); + Informer.showErrorMessage(message, title); + LogManager.addCommandsLogfileComment(log); + data.setIsErrorInstallation(true); + } + } + } + + public void uninstallPackage(PackageDescription packageData) { + // get ProductDescription for logging mechanism + ProductDescription productData = SetupDataProvider.getProductDescription(); + InstallData data = InstallData.getInstance(); + + String log = ""; + // String log = "<br><b>Package: " + packageData.getName() + "</b>"; + // LogManager.addCommandsLogfileComment(log); + + String rpmPackageName = packageData.getPackageName(); + + if (( rpmPackageName.equals("")) || ( rpmPackageName == null )) { + log = "<b>No package name specified. Nothing to do</b>"; + LogManager.addCommandsLogfileComment(log); + } else { + log = "<b>Package Name: " + rpmPackageName + "</b>"; + LogManager.addCommandsLogfileComment(log); + + String packageName = packageData.getPkgRealName(); + String databasePath = data.getDatabasePath(); + String databaseString = ""; + boolean useLocalDatabase = false; + + if (( databasePath != null ) && (! databasePath.equalsIgnoreCase("null"))) { + databaseString = "--dbpath"; + useLocalDatabase = true; + } + + // On Debian based systems, rpms can be installed with the switch --force-debian, if a rpm + // is installed. + + String forceDebianString = ""; + String nodepsString = ""; + + if ( ! data.debianInvestigated() ) { + helper.investigateDebian(data); + data.setDebianInvestigated(true); + } + + if ( data.isDebianSystem() ) { + nodepsString = "--nodeps"; + + if ( data.useForceDebian() ) { + forceDebianString = "--force-debian"; + } + } + + // Defining a Vector that contains the full rpm command. Then the string array can be + // created dynamically. Otherwise there would be too many different scenarios. + + Vector rpmVector = new Vector(); + + rpmVector.add("rpm"); + + if ( ! forceDebianString.equals("") ) { + rpmVector.add(forceDebianString); + } + + if ( ! nodepsString.equals("") ) { + rpmVector.add(nodepsString); + } + + rpmVector.add("-ev"); + + if ( useLocalDatabase ) { + rpmVector.add(databaseString); + rpmVector.add(databasePath); + } + + rpmVector.add(packageName); + + // Creating String and StringArray for rpm command + + int capacity = rpmVector.size(); + + String rpmCommand = ""; + String[] rpmCommandArray = new String[capacity]; + + for (int i = 0; i < rpmVector.size(); i++) { + rpmCommandArray[i] = (String)rpmVector.get(i); + rpmCommand = rpmCommand + " " + (String)rpmVector.get(i); + } + + rpmCommand = rpmCommand.trim(); + + // Starting rpm process + + Vector returnVector = new Vector(); + Vector returnErrorVector = new Vector(); + int returnValue = ExecuteProcess.executeProcessReturnVector(rpmCommandArray, returnVector, returnErrorVector); + + if ( returnValue == 0 ) { + log = rpmCommand + "<br><b>Returns: " + returnValue + " Successful uninstallation</b><br>"; + LogManager.addCommandsLogfileComment(log); + } else { // an error occured during installation + if ( packageData.uninstallCanFail() ) { + log = rpmCommand + "<br><b>Returns: " + returnValue + " Problem during uninstallation. Can be ignored.</b><br>"; + LogManager.addCommandsLogfileComment(log); + } else { + log = rpmCommand + "<br><b>Returns: " + returnValue + " Error during uninstallation</b><br>"; + LogManager.addCommandsLogfileComment(log); + for (int i = 0; i < returnErrorVector.size(); i++) { + LogManager.addCommandsLogfileComment((String)returnErrorVector.get(i)); + } + data.setIsErrorInstallation(true); + } + } + } + } + + public boolean isPackageInstalledClassic(PackageDescription packageData, InstallData installData) { + + boolean isInstalled = false; + boolean doCheck = false; + + // only checking existing packages (and always at uninstallation) + if ( (packageData.pkgExists()) || (installData.isUninstallationMode()) ) { + doCheck = true; + } + + String rpmPackageName = packageData.getPackageName(); + + if ( rpmPackageName.equals("") ) { + rpmPackageName = null; + } + + if (( rpmPackageName != null ) && ( doCheck )) { + + String databaseString = ""; + String databasePath = null; + String packageName = packageData.getPkgRealName(); + Vector allPackages = null; + boolean useLocalDatabase = false; + + if (installData.isUserInstallation()) { + databasePath = installData.getDatabasePath(); + } + + if (( databasePath != null ) && (! databasePath.equals("null"))) { + databaseString = "--dbpath"; + useLocalDatabase = true; + } + + if (packageName != null) { + + String rpmCommand; + String[] rpmCommandArray; + + if (useLocalDatabase) { + rpmCommand = "rpm" + " " + databaseString + " " + databasePath + " --query " + packageName; + rpmCommandArray = new String[5]; + rpmCommandArray[0] = "rpm"; + rpmCommandArray[1] = databaseString; + rpmCommandArray[2] = databasePath; + rpmCommandArray[3] = "--query"; + rpmCommandArray[4] = packageName; + } else { + rpmCommand = "rpm" + " --query " + packageName; + rpmCommandArray = new String[3]; + rpmCommandArray[0] = "rpm"; + rpmCommandArray[1] = "--query"; + rpmCommandArray[2] = packageName; + } + + int returnValue = ExecuteProcess.executeProcessReturnValue(rpmCommandArray); + + if ( returnValue == 0 ) { + isInstalled = true; + packageData.setWasAlreadyInstalled(true); // needed for logging + String log = rpmCommand + "<br><b>Returns: " + returnValue + " Package is installed" + "</b><br>"; + LogManager.addCommandsLogfileComment(log); + } else { + String log = rpmCommand + "<br><b>Returns: " + returnValue + " Package is not installed" + "</b><br>"; + LogManager.addCommandsLogfileComment(log); + } + } + } + + return isInstalled; + } + + private void queryAllDatabase(InstallData installData) { + + String databaseString = ""; + String databasePath = null; + HashMap map = new HashMap();; + boolean useLocalDatabase = false; + + if (installData.isUserInstallation()) { + databasePath = installData.getDatabasePath(); + } + + if (( databasePath != null ) && (! databasePath.equals("null"))) { + databaseString = "--dbpath"; + useLocalDatabase = true; + } + + String rpmCommand; + String[] rpmCommandArray; + + if (useLocalDatabase) { + rpmCommand = "rpm" + " " + databaseString + " " + databasePath + " --query" + " -a"; + rpmCommandArray = new String[5]; + rpmCommandArray[0] = "rpm"; + rpmCommandArray[1] = databaseString; + rpmCommandArray[2] = databasePath; + rpmCommandArray[3] = "--query"; + rpmCommandArray[4] = "-a"; + } else { + rpmCommand = "rpm" + " --query" + " -a"; + rpmCommandArray = new String[3]; + rpmCommandArray[0] = "rpm"; + rpmCommandArray[1] = "--query"; + rpmCommandArray[2] = "-a"; + } + + Vector returnVector = new Vector(); + Vector returnErrorVector = new Vector(); + int returnValue = ExecuteProcess.executeProcessReturnVector(rpmCommandArray, returnVector, returnErrorVector); + + String log = rpmCommand + "<br><b>Returns: " + returnValue + "</b><br>"; + LogManager.addCommandsLogfileComment(log); + String value = "1"; + + if ( ! returnVector.isEmpty()) { + for (int i = 0; i < returnVector.size(); i++) { + String onePackage = (String)returnVector.get(i); + int pos1 = onePackage.lastIndexOf("-"); + int pos2 = onePackage.substring(0, pos1).lastIndexOf("-"); + String key = onePackage.substring(0, pos2); + map.put(key, value); + } + } + + installData.setDatabaseQueried(true); + installData.setDatabaseMap(map); + } + + public boolean isPackageInstalled(PackageDescription packageData, InstallData installData) { + + boolean isInstalled = false; + boolean doCheck = false; + + // only checking existing packages (and always at uninstallation) + if ( (packageData.pkgExists()) || (installData.isUninstallationMode()) ) { + doCheck = true; + } + + String rpmPackageName = packageData.getPackageName(); + + if ( rpmPackageName.equals("") ) { + rpmPackageName = null; + } + + if (( rpmPackageName != null ) && ( doCheck )) { + String packageName = packageData.getPkgRealName(); + + if (packageName != null) { + + HashMap map = null; + if ( ! installData.databaseQueried() ) { + queryAllDatabase(installData); + } + + map = installData.getDatabaseMap(); + + if ( map.containsKey(packageName)) { + isInstalled = true; + } + } else { + System.err.println("Error: No packageName defined for package: " + packageData.getPackageName()); + } + } + + return isInstalled; + } + + public boolean isInstallSetPackageOlder(PackageDescription packageData, InstallData installData) { + boolean installSetPackageIsOlder = false; + boolean checkIfInstalledIsOlder = false; + installSetPackageIsOlder = findOlderPackage(packageData, installData, checkIfInstalledIsOlder); + return installSetPackageIsOlder; + } + + public boolean isInstalledPackageOlder(PackageDescription packageData, InstallData installData) { + boolean installedPackageIsOlder = false; + boolean checkIfInstalledIsOlder = true; + installedPackageIsOlder = findOlderPackage(packageData, installData, checkIfInstalledIsOlder); + return installedPackageIsOlder; + } + + private boolean findOlderPackage(PackageDescription packageData, InstallData installData, boolean checkIfInstalledIsOlder) { + + // The information about the new package is stored in packageData (the version and the release). + // This information can be stored in xpd files. If it is not stored in xpd files, it is determined + // during installation process by querying the rpm file. This process costs much time and should + // therefore be done by the process, that creates the xpd files. On the other hand this requires, + // that the xpd files contain the correct information. + + boolean isOlder = false; + + // get the version of the installed package + String rpmPackageName = packageData.getPackageName(); + String log; + + if ( rpmPackageName.equals("")) { + rpmPackageName = null; + } + + if ( rpmPackageName != null ) { + String databaseString = ""; + String databasePath = null; + String packageName = packageData.getPkgRealName(); + Vector allPackages = null; + boolean useLocalDatabase = false; + + if (installData.isUserInstallation()) { + databasePath = installData.getDatabasePath(); + } + + if (( databasePath != null ) && (! databasePath.equals("null"))) { + databaseString = "--dbpath"; + useLocalDatabase = true; + } + + if (packageName != null) { + // Collect information about the installed package by querying the database. + // Instead of rpm file name, the real package name has to be used. + + String rpmCommand; + String[] rpmCommandArray; + + if (useLocalDatabase) { + rpmCommand = "rpm" + " " + databaseString + " " + databasePath + " -q --queryformat %{VERSION}\\n " + packageName; + rpmCommandArray = new String[7]; + rpmCommandArray[0] = "rpm"; + rpmCommandArray[1] = databaseString; + rpmCommandArray[2] = databasePath; + rpmCommandArray[3] = "-q"; + rpmCommandArray[4] = "--queryformat"; + rpmCommandArray[5] = "%{VERSION}\\n"; + rpmCommandArray[6] = packageName; + } else { + rpmCommand = "rpm" + " -q --queryformat %{VERSION}\\n " + packageName; + rpmCommandArray = new String[5]; + rpmCommandArray[0] = "rpm"; + rpmCommandArray[1] = "-q"; + rpmCommandArray[2] = "--queryformat"; + rpmCommandArray[3] = "%{VERSION}\\n"; + rpmCommandArray[4] = packageName; + } + + Vector versionVector = new Vector(); + Vector returnErrorVector = new Vector(); + int returnValue = ExecuteProcess.executeProcessReturnVector(rpmCommandArray, versionVector, returnErrorVector); + String version = (String) versionVector.lastElement(); + log = rpmCommand + "<br><b>Returns: " + version + "</b><br>"; + LogManager.addCommandsLogfileComment(log); + + if ( ! installData.installedProductMinorSet() ) { + int productMinor = helper.getInstalledMinor(version); + installData.setInstalledProductMinor(productMinor); + installData.setInstalledProductMinorSet(true); + } + + if (useLocalDatabase) { + rpmCommand = "rpm" + " " + databaseString + " " + databasePath + " -q --queryformat %{RELEASE}\\n " + packageName; + rpmCommandArray[5] = "%{RELEASE}\\n"; + } else { + rpmCommand = "rpm" + " -q --queryformat %{RELEASE}\\n " + packageName; + rpmCommandArray[3] = "%{RELEASE}\\n"; + } + + Vector releaseVector = new Vector(); + returnValue = ExecuteProcess.executeProcessReturnVector(rpmCommandArray, releaseVector, returnErrorVector); + String release = (String) releaseVector.lastElement(); + + log = rpmCommand + "<br><b>Returns: " + release + "</b><br>"; + LogManager.addCommandsLogfileComment(log); + + isOlder = helper.compareVersionAndRelease(version, release, packageData, checkIfInstalledIsOlder); + + if ( checkIfInstalledIsOlder ) { + if ( isOlder ) { + LogManager.addCommandsLogfileComment("<b>-> Installed package is older</b><br>"); + } else { + LogManager.addCommandsLogfileComment("<b>-> Installed package is not older</b><br>"); + } + } else { + if ( isOlder ) { + LogManager.addCommandsLogfileComment("<b>-> Package in installation set is older</b><br>"); + } else { + LogManager.addCommandsLogfileComment("<b>-> Package in installation set is not older</b><br>"); + } + } + + } else { + System.err.println("Error: No packageName defined for package: " + rpmPackageName); + } + } + + return isOlder; + } + +} diff --git a/javainstaller2/src/JavaSetup/org/openoffice/setup/Installer/SolarisInstaller.java b/javainstaller2/src/JavaSetup/org/openoffice/setup/Installer/SolarisInstaller.java new file mode 100755 index 000000000000..7aacc5557fa6 --- /dev/null +++ b/javainstaller2/src/JavaSetup/org/openoffice/setup/Installer/SolarisInstaller.java @@ -0,0 +1,574 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +package org.openoffice.setup.Installer; + +import org.openoffice.setup.InstallData; +import org.openoffice.setup.InstallerHelper.SolarisHelper; +import org.openoffice.setup.ResourceManager; +import org.openoffice.setup.SetupData.PackageDescription; +import org.openoffice.setup.Util.Converter; +import org.openoffice.setup.Util.ExecuteProcess; +import org.openoffice.setup.Util.Informer; +import org.openoffice.setup.Util.LogManager; +import org.openoffice.setup.Util.SystemManager; +import java.io.File; +import java.util.HashMap; +import java.util.Vector; + +public class SolarisInstaller extends Installer { + + SolarisHelper helper = new SolarisHelper(); + + public SolarisInstaller() { + super(); + } + + public void defineDatabasePath() { + + InstallData data = InstallData.getInstance(); + String oldDatabasePath = data.getDatabasePath(); + data.setDatabasePath(null); + + // Determining the database path (only for user installation). + // Important if a user installation is done into an existing + // user installation -> this methode can only be called after + // determination of installation directory. + + if ( data.isUserInstallation() ) { + String databasePath = helper.getSolarisDatabasePath(data); // the file does not need to exist! + data.setDatabasePath(databasePath); + + // If this is a new path to the database, then this database was + // not analyzed before (when going back in installation wizard) + if ( ! databasePath.equals(oldDatabasePath) ) { + data.setDatabaseAnalyzed(false); + data.setDatabaseQueried(false); + } + } + } + + public void preInstallationOngoing() { + // an admin file has to be created for user and for root installation + InstallData data = InstallData.getInstance(); + + if ( data.isInstallationMode()) { + boolean makeRelocatableAdminFile = true; + boolean removeDepends = true; + helper.createAdminFile(makeRelocatableAdminFile, removeDepends); + helper.createAdminFile(makeRelocatableAdminFile, ! removeDepends); + helper.createAdminFile(! makeRelocatableAdminFile, removeDepends); + helper.createAdminFile(! makeRelocatableAdminFile, ! removeDepends); + } + + if ( data.isUserInstallation() ) { + // LD_PRELOAD_32 needs to be set for user installation + helper.setEnvironmentForUserInstall(); + // Solaris 10 needs to have local temp directory for pkgadd + // createLocalTempDir(); + } + } + + public void postInstallationOngoing() { + InstallData data = InstallData.getInstance(); + // if ( data.isUserInstallation() ) { + // Solaris 10 needs to have local temp directory for pkgadd + // removeLocalTempDir(); + // } + + helper.removeSolarisLockFile(); + } + + public void postInstall(PackageDescription packageData) { + InstallData data = InstallData.getInstance(); + + if ( ! data.isAbortedInstallation() ) { + data.setStillRunning(true); + // Collecting information about installed packages + // Creating a list containing pairs of package names and rpm file names + // that has to be used during uninstallation. + helper.saveModulesLogFile(data); + data.setStillRunning(false); + } + } + + public void postUninstallationOngoing() { + helper.removeSolarisLockFile(); + } + + public String getChangeInstallDir(PackageDescription packageData) { + String installDir = null; + String packageName = packageData.getPackageName(); + + if ( packageName != null ) { + String pkgCommand = "pkginfo -r" + " " + packageName; + String[] pkgCommandArray = new String[3]; + pkgCommandArray[0] = "pkginfo"; + pkgCommandArray[1] = "-r"; + pkgCommandArray[2] = packageName; + Vector returnVector = new Vector(); + Vector returnErrorVector = new Vector(); + int returnValue = ExecuteProcess.executeProcessReturnVector(pkgCommandArray, returnVector, returnErrorVector); + String returnString = (String) returnVector.get(0); + + String log = pkgCommand + "<br><b>Returns: " + returnString + "</b><br>"; + LogManager.addCommandsLogfileComment(log); + + installDir = returnString; + } + + return installDir; + } + + public void installPackage(PackageDescription packageData) { + InstallData data = InstallData.getInstance(); + + String log = "<br><b>Package: " + packageData.getName() + "</b>"; + LogManager.addCommandsLogfileComment(log); + + String rootDir = data.getInstallDir(); + String packagePath = data.getPackagePath(); + + if (( packageData.getPkgSubdir() != null ) && ( ! packageData.getPkgSubdir().equals("") )) { + File completePackageFile = new File(packagePath, packageData.getPkgSubdir()); + packagePath = completePackageFile.getPath(); + } + + String packageName = packageData.getPackageName(); + + if (( packageName.equals("")) || ( packageName == null )) { + log = "<b>No package name specified. Nothing to do</b>"; + LogManager.addCommandsLogfileComment(log); + } else { + log = "<b>Package Name: " + packageName + "</b>"; + LogManager.addCommandsLogfileComment(log); + + File completePackage = new File(packagePath, packageName); + + if ( completePackage.exists() ) { + + String pkgCommand = ""; + String[] pkgCommandArray; + String adminFileName = ""; + Vector returnVector = new Vector(); + Vector returnErrorVector = new Vector(); + int returnValue; + + // is package relocatable or not? + if ( packageData.isRelocatable() ) { + adminFileName = data.getAdminFileNameReloc(); + } else { + adminFileName = data.getAdminFileNameNoReloc(); + } + + if ( data.isUserInstallation() ) { + HashMap env = data.getShellEnvironment(); + String[] envStringArray = Converter.convertHashmapToStringArray(env); + pkgCommand = "/usr/sbin/pkgadd -n -d " + packagePath + " -R " + + rootDir + " -a " + adminFileName + " " + packageName; + pkgCommandArray = new String[9]; + pkgCommandArray[0] = "/usr/sbin/pkgadd"; + pkgCommandArray[1] = "-n"; + pkgCommandArray[2] = "-d"; + pkgCommandArray[3] = packagePath; + pkgCommandArray[4] = "-R"; + pkgCommandArray[5] = rootDir; + pkgCommandArray[6] = "-a"; + pkgCommandArray[7] = adminFileName; + pkgCommandArray[8] = packageName; + returnValue = ExecuteProcess.executeProcessReturnVectorEnv(pkgCommandArray, envStringArray, returnVector, returnErrorVector); + } else { + // shifting of the installation root (-R) is only wanted for user installation + pkgCommand = "/usr/sbin/pkgadd -n -d " + packagePath + + " -a " + adminFileName + " " + packageName; + pkgCommandArray = new String[7]; + pkgCommandArray[0] = "/usr/sbin/pkgadd"; + pkgCommandArray[1] = "-n"; + pkgCommandArray[2] = "-d"; + pkgCommandArray[3] = packagePath; + pkgCommandArray[4] = "-a"; + pkgCommandArray[5] = adminFileName; + pkgCommandArray[6] = packageName; + returnValue = ExecuteProcess.executeProcessReturnVector(pkgCommandArray, returnVector, returnErrorVector); + } + + if ( returnValue == 0 ) { + log = pkgCommand + "<br><b>Returns: " + returnValue + " Successful installation</b><br>"; + LogManager.addCommandsLogfileComment(log); + } else { // an error occured during installation + if ( packageData.installCanFail() ) { + log = pkgCommand + "<br><b>Returns: " + returnValue + " Problem during installation. Can be ignored.</b><br>"; + LogManager.addCommandsLogfileComment(log); + } else { + log = pkgCommand + "<br><b>Returns: " + returnValue + " Error during installation</b><br>"; + LogManager.addCommandsLogfileComment(log); + System.err.println("Error during installation:"); + for (int i = 0; i < returnErrorVector.size(); i++) { + LogManager.addCommandsLogfileComment((String)returnErrorVector.get(i)); + System.err.println(returnErrorVector.get(i)); + } + data.setIsErrorInstallation(true); + } + } + } + else { + log = "<b>Error: Did not find package " + packageName + "</b><br>"; + System.err.println(log); + String message = ResourceManager.getString("String_File_Not_Found") + ": " + packageName; + String title = ResourceManager.getString("String_Error"); + Informer.showErrorMessage(message, title); + LogManager.addCommandsLogfileComment(log); + data.setIsErrorInstallation(true); + } + } + } + + public void uninstallPackage(PackageDescription packageData) { + InstallData data = InstallData.getInstance(); + + String log = "<br><b>Package: " + packageData.getName() + "</b>"; + LogManager.addCommandsLogfileComment(log); + + String installRoot = data.getInstallDir(); + String packageName = packageData.getPackageName(); + String adminFileName = ""; + + // is package relocatable or not? + if ( packageData.isRelocatable() ) { + if ( packageData.ignoreDependsForUninstall() ) { // Force removal of older packages during installation + adminFileName = data.getAdminFileNameRelocNoDepends(); + } else { + adminFileName = data.getAdminFileNameReloc(); + } + } else { + if ( packageData.ignoreDependsForUninstall() ) { // Force removal of older packages during installation + adminFileName = data.getAdminFileNameNoRelocNoDepends(); + } else { + adminFileName = data.getAdminFileNameNoReloc(); + } + } + + String pkgCommand = ""; + String[] pkgCommandArray; + int returnValue; + Vector returnVector = new Vector(); + Vector returnErrorVector = new Vector(); + + if ( data.isUserInstallation() ) { + pkgCommand = "/usr/sbin/pkgrm -n " + "-R " + installRoot + " -a " + adminFileName + " " + packageName; + pkgCommandArray = new String[7]; + pkgCommandArray[0] = "/usr/sbin/pkgrm"; + pkgCommandArray[1] = "-n"; + pkgCommandArray[2] = "-R"; + pkgCommandArray[3] = installRoot; + pkgCommandArray[4] = "-a"; + pkgCommandArray[5] = adminFileName; + pkgCommandArray[6] = packageName; + HashMap env = data.getShellEnvironment(); + String[] envStringArray = Converter.convertHashmapToStringArray(env); + // SystemManager.dumpStringArray(envStringArray); + returnValue = ExecuteProcess.executeProcessReturnVectorEnv(pkgCommandArray, envStringArray, returnVector, returnErrorVector); + } else { + // shifting of the installation root (-R) is only wanted for user installation + pkgCommand = "/usr/sbin/pkgrm -n " + "-a " + adminFileName + " " + packageName; + pkgCommandArray = new String[5]; + pkgCommandArray[0] = "/usr/sbin/pkgrm"; + pkgCommandArray[1] = "-n"; + pkgCommandArray[2] = "-a"; + pkgCommandArray[3] = adminFileName; + pkgCommandArray[4] = packageName; + returnValue = ExecuteProcess.executeProcessReturnVector(pkgCommandArray, returnVector, returnErrorVector); + } + + if ( returnValue == 0 ) { + log = pkgCommand + "<br><b>Returns: " + returnValue + " Successful uninstallation</b><br>"; + LogManager.addCommandsLogfileComment(log); + } else { // an error occured during installation + if ( packageData.uninstallCanFail() ) { + log = pkgCommand + "<br><b>Returns: " + returnValue + " Problem during uninstallation. Can be ignored.</b><br>"; + LogManager.addCommandsLogfileComment(log); + } else { + log = pkgCommand + "<br><b>Returns: " + returnValue + " Error during uninstallation</b><br>"; + LogManager.addCommandsLogfileComment(log); + System.err.println("Error during uninstallation:"); + for (int i = 0; i < returnErrorVector.size(); i++) { + LogManager.addCommandsLogfileComment((String)returnErrorVector.get(i)); + System.err.println(returnErrorVector.get(i)); + } + data.setIsErrorInstallation(true); + } + } + } + + public boolean isPackageNameInstalledClassic(String packageName, InstallData installData) { + String rootString = ""; + String rootPath = null; + String pkgCommand; + String[] pkgCommandArray; + boolean useLocalRoot = false; + boolean isInstalled = false; + + if (installData.isUserInstallation()) { + rootPath = installData.getDatabasePath(); + } + + if (( rootPath != null ) && (! rootPath.equals("null"))) { + rootString = "-R"; + useLocalRoot = true; + } + + if (useLocalRoot) { + pkgCommand = "pkginfo " + rootString + " " + rootPath + " " + packageName; + pkgCommandArray = new String[4]; + pkgCommandArray[0] = "pkginfo"; + pkgCommandArray[1] = rootString; + pkgCommandArray[2] = rootPath; + pkgCommandArray[3] = packageName; + } else { + pkgCommand = "pkginfo " + packageName; + pkgCommandArray = new String[2]; + pkgCommandArray[0] = "pkginfo"; + pkgCommandArray[1] = packageName; + } + + // Vector returnVector = new Vector(); + int returnValue = ExecuteProcess.executeProcessReturnValue(pkgCommandArray); + + if ( returnValue == 0 ) { + isInstalled = true; + String log = pkgCommand + "<br><b>Returns: " + returnValue + " Package is installed" + "</b><br>"; + LogManager.addCommandsLogfileComment(log); + } else { + String log = pkgCommand + "<br><b>Returns: " + returnValue + " Package is not installed" + "</b><br>"; + LogManager.addCommandsLogfileComment(log); + } + + return isInstalled; + } + + private void queryAllDatabase(InstallData installData) { + + String rootString = ""; + String rootPath = null; + String pkgCommand; + String[] pkgCommandArray; + boolean useLocalRoot = false; + HashMap map = new HashMap();; + + if (installData.isUserInstallation()) { + rootPath = installData.getDatabasePath(); + } + + if (( rootPath != null ) && (! rootPath.equals("null"))) { + rootString = "-R"; + useLocalRoot = true; + } + + if (useLocalRoot) { + pkgCommand = "pkginfo " + rootString + " " + rootPath; + pkgCommandArray = new String[4]; + pkgCommandArray[0] = "pkginfo"; + pkgCommandArray[1] = "-x"; + pkgCommandArray[2] = rootString; + pkgCommandArray[3] = rootPath; + } else { + pkgCommand = "pkginfo -x"; + pkgCommandArray = new String[2]; + pkgCommandArray[0] = "pkginfo"; + pkgCommandArray[1] = "-x"; + } + + Vector returnVector = new Vector(); + Vector returnErrorVector = new Vector(); + int returnValue = ExecuteProcess.executeProcessReturnVector(pkgCommandArray, returnVector, returnErrorVector); + + String log = pkgCommand + "<br><b>Returns: " + returnValue + "</b><br>"; + LogManager.addCommandsLogfileComment(log); + String value = "1"; + + if ( ! returnVector.isEmpty()) { + for (int i = 0; i < returnVector.size(); i++) { + String onePackage = (String)returnVector.get(i); + int pos1 = onePackage.indexOf(" "); + String key = onePackage.substring(0, pos1); + map.put(key, value); + } + } + + installData.setDatabaseQueried(true); + installData.setDatabaseMap(map); + + } + + public boolean isPackageNameInstalled(String packageName, InstallData installData) { + + boolean isInstalled = false; + + HashMap map = null; + if ( ! installData.databaseQueried() ) { + queryAllDatabase(installData); + } + + map = installData.getDatabaseMap(); + + if ( map.containsKey(packageName)) { + isInstalled = true; + } + + return isInstalled; + } + + public boolean isPackageInstalled(PackageDescription packageData, InstallData installData) { + boolean isInstalled = false; + + String packageName = packageData.getPackageName(); + + if ( packageName.equals("")) { + packageName = null; + } + + if ( packageName != null ) { + isInstalled = isPackageNameInstalled(packageName, installData); + } + + return isInstalled; + } + + public boolean isInstallSetPackageOlder(PackageDescription packageData, InstallData installData) { + boolean installSetPackageIsOlder = false; + boolean checkIfInstalledIsOlder = false; + installSetPackageIsOlder = findOlderPackage(packageData, installData, checkIfInstalledIsOlder); + return installSetPackageIsOlder; + } + + public boolean isInstalledPackageOlder(PackageDescription packageData, InstallData installData) { + boolean installedPackageIsOlder = false; + boolean checkIfInstalledIsOlder = true; + installedPackageIsOlder = findOlderPackage(packageData, installData, checkIfInstalledIsOlder); + return installedPackageIsOlder; + } + + private boolean findOlderPackage(PackageDescription packageData, InstallData installData, boolean checkIfInstalledIsOlder) { + + boolean firstPackageIsOlder = false; + String packageName = packageData.getPackageName(); + String log; + + if ( packageName.equals("")) { + packageName = null; + } + + if ( packageName != null ) { + String rootString = ""; + String rootPath = null; + String pkgCommand; + String[] pkgCommandArray; + boolean useLocalRoot = false; + + if (installData.isUserInstallation()) { + rootPath = installData.getDatabasePath(); + } + + if (( rootPath != null ) && (! rootPath.equals("null"))) { + rootString = "-R"; + useLocalRoot = true; + } + + if (useLocalRoot) { + // String pkgCommand = "pkginfo -l" + rootString + " " + rootPath + " " + packageName + " | grep VERSION:"; + pkgCommand = "pkginfo -x " + rootString + " " + rootPath + " " + packageName; + pkgCommandArray = new String[5]; + pkgCommandArray[0] = "pkginfo"; + pkgCommandArray[1] = "-x"; + pkgCommandArray[2] = rootString; + pkgCommandArray[3] = rootPath; + pkgCommandArray[4] = packageName; + + } else { + // String pkgCommand = "pkginfo -l" + rootString + " " + rootPath + " " + packageName + " | grep VERSION:"; + pkgCommand = "pkginfo -x " + packageName; + pkgCommandArray = new String[3]; + pkgCommandArray[0] = "pkginfo"; + pkgCommandArray[1] = "-x"; + pkgCommandArray[2] = packageName; + } + + Vector returnVector = new Vector(); + Vector returnErrorVector = new Vector(); + + int returnValue = ExecuteProcess.executeProcessReturnVector(pkgCommandArray, returnVector, returnErrorVector); + + log = pkgCommand + "<br><b>Returns:</b>"; + LogManager.addCommandsLogfileComment(log); + for (int i = 0; i < returnVector.size(); i++) { + log = "<b>" + returnVector.get(i) + "</b>"; + LogManager.addCommandsLogfileComment(log); + } + + // log = "<br>"; + // LogManager.addCommandsLogfileComment(log); + + String installedPackageVersion = helper.getVersionString(returnVector); + String newPackageVersion = packageData.getPkgVersion(); + + if ( ! installData.installedProductMinorSet() ) { + int productMinor = helper.getInstalledMinor(installedPackageVersion); + installData.setInstalledProductMinor(productMinor); + installData.setInstalledProductMinorSet(true); + } + + if (( installedPackageVersion != null ) && ( newPackageVersion != null )) { + if ( checkIfInstalledIsOlder ) { + firstPackageIsOlder = helper.comparePackageVersions(installedPackageVersion, newPackageVersion); + } else { + firstPackageIsOlder = helper.comparePackageVersions(newPackageVersion, installedPackageVersion); + } + } + } + + if ( checkIfInstalledIsOlder ) { + if ( firstPackageIsOlder ) { + log = "<b>-> Installed package is older</b><br>"; + LogManager.addCommandsLogfileComment(log); + } else { + log = "<b>-> Installed package is not older</b><br>"; + LogManager.addCommandsLogfileComment(log); + } + } else { + if ( firstPackageIsOlder ) { + log = "<b>-> Package in installation set is older</b><br>"; + LogManager.addCommandsLogfileComment(log); + } else { + log = "<b>-> Package in installation set is not older</b><br>"; + LogManager.addCommandsLogfileComment(log); + } + } + + return firstPackageIsOlder; + } + +} |