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 2016/07/25 11:58:28 UTC
[4/4] camel git commit: CAMEL-10180: weaveByToUri - To make it easier
to match sending to uris
CAMEL-10180: weaveByToUri - To make it easier to match sending to uris
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/6aa84254
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/6aa84254
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/6aa84254
Branch: refs/heads/camel-2.17.x
Commit: 6aa84254fcbdf1da304bfec59d1179740c596074
Parents: 12ddce8
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Jul 25 12:29:33 2016 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Jul 25 13:58:15 2016 +0200
----------------------------------------------------------------------
.../apache/camel/builder/AdviceWithBuilder.java | 16 +++++-
.../camel/builder/AdviceWithRouteBuilder.java | 26 +++++++--
.../apache/camel/builder/AdviceWithTasks.java | 54 ++++++++++++++++++
.../apache/camel/model/ChoiceDefinition.java | 3 +-
.../AdviceWithWeaveByToStringCBRTest.java | 60 --------------------
.../issues/AdviceWithWeaveByToUriCBRTest.java | 57 +++++++++++++++++++
6 files changed, 146 insertions(+), 70 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/6aa84254/camel-core/src/main/java/org/apache/camel/builder/AdviceWithBuilder.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/builder/AdviceWithBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/AdviceWithBuilder.java
index 75d643d..a9eff2f 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/AdviceWithBuilder.java
+++ b/camel-core/src/main/java/org/apache/camel/builder/AdviceWithBuilder.java
@@ -28,6 +28,7 @@ public class AdviceWithBuilder<T extends ProcessorDefinition<?>> {
private final AdviceWithRouteBuilder builder;
private final String id;
private final String toString;
+ private final String toUri;
private final Class<T> type;
private boolean selectFirst;
private boolean selectLast;
@@ -35,14 +36,15 @@ public class AdviceWithBuilder<T extends ProcessorDefinition<?>> {
private int selectTo = -1;
private int maxDeep = -1;
- public AdviceWithBuilder(AdviceWithRouteBuilder builder, String id, String toString, Class<T> type) {
+ public AdviceWithBuilder(AdviceWithRouteBuilder builder, String id, String toString, String toUri, Class<T> type) {
this.builder = builder;
this.id = id;
this.toString = toString;
+ this.toUri = toUri;
this.type = type;
- if (id == null && toString == null && type == null) {
- throw new IllegalArgumentException("Either id, toString or type must be specified");
+ if (id == null && toString == null && toUri == null && type == null) {
+ throw new IllegalArgumentException("Either id, toString, toUri or type must be specified");
}
}
@@ -133,6 +135,8 @@ public class AdviceWithBuilder<T extends ProcessorDefinition<?>> {
builder.getAdviceWithTasks().add(AdviceWithTasks.replaceById(route, id, answer, selectFirst, selectLast, selectFrom, selectTo, maxDeep));
} else if (toString != null) {
builder.getAdviceWithTasks().add(AdviceWithTasks.replaceByToString(route, toString, answer, selectFirst, selectLast, selectFrom, selectTo, maxDeep));
+ } else if (toUri != null) {
+ builder.getAdviceWithTasks().add(AdviceWithTasks.replaceByToUri(route, toUri, answer, selectFirst, selectLast, selectFrom, selectTo, maxDeep));
} else if (type != null) {
builder.getAdviceWithTasks().add(AdviceWithTasks.replaceByType(route, type, answer, selectFirst, selectLast, selectFrom, selectTo, maxDeep));
}
@@ -148,6 +152,8 @@ public class AdviceWithBuilder<T extends ProcessorDefinition<?>> {
builder.getAdviceWithTasks().add(AdviceWithTasks.removeById(route, id, selectFirst, selectLast, selectFrom, selectTo, maxDeep));
} else if (toString != null) {
builder.getAdviceWithTasks().add(AdviceWithTasks.removeByToString(route, toString, selectFirst, selectLast, selectFrom, selectTo, maxDeep));
+ } else if (toUri != null) {
+ builder.getAdviceWithTasks().add(AdviceWithTasks.removeByToUri(route, toUri, selectFirst, selectLast, selectFrom, selectTo, maxDeep));
} else if (type != null) {
builder.getAdviceWithTasks().add(AdviceWithTasks.removeByType(route, type, selectFirst, selectLast, selectFrom, selectTo, maxDeep));
}
@@ -165,6 +171,8 @@ public class AdviceWithBuilder<T extends ProcessorDefinition<?>> {
builder.getAdviceWithTasks().add(AdviceWithTasks.beforeById(route, id, answer, selectFirst, selectLast, selectFrom, selectTo, maxDeep));
} else if (toString != null) {
builder.getAdviceWithTasks().add(AdviceWithTasks.beforeByToString(route, toString, answer, selectFirst, selectLast, selectFrom, selectTo, maxDeep));
+ } else if (toUri != null) {
+ builder.getAdviceWithTasks().add(AdviceWithTasks.beforeByToUri(route, toUri, answer, selectFirst, selectLast, selectFrom, selectTo, maxDeep));
} else if (type != null) {
builder.getAdviceWithTasks().add(AdviceWithTasks.beforeByType(route, type, answer, selectFirst, selectLast, selectFrom, selectTo, maxDeep));
}
@@ -183,6 +191,8 @@ public class AdviceWithBuilder<T extends ProcessorDefinition<?>> {
builder.getAdviceWithTasks().add(AdviceWithTasks.afterById(route, id, answer, selectFirst, selectLast, selectFrom, selectTo, maxDeep));
} else if (toString != null) {
builder.getAdviceWithTasks().add(AdviceWithTasks.afterByToString(route, toString, answer, selectFirst, selectLast, selectFrom, selectTo, maxDeep));
+ } else if (toUri != null) {
+ builder.getAdviceWithTasks().add(AdviceWithTasks.afterByToUri(route, toUri, answer, selectFirst, selectLast, selectFrom, selectTo, maxDeep));
} else if (type != null) {
builder.getAdviceWithTasks().add(AdviceWithTasks.afterByType(route, type, answer, selectFirst, selectLast, selectFrom, selectTo, maxDeep));
}
http://git-wip-us.apache.org/repos/asf/camel/blob/6aa84254/camel-core/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java
index df80247..e26ed56 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java
+++ b/camel-core/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java
@@ -23,6 +23,7 @@ import org.apache.camel.Endpoint;
import org.apache.camel.impl.InterceptSendToMockEndpointStrategy;
import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.model.ToDefinition;
import org.apache.camel.util.ObjectHelper;
/**
@@ -134,7 +135,7 @@ public abstract class AdviceWithRouteBuilder extends RouteBuilder {
*/
public <T extends ProcessorDefinition<?>> AdviceWithBuilder<T> weaveById(String pattern) {
ObjectHelper.notNull(originalRoute, "originalRoute", this);
- return new AdviceWithBuilder<T>(this, pattern, null, null);
+ return new AdviceWithBuilder<T>(this, pattern, null, null, null);
}
/**
@@ -148,7 +149,22 @@ public abstract class AdviceWithRouteBuilder extends RouteBuilder {
*/
public <T extends ProcessorDefinition<?>> AdviceWithBuilder<T> weaveByToString(String pattern) {
ObjectHelper.notNull(originalRoute, "originalRoute", this);
- return new AdviceWithBuilder<T>(this, null, pattern, null);
+ return new AdviceWithBuilder<T>(this, null, pattern, null, null);
+ }
+
+ /**
+ * Weaves by matching sending to endpoints with the given uri of the nodes in the route.
+ * <p/>
+ * Uses the {@link org.apache.camel.util.EndpointHelper#matchPattern(String, String)} matching algorithm.
+ *
+ * @param pattern the pattern
+ * @return the builder
+ * @see org.apache.camel.util.EndpointHelper#matchPattern(String, String)
+ */
+ @SuppressWarnings("unchecked")
+ public <T extends ProcessorDefinition<?>> AdviceWithBuilder<T> weaveByToUri(String pattern) {
+ ObjectHelper.notNull(originalRoute, "originalRoute", this);
+ return new AdviceWithBuilder<T>(this, null, null, pattern, null);
}
/**
@@ -159,7 +175,7 @@ public abstract class AdviceWithRouteBuilder extends RouteBuilder {
*/
public <T extends ProcessorDefinition<?>> AdviceWithBuilder<T> weaveByType(Class<T> type) {
ObjectHelper.notNull(originalRoute, "originalRoute", this);
- return new AdviceWithBuilder<T>(this, null, null, type);
+ return new AdviceWithBuilder<T>(this, null, null, null, type);
}
/**
@@ -169,7 +185,7 @@ public abstract class AdviceWithRouteBuilder extends RouteBuilder {
*/
public <T extends ProcessorDefinition<?>> ProcessorDefinition<?> weaveAddFirst() {
ObjectHelper.notNull(originalRoute, "originalRoute", this);
- return new AdviceWithBuilder<T>(this, "*", null, null).selectFirst().before();
+ return new AdviceWithBuilder<T>(this, "*", null, null, null).selectFirst().before();
}
/**
@@ -179,7 +195,7 @@ public abstract class AdviceWithRouteBuilder extends RouteBuilder {
*/
public <T extends ProcessorDefinition<?>> ProcessorDefinition<?> weaveAddLast() {
ObjectHelper.notNull(originalRoute, "originalRoute", this);
- return new AdviceWithBuilder<T>(this, "*", null, null).maxDeep(1).selectLast().after();
+ return new AdviceWithBuilder<T>(this, "*", null, null, null).maxDeep(1).selectLast().after();
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/6aa84254/camel-core/src/main/java/org/apache/camel/builder/AdviceWithTasks.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/builder/AdviceWithTasks.java b/camel-core/src/main/java/org/apache/camel/builder/AdviceWithTasks.java
index bc1d066..ef1531d 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/AdviceWithTasks.java
+++ b/camel-core/src/main/java/org/apache/camel/builder/AdviceWithTasks.java
@@ -21,7 +21,9 @@ import java.util.Iterator;
import java.util.List;
import org.apache.camel.Endpoint;
+import org.apache.camel.EndpointAware;
import org.apache.camel.model.ChoiceDefinition;
+import org.apache.camel.model.EndpointRequiredDefinition;
import org.apache.camel.model.FromDefinition;
import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.model.ProcessorDefinitionHelper;
@@ -96,6 +98,30 @@ public final class AdviceWithTasks {
}
/**
+ * Will match by the sending to endpoint uri representation of the processor.
+ */
+ private static final class MatchByToUri implements MatchBy {
+
+ private final String toUri;
+
+ private MatchByToUri(String toUri) {
+ this.toUri = toUri;
+ }
+
+ public String getId() {
+ return toUri;
+ }
+
+ public boolean match(ProcessorDefinition<?> processor) {
+ if (processor instanceof EndpointRequiredDefinition) {
+ String uri = ((EndpointRequiredDefinition) processor).getEndpointUri();
+ return EndpointHelper.matchPattern(uri, toUri);
+ }
+ return false;
+ }
+ }
+
+ /**
* Will match by the type of the processor.
*/
private static final class MatchByType implements MatchBy {
@@ -122,6 +148,13 @@ public final class AdviceWithTasks {
return doReplace(route, new MatchByToString(toString), replace, it);
}
+ public static AdviceWithTask replaceByToUri(final RouteDefinition route, final String toUri, final ProcessorDefinition<?> replace,
+ boolean selectFirst, boolean selectLast, int selectFrom, int selectTo, int maxDeep) {
+ MatchBy matchBy = new MatchByToUri(toUri);
+ Iterator<ProcessorDefinition<?>> it = AdviceWithTasks.createMatchByIterator(route, matchBy, selectFirst, selectLast, selectFrom, selectTo, maxDeep);
+ return doReplace(route, new MatchByToUri(toUri), replace, it);
+ }
+
public static AdviceWithTask replaceById(final RouteDefinition route, final String id, final ProcessorDefinition<?> replace,
boolean selectFirst, boolean selectLast, int selectFrom, int selectTo, int maxDeep) {
MatchBy matchBy = new MatchById(id);
@@ -171,6 +204,13 @@ public final class AdviceWithTasks {
return doRemove(route, matchBy, it);
}
+ public static AdviceWithTask removeByToUri(final RouteDefinition route, final String toUri,
+ boolean selectFirst, boolean selectLast, int selectFrom, int selectTo, int maxDeep) {
+ MatchBy matchBy = new MatchByToUri(toUri);
+ Iterator<ProcessorDefinition<?>> it = AdviceWithTasks.createMatchByIterator(route, matchBy, selectFirst, selectLast, selectFrom, selectTo, maxDeep);
+ return doRemove(route, matchBy, it);
+ }
+
public static AdviceWithTask removeById(final RouteDefinition route, final String id,
boolean selectFirst, boolean selectLast, int selectFrom, int selectTo, int maxDeep) {
MatchBy matchBy = new MatchById(id);
@@ -219,6 +259,13 @@ public final class AdviceWithTasks {
return doBefore(route, matchBy, before, it);
}
+ public static AdviceWithTask beforeByToUri(final RouteDefinition route, final String toUri, final ProcessorDefinition<?> before,
+ boolean selectFirst, boolean selectLast, int selectFrom, int selectTo, int maxDeep) {
+ MatchBy matchBy = new MatchByToUri(toUri);
+ Iterator<ProcessorDefinition<?>> it = AdviceWithTasks.createMatchByIterator(route, matchBy, selectFirst, selectLast, selectFrom, selectTo, maxDeep);
+ return doBefore(route, matchBy, before, it);
+ }
+
public static AdviceWithTask beforeById(final RouteDefinition route, final String id, final ProcessorDefinition<?> before,
boolean selectFirst, boolean selectLast, int selectFrom, int selectTo, int maxDeep) {
MatchBy matchBy = new MatchById(id);
@@ -268,6 +315,13 @@ public final class AdviceWithTasks {
return doAfter(route, matchBy, after, it);
}
+ public static AdviceWithTask afterByToUri(final RouteDefinition route, final String toUri, final ProcessorDefinition<?> after,
+ boolean selectFirst, boolean selectLast, int selectFrom, int selectTo, int maxDeep) {
+ MatchBy matchBy = new MatchByToUri(toUri);
+ Iterator<ProcessorDefinition<?>> it = AdviceWithTasks.createMatchByIterator(route, matchBy, selectFirst, selectLast, selectFrom, selectTo, maxDeep);
+ return doAfter(route, matchBy, after, it);
+ }
+
public static AdviceWithTask afterById(final RouteDefinition route, final String id, final ProcessorDefinition<?> after,
boolean selectFirst, boolean selectLast, int selectFrom, int selectTo, int maxDeep) {
MatchBy matchBy = new MatchById(id);
http://git-wip-us.apache.org/repos/asf/camel/blob/6aa84254/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java b/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
index 6ec26cd..60370cc 100644
--- a/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
@@ -125,8 +125,7 @@ public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> {
@Override
public String toString() {
- // when and otherwise has detailed output in their toString so keep this toString short
- return "Choice";
+ return "Choice[" + getWhenClauses() + (getOtherwise() != null ? " " + getOtherwise() : "") + "]";
}
@Override
http://git-wip-us.apache.org/repos/asf/camel/blob/6aa84254/camel-core/src/test/java/org/apache/camel/issues/AdviceWithWeaveByToStringCBRTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/issues/AdviceWithWeaveByToStringCBRTest.java b/camel-core/src/test/java/org/apache/camel/issues/AdviceWithWeaveByToStringCBRTest.java
deleted file mode 100644
index 124b1fc..0000000
--- a/camel-core/src/test/java/org/apache/camel/issues/AdviceWithWeaveByToStringCBRTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.issues;
-
-import org.apache.camel.ContextTestSupport;
-import org.apache.camel.builder.AdviceWithRouteBuilder;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.model.RouteDefinition;
-
-/**
- * @version
- */
-public class AdviceWithWeaveByToStringCBRTest extends ContextTestSupport {
-
- public void testAdviceCBR() throws Exception {
- RouteDefinition route = context.getRouteDefinitions().get(0);
- route.adviceWith(context, new AdviceWithRouteBuilder() {
- @Override
- public void configure() throws Exception {
- weaveByToString("direct:branch.*").replace().to("mock:foo");
- mockEndpointsAndSkip("direct:branch*");
- }
- });
-
- getMockEndpoint("mock:foo").expectedBodiesReceived("Hello World");
-
- template.sendBody("direct:start", "Hello World");
-
- assertMockEndpointsSatisfied();
- }
-
- @Override
- protected RouteBuilder createRouteBuilder() throws Exception {
- return new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- from("direct:start")
- .choice()
- .when(header("foo")).to("direct:branch-1")
- .otherwise()
- .to("direct:branch-2");
- }
- };
- }
-
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/6aa84254/camel-core/src/test/java/org/apache/camel/issues/AdviceWithWeaveByToUriCBRTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/issues/AdviceWithWeaveByToUriCBRTest.java b/camel-core/src/test/java/org/apache/camel/issues/AdviceWithWeaveByToUriCBRTest.java
new file mode 100644
index 0000000..d647b4e
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/issues/AdviceWithWeaveByToUriCBRTest.java
@@ -0,0 +1,57 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.issues;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.AdviceWithRouteBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.model.RouteDefinition;
+
+public class AdviceWithWeaveByToUriCBRTest extends ContextTestSupport {
+
+ public void testAdviceCBR() throws Exception {
+ RouteDefinition route = context.getRouteDefinitions().get(0);
+ route.adviceWith(context, new AdviceWithRouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ weaveByToUri("direct:branch*").replace().to("mock:foo");
+ mockEndpointsAndSkip("direct:branch*");
+ }
+ });
+
+ getMockEndpoint("mock:foo").expectedBodiesReceived("Hello World");
+
+ template.sendBody("direct:start", "Hello World");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start")
+ .choice()
+ .when(header("foo")).to("direct:branch-1")
+ .otherwise()
+ .to("direct:branch-2");
+ }
+ };
+ }
+
+}