diff -r c7c26511138f -r 7c4a911dc066 buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CopyParallelTask.java --- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CopyParallelTask.java Wed Jun 16 16:51:40 2010 +0300 +++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CopyParallelTask.java Fri Aug 13 14:59:05 2010 +0300 @@ -1,125 +1,115 @@ /* -* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "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: -* -*/ - + * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of the License "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: + * + */ + package com.nokia.ant.taskdefs; - -import org.apache.tools.ant.taskdefs.Copy; import java.io.File; import java.io.IOException; import java.util.Enumeration; +import java.util.Vector; -import java.util.Vector; +import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; -import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.taskdefs.Copy; import org.apache.tools.ant.types.FilterSet; import org.apache.tools.ant.types.FilterSetCollection; /** - * Copies a file(s) or directory(s) to a new file(s) - * or directory(s) using parallel threads. Number of parallel - * threads can be defined by threadCount. Files are only - * copied if the source file is newer - * than the destination file, or when the destination file does not - * exist. It is possible to explicitly overwrite existing files.

- * - * + * Copies a file(s) or directory(s) to a new file(s) or directory(s) using parallel threads. Number + * of parallel threads can be defined by threadCount. Files are only copied if the source file is + * newer than the destination file, or when the destination file does not exist. It is possible to + * explicitly overwrite existing files.

+ * + * * @ant.task category="Filesystem" * @since Helium 0.21 - * - */ -public class CopyParallelTask extends Copy -{ + * + */ +public class CopyParallelTask extends Copy { static final String LINE_SEPARATOR = System.getProperty("line.separator"); private int copyThreadCount; private int maxThreadCount; + /** * CopyParallelTask task constructor. */ - public CopyParallelTask() - { + public CopyParallelTask() { setTaskName("copy-parallel"); } /** * Perform the copy operation in parallel. + * * @exception BuildException if an error occurs. */ - public final void execute() - { - super.execute(); - //wait until all copy threads are dead - while (copyThreadCount > 0) - { + public final void execute() { + super.execute(); + // wait until all copy threads are dead + while (copyThreadCount > 0) { try { Thread.sleep(500); - } catch (InterruptedException e) { + } + catch (InterruptedException e) { if (failonerror) { - throw new BuildException("Copy parallel task has been interrupted " + e.getMessage()); + throw new BuildException("Copy parallel task has been interrupted " + + e.getMessage()); } log("Copy parallel task has been interrupted " + e.getMessage(), Project.MSG_ERR); } } - + } /** * Set maximum number of thread. + * * @param threadCount maximum number of threads */ - public final void setThreadCount(final int threadCount) - { - // Limit max. threads to 8 otherwise we experience freezing when using the fastcopy task on 8 processor build machines - if (threadCount > 8) - { - this.maxThreadCount = 8; - } else { + public final void setThreadCount(final int threadCount) { + // Limit max. threads to 8 otherwise we experience freezing when using the fastcopy task on + // 8 processor build machines + if (threadCount > 8) { + this.maxThreadCount = 8; + } + else { this.maxThreadCount = threadCount; } } - /** - * Actually does the file (and possibly empty directory) copies. - * This is a good method for subclasses to override. + /** + * Actually does the file (and possibly empty directory) copies. This is a good method for + * subclasses to override. */ - protected final void doFileOperations() - { - Vector filterChains = getFilterChains(); + protected final void doFileOperations() { Vector filterSets = getFilterSets(); - String inputEncoding = getEncoding(); - String outputEncoding = getOutputEncoding(); - long granularity = 0; - + // set default thread count to 1 if it is not set - if ( maxThreadCount < 1 ) - maxThreadCount = 1; - - - if (fileCopyMap.size() > 0) - { - log("Copying " + fileCopyMap.size() - + " file" + (fileCopyMap.size() == 1 ? "" : "s") - + " to " + destDir.getAbsolutePath() + " using " + maxThreadCount + if (maxThreadCount < 1) { + maxThreadCount = 1; + } + + if (fileCopyMap.size() > 0) { + log("Copying " + fileCopyMap.size() + " file" + (fileCopyMap.size() == 1 ? "" : "s") + + " to " + destDir.getAbsolutePath() + " using " + maxThreadCount + " threads in parallel."); Enumeration fileEnum = fileCopyMap.keys(); - while (fileEnum.hasMoreElements()) - { + while (fileEnum.hasMoreElements()) { String fromFile = (String) fileEnum.nextElement(); String[] toFiles = (String[]) fileCopyMap.get(fromFile); @@ -133,20 +123,15 @@ log("Copying " + fromFile + " to " + toFile, verbosity); FilterSetCollection executionFilters = new FilterSetCollection(); - if ( filtering ) - { + if (filtering) { executionFilters.addFilterSet(getProject().getGlobalFilterSet()); } - for (Enumeration filterEnum = filterSets.elements(); - filterEnum.hasMoreElements();) { - executionFilters - .addFilterSet((FilterSet) filterEnum.nextElement()); - } - - while (true) - { - if ( copyThreadCount < maxThreadCount) - { + for (Enumeration filterEnum = filterSets.elements(); filterEnum.hasMoreElements();) { + executionFilters.addFilterSet((FilterSet) filterEnum.nextElement()); + } + + while (true) { + if (copyThreadCount < maxThreadCount) { CopyThread copyThread = new CopyThread(fromFile, toFile, executionFilters); copyThread.start(); copyThreadCount++; @@ -165,74 +150,35 @@ File file = new File(dirs[i]); if (!file.exists()) { if (!file.mkdirs()) { - log("Unable to create directory " - + file.getAbsolutePath(), Project.MSG_ERR); - } else { + log("Unable to create directory " + file.getAbsolutePath(), Project.MSG_ERR); + } + else { createCount++; } } } } if (createCount > 0) { - log("Copied " + dirCopyMap.size() - + " empty director" - + (dirCopyMap.size() == 1 ? "y" : "ies") - + " to " + createCount - + " empty director" - + (createCount == 1 ? "y" : "ies") + " under " + log("Copied " + dirCopyMap.size() + " empty director" + + (dirCopyMap.size() == 1 ? "y" : "ies") + " to " + createCount + + " empty director" + (createCount == 1 ? "y" : "ies") + " under " + destDir.getAbsolutePath()); } } } /** - * Returns a reason for failure based on - * the exception thrown. - * If the exception is not IOException output the class name, - * output the message - * if the exception is MalformedInput add a little note. + * private class to start a new thread to copy a single file or or directory. */ - private String getDueTo(Exception ex) { - boolean baseIOException = ex.getClass() == IOException.class; - StringBuffer message = new StringBuffer(); - if (!baseIOException || ex.getMessage() == null) { - message.append(ex.getClass().getName()); - } - if (ex.getMessage() != null) { - if (!baseIOException) { - message.append(" "); - } - message.append(ex.getMessage()); - } - if (ex.getClass().getName().indexOf("MalformedInput") != -1) { - message.append(LINE_SEPARATOR); - message.append( - "This is normally due to the input file containing invalid"); - message.append(LINE_SEPARATOR); - message.append("bytes for the character encoding used : "); - message.append( - getEncoding() == null - ? fileUtils.getDefaultEncoding() : getEncoding()); - message.append(LINE_SEPARATOR); - } - return message.toString(); - } - - /** - * private class to start a new thread to copy a single file or - * or directory. - */ - private class CopyThread extends Thread - { + private class CopyThread extends Thread { private String fromFile; private String toFile; private FilterSetCollection executionFilters; private Vector filterChains; private String inputEncoding; private String outputEncoding; - - public CopyThread(String fromFile, String toFile, FilterSetCollection executionFilters) - { + + public CopyThread(String fromFile, String toFile, FilterSetCollection executionFilters) { this.fromFile = fromFile; this.toFile = toFile; this.executionFilters = executionFilters; @@ -241,14 +187,11 @@ this.outputEncoding = getOutputEncoding(); } - public void run() - { + public void run() { try { - fileUtils.copyFile(fromFile, toFile, executionFilters, - filterChains, forceOverwrite, - preserveLastModified, inputEncoding, - outputEncoding, getProject()); - } catch (IOException e) { + fileUtils.copyFile(fromFile, toFile, executionFilters, filterChains, forceOverwrite, preserveLastModified, inputEncoding, outputEncoding, getProject()); + } + catch (IOException e) { log("Problem found in parallel copy " + e.toString(), Project.MSG_ERR); } copyThreadCount--;