You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2009/02/28 18:37:45 UTC
svn commit: r748891 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/component/file/
camel-core/src/main/java/org/apache/camel/component/file/strategy/
camel-core/src/test/java/org/apache/camel/component/file/
components/camel-ftp/src/main/...
Author: davsclaus
Date: Sat Feb 28 17:37:44 2009
New Revision: 748891
URL: http://svn.apache.org/viewvc?rev=748891&view=rev
Log:
CAMEL-1408: Fixes setting absolute paths using the file component.
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathTest.java
- copied, changed from r748883, camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerCommitRenameAbsolutePathStrategyTest.java
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryAsAbsolutePathTest.java
- copied, changed from r748781, camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryTest.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFile.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileExchange.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/FileLockExclusiveReadLockStrategy.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameExclusiveReadLockStrategy.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerCommitRenameAbsolutePathStrategyTest.java
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java?rev=748891&r1=748890&r2=748891&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java Sat Feb 28 17:37:44 2009
@@ -105,6 +105,7 @@
answer.setFile(file);
answer.setFileLength(file.length());
answer.setFileName(file.getName());
+ answer.setAbsolute(file.isAbsolute());
answer.setAbsoluteFileName(file.getAbsolutePath());
try {
answer.setCanonicalFileName(file.getCanonicalPath());
@@ -112,10 +113,14 @@
// ignore
}
answer.setLastModified(file.lastModified());
- if (file.getParent() != null) {
- answer.setRelativeFileName(file.getParent() + File.separator + file.getName());
+ if (file.isAbsolute()) {
+ answer.setRelativeFileName(null);
} else {
- answer.setRelativeFileName(file.getName());
+ if (file.getParent() != null) {
+ answer.setRelativeFileName(file.getParent() + File.separator + file.getName());
+ } else {
+ answer.setRelativeFileName(file.getName());
+ }
}
// use file as body as we have converters if needed as stream
answer.setBody(file);
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFile.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFile.java?rev=748891&r1=748890&r2=748891&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFile.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFile.java Sat Feb 28 17:37:44 2009
@@ -35,7 +35,8 @@
private long fileLength;
private long lastModified;
private T file;
- private GenericFileBinding<T> binding;
+ private GenericFileBinding<T> binding;
+ private boolean absolute;
@Override
public GenericFile<T> clone() {
@@ -56,22 +57,23 @@
} catch (Exception e) {
throw ObjectHelper.wrapRuntimeCamelException(e);
}
+ result.setAbsolute(source.isAbsolute());
result.setAbsoluteFileName(source.getAbsoluteFileName());
result.setCanonicalFileName(source.getCanonicalFileName());
- result.setRelativeFileName(source.getRelativeFileName());
- result.setFileName(source.getFileName());
+ result.setRelativeFileName(source.getRelativeFileName());
+ result.setFileName(source.getFileName());
result.setFileLength(source.getFileLength());
result.setLastModified(source.getLastModified());
result.setFile(source.getFile());
result.setBody(source.getBody());
result.setBinding(source.getBinding());
return result;
- }
-
+ }
+
public boolean needToNormalize() {
return true;
}
-
+
public String getFileSeparator() {
return File.separator;
}
@@ -84,13 +86,28 @@
*/
public void changeFileName(String newName) {
newName = needToNormalize()
- // must normalize path to cater for Windows and other OS
- ? FileUtil.normalizePath(newName)
- // for the remote file we don't need to do that
- : newName;
+ // must normalize path to cater for Windows and other OS
+ ? FileUtil.normalizePath(newName)
+ // for the remote file we don't need to do that
+ : newName;
+
+ // is it relative or absolute
+ boolean absolute = isAbsolutePath(newName);
+
+ if (absolute) {
+ setAbsolute(true);
+ setAbsoluteFileName(newName);
+ // no relative filename for absolute files
+ setRelativeFileName(null);
+ String fileName = newName.substring(newName.lastIndexOf(getFileSeparator()) + 1);
+ setFileName(fileName);
+ return;
+ }
+ // the rest is complex relative path computation
+ setAbsolute(false);
setAbsoluteFileName(getParent() + getFileSeparator() + newName);
-
+
// relative name is a bit more complex to set as newName itself can contain
// folders we need to consider as well
String baseNewName = null;
@@ -117,6 +134,15 @@
setFileName(newName);
}
+ private boolean isAbsolutePath(String path) {
+ if (file instanceof File) {
+ // let java.io.File deal with it as its better than me
+ return new File(path).isAbsolute();
+ }
+ // otherwise absolute is considered if we start with the separator
+ return path.startsWith(getFileSeparator());
+ }
+
public String getRelativeFileName() {
return relativeFileName;
}
@@ -165,7 +191,7 @@
getBinding().setBody(this, os);
}
- public String getParent() {
+ public String getParent() {
if (getAbsoluteFileName().lastIndexOf(getFileSeparator()) > 0) {
return getAbsoluteFileName().substring(0, getAbsoluteFileName().lastIndexOf(getFileSeparator()));
} else {
@@ -186,10 +212,10 @@
public void setAbsoluteFileName(String absoluteFileName) {
this.absoluteFileName = needToNormalize()
- // must normalize path to cater for Windows and other OS
- ? FileUtil.normalizePath(absoluteFileName)
- // we don't need to do that for Remote File
- : absoluteFileName;
+ // must normalize path to cater for Windows and other OS
+ ? FileUtil.normalizePath(absoluteFileName)
+ // we don't need to do that for Remote File
+ : absoluteFileName;
}
public String getAbsoluteFileName() {
@@ -204,8 +230,16 @@
this.canonicalFileName = canonicalFileName;
}
+ public boolean isAbsolute() {
+ return absolute;
+ }
+
+ public void setAbsolute(boolean absolute) {
+ this.absolute = absolute;
+ }
+
@Override
public String toString() {
- return "GenericFile[" + relativeFileName + "]";
+ return "GenericFile[" + (absolute ? absoluteFileName : relativeFileName) + "]";
}
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java?rev=748891&r1=748890&r2=748891&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java Sat Feb 28 17:37:44 2009
@@ -420,7 +420,7 @@
message.setBody(file);
// compute the name that was written, it should be relative to the endpoint configuraion
- String name = file.getRelativeFileName();
+ String name = file.isAbsolute() ? file.getAbsoluteFileName() : file.getRelativeFileName();
if (isDirectory() && name.startsWith(getConfiguration().getFile())) {
// remove the file path configured on the endpoint for directory=true
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileExchange.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileExchange.java?rev=748891&r1=748890&r2=748891&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileExchange.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileExchange.java Sat Feb 28 17:37:44 2009
@@ -24,6 +24,7 @@
import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
import org.apache.camel.impl.DefaultExchange;
+import org.apache.camel.util.ObjectHelper;
public class GenericFileExchange<T> extends DefaultExchange {
@@ -62,11 +63,19 @@
protected void populateHeaders(GenericFile<T> file) {
if (file != null) {
getIn().setHeader("CamelFileName", file.getFileName());
+ getIn().setHeader("CamelFileAbsolute", file.isAbsolute());
getIn().setHeader("CamelFileAbsolutePath", file.getAbsoluteFileName());
// set the parent if there is a parent folder
- if (file.getRelativeFileName().lastIndexOf(File.separator) != -1) {
+ if (file.isAbsolute()) {
+ String parent = file.getAbsoluteFileName().substring(0, file.getAbsoluteFileName().lastIndexOf(File.separator));
+ if (ObjectHelper.isNotEmpty(parent)) {
+ getIn().setHeader("CamelFileParent", parent);
+ }
+ } else if (file.getRelativeFileName().lastIndexOf(File.separator) != -1) {
String parent = file.getRelativeFileName().substring(0, file.getRelativeFileName().lastIndexOf(File.separator));
- getIn().setHeader("CamelFileParent", parent);
+ if (ObjectHelper.isNotEmpty(parent)) {
+ getIn().setHeader("CamelFileParent", parent);
+ }
}
getIn().setHeader("CamelFilePath", file.getRelativeFileName());
getIn().setHeader("CamelFileCanonicalPath", file.getCanonicalFileName());
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/FileLockExclusiveReadLockStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/FileLockExclusiveReadLockStrategy.java?rev=748891&r1=748890&r2=748891&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/FileLockExclusiveReadLockStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/FileLockExclusiveReadLockStrategy.java Sat Feb 28 17:37:44 2009
@@ -123,7 +123,7 @@
ObjectHelper.close(channel, "while acquiring exclusive read lock for file: " + lockFileName, LOG);
// need to delete the lock file
if (LOG.isTraceEnabled()) {
- LOG.trace("Deleting lock file: " + lockFileName);
+ LOG.trace("Deleting (releasing) exclusive lock file: " + lockFileName);
}
File lockfile = new File(lockFileName);
lockfile.delete();
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameExclusiveReadLockStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameExclusiveReadLockStrategy.java?rev=748891&r1=748890&r2=748891&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameExclusiveReadLockStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameExclusiveReadLockStrategy.java Sat Feb 28 17:37:44 2009
@@ -62,8 +62,8 @@
exclusive = operations.renameFile(file.getAbsoluteFileName(), newFile.getAbsoluteFileName());
if (exclusive) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Acquired exclusive read lock to file: " + file);
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Acquired exclusive read lock to file: " + file);
}
// rename it back so we can read it
operations.renameFile(newFile.getAbsoluteFileName(), file.getAbsoluteFileName());
Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathTest.java (from r748883, camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerCommitRenameAbsolutePathStrategyTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerCommitRenameAbsolutePathStrategyTest.java&r1=748883&r2=748891&rev=748891&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerCommitRenameAbsolutePathStrategyTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerAbsolutePathTest.java Sat Feb 28 17:37:44 2009
@@ -24,29 +24,23 @@
import org.apache.camel.component.mock.MockEndpoint;
/**
- * Unit test for the FileRenameStrategy using move options with absolute paths
+ * Unit test for consuming from an absolute path
*/
-public class FileConsumerCommitRenameAbsolutePathStrategyTest extends ContextTestSupport {
+public class FileConsumerAbsolutePathTest extends ContextTestSupport {
private String base;
@Override
protected void setUp() throws Exception {
- deleteDirectory("target/done");
deleteDirectory("target/reports");
// use current dir as base as aboslute path
- base = new File(".").getPath();
+ base = new File("").getAbsolutePath() + "/target/reports";
super.setUp();
}
- // TODO:
- public void TestRenameSuccess() throws Exception {
- }
-
- public void xxxTestRenameSuccess() throws Exception {
+ public void testConsumeFromAbsolutePath() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:report");
mock.expectedBodiesReceived("Hello Paris");
- mock.expectedFileExists("./target/done/paris.txt", "Hello Paris");
template.sendBodyAndHeader("file:target/reports", "Hello Paris", Exchange.FILE_NAME, "paris.txt");
@@ -56,7 +50,7 @@
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() throws Exception {
- from("file://target/reports?moveExpression=" + base + "/done/${file:name}&consumer.delay=5000").to("mock:report");
+ from("file://" + base + "?delete=true").to("mock:report");
}
};
}
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerCommitRenameAbsolutePathStrategyTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerCommitRenameAbsolutePathStrategyTest.java?rev=748891&r1=748890&r2=748891&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerCommitRenameAbsolutePathStrategyTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerCommitRenameAbsolutePathStrategyTest.java Sat Feb 28 17:37:44 2009
@@ -35,15 +35,11 @@
deleteDirectory("target/done");
deleteDirectory("target/reports");
// use current dir as base as aboslute path
- base = new File(".").getPath();
+ base = new File("").getAbsolutePath() + "/target";
super.setUp();
}
- // TODO:
- public void TestRenameSuccess() throws Exception {
- }
-
- public void xxxTestRenameSuccess() throws Exception {
+ public void testRenameSuccess() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:report");
mock.expectedBodiesReceived("Hello Paris");
mock.expectedFileExists("./target/done/paris.txt", "Hello Paris");
Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java?rev=748891&r1=748890&r2=748891&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java (original)
+++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java Sat Feb 28 17:37:44 2009
@@ -100,6 +100,8 @@
answer.setLastModified(file.getTimestamp().getTimeInMillis());
}
answer.setHostname(((RemoteFileConfiguration) endpoint.getConfiguration()).getHost());
+ // all ftp files is consider as relative
+ answer.setAbsolute(false);
String absoluteFileName = (ObjectHelper.isNotEmpty(directory) ? directory + "/" : "") + file.getName();
answer.setAbsoluteFileName(absoluteFileName);
Copied: camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryAsAbsolutePathTest.java (from r748781, camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryAsAbsolutePathTest.java?p2=camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryAsAbsolutePathTest.java&p1=camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryTest.java&r1=748781&r2=748891&rev=748891&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryTest.java (original)
+++ camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryAsAbsolutePathTest.java Sat Feb 28 17:37:44 2009
@@ -30,10 +30,13 @@
/**
* @version $Revision$
*/
-public class FtpConsumerLocalWorkDirectoryTest extends FtpServerTestSupport {
+public class FtpConsumerLocalWorkDirectoryAsAbsolutePathTest extends FtpServerTestSupport {
+
+ private String base;
protected String getFtpUrl() {
- return "ftp://admin@localhost:" + getPort() + "/lwd/?password=admin&delay=5000&localWorkDirectory=target/lwd";
+ base = new File("target/lwd").getAbsolutePath();
+ return "ftp://admin@localhost:" + getPort() + "/lwd/?password=admin&delay=5000&localWorkDirectory=" + base;
}
@Override
@@ -83,8 +86,9 @@
public void process(Exchange exchange) throws Exception {
File body = exchange.getIn().getBody(File.class);
assertNotNull(body);
- assertTrue("Local work file should exists", body.exists());
- assertEquals(FileUtil.normalizePath("target/lwd/hello.txt"), body.getPath());
+ assertTrue("Should be absolute path", body.isAbsolute());
+ assertTrue("Local work file should exists", body.exists());
+ assertEquals(FileUtil.normalizePath(base + "/hello.txt"), body.getPath());
}
}).to("mock:result", "file://target/out");
}