Author: davsclaus
Date: Sun Nov 30 07:05:17 2008
New Revision: 721827
URL: http://svn.apache.org/viewvc?rev=721827&view=rev
Log:
CAMEL-1112: Added file language expression based sorting incl. grouping (quite
fancy)
Added:
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileSortByIgnoreCaseExpressionTest.java
- copied, changed from r721798,
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileSortByExpressionTest.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/DefaultFileSorter.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/DefaultFileSorter.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/DefaultFileSorter.java?rev=721827&r1=721826&r2=721827&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/DefaultFileSorter.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/DefaultFileSorter.java
Sun Nov 30 07:05:17 2008
@@ -97,7 +97,7 @@
* @return the comparator
*/
public static Comparator<FileExchange> sortByFileLanguage(final String
expression, final boolean reverse) {
- return sortByFileLanguage(expression, reverse, null);
+ return sortByFileLanguage(expression, reverse, false, null);
}
/**
@@ -105,17 +105,31 @@
*
* @param expression the file language expression
* @param reverse true to reverse order
+ * @param ignoreCase ignore case if comparing strings
+ * @return the comparator
+ */
+ public static Comparator<FileExchange> sortByFileLanguage(final String
expression, final boolean reverse,
+ final boolean
ignoreCase) {
+ return sortByFileLanguage(expression, reverse, ignoreCase, null);
+ }
+
+ /**
+ * Returns a new sory by file language expression
+ *
+ * @param expression the file language expression
+ * @param reverse true to reverse order
+ * @param ignoreCase ignore case if comparing strings
* @param nested nested comparator for sub group sorting, can be null
* @return the comparator
*/
public static Comparator<FileExchange> sortByFileLanguage(final String
expression, final boolean reverse,
- final
Comparator<FileExchange> nested) {
+ final boolean
ignoreCase, final Comparator<FileExchange> nested) {
return new Comparator<FileExchange>() {
public int compare(FileExchange o1, FileExchange o2) {
final Expression exp = FileLanguage.file(expression);
Object result1 = exp.evaluate(o1);
Object result2 = exp.evaluate(o2);
- int answer = ObjectHelper.compare(result1, result2);
+ int answer = ObjectHelper.compare(result1, result2,
ignoreCase);
// if equal then sub sort by nested comparator
if (answer == 0 && nested != null) {
answer = nested.compare(o1, o2);
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java?rev=721827&r1=721826&r2=721827&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java
Sun Nov 30 07:05:17 2008
@@ -109,12 +109,17 @@
}
String group = it.next();
+
boolean reverse = group.startsWith("reverse:");
String reminder = reverse ? ifStartsWithReturnRemainder("reverse:",
group) : group;
+
+ boolean ignoreCase = reminder.startsWith("ignoreCase:");
+ reminder = ignoreCase ? ifStartsWithReturnRemainder("ignoreCase:",
reminder) : reminder;
+
ObjectHelper.notNull(reminder, "sortBy option does not contain the
expression");
// recursive add nested sorters
- return DefaultFileSorter.sortByFileLanguage(reminder, reverse,
createSortByComparator(it));
+ return DefaultFileSorter.sortByFileLanguage(reminder, reverse,
ignoreCase, createSortByComparator(it));
}
}
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?rev=721827&r1=721826&r2=721827&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
Sun Nov 30 07:05:17 2008
@@ -107,6 +107,18 @@
* handling nulls and objects which do not handle sorting gracefully
*/
public static int compare(Object a, Object b) {
+ return compare(a, b, false);
+ }
+
+ /**
+ * A helper method for performing an ordered comparison on the objects
+ * handling nulls and objects which do not handle sorting gracefully
+ *
+ * @param a the first object
+ * @param b the second object
+ * @param ignoreCase ignore case for string comparison
+ */
+ public static int compare(Object a, Object b, boolean ignoreCase) {
if (a == b) {
return 0;
}
@@ -116,6 +128,9 @@
if (b == null) {
return 1;
}
+ if (ignoreCase && a instanceof String && b instanceof String) {
+ return ((String) a).compareToIgnoreCase((String) b);
+ }
if (a instanceof Comparable) {
Comparable comparable = (Comparable)a;
return comparable.compareTo(b);
Copied:
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileSortByIgnoreCaseExpressionTest.java
(from r721798,
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileSortByExpressionTest.java)
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileSortByIgnoreCaseExpressionTest.java?p2=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileSortByIgnoreCaseExpressionTest.java&p1=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileSortByExpressionTest.java&r1=721798&r2=721827&rev=721827&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileSortByExpressionTest.java
(original)
+++
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileSortByIgnoreCaseExpressionTest.java
Sun Nov 30 07:05:17 2008
@@ -23,7 +23,7 @@
/**
* Unit test for the file sort by expression
*/
-public class FileSortByExpressionTest extends ContextTestSupport {
+public class FileSortByIgnoreCaseExpressionTest extends ContextTestSupport {
private String fileUrl = "file://target/filesorter/?noop=true";
@@ -33,21 +33,24 @@
deleteDirectory("target/filesorter");
template.sendBodyAndHeader("file:target/filesorter/", "Hello Paris",
- FileComponent.HEADER_FILE_NAME, "paris.dat");
+ FileComponent.HEADER_FILE_NAME, "report-3.dat");
template.sendBodyAndHeader("file:target/filesorter/", "Hello London",
- FileComponent.HEADER_FILE_NAME, "london.txt");
+ FileComponent.HEADER_FILE_NAME, "REPORT-2.txt");
template.sendBodyAndHeader("file:target/filesorter/", "Hello
Copenhagen",
- FileComponent.HEADER_FILE_NAME, "copenhagen.xml");
+ FileComponent.HEADER_FILE_NAME, "Report-1.xml");
}
public void testSortFiles() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:result");
- mock.expectedBodiesReceived("Hello Paris", "Hello London", "Hello
Copenhagen");
+ mock.expectedBodiesReceived("Hello London", "Hello Copenhagen", "Hello
Paris");
- MockEndpoint reverse = getMockEndpoint("mock:reverse");
- reverse.expectedBodiesReceived("Hello Copenhagen", "Hello London",
"Hello Paris");
+ MockEndpoint nocase = getMockEndpoint("mock:nocase");
+ nocase.expectedBodiesReceived("Hello Copenhagen", "Hello London",
"Hello Paris");
+
+ MockEndpoint nocasereverse = getMockEndpoint("mock:nocasereverse");
+ nocasereverse.expectedBodiesReceived("Hello Paris", "Hello London",
"Hello Copenhagen");
assertMockEndpointsSatisfied();
}
@@ -55,9 +58,11 @@
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() throws Exception {
- from(fileUrl + "&sortBy=file:name.ext").to("mock:result");
+ from(fileUrl + "&sortBy=file:name").to("mock:result");
+
+ from(fileUrl +
"&sortBy=ignoreCase:file:name").to("mock:nocase");
- from(fileUrl +
"&sortBy=reverse:file:name.ext").to("mock:reverse");
+ from(fileUrl +
"&sortBy=reverse:ignoreCase:file:name").to("mock:nocasereverse");
}
};
}