Author: dkulp Date: Mon Oct 3 18:24:44 2011 New Revision: 1178493 URL: http://svn.apache.org/viewvc?rev=1178493&view=rev Log: Merged revisions 1178035 via svnmerge from https://svn.apache.org/repos/asf/camel/trunk
........ r1178035 | davsclaus | 2011-10-01 11:58:30 -0400 (Sat, 01 Oct 2011) | 1 line CAMEL-4505: Added option copyAndDeleteOnRenameFail to file component. ........ Added: camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerPreMoveCopyAndDeleteOnRenameFailFalseTest.java - copied unchanged from r1178035, camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerPreMoveCopyAndDeleteOnRenameFailFalseTest.java Modified: camel/branches/camel-2.8.x/ (props changed) camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/component/file/FileEndpoint.java camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/DefaultHeaderFilterStrategy.java camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java Propchange: camel/branches/camel-2.8.x/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/component/file/FileEndpoint.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/component/file/FileEndpoint.java?rev=1178493&r1=1178492&r2=1178493&view=diff ============================================================================== --- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/component/file/FileEndpoint.java (original) +++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/component/file/FileEndpoint.java Mon Oct 3 18:24:44 2011 @@ -35,6 +35,7 @@ public class FileEndpoint extends Generi private FileOperations operations = new FileOperations(this); private File file; + private boolean copyAndDeleteOnRenameFail = true; public FileEndpoint() { // use marker file as default exclusive read locks @@ -137,4 +138,11 @@ public class FileEndpoint extends Generi return FileUtil.isAbsolute(new File(name)); } + public boolean isCopyAndDeleteOnRenameFail() { + return copyAndDeleteOnRenameFail; + } + + public void setCopyAndDeleteOnRenameFail(boolean copyAndDeleteOnRenameFail) { + this.copyAndDeleteOnRenameFail = copyAndDeleteOnRenameFail; + } } Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java?rev=1178493&r1=1178492&r2=1178493&view=diff ============================================================================== --- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java (original) +++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java Mon Oct 3 18:24:44 2011 @@ -62,7 +62,11 @@ public class FileOperations implements G public boolean renameFile(String from, String to) throws GenericFileOperationFailedException { File file = new File(from); File target = new File(to); - return FileUtil.renameFile(file, target); + try { + return FileUtil.renameFile(file, target, endpoint.isCopyAndDeleteOnRenameFail()); + } catch (IOException e) { + throw new GenericFileOperationFailedException("Error renaming file from " + from + " to " + to, e); + } } public boolean existsFile(String name) throws GenericFileOperationFailedException { @@ -234,10 +238,10 @@ public class FileOperations implements G } } - private boolean writeFileByLocalWorkPath(File source, File file) { + private boolean writeFileByLocalWorkPath(File source, File file) throws IOException { LOG.trace("Using local work file being renamed from: {} to: {}", source, file); - return FileUtil.renameFile(source, file); + return FileUtil.renameFile(source, file, endpoint.isCopyAndDeleteOnRenameFail()); } private void writeFileByFile(File source, File target) throws IOException { Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/DefaultHeaderFilterStrategy.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/DefaultHeaderFilterStrategy.java?rev=1178493&r1=1178492&r2=1178493&view=diff ============================================================================== --- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/DefaultHeaderFilterStrategy.java (original) +++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/DefaultHeaderFilterStrategy.java Mon Oct 3 18:24:44 2011 @@ -92,7 +92,6 @@ public class DefaultHeaderFilterStrategy public String getOutFilterPattern() { return outFilterPattern == null ? null : outFilterPattern.pattern(); } - /** * Sets the "out" direction filter regular expression {@link Pattern}. The @@ -162,7 +161,7 @@ public class DefaultHeaderFilterStrategy } /** - * Gets the isLowercase property which is a boolean to determinte + * Gets the isLowercase property which is a boolean to determine * whether header names should be converted to lowercase before * checking it the filter Set. It does not affect filtering using * regular expression pattern. @@ -172,7 +171,7 @@ public class DefaultHeaderFilterStrategy } /** - * Sets the isLowercase property which is a boolean to determinte + * Sets the isLowercase property which is a boolean to determine * whether header names should be converted to lowercase before * checking it the filter Set. It does not affect filtering using * regular expression pattern. @@ -235,4 +234,5 @@ public class DefaultHeaderFilterStrategy return false; } + } Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java?rev=1178493&r1=1178492&r2=1178493&view=diff ============================================================================== --- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java (original) +++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/FileUtil.java Mon Oct 3 18:24:44 2011 @@ -305,7 +305,33 @@ public final class FileUtil { } } + /** + * Renames a file. + * + * @param from the from file + * @param to the to file + * @return <tt>true</tt> if the file was renamed, otherwise <tt>false</tt> + * @throws java.io.IOException is thrown if error renaming file + */ public static boolean renameFile(File from, File to) { + try { + return renameFile(from, to, true); + } catch (IOException ioex) { + LOG.debug("Error renaming file from: " + from + " to: " + to + " using copy/delete", ioex); + } + return false; + } + + /** + * Renames a file. + * + * @param from the from file + * @param to the to file + * @param copyAndDeleteOnRenameFail whether to fallback and do copy and delete, if renameTo fails + * @return <tt>true</tt> if the file was renamed, otherwise <tt>false</tt> + * @throws java.io.IOException is thrown if error renaming file + */ + public static boolean renameFile(File from, File to, boolean copyAndDeleteOnRenameFail) throws IOException { // do not try to rename non existing files if (!from.exists()) { return false; @@ -333,18 +359,14 @@ public final class FileUtil { // we could not rename using renameTo, so lets fallback and do a copy/delete approach. // for example if you move files between different file systems (linux -> windows etc.) - if (!renamed) { + if (!renamed && copyAndDeleteOnRenameFail) { // now do a copy and delete as all rename attempts failed - try { - LOG.debug("Cannot rename file from: {} to: {}, will now use a copy/delete approach instead", from, to); - copyFile(from, to); - if (!deleteFile(from)) { - LOG.warn("Renaming file from: {} to: {} failed due cannot delete from file: {} after copy succeeded", new Object[]{from, to, from}); - renamed = false; - } + LOG.debug("Cannot rename file from: {} to: {}, will now use a copy/delete approach instead", from, to); + copyFile(from, to); + if (!deleteFile(from)) { + throw new IOException("Renaming file from: " + from + " to: " + to + " failed due cannot delete from file: " + from + " after copy succeeded"); + } else { renamed = true; - } catch (IOException e) { - LOG.debug("Error renaming file from: " + from + " to: " + to + " using copy/delete", e); } }