blob: 4ae14b0a315117fa136c6de7f6fe337b7622eb14 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package org.openoffice.setup.Util;
import java.io.File;
import java.util.Vector;
import org.openoffice.setup.InstallData;
import org.openoffice.setup.ResourceManager;
import org.openoffice.setup.SetupData.SetupDataProvider;
import org.openoffice.setup.Util.LogManager;
public class Controller {
private Controller() {
}
static public void checkPackagePathExistence(InstallData installData) {
String packagePath = installData.getPackagePath();
if (( packagePath == null ) || ( packagePath.equals(""))) {
String message = ResourceManager.getString("String_InstallationOngoing_PackagePath_Not_Found");
String title = ResourceManager.getString("String_Error");
Informer.showErrorMessage(message, title);
System.exit(1);
}
}
static public void checkPackageFormat(InstallData installData) {
String packageFormat = installData.getPackageFormat();
String os = installData.getOSType();
boolean notSupportedPackageFormat = true;
// Show warnings for currently not supported combinations of OS and package format.
// This has to be adapted if further OS or package formats are supported.
if (( os.equalsIgnoreCase("SunOS") ) && ( packageFormat.equalsIgnoreCase("pkg") )) {
notSupportedPackageFormat = false;
}
if (( os.equalsIgnoreCase("Linux") ) && ( packageFormat.equalsIgnoreCase("rpm") )) {
notSupportedPackageFormat = false;
}
// Inform user about not supported package format and exit program
if ( notSupportedPackageFormat ) {
System.err.println("Error: Package format not supported by this OS!");
String mainmessage = ResourceManager.getString("String_Packageformat_Not_Supported");
String osstring = ResourceManager.getString("String_Operating_System");
String formatstring = ResourceManager.getString("String_Packageformat");
String message = mainmessage + "\n" + osstring + ": " + os + "\n" + formatstring + ": " + packageFormat;
String title = ResourceManager.getString("String_Error");
Informer.showErrorMessage(message, title);
System.exit(1);
}
}
static public void collectSystemLanguages(InstallData installData) {
String pkgCommand = "";
String[] pkgCommandArray;
String adminFileName = "";
String log = "";
Vector returnVector = new Vector();
Vector returnErrorVector = new Vector();
int returnValue;
pkgCommand = "locale -a";
pkgCommandArray = new String[2];
pkgCommandArray[0] = "locale";
pkgCommandArray[1] = "-a";
returnValue = ExecuteProcess.executeProcessReturnVector(pkgCommandArray, returnVector, returnErrorVector);
if ( returnValue == 0 ) {
log = pkgCommand + "<br><b>Returns: " + returnValue + " Successful command</b><br>";
LogManager.addCommandsLogfileComment(log);
// System.err.println("Available languages 1: ");
// for (int i = 0; i < returnVector.size(); i++) {
// System.err.println(returnVector.get(i));
// }
// Collecting "en-US" instead of "en-US.UTF8"
Vector realVector = new Vector();
for (int i = 0; i < returnVector.size(); i++) {
String oneLang = (String)returnVector.get(i);
int position = oneLang.indexOf(".");
if ( position > -1 ) {
oneLang = oneLang.substring(0, position);
}
if ( ! realVector.contains(oneLang)) {
realVector.add(oneLang);
}
}
// System.err.println("Available languages 2: ");
// for (int i = 0; i < realVector.size(); i++) {
// System.err.println(realVector.get(i));
// }
installData.setSystemLanguages(realVector);
} else { // an error occured
log = pkgCommand + "<br><b>Returns: " + returnValue + " An error occured</b><br>";
LogManager.addCommandsLogfileComment(log);
System.err.println("Error in command: " + pkgCommand);
for (int i = 0; i < returnErrorVector.size(); i++) {
LogManager.addCommandsLogfileComment((String)returnErrorVector.get(i));
System.err.println(returnErrorVector.get(i));
}
}
}
static public boolean createdSubDirectory(String dir) {
boolean createdDirectory = false;
boolean errorShown = false;
String subDirName = "testdir";
File testDir = new File(dir, subDirName);
try {
createdDirectory = SystemManager.create_directory(testDir.getPath());
}
catch (SecurityException ex) {
String message = ResourceManager.getString("String_ChooseDirectory_No_Write_Access") + ": " + dir;
String title = ResourceManager.getString("String_Error");
Informer.showErrorMessage(message, title);
errorShown = true;
}
if (( ! createdDirectory ) && ( ! errorShown )) {
String message = ResourceManager.getString("String_ChooseDirectory_No_Write_Access") + ": " + dir;
String title = ResourceManager.getString("String_Error");
Informer.showErrorMessage(message, title);
errorShown = true;
}
if ( SystemManager.exists_directory(testDir.getPath()) ) {
testDir.delete();
}
return createdDirectory;
}
static public boolean createdDirectory(String dir) {
boolean createdDirectory = false;
try {
createdDirectory = SystemManager.create_directory(dir);
}
catch (SecurityException ex) {
// message = ResourceManager.getString("String_ChooseDirectory_Not_Allowed") + ": " + dir;
// title = ResourceManager.getString("String_Error");
// Informer.showErrorMessage(message, title);
}
if ( ! createdDirectory ) {
String message = ResourceManager.getString("String_ChooseDirectory_No_Success") + ": " + dir;
String title = ResourceManager.getString("String_Error");
Informer.showErrorMessage(message, title);
}
return createdDirectory;
}
static public boolean reducedRootWritePrivileges() {
Vector vec = new Vector();
File dir = new File("/usr");
vec.add(dir);
dir = new File("/etc");
vec.add(dir);
boolean restrictedWritePrivilges = false;
// Check for zones. If "zonename" is successful and the name is not "global",
// this is a "sparse zone".
// Alternative: Simply always check, if root has write access in selected directories.
for (int i = 0; i < vec.size(); i++) {
File directory = (File)vec.get(i);
if ( directory.exists() ) {
// do we have write privileges inside the directory
String tempDirName = "temptestdir";
File tempDir = new File(directory, tempDirName);
if ( SystemManager.createDirectory(tempDir) ) {
SystemManager.removeDirectory(tempDir);
} else {
restrictedWritePrivilges = true;
System.err.println("Restricted Root privileges. No write access in " + directory.getPath());
break;
}
}
}
return restrictedWritePrivilges;
}
static public void checkForNewerVersion(InstallData installData) {
LogManager.setCommandsHeaderLine("Checking change installation");
InstallChangeCtrl.checkInstallChange(installData);
if ( installData.newerVersionExists() ) {
// Inform user about a newer version installed
SetupDataProvider.setNewMacro("DIR", installData.getInstallDefaultDir()); // important for string replacement
System.err.println("Error: A newer version is already installed in " + installData.getInstallDefaultDir() + " !");
String message1 = ResourceManager.getString("String_Newer_Version_Installed_Found")
+ "\n" + installData.getInstallDefaultDir() + "\n";
String message2 = ResourceManager.getString("String_Newer_Version_Installed_Remove");
String message = message1 + "\n" + message2;
String title = ResourceManager.getString("String_Error");
Informer.showErrorMessage(message, title);
System.exit(1);
}
}
static public void checkForUidFile(InstallData installData) {
// check existence of getuid.so
File getuidFile = Controller.findUidFile(installData);
if (( getuidFile == null ) || (! getuidFile.exists()) ) {
// Root privileges required -> abort installation
System.err.println("Root privileges required for installation!");
String message = ResourceManager.getString("String_Root_Privileges_Required_1") + "\n"
+ ResourceManager.getString("String_Root_Privileges_Required_2");
String title = ResourceManager.getString("String_Error");
Informer.showErrorMessage(message, title);
System.exit(1);
} else {
installData.setGetUidPath(getuidFile.getPath());
}
}
static private File findUidFile(InstallData data) {
File getuidFile = null;
if ( data.isInstallationMode()) {
String getuidpath = System.getProperty("GETUID_PATH");
if ( getuidpath != null ) {
getuidFile = new File(getuidpath);
if (( getuidFile.isDirectory() ) && ( ! getuidFile.isFile() )) {
// Testing, if GETUID_PATH only contains the path, not the filename
String defaultfilename = "getuid.so";
getuidFile = new File(getuidpath, defaultfilename);
if ( ! getuidFile.exists() ) {
getuidFile = null;
}
}
}
// File resourceRoot = data.getResourceRoot();
// String getuidString = "getuid.so";
// if ( resourceRoot != null ) {
// File getuidDir = new File (data.getInfoRoot(), "getuid");
// getuidFile = new File(getuidDir, getuidString);
// }
} else {
getuidFile = new File(data.getGetUidPath());
}
return getuidFile;
}
}