You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2009/08/21 14:48:13 UTC
svn commit: r806533 - in /camel/trunk/components/camel-web/src:
main/java/org/apache/camel/web/resources/
main/java/org/apache/camel/web/util/ test/java/org/apache/camel/web/groovy/
test/resources/
Author: janstey
Date: Fri Aug 21 12:48:13 2009
New Revision: 806533
URL: http://svn.apache.org/viewvc?rev=806533&view=rev
Log:
CAMEL-1392 - get rid of temp context during a route post and add support for xpath filtering. Thanks to Xueqiang
Modified:
camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteResource.java
camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/util/ExpressionNodeRenderer.java
camel/trunk/components/camel-web/src/test/java/org/apache/camel/web/groovy/FilterDSLTest.java
camel/trunk/components/camel-web/src/test/resources/testedRoutes.txt
Modified: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteResource.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteResource.java?rev=806533&r1=806532&r2=806533&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteResource.java (original)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/resources/RouteResource.java Fri Aug 21 12:48:13 2009
@@ -157,21 +157,19 @@
* Allows a routes builder to be updated
*/
public void postRoutes(RouteBuilder builder) throws Exception {
- // add the route builder into a temporary camel context
- CamelContext tempContext = new DefaultCamelContext();
- tempContext.addRoutes(builder);
- // get all the added routes and add them into current context
- List<RouteDefinition> routeDefinitions = tempContext.getRouteDefinitions();
- for (int i = 0; i < routeDefinitions.size(); i++) {
- RouteDefinition routeDefinition = routeDefinitions.get(i);
- // set id only for the first route
- if (i == 0) {
- routeDefinition.setId(id);
- }
-
- // add or update the route
- getCamelContext().addRouteDefinitions(Collections.singletonList(routeDefinition));
- }
+ DefaultCamelContext defaultCamelContext = (DefaultCamelContext)getCamelContext();
+ // stop and remove the original route
+ defaultCamelContext.stopRoute(id);
+ defaultCamelContext.removeRouteDefinition(id);
+
+ // add the routes in a route builder
+ defaultCamelContext.addRoutes(builder);
+
+ // reserve the id on the newest route
+ List<RouteDefinition> routeDefinitions = defaultCamelContext.getRouteDefinitions();
+ RouteDefinition route = routeDefinitions.get(routeDefinitions.size() - 1);
+ route.setId(id);
+ defaultCamelContext.startRoute(route);
}
/**
Modified: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/util/ExpressionNodeRenderer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/util/ExpressionNodeRenderer.java?rev=806533&r1=806532&r2=806533&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/util/ExpressionNodeRenderer.java (original)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/util/ExpressionNodeRenderer.java Fri Aug 21 12:48:13 2009
@@ -44,126 +44,180 @@
public final class ExpressionNodeRenderer {
private ExpressionNodeRenderer() {
// Utility class, no public or protected default constructor
- }
+ }
public static void render(StringBuilder buffer, ProcessorDefinition<?> processor) {
ExpressionNode expNode = (ExpressionNode)processor;
- ExpressionDefinition expression = expNode.getExpression();
-
buffer.append(".").append(expNode.getShortName());
if (expNode instanceof DelayDefinition) {
- String delay = expression.getExpressionValue().toString();
- if (!delay.contains("(")) {
- String delayTime = expression.getExpressionValue().toString();
- buffer.append("(").append(delayTime).append(")");
- } else {
- buffer.append("()");
- ExpressionRenderer.render(buffer, expression);
- }
+ renderDelay(buffer, expNode);
} else if (expNode instanceof FilterDefinition) {
- if (expression.getPredicate() != null) {
- buffer.append("(");
- PredicateRenderer.render(buffer, expression.getPredicate());
- buffer.append(")");
- } else if (expression.getLanguage() != null) {
- buffer.append("()");
- ExpressionRenderer.render(buffer, expression);
- } else {
- buffer.append("()");
- ExpressionRenderer.render(buffer, expression);
- }
+ renderFilter(buffer, expNode);
} else if (expNode instanceof IdempotentConsumerDefinition) {
- IdempotentConsumerDefinition idempotentConsume = (IdempotentConsumerDefinition)expNode;
- buffer.append("(");
- ExpressionRenderer.render(buffer, expression);
- buffer.append(", ");
- IdempotentRepository repository = idempotentConsume.getMessageIdRepository();
- if (repository instanceof FileIdempotentRepository) {
- // TODO need to be improved
- buffer.append("FileIdempotentRepository.fileIdempotentRepository()");
- } else if (repository instanceof MemoryIdempotentRepository) {
- buffer.append("MemoryIdempotentRepository.memoryIdempotentRepository()");
- }
- buffer.append(")");
- if (!idempotentConsume.isEager()) {
- buffer.append(".eager(false)");
- }
-
+ renderIdempotentConsumer(buffer, expNode);
} else if (expNode instanceof LoopDefinition) {
- if (expression instanceof ConstantExpression) {
- buffer.append("(").append(expression.getExpression()).append(")");
- } else {
- buffer.append("()");
- ExpressionRenderer.render(buffer, expression);
- }
+ renderLoop(buffer, expNode);
} else if (expNode instanceof RecipientListDefinition) {
+ ExpressionDefinition expression = expNode.getExpression();
buffer.append("(");
ExpressionRenderer.render(buffer, expression);
buffer.append(")");
} else if (expNode instanceof SetBodyDefinition) {
- String expValue = expression.getExpressionValue().toString();
- if (expValue.startsWith("append")) {
- buffer.append("(");
- ExpressionRenderer.render(buffer, expression);
- buffer.append(")");
- } else {
- buffer.append("()");
- ExpressionRenderer.renderConstant(buffer, expression);
- }
+ renderSetBody(buffer, expNode);
} else if (expNode instanceof SetHeaderDefinition) {
- SetHeaderDefinition set = (SetHeaderDefinition)expNode;
- buffer.append("(\"").append(set.getHeaderName()).append("\")");
- if (expression.getExpressionValue() != null) {
- ExpressionRenderer.renderConstant(buffer, expression);
- } else if (expression.getExpressionType() != null) {
- ExpressionRenderer.render(buffer, expression);
- }
+ renderSetHeader(buffer, expNode);
} else if (expNode instanceof SetOutHeaderDefinition) {
- buffer.append("(\"unspported expressions in SetOutHeaderDefinition\")");
+ // TODO unsupported expression node
+ buffer.append("(\"setOutHeaderDefinition\")");
} else if (expNode instanceof SetPropertyDefinition) {
- SetPropertyDefinition set = (SetPropertyDefinition)expNode;
- buffer.append("(\"").append(set.getPropertyName()).append("\")");
- if (expression.getExpressionValue() != null) {
- ExpressionRenderer.renderConstant(buffer, expression);
- } else if (expression.getExpressionType() != null) {
- ExpressionRenderer.render(buffer, expression);
- }
+ renderSetProperty(buffer, expNode);
} else if (expNode instanceof SplitDefinition) {
- if (expression.getExpressionValue() != null) {
- buffer.append("(");
- ExpressionRenderer.render(buffer, expression);
- buffer.append(")");
- } else if (expression.getExpressionType() != null) {
- buffer.append("().");
- ExpressionRenderer.render(buffer, expression);
- }
-
- SplitDefinition split = (SplitDefinition)expNode;
- if (split.isStreaming()) {
- buffer.append(".streaming()");
- }
+ renderSplit(buffer, expNode);
} else if (expNode instanceof TransformDefinition) {
- String expValue = expression.getExpressionValue().toString();
- if (expValue.startsWith("append") || expValue.startsWith("prepend") || expValue.startsWith("to")) {
- buffer.append("(");
- ExpressionRenderer.render(buffer, expression);
- buffer.append(")");
- } else if (expValue.startsWith("xpath")) {
- buffer.append("()");
- ExpressionRenderer.render(buffer, expression);
- } else {
- buffer.append("(constant(\"").append(expression.getExpressionValue().toString()).append("\"))");
- }
+ renderTransform(buffer, expNode);
} else if (expNode instanceof WhenDefinition) {
+ renderWhen(buffer, expNode);
+ }
+ }
+
+ private static void renderDelay(StringBuilder buffer, ExpressionNode expNode) {
+ ExpressionDefinition expression = expNode.getExpression();
+ String delay = expression.getExpressionValue().toString();
+ if (!delay.contains("(")) {
+ String delayTime = expression.getExpressionValue().toString();
+ buffer.append("(").append(delayTime).append(")");
+ } else {
+ buffer.append("()");
+ ExpressionRenderer.render(buffer, expression);
+ }
+ }
+
+ private static void renderFilter(StringBuilder buffer, ExpressionNode expNode) {
+ ExpressionDefinition expression = expNode.getExpression();
+ if (!(expression instanceof ExpressionClause)) {
if (expression.getPredicate() != null) {
buffer.append("(");
PredicateRenderer.render(buffer, expression.getPredicate());
buffer.append(")");
}
- if (expression instanceof ExpressionClause) {
+ } else {
+ String language = expression.getLanguage();
+ if (language != null && !language.equals("")) {
+ buffer.append("()");
+ ExpressionRenderer.render(buffer, expression);
+ } else {
buffer.append("()");
- ExpressionRenderer.render(buffer, (ExpressionClause)expression);
+ ExpressionRenderer.render(buffer, expression);
}
}
}
+
+ private static void renderIdempotentConsumer(StringBuilder buffer, ExpressionNode expNode) {
+ ExpressionDefinition expression = expNode.getExpression();
+ IdempotentConsumerDefinition idempotentConsume = (IdempotentConsumerDefinition)expNode;
+ buffer.append("(");
+ ExpressionRenderer.render(buffer, expression);
+ buffer.append(", ");
+ IdempotentRepository repository = idempotentConsume.getMessageIdRepository();
+ if (repository instanceof FileIdempotentRepository) {
+ // TODO need to be improved
+ buffer.append("FileIdempotentRepository.fileIdempotentRepository()");
+ } else if (repository instanceof MemoryIdempotentRepository) {
+ buffer.append("MemoryIdempotentRepository.memoryIdempotentRepository()");
+ }
+ buffer.append(")");
+ if (!idempotentConsume.isEager()) {
+ buffer.append(".eager(false)");
+ }
+ }
+
+ private static void renderLoop(StringBuilder buffer, ExpressionNode expNode) {
+ ExpressionDefinition expression = expNode.getExpression();
+ if (expression instanceof ConstantExpression) {
+ buffer.append("(").append(expression.getExpression()).append(")");
+ } else {
+ buffer.append("()");
+ ExpressionRenderer.render(buffer, expression);
+ }
+ }
+
+ private static void renderSetBody(StringBuilder buffer, ExpressionNode expNode) {
+ ExpressionDefinition expression = expNode.getExpression();
+ String expValue = expression.getExpressionValue().toString();
+ if (expValue.startsWith("append")) {
+ buffer.append("(");
+ ExpressionRenderer.render(buffer, expression);
+ buffer.append(")");
+ } else {
+ buffer.append("()");
+ ExpressionRenderer.renderConstant(buffer, expression);
+ }
+ }
+
+ private static void renderSetHeader(StringBuilder buffer, ExpressionNode expNode) {
+ ExpressionDefinition expression = expNode.getExpression();
+ SetHeaderDefinition set = (SetHeaderDefinition)expNode;
+ buffer.append("(\"").append(set.getHeaderName()).append("\")");
+ if (expression.getExpressionValue() != null) {
+ ExpressionRenderer.renderConstant(buffer, expression);
+ } else if (expression.getExpressionType() != null) {
+ ExpressionRenderer.render(buffer, expression);
+ }
+ }
+
+ private static void renderSetProperty(StringBuilder buffer, ExpressionNode expNode) {
+ ExpressionDefinition expression = expNode.getExpression();
+ SetPropertyDefinition set = (SetPropertyDefinition)expNode;
+ buffer.append("(\"").append(set.getPropertyName()).append("\")");
+ if (expression.getExpressionValue() != null) {
+ ExpressionRenderer.renderConstant(buffer, expression);
+ } else if (expression.getExpressionType() != null) {
+ ExpressionRenderer.render(buffer, expression);
+ }
+ }
+
+ private static void renderSplit(StringBuilder buffer, ExpressionNode expNode) {
+ ExpressionDefinition expression = expNode.getExpression();
+ if (expression.getExpressionValue() != null) {
+ buffer.append("(");
+ ExpressionRenderer.render(buffer, expression);
+ buffer.append(")");
+ } else if (expression.getExpressionType() != null) {
+ buffer.append("().");
+ ExpressionRenderer.render(buffer, expression);
+ }
+
+ SplitDefinition split = (SplitDefinition)expNode;
+ if (split.isStreaming()) {
+ buffer.append(".streaming()");
+ }
+ }
+
+ private static void renderTransform(StringBuilder buffer, ExpressionNode expNode) {
+ ExpressionDefinition expression = expNode.getExpression();
+ String expValue = expression.getExpressionValue().toString();
+ if (expValue.startsWith("append") || expValue.startsWith("prepend") || expValue.startsWith("to")) {
+ buffer.append("(");
+ ExpressionRenderer.render(buffer, expression);
+ buffer.append(")");
+ } else if (expValue.startsWith("xpath")) {
+ buffer.append("()");
+ ExpressionRenderer.render(buffer, expression);
+ } else {
+ buffer.append("(constant(\"").append(expression.getExpressionValue().toString()).append("\"))");
+ }
+ }
+
+ private static void renderWhen(StringBuilder buffer, ExpressionNode expNode) {
+ ExpressionDefinition expression = expNode.getExpression();
+ if (expression.getPredicate() != null) {
+ buffer.append("(");
+ PredicateRenderer.render(buffer, expression.getPredicate());
+ buffer.append(")");
+ }
+ if (expression instanceof ExpressionClause) {
+ buffer.append("()");
+ ExpressionRenderer.render(buffer, (ExpressionClause)expression);
+ }
+ }
}
Modified: camel/trunk/components/camel-web/src/test/java/org/apache/camel/web/groovy/FilterDSLTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/test/java/org/apache/camel/web/groovy/FilterDSLTest.java?rev=806533&r1=806532&r2=806533&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/test/java/org/apache/camel/web/groovy/FilterDSLTest.java (original)
+++ camel/trunk/components/camel-web/src/test/java/org/apache/camel/web/groovy/FilterDSLTest.java Fri Aug 21 12:48:13 2009
@@ -36,4 +36,9 @@
String dsl = "from(\"direct:start\").filter().method(\"myBean\", \"matches\").to(\"mock:result\")";
assertEquals(dsl, render(dsl));
}
+
+ public void testFilterXPath() throws Exception {
+ String dsl = "from(\"direct:start\").filter().xpath(\"/person[@Name='James']\").to(\"mock:result\")";
+ assertEquals(dsl, render(dsl));
+ }
}
Modified: camel/trunk/components/camel-web/src/test/resources/testedRoutes.txt
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/test/resources/testedRoutes.txt?rev=806533&r1=806532&r2=806533&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/test/resources/testedRoutes.txt (original)
+++ camel/trunk/components/camel-web/src/test/resources/testedRoutes.txt Fri Aug 21 12:48:13 2009
@@ -1,7 +1,7 @@
#########################aggregate#########################
from("direct:start").aggregate().header("cheese").to("mock:result")
from("direct:start").aggregate(header("cheese")).to("mock:result")
-#errorHandler(deadLetterChannel("mock:error"));onException(CamelException.class).maximumRedeliveries(2);from("direct:start").aggregate(header("id")).to("mock:result")
+#errorHandler(deadLetterChannel("mock://error"));onException(CamelException.class).maximumRedeliveries(2);from("direct:start").aggregate(header("id")).to("mock:result")
from("direct:start").aggregate().simple("id").batchTimeout(500L).groupExchanges().to("mock:result")
from("direct:start").aggregate(header("id")).batchTimeout(3000).batchSize(0).to("mock:result")
from("timer://kickoff?period=9999910000").setHeader("id").constant("foo").setBody().constant("a b c").split(body().tokenize(" ")).to("seda:splitted");from("seda:splitted").aggregate(header("id")).to("mock:result")
@@ -35,10 +35,10 @@
#########################detour#########################
from("direct:start").choice().when().method("controlBean", "isDetour").to("mock:detour").end().to("mock:result")
#########################deadLetter/errorHandler#########################
-errorHandler(deadLetterChannel("mock:failed").maximumRedeliveries(0).handled(false));from("direct:start").to("mock:result")
-errorHandler(deadLetterChannel("mock:failed").maximumRedeliveries(3).redeliverDelay(5000));from("direct:start").to("mock:result")
-errorHandler(deadLetterChannel("mock:failed").maximumRedeliveries(3).redeliverDelay(5000).handled(false));from("direct:start").to("mock:result")
-#errorHandler(deadLetterChannel("mock:error").maximumRedeliveries(4).loggingLevel(LoggingLevel.DEBUG));from("direct:start").to("mock:result")
+errorHandler(deadLetterChannel("mock://failed").maximumRedeliveries(0).handled(false));from("direct:start").to("mock:result")
+errorHandler(deadLetterChannel("mock://failed").maximumRedeliveries(3).redeliverDelay(5000));from("direct:start").to("mock:result")
+errorHandler(deadLetterChannel("mock://failed").maximumRedeliveries(3).redeliverDelay(5000).handled(false));from("direct:start").to("mock:result")
+#errorHandler(deadLetterChannel("mock://error").maximumRedeliveries(4).loggingLevel(LoggingLevel.DEBUG));from("direct:start").to("mock:result")
#########################enricher#########################
from("direct:start").setBody(body().append(" World!")).to("mock:result")
#########################filter#########################