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/17 13:35:24 UTC
svn commit: r745012 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/builder/
camel-core/src/main/java/org/apache/camel/component/file/
camel-core/src/main/java/org/apache/camel/component/file/strategy/
camel-core/src/main/java/org/apache/c...
Author: davsclaus
Date: Tue Feb 17 12:35:24 2009
New Revision: 745012
URL: http://svn.apache.org/viewvc?rev=745012&view=rev
Log:
CAMEL-1347: file producer will rename local work file if any instead of doing a file to file copy (optimization). Added not to some operators in simple language. Added not predicate wiki example. Fixed checkstyle. Yes this is many because SVN was down.
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceWhenNotPredicateTest.java
- copied, changed from r744955, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceCompoundPredicateTest.java
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryWorkOnPayloadTest.java
- copied, changed from r744966, 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/builder/ExpressionBuilder.java
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileProcessStrategySupport.java
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLangaugeOperator.java
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguageSupport.java
camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java
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/builder/ExpressionBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java Tue Feb 17 12:35:24 2009
@@ -472,7 +472,7 @@
@Override
public String toString() {
- return "" + expression + ".convertTo(" + type + ")";
+ return "" + expression + ".convertToEvaluatedType(" + type + ")";
}
};
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/PredicateBuilder.java Tue Feb 17 12:35:24 2009
@@ -70,7 +70,7 @@
@Override
public String toString() {
- return "not " + predicate;
+ return "not (" + predicate + ")";
}
};
}
@@ -293,7 +293,7 @@
@Override
public String toString() {
- return expression + ".matches(" + pattern + ")";
+ return expression + ".matches('" + pattern + "')";
}
@Override
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java Tue Feb 17 12:35:24 2009
@@ -50,6 +50,11 @@
*/
public static final String DEFAULT_LOCK_FILE_POSTFIX = ".camelLock";
+ /**
+ * Header key holding file path to a local work directory containg a consumed file (if any)
+ */
+ public static final String HEADER_FILE_LOCAL_WORK_PATH= "CamelFileLocalWorkPath";
+
protected GenericFileEndpoint<File> buildFileEndpoint(String uri, String remaining, Map parameters) throws Exception {
File file = new File(remaining);
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java Tue Feb 17 12:35:24 2009
@@ -116,28 +116,64 @@
public boolean storeFile(String fileName, GenericFileExchange<File> exchange) throws GenericFileOperationFailedException {
ObjectHelper.notNull(endpoint, "endpoint");
-
+
+ // we can write the file by 3 different techniques
+ // 1. write file to file
+ // 2. rename a file from a local work path
+ // 3. write stream to file
+
File file = new File(fileName);
try {
+
+ // is the body file based
File source = null;
try {
- source = exchange.getIn().getBody(File.class);
+ if (exchange.getIn().getBody() instanceof File || exchange.getIn().getBody() instanceof GenericFile) {
+ source = exchange.getIn().getBody(File.class);
+ }
} catch (NoTypeConversionAvailableException e) {
// ignore
}
- if (source != null && source.exists()) {
- writeFileByFile(source, file);
- } else {
- InputStream in = ExchangeHelper.getMandatoryInBody(exchange, InputStream.class);
- writeFileByStream(in, file);
+
+ if (source != null) {
+ // okay we know the body is a file type
+
+ // so try to see if we can optimize by renaming the local work path file instead of doing
+ // a full file to file copy, as the local work copy is to be deleted afterwords anyway
+ // local work path
+ File local = exchange.getIn().getHeader(FileComponent.HEADER_FILE_LOCAL_WORK_PATH, File.class);
+ if (local != null && local.exists()) {
+ boolean renamed = writeFileByLocalWorkPath(local, file);
+ if (renamed) {
+ // clear header as we have renamed the file
+ exchange.getIn().setHeader(FileComponent.HEADER_FILE_LOCAL_WORK_PATH, null);
+ // return as the operation is complete, we just renamed the local work file
+ // to the target.
+ return true;
+ }
+ } else if (source.exists()) {
+ // no there is no local work file so use file to file copy if the source exists
+ writeFileByFile(source, file);
+ return true;
+ }
}
- } catch (IOException e) {
+
+ // fallback and use stream based
+ InputStream in = ExchangeHelper.getMandatoryInBody(exchange, InputStream.class);
+ writeFileByStream(in, file);
+ return true;
+ } catch (IOException e) {
throw new GenericFileOperationFailedException("Cannot store file: " + file, e);
} catch (InvalidPayloadException e) {
throw new GenericFileOperationFailedException("Cannot store file: " + file, e);
}
+ }
- return true;
+ private boolean writeFileByLocalWorkPath(File source, File file) {
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Using local work file being renamed from: " + source + " to: " + file);
+ }
+ return source.renameTo(file);
}
private void writeFileByFile(File source, File target) throws IOException {
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileProcessStrategySupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileProcessStrategySupport.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileProcessStrategySupport.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileProcessStrategySupport.java Tue Feb 17 12:35:24 2009
@@ -18,6 +18,7 @@
import java.io.File;
+import org.apache.camel.component.file.FileComponent;
import org.apache.camel.component.file.GenericFile;
import org.apache.camel.component.file.GenericFileEndpoint;
import org.apache.camel.component.file.GenericFileExchange;
@@ -29,7 +30,7 @@
public abstract class GenericFileProcessStrategySupport<T> implements GenericFileProcessStrategy<T> {
protected final transient Log log = LogFactory.getLog(getClass());
- private GenericFileExclusiveReadLockStrategy<T> exclusiveReadLockStrategy;
+ protected GenericFileExclusiveReadLockStrategy<T> exclusiveReadLockStrategy;
public boolean begin(GenericFileOperations<T> operations, GenericFileEndpoint<T> endpoint, GenericFileExchange<T> exchange, GenericFile<T> file) throws Exception {
// is we use excluse read then acquire the exclusive read (waiting until we got it)
@@ -70,9 +71,8 @@
private void deleteLocalWorkFile(GenericFileExchange<T> exchange) {
// delete local work file, if it was used (eg by ftp component)
- String path = exchange.getIn().getHeader("CamelFileLocalWorkPath", String.class);
- if (path != null) {
- File local = new File(path);
+ File local = exchange.getIn().getHeader(FileComponent.HEADER_FILE_LOCAL_WORK_PATH, File.class);
+ if (local != null && local.exists()) {
if (log.isTraceEnabled()) {
log.trace("Deleting lock work file: " + local);
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLangaugeOperator.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLangaugeOperator.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLangaugeOperator.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLangaugeOperator.java Tue Feb 17 12:35:24 2009
@@ -26,13 +26,16 @@
* <li>LTE : <=</li>
* <li>NOT : !=</li>
* <li>contains : tested for if it contains the value</li>
+ * <li>not contains : tested for if it does not contain the value</li>
* <li>regex : matching a regular expression</li>
+ * <li>not regex : not matching a regular expression</li>
* <li>in : tested for in a list of values separated by comma</li>
+ * <li>not in : tested for not in a list of values separated by comma</li>
* </ul>
*/
public enum SimpleLangaugeOperator {
- EQ, GT, GTE, LT, LTE, NOT, CONTAINS, REGEX, IN;
+ EQ, GT, GTE, LT, LTE, NOT, CONTAINS, NOT_CONTAINS, REGEX, NOT_REGEX, IN, NOT_IN;
public static SimpleLangaugeOperator asOperator(String text) {
if ("==".equals(text)) {
@@ -49,10 +52,16 @@
return NOT;
} else if ("contains".equals(text)) {
return CONTAINS;
+ } else if ("not contains".equals(text)) {
+ return NOT_CONTAINS;
} else if ("regex".equals(text)) {
return REGEX;
+ } else if ("not regex".equals(text)) {
+ return NOT_REGEX;
} else if ("in".equals(text)) {
return IN;
+ } else if ("not in".equals(text)) {
+ return NOT_IN;
}
throw new IllegalArgumentException("Operator not supported: " + text);
}
@@ -72,10 +81,16 @@
return "!=";
} else if (operator == CONTAINS) {
return "contains";
+ } else if (operator == NOT_CONTAINS) {
+ return "not contains";
} else if (operator == REGEX) {
return "regex";
+ } else if (operator == NOT_REGEX) {
+ return "not regex";
} else if (operator == IN) {
return "in";
+ } else if (operator == NOT_IN) {
+ return "not in";
}
return "";
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguageSupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguageSupport.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguageSupport.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguageSupport.java Tue Feb 17 12:35:24 2009
@@ -17,8 +17,8 @@
package org.apache.camel.language.simple;
import java.util.ArrayList;
-import java.util.List;
import java.util.Iterator;
+import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -40,7 +40,8 @@
*/
public abstract class SimpleLanguageSupport implements Language {
- protected static final Pattern PATTERN = Pattern.compile("^\\$\\{(.+)\\}\\s+(==|>|>=|<|<=|!=|contains|regex|in)\\s+(.+)$");
+ protected static final Pattern PATTERN = Pattern.compile(
+ "^\\$\\{(.+)\\}\\s+(==|>|>=|<|<=|!=|contains|not contains|regex|not regex|in|not in)\\s+(.+)$");
protected final Log log = LogFactory.getLog(getClass());
public Predicate createPredicate(String expression) {
@@ -112,12 +113,18 @@
predicate = PredicateBuilder.isLessThanOrEqualTo(left, rightConverted);
} else if (operator == NOT) {
predicate = PredicateBuilder.isNotEqualTo(left, rightConverted);
- } else if (operator == CONTAINS) {
+ } else if (operator == CONTAINS || operator == NOT_CONTAINS) {
predicate = PredicateBuilder.contains(left, rightConverted);
- } else if (operator == REGEX) {
+ if (operator == NOT_CONTAINS) {
+ predicate = PredicateBuilder.not(predicate);
+ }
+ } else if (operator == REGEX || operator == NOT_REGEX) {
// reg ex should use String pattern, so we evalute the right hand side as a String
predicate = PredicateBuilder.regex(left, right.evaluate(exchange, String.class));
- } else if (operator == IN) {
+ if (operator == NOT_REGEX) {
+ predicate = PredicateBuilder.not(predicate);
+ }
+ } else if (operator == IN || operator == NOT_IN) {
// okay the in operator is a bit more complex as we need to build a list of values
// from the right handside expression.
// each element on the right handside must be separated by comma (default for create iterator)
@@ -129,6 +136,9 @@
// then reuse value builder to create the in predicate with the list of values
ValueBuilder vb = new ValueBuilder(left);
predicate = vb.in(values.toArray());
+ if (operator == NOT_IN) {
+ predicate = PredicateBuilder.not(predicate);
+ }
}
if (predicate == null) {
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java Tue Feb 17 12:35:24 2009
@@ -159,6 +159,15 @@
assertExpression("${in.header.foo} contains def", false);
}
+ public void testNotConstains() throws Exception {
+ assertExpression("${in.header.foo} not contains 'a'", false);
+ assertExpression("${in.header.foo} not contains a", false);
+ assertExpression("${in.header.foo} not contains 'ab'", false);
+ assertExpression("${in.header.foo} not contains 'abc'", false);
+ assertExpression("${in.header.foo} not contains 'def'", true);
+ assertExpression("${in.header.foo} not contains def", true);
+ }
+
public void testRegex() throws Exception {
assertExpression("${in.header.foo} regex '^a..$'", true);
assertExpression("${in.header.foo} regex '^ab.$'", true);
@@ -171,6 +180,18 @@
assertExpression("${in.header.bar} regex ^\\d{2}", false);
}
+ public void testNotRegex() throws Exception {
+ assertExpression("${in.header.foo} not regex '^a..$'", false);
+ assertExpression("${in.header.foo} not regex '^ab.$'", false);
+ assertExpression("${in.header.foo} not regex ^ab.$", false);
+ assertExpression("${in.header.foo} not regex ^d.*$", true);
+
+ assertExpression("${in.header.bar} not regex '^\\d{3}'", false);
+ assertExpression("${in.header.bar} not regex '^\\d{2}'", true);
+ assertExpression("${in.header.bar} not regex ^\\d{3}", false);
+ assertExpression("${in.header.bar} not regex ^\\d{2}", true);
+ }
+
public void testIn() throws Exception {
// string to string
assertExpression("${in.header.foo} in 'foo,abc,def'", true);
@@ -185,6 +206,19 @@
assertExpression("${in.header.bar} in '100,200'", false);
}
+ public void testNotIn() throws Exception {
+ // string to string
+ assertExpression("${in.header.foo} not in 'foo,abc,def'", false);
+ assertExpression("${in.header.foo} not in ${bean:generator.generateFilename}", false);
+ assertExpression("${in.header.foo} not in foo,abc,def", false);
+ assertExpression("${in.header.foo} not in 'foo,def'", true);
+
+ // integer to string
+ assertExpression("${in.header.bar} not in '100,123,200'", false);
+ assertExpression("${in.header.bar} not in 100,123,200", false);
+ assertExpression("${in.header.bar} not in ${bean:generator.generateId}", false);
+ assertExpression("${in.header.bar} not in '100,200'", true);
+ }
protected String getLanguageName() {
return "simple";
Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceWhenNotPredicateTest.java (from r744955, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceCompoundPredicateTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceWhenNotPredicateTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceWhenNotPredicateTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceCompoundPredicateTest.java&r1=744955&r2=745012&rev=745012&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceCompoundPredicateTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceWhenNotPredicateTest.java Tue Feb 17 12:35:24 2009
@@ -16,72 +16,30 @@
*/
package org.apache.camel.processor;
-import java.util.HashMap;
-import java.util.Map;
-
import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Predicate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import static org.apache.camel.builder.PredicateBuilder.and;
-import static org.apache.camel.builder.PredicateBuilder.or;
+import static org.apache.camel.builder.PredicateBuilder.not;
/**
* @version $Revision$
*/
-public class ChoiceCompoundPredicateTest extends ContextTestSupport {
-
- public void testGuest() throws Exception {
- MockEndpoint mock = getMockEndpoint("mock:guest");
- mock.expectedMessageCount(1);
-
- template.sendBody("direct:start", "Hello World");
-
- assertMockEndpointsSatisfied();
- }
-
- public void testUser() throws Exception {
- MockEndpoint mock = getMockEndpoint("mock:user");
- mock.expectedMessageCount(1);
-
- template.sendBodyAndHeader("direct:start", "Hello World", "username", "goofy");
-
- assertMockEndpointsSatisfied();
- }
+public class ChoiceWhenNotPredicateTest extends ContextTestSupport {
- public void testAdmin() throws Exception {
- MockEndpoint mock = getMockEndpoint("mock:admin");
+ public void testPeople() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:people");
mock.expectedMessageCount(1);
- Map<String, Object> headers = new HashMap<String, Object>();
- headers.put("username", "donald");
- headers.put("admin", "true");
- template.sendBodyAndHeaders("direct:start", "Hello World", headers);
+ template.sendBodyAndHeader("direct:start", "Hello World", "username", "donald");
assertMockEndpointsSatisfied();
}
- public void testGod() throws Exception {
- MockEndpoint mock = getMockEndpoint("mock:god");
+ public void testAnimals() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:animals");
mock.expectedMessageCount(1);
- Map<String, Object> headers = new HashMap<String, Object>();
- headers.put("username", "pluto");
- headers.put("admin", "true");
- headers.put("type", "god");
- template.sendBodyAndHeaders("direct:start", "Hello World", headers);
-
- assertMockEndpointsSatisfied();
- }
-
- public void testRiderGod() throws Exception {
- MockEndpoint mock = getMockEndpoint("mock:god");
- mock.expectedMessageCount(1);
-
- Map<String, Object> headers = new HashMap<String, Object>();
- headers.put("username", "Camel");
- headers.put("admin", "true");
- template.sendBodyAndHeaders("direct:start", "Hello Camel Rider", headers);
+ template.sendBodyAndHeader("direct:start", "Hello World", "username", "pluto");
assertMockEndpointsSatisfied();
}
@@ -90,30 +48,11 @@
return new RouteBuilder() {
public void configure() {
// START SNIPPET: e1
- // We define 3 predicates based on some user roles
- // we have static imported and/or from org.apache.camel.builder.PredicateBuilder
-
- // First we have a regular user that is just identified having a username header
- Predicate user = header("username").isNotNull();
-
- // The admin user must be a user AND have a admin header as true
- Predicate admin = and(user, header("admin").isEqualTo("true"));
-
- // And God must be an admin and (either have type god or a special message containing Camel Rider)
- Predicate god = and(admin, or(body().contains("Camel Rider"), header("type").isEqualTo("god")));
-
- // As you can see with the predicates above we can stack them to build compound predicates
-
- // In our route below we can create a nice content based rotuer based on the predicates we
- // have defined. Then the route is easy to read and understand.
- // We encourge you to define complex predicates outside the fluent router bulder as
- // it will just get a bit complex for humans to read
- from("direct:start").choice()
- .when(god).to("mock:god")
- .when(admin).to("mock:admin")
- .when(user).to("mock:user")
- .otherwise().to("mock:guest")
- .end();
+ from("direct:start")
+ .choice()
+ .when(not(header("username").regex("goofy|pluto"))).to("mock:people")
+ .otherwise().to("mock:animals")
+ .end();
// END SNIPPET: e1
}
};
Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java?rev=745012&r1=745011&r2=745012&view=diff
==============================================================================
--- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java (original)
+++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java Tue Feb 17 12:35:24 2009
@@ -26,6 +26,7 @@
import java.util.Arrays;
import java.util.List;
+import org.apache.camel.component.file.FileComponent;
import org.apache.camel.component.file.GenericFile;
import org.apache.camel.component.file.GenericFileEndpoint;
import org.apache.camel.component.file.GenericFileExchange;
@@ -230,7 +231,7 @@
os = new FileOutputStream(temp);
// set header with the path to the local work file
- exchange.getIn().setHeader("CamelFileLocalWorkPath", local.getPath());
+ exchange.getIn().setHeader(FileComponent.HEADER_FILE_LOCAL_WORK_PATH, local.getPath());
} catch (Exception e) {
throw new RemoteFileOperationFailedException("Cannot create new local work file: " + local);
Modified: 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/FtpConsumerLocalWorkDirectoryTest.java?rev=745012&r1=745011&r2=745012&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/FtpConsumerLocalWorkDirectoryTest.java Tue Feb 17 12:35:24 2009
@@ -33,7 +33,7 @@
*/
public class FtpConsumerLocalWorkDirectoryTest extends FtpServerTestSupport {
- private String getFtpUrl() {
+ protected String getFtpUrl() {
return "ftp://admin@localhost:" + getPort() + "/lwd/?password=admin&delay=5000&localWorkDirectory=target/lwd";
}
@@ -87,7 +87,7 @@
assertTrue("Local work file should exists", body.exists());
assertEquals(FileUtil.normalizePath("target/lwd/hello.txt"), body.getPath());
}
- }).to("file://target/out", "mock:result");
+ }).to("mock:result", "file://target/out");
}
};
}
Copied: camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryWorkOnPayloadTest.java (from r744966, 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/FtpConsumerLocalWorkDirectoryWorkOnPayloadTest.java?p2=camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryWorkOnPayloadTest.java&p1=camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryTest.java&r1=744966&r2=745012&rev=745012&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/FtpConsumerLocalWorkDirectoryWorkOnPayloadTest.java Tue Feb 17 12:35:24 2009
@@ -16,78 +16,25 @@
*/
package org.apache.camel.component.file.remote;
-import java.io.File;
-
-import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
-import org.apache.camel.Producer;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.file.FileComponent;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.converter.IOConverter;
-import org.apache.camel.util.FileUtil;
/**
* @version $Revision$
*/
-public class FtpConsumerLocalWorkDirectoryTest extends FtpServerTestSupport {
-
- private String getFtpUrl() {
- return "ftp://admin@localhost:" + getPort() + "/lwd/?password=admin&delay=5000&localWorkDirectory=target/lwd";
- }
-
- @Override
- protected void setUp() throws Exception {
- deleteDirectory("target/lwd");
- deleteDirectory("target/out");
- super.setUp();
- prepareFtpServer();
- }
-
- private void prepareFtpServer() throws Exception {
- // prepares the FTP Server by creating a file on the server that we want to unit
- // test that we can pool
- Endpoint endpoint = context.getEndpoint(getFtpUrl());
- Exchange exchange = endpoint.createExchange();
- exchange.getIn().setBody("Hello World");
- exchange.getIn().setHeader(FileComponent.HEADER_FILE_NAME, "hello.txt");
- Producer producer = endpoint.createProducer();
- producer.start();
- producer.process(exchange);
- producer.stop();
- }
-
- public void testLocalWorkDirectory() throws Exception {
- MockEndpoint mock = getMockEndpoint("mock:result");
- mock.expectedBodiesReceived("Hello World");
- mock.expectedMessageCount(1);
-
- assertMockEndpointsSatisfied();
-
- Thread.sleep(200);
-
- // now the lwd file should be deleted
- File local = new File("target/lwd/hello.txt").getAbsoluteFile();
- assertFalse("Local work file should have been deleted", local.exists());
-
- // and the out file should exists
- File out = new File("target/out/hello.txt").getAbsoluteFile();
- assertTrue("file should exists", out.exists());
- assertEquals("Hello World", IOConverter.toString(out));
- }
+public class FtpConsumerLocalWorkDirectoryWorkOnPayloadTest extends FtpConsumerLocalWorkDirectoryTest {
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() throws Exception {
from(getFtpUrl()).process(new Processor() {
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());
+ // alter the body by setting it to a String type
+ exchange.getIn().setBody("Hello World");
+
}
- }).to("file://target/out", "mock:result");
+ }).to("mock:result", "file://target/out");
}
};
}