buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CopyParallelTask.java
changeset 628 7c4a911dc066
parent 588 c7c26511138f
--- 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.</p>
- *
- *
+ * 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.</p>
+ * 
+ * 
  * @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--;