diff -r ca8a1b6995f6 -r 52e343bb8f80 tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/file/FileUtils.java --- a/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/file/FileUtils.java Tue Aug 31 16:45:49 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,218 +0,0 @@ -/* -* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -* File utility functions -* -*/ -package com.nokia.tracecompiler.file; - -import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; - -import com.nokia.tracecompiler.source.SourceConstants; - -/** - * File utility functions - * - */ -public final class FileUtils { - - /** - * File copy buffer size - */ - private static final int COPY_BUFFER_SIZE = 4096; // CodForChk_Dis_Magic - - /** - * cpp extension - */ - public final static String CPP_EXTENSION = "cpp"; //$NON-NLS-1$ - - /** - * c extension - */ - public final static String C_EXTENSION = "c"; //$NON-NLS-1$ - - /** - * Allowed files - */ - private final static String[] FILE_FILTERS = { ".cpp", //$NON-NLS-1$ - ".c", //$NON-NLS-1$ - ".inl", //$NON-NLS-1$ - ".h" //$NON-NLS-1$ - }; - - /** - * MMP file extension - */ - public static final String MMP = ".mmp"; //$NON-NLS-1$ - - /** - * number of times trying to create a directy(ies) - */ - private static final int MAX_DIRECTORY_CREATION_TRIES = 5; - - /** - * Time to sleep between tries to create a directory(ies) - */ - private static final int SLEEP_TIME_BETWEEN_DIRECTORY_CREATION_TRIES = 100; - - - /** - * Creates a file output stream. This creates directories and overwriting - * possible read-only flag - * - * @param file - * the file - * @return the file output stream - * @throws FileNotFoundException - * if file cannot be created - */ - public static OutputStream createOutputStream(File file) - throws FileNotFoundException { - File parent = file.getParentFile(); - if (!parent.exists()) { - createDirectories(parent); - } - FileOutputStream fos; - try { - fos = new FileOutputStream(file); - } catch (IOException e) { - if (file.exists()) { - file.delete(); - } - fos = new FileOutputStream(file); - } - return new BufferedOutputStream(fos); - } - - /** - * Creates a copy of a file - * - * @param source - * the source file - * @param target - * the target file - * @return true if written successfully - */ - public static boolean copyFile(File source, File target) { - boolean backup = true; - try { - byte[] buf = new byte[COPY_BUFFER_SIZE]; - FileInputStream fis = new FileInputStream(source); - OutputStream fos = createOutputStream(target); - int len; - do { - len = fis.read(buf); - if (len > 0) { - fos.write(buf, 0, len); - } - } while (len > 0); - fis.close(); - fos.close(); - } catch (Exception e) { - backup = false; - } - return backup; - } - - /** - * Converts file separator characters - * - * @param separator - * separator to be used - * @param path - * string to be converted - * @param addLast - * true if the converted string should end with a separator - * @return the converted string - */ - public static String convertSeparators(char separator, String path, - boolean addLast) { - path = path.replace(SourceConstants.FORWARD_SLASH_CHAR, separator); - path = path.replace(SourceConstants.BACKSLASH_CHAR, separator); - String sepStr = String.valueOf(separator); - if (addLast && !path.endsWith(sepStr)) { - path += separator; - } else if (!addLast && path.endsWith(sepStr)) { - path = path.substring(0, path.length() - 1); - } - return path; - } - - /** - * Checks if given file is allowed to be opened into TraceCompiler - * - * @param fileName - * the file to be checked - * @return true if filtered, false if not - */ - public static boolean isFileAllowed(String fileName) { - boolean allowed = false; - fileName = fileName.toLowerCase(); - for (String filter : FILE_FILTERS) { - if (fileName.endsWith(filter)) { - allowed = true; - break; - } - } - return allowed; - } - - /** - * Create directories safely in a multiple instances case - * @param path - * @param access - * @return boolean pass/fail - */ - public static boolean createDirectories(File path) { - - boolean retVal = true; - - int tries = 0; - - if (path.exists()) { - return retVal; - } - - // try few times - while (tries < MAX_DIRECTORY_CREATION_TRIES) { - - retVal = path.mkdirs(); - // mkdirs can fail for a number of reasons including the case where - // the directory is open by another process. The API does not make - // any difference so we assume the latter case (worst case) - if (!retVal) { // sleep for moment and try again. - - tries++; - - try { - Thread.sleep(SLEEP_TIME_BETWEEN_DIRECTORY_CREATION_TRIES); - } catch (InterruptedException e) { - // Do nothing - } - } else { // pass - break; - } - } - - return retVal; - - } -}