blob: e9db5560dad0da489e1c760140f122ef93451f6a [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 org.openoffice.setup.InstallData;
import org.openoffice.setup.ResourceManager;
import java.io.File;
import java.util.Vector;
public class InfoDir {
private InfoDir() {
}
static private String copySourceFile(String fileName) {
InstallData data = InstallData.getInstance();
File jarFile = data.getJarFilePath();
String destFile = null;
if ( jarFile != null ) {
String sourceDir = jarFile.getParent();
File sourceFileFile = new File(sourceDir, fileName);
String sourceFile = sourceFileFile.getPath();
// String jarFileName = jarFile.getName();
File destDir = new File(data.getInstallDefaultDir(), data.getProductDir());
File destFileFile = new File(destDir, fileName);
destFile = destFileFile.getPath();
boolean success = SystemManager.copy(sourceFile, destFile);
}
return destFile;
}
static private void copyInstallDirectoryWithExtension(File destBaseDir, String subDirName, String fileExtension) {
InstallData data = InstallData.getInstance();
File sourceDir = data.getInfoRoot(subDirName);
if ( sourceDir != null ) {
File destDir = new File(destBaseDir, subDirName);
destDir.mkdir();
SystemManager.copyAllFiles(sourceDir, destDir, fileExtension);
}
}
static private void copyInstallDirectoryWithExtension(File destBaseDir, String subDirName, String fileExtension, String unixRights) {
InstallData data = InstallData.getInstance();
File sourceDir = data.getInfoRoot(subDirName);
if ( sourceDir != null ) {
File destDir = new File(destBaseDir, subDirName);
destDir.mkdir();
SystemManager.copyAllFiles(sourceDir, destDir, fileExtension);
SystemManager.setUnixPrivilegesDirectory(destDir, fileExtension, unixRights);
}
}
static private void copyInstallDirectoryDoubleSubdir(File destBaseDir, String dir1, String dir2) {
InstallData data = InstallData.getInstance();
File sourceDir1 = data.getInfoRoot(dir1);
File sourceDir = new File(sourceDir1, dir2);
destBaseDir.mkdir();
File destDir1 = new File(destBaseDir, dir1);
destDir1.mkdir();
File destDir = new File(destDir1, dir2);
destDir.mkdir();
SystemManager.copyAllFiles(sourceDir, destDir);
}
static private File createUninstallDir() {
InstallData data = InstallData.getInstance();
File baseDir = new File(data.getInstallDefaultDir(), data.getProductDir());
baseDir = new File(baseDir, data.getUninstallDirName());
baseDir.mkdir();
return baseDir;
}
static private void copyGetUidSoFile(File dir) {
InstallData data = InstallData.getInstance();
String uidFileSource = data.getGetUidPath();
if ( uidFileSource != null ) {
// Copying the "getuid.so" file into installation
String fileName = "getuid.so";
File destFile = new File(dir, fileName);
String uidFileDest = destFile.getPath();
boolean success = SystemManager.copy(uidFileSource, uidFileDest);
data.setGetUidPath(uidFileDest);
}
}
static private void copyJreFile(File dir) {
InstallData data = InstallData.getInstance();
String jrefilename = System.getProperty("JRE_FILE");
if ( jrefilename != null ) {
// For Solaris, JRE_FILE can already contain the complete path.
// Otherwise it contains only the filename
File jreFile = new File(jrefilename);
if ( ! jreFile.exists()) {
jreFile = new File(data.getPackagePath(), jrefilename);
}
if ( jreFile.exists() ) {
String jreFileSource = jreFile.getPath();
File destDir = new File(dir, "jre");
destDir.mkdir();
String onlyFileName = jreFile.getName();
File destFile = new File(destDir, onlyFileName);
// In maintenance mode the file already exists
if ( ! destFile.exists() ) {
String jreFileDest = destFile.getPath();
boolean success = SystemManager.copy(jreFileSource, jreFileDest);
}
}
}
}
static private void moveAdminFiles(File dir) {
InstallData data = InstallData.getInstance();
if ( data.getAdminFileNameReloc() != null ) {
File sourceFile = new File(data.getAdminFileNameReloc());
String fileName = sourceFile.getName();
File destFile = new File(dir, fileName);
boolean success = SystemManager.copy(sourceFile.getPath(), destFile.getPath());
data.setAdminFileNameReloc(destFile.getPath());
sourceFile.delete();
}
if ( data.getAdminFileNameRelocNoDepends() != null ) {
File sourceFile = new File(data.getAdminFileNameRelocNoDepends());
String fileName = sourceFile.getName();
File destFile = new File(dir, fileName);
boolean success = SystemManager.copy(sourceFile.getPath(), destFile.getPath());
data.setAdminFileNameRelocNoDepends(destFile.getPath());
sourceFile.delete();
}
if ( data.getAdminFileNameNoReloc() != null ) {
File sourceFile = new File(data.getAdminFileNameNoReloc());
String fileName = sourceFile.getName();
File destFile = new File(dir, fileName);
boolean success = SystemManager.copy(sourceFile.getPath(), destFile.getPath());
data.setAdminFileNameNoReloc(destFile.getPath());
sourceFile.delete();
}
if ( data.getAdminFileNameNoRelocNoDepends() != null ) {
File sourceFile = new File(data.getAdminFileNameNoRelocNoDepends());
String fileName = sourceFile.getName();
File destFile = new File(dir, fileName);
boolean success = SystemManager.copy(sourceFile.getPath(), destFile.getPath());
data.setAdminFileNameNoRelocNoDepends(destFile.getPath());
sourceFile.delete();
}
}
static private void createInfoFile(File dir) {
Vector fileContent = new Vector();
String line = null;
InstallData data = InstallData.getInstance();
line = "PackagePath=" + data.getPackagePath();
fileContent.add(line);
line = "InstallationPrivileges=" + data.getInstallationPrivileges();
fileContent.add(line);
line = "AdminFileReloc=" + data.getAdminFileNameReloc();
fileContent.add(line);
line = "AdminFileRelocNoDepends=" + data.getAdminFileNameRelocNoDepends();
fileContent.add(line);
line = "AdminFileNoReloc=" + data.getAdminFileNameNoReloc();
fileContent.add(line);
line = "AdminFileNoRelocNoDepends=" + data.getAdminFileNameNoRelocNoDepends();
fileContent.add(line);
line = "InstallationDir=" + data.getInstallDir();
fileContent.add(line);
line = "DatabasePath=" + data.getDatabasePath();
fileContent.add(line);
line = "GetUidFile=" + data.getGetUidPath();
fileContent.add(line);
String infoFileName = "infoFile";
File infoFile = new File(dir, infoFileName);
SystemManager.saveCharFileVector(infoFile.getPath(), fileContent);
}
static private void removeSpecialFiles() {
InstallData data = InstallData.getInstance();
File jarFile = data.getJarFilePath();
SystemManager.deleteFile(jarFile);
String jarFilePath = jarFile.getParent();
File setupFile = new File(jarFilePath, "setup");
SystemManager.deleteFile(setupFile);
if ( ! data.getAdminFileNameReloc().equals("null") ) {
SystemManager.deleteFile(new File(data.getAdminFileNameReloc()));
}
if ( ! data.getAdminFileNameRelocNoDepends().equals("null") ) {
SystemManager.deleteFile(new File(data.getAdminFileNameRelocNoDepends()));
}
if ( ! data.getAdminFileNameNoReloc().equals("null") ) {
SystemManager.deleteFile(new File(data.getAdminFileNameNoReloc()));
}
if ( ! data.getAdminFileNameNoRelocNoDepends().equals("null") ) {
SystemManager.deleteFile(new File(data.getAdminFileNameNoRelocNoDepends()));
}
if ( ! data.getGetUidPath().equals("null") ) {
SystemManager.deleteFile(new File(data.getGetUidPath()));
}
}
static private void removeInforootSubdir(String dir1, String dir2) {
InstallData data = InstallData.getInstance();
File subdir1 = data.getInfoRoot(dir1);
File subdir2 = new File(subdir1, dir2);
if (subdir2 != null) {
if ( subdir2.exists() ) {
SystemManager.removeDirectory(subdir2);
}
}
}
static private void removeInforootSubdir(String dir) {
InstallData data = InstallData.getInstance();
File subdir = data.getInfoRoot(dir);
if (subdir != null) {
if ( subdir.exists() ) {
SystemManager.removeDirectory(subdir);
}
}
}
static private void removeInforoot() {
InstallData data = InstallData.getInstance();
SystemManager.removeDirectory(data.getInfoRoot());
}
static public void prepareUninstallation() {
// additional tasks for uninstallation
// Directory destDir has to exist!
InstallData data = InstallData.getInstance();
File destDir = new File(data.getInstallDefaultDir(), data.getProductDir());
boolean directoryExists = true;
if ( ! destDir.exists() ) {
try {
directoryExists = SystemManager.create_directory(destDir.getPath());
}
catch (SecurityException ex) {
String message = ResourceManager.getString("String_ChooseDirectory_No_Write_Access") + ": " + destDir.getPath();
String title = ResourceManager.getString("String_Error");
Informer.showErrorMessage(message, title);
}
}
if ( directoryExists ) {
String setupPath = copySourceFile("setup");
SystemManager.setUnixPrivileges(setupPath, "775");
File jarFile = data.getJarFilePath();
copySourceFile(jarFile.getName());
File uninstallDir = createUninstallDir();
copyInstallDirectoryWithExtension(uninstallDir, "xpd", "xpd");
copyInstallDirectoryWithExtension(uninstallDir, "html", "html");
copyInstallDirectoryWithExtension(uninstallDir, "images", "gif");
copyInstallDirectoryDoubleSubdir(uninstallDir, "html", "images");
copyGetUidSoFile(uninstallDir);
copyJreFile(uninstallDir);
moveAdminFiles(uninstallDir);
createInfoFile(uninstallDir);
}
}
static public void removeUninstallationFiles() {
// removing selected File
removeSpecialFiles();
// removing directories html/images, html and xpd
removeInforootSubdir("html", "images");
removeInforootSubdir("html");
removeInforootSubdir("xpd");
removeInforootSubdir("images");
removeInforootSubdir("jre");
removeInforoot();
}
}