/************************************************************** * * 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.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.net.URI; import java.net.URL; import java.util.HashMap; import java.util.Properties; import java.util.Vector; public class SystemManager { private SystemManager() { } /* the installation root is where the classes reside */ static public File getJarFilePath() { File jarFile = null; try { Class c = Class.forName("org.openoffice.setup.ResourceManager"); URL url = c.getResource("setupfiles.properties"); String urlString = url.toString(); if (urlString.startsWith("jar:")) { /* ResourceManager.class resides in a jar file. Strip it down to the "file:" part */ urlString = urlString.substring(4, urlString.lastIndexOf("!")); jarFile = new File(new URI(urlString)); } } catch (Exception ex) { /* handle URISyntaxException and ClassNotFoundException */ ex.printStackTrace(); System.exit(1); } if ( jarFile != null ) { System.err.println("Jar file: " + jarFile.getPath()); } else { System.err.println("No jar file used for installation!"); } return jarFile; } /* the installation root is where the classes reside */ static public File getResourceRoot() { File dir = null; try { Class c = Class.forName("org.openoffice.setup.ResourceManager"); URL url = c.getResource("setupfiles.properties"); String urlString = url.toString(); if (urlString.startsWith("jar:")) { /* ResourceManager.class resides in a jar file. Strip it down to the "file:" part */ urlString = urlString.substring(4, urlString.lastIndexOf("!")); } else { /* ResourceManager.class resides in a directory tree. */ urlString = urlString.substring(0, urlString.lastIndexOf("/org/openoffice/setup/setupfiles.properties")); } dir = new File(new URI(urlString)); dir = dir.getParentFile(); } catch (Exception ex) { /* handle URISyntaxException and ClassNotFoundException */ ex.printStackTrace(); System.exit(1); } // } if ( dir != null ) { // System.err.println("Resource Root: " + dir.getPath()); } else { System.err.println("No resource root found!"); } return dir; } static public String getPackagePath(String subdir) { String path = null; File dir = getResourceRoot(); if (dir != null) { // System.err.println("Resource root: " + dir.getPath()); dir = new File(dir, subdir); if (! dir.exists()) { System.err.println("Error: Directory \"" + subdir + "\" does not exist at resouce root"); } else { path = dir.getPath(); } } if ( path != null ) { if ( ! path.endsWith("/")) { path = path + "/"; } } if ( path != null ) { System.err.println("Path to packages: " + path); } else { System.err.println("No path to packages found!"); } return path; } static public boolean find_file(String fileName) { boolean found = false; File file = new File(fileName); found = file.exists(); return found; } static public boolean exists_directory(String directory) { File dir = new File(directory); return dir.exists(); } static public boolean create_directory(String directory) throws SecurityException { boolean created = false; File dir = new File(directory); try { created = dir.mkdirs(); } catch (SecurityException ex) { throw ex; } return created; } static public String getParentDirectory(String dir) { File installFile = new File(dir); String parentDir = installFile.getParent(); if ( parentDir == null ) { parentDir = "/"; } return parentDir; } static public String getInstallationPrivileges() { String type = ""; String user = java.lang.System.getProperty("user.name"); // System.out.println("UserHome: " + java.lang.System.getProperty("user.home")); if ( user.equalsIgnoreCase("root")) { type = "root"; System.err.println("Root privileges"); } else { type = "user"; System.err.println("User privileges"); } return type; } static public boolean isUserInstallation() { boolean isUserInstallation = false; String user = java.lang.System.getProperty("user.name"); if ( user.equalsIgnoreCase("root")) { isUserInstallation = false; System.err.println("Root privileges"); } else { isUserInstallation = true; System.err.println("User privileges"); } return isUserInstallation; } static public boolean isRootInstallation() { boolean isRootInstallation = false; String user = java.lang.System.getProperty("user.name"); if ( user.equalsIgnoreCase("root")) { isRootInstallation = true; } else { isRootInstallation = false; } return isRootInstallation; } static public String getOSType() { String osVersion = java.lang.System.getProperty("os.name"); System.err.println("OS: " + osVersion); return osVersion; } static public String getOSArchitecture() { String osArchitecture = java.lang.System.getProperty("os.arch"); System.out.println("OSArchitecture: " + osArchitecture); return osArchitecture; } static public String getOSVersion() { String osVersion = java.lang.System.getProperty("os.version"); System.out.println("OSVersion: " + osVersion); return osVersion; } static public HashMap getEnvironmentHashMap() { // readonly map from getenv() // System.getenv only supported in Java 1.5, properties have to be set in shell script // Map map = java.lang.System.getenv(); // HashMap myMap = new HashMap(map); Properties props = System.getProperties(); HashMap myMap = new HashMap(props); return myMap; } static public void dumpStringArray(String[] myStringArray) { for (int i = 0; i < myStringArray.length; i++) { System.out.println(myStringArray[i]); } } static public void dumpFile(String baseFileName, String dumpFileName) { Vector fileContent = readCharFileVector(baseFileName); saveCharFileVector(dumpFileName, fileContent); } static public Vector readCharFileVector(String fileName) { Vector fileContent = new Vector(); File file = new File(fileName); if ( file.exists()) { try { FileInputStream fs = new FileInputStream(file); BufferedReader bs = new BufferedReader(new InputStreamReader(fs)); String zeile; while((zeile = bs.readLine())!=null) { fileContent.addElement(zeile); } } catch (IOException e) { System.out.println(e); } } else { System.out.println( "Error: File not found: " + fileName); } return fileContent; } static public void saveCharFileVector(String fileName, Vector fileContent) { FileWriter fw = null; try { fw = new FileWriter(fileName); String fileContentStr = ""; for (int i = 0; i < fileContent.size() ; i++) { fileContentStr = fileContentStr + fileContent.get(i) + "\n"; // System.out.println(fileContent.get(i)); } fw.write(fileContentStr); } catch ( IOException e ) { System.out.println( "Could not create file: " + fileName); } finally { try { if ( fw != null ) fw.close(); } catch (IOException e) {} } } static public void copyAllFiles(File source, File dest) { File[] file = source.listFiles(); if (file != null) { for (int i = 0; i < file.length; i++) { copy(file[i].getPath(), dest.getPath()); } } } static public void copyAllFiles(File source, File dest, String ext) { File[] file = source.listFiles(new FileExtensionFilter(ext)); if (file != null) { for (int i = 0; i < file.length; i++) { copy(file[i].getPath(), dest.getPath()); } } } // second parameter can be a complete file name or an existing directory static public boolean copy(String source, String dest) { // is the second parameter a file name or a directory? File dir = new File(dest); if ( dir.isDirectory() ) { File sourceFile = new File(source); String fileName = sourceFile.getName(); File destFile = new File(dest, fileName); dest = destFile.getPath(); } boolean file_copied = false; FileInputStream fis; BufferedInputStream bis; FileOutputStream fos; BufferedOutputStream bos; byte[] b; try { fis = new FileInputStream(source); fos = new FileOutputStream(dest); } catch (FileNotFoundException ex) { throw new Error("File not found"); } // put file into buffer bis = new BufferedInputStream(fis); bos = new BufferedOutputStream(fos); try { // read file, write and close b = new byte[bis.available()]; bis.read(b); bos.write(b); bis.close(); bos.close(); file_copied = true; } catch (IOException e) { System.out.println("Dateien wurden nicht kopiert!"); } return file_copied; } static public boolean deleteFile(File file) { boolean success = false; if ( file.exists() && file != null ) { success = file.delete(); } return success; } static public boolean createDirectory(File dir) throws SecurityException { boolean created = false; try { created = dir.mkdirs(); } catch (SecurityException ex) { throw ex; } return created; } static public void removeDirectory(File dir) { if ( dir.exists() && dir.isDirectory() ) { File[] file = dir.listFiles(); if (file != null) { for (int i = 0; i < file.length; i++) { deleteFile(file[i]); } } dir.delete(); } } static public boolean logModuleStates() { boolean logStates = false; // System.getenv only supported in Java 1.5, property set in shell script // String logStatesEnv = System.getenv("LOG_MODULE_STATES"); String logStatesEnv = System.getProperty("LOG_MODULE_STATES"); if ( logStatesEnv != null ) { logStates = true; } return logStates; } static public void setUnixPrivileges(String fileName, String unixRights) { // String command = "chmod " + unixRights + " " + fileName; String[] commandArray = new String[3]; commandArray[0] = "chmod"; commandArray[1] = unixRights; commandArray[2] = fileName; int value = ExecuteProcess.executeProcessReturnValue(commandArray); } static public void setUnixPrivilegesDirectory(File directoryName, String ext, String unixRights) { File[] file = directoryName.listFiles(new FileExtensionFilter(ext)); if (file != null) { for (int i = 0; i < file.length; i++) { setUnixPrivileges(file[i].getPath(), unixRights); } } } static public int calculateDiscSpace(String directory) { String command = "df -k " + directory; String[] commandArray = new String[3]; commandArray[0] = "df"; commandArray[1] = "-k"; commandArray[2] = directory; int size = 0; Vector returnVector = new Vector(); Vector returnErrorVector = new Vector(); int returnValue = ExecuteProcess.executeProcessReturnVector(commandArray, returnVector, returnErrorVector); if ( returnValue == 0) { int max = returnVector.size(); if ( max > 0 ) { String returnLine = (String) returnVector.get(max-1); // The fourth value is the available disc space (if the first value is a path) // Otherwise it can also be the third value, if the first is not a path. // If the first value is not a path, the string starts with white spaces. int position = 3; if ( returnLine.startsWith(" ")) { position = 2; } returnLine = returnLine.trim(); String[] returnArray = returnLine.split("\\s+"); if ( returnArray.length > 3 ) { String sizeString = returnArray[position]; // Special handling for very large hard discs that cannot be converted to int if ( sizeString.length() >= Integer.toString(Integer.MAX_VALUE).length() ) { sizeString = Integer.toString(Integer.MAX_VALUE); } // Converting from String to int size = Integer.parseInt(sizeString); } } } return size; } }