blob: 84dcf273ea525af04ca848853d3b2b1000d1696e [file] [log] [blame]
/**
* 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.builder;
import java.util.ArrayList;
import java.util.List;
import org.apache.camel.impl.InterceptSendToMockEndpointStrategy;
import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.model.RouteDefinition;
import org.apache.camel.util.ObjectHelper;
/**
* A {@link RouteBuilder} which has extended capabilities when using
* the <a href="http://camel.apache.org/advicewith.html">advice with</a> feature.
*
* @see org.apache.camel.model.RouteDefinition#adviceWith(org.apache.camel.CamelContext, RouteBuilder)
*/
public abstract class AdviceWithRouteBuilder extends RouteBuilder {
private RouteDefinition originalRoute;
private final List<AdviceWithTask> adviceWithTasks = new ArrayList<AdviceWithTask>();
/**
* Sets the original route which we advice.
*
* @param originalRoute the original route we advice.
*/
public void setOriginalRoute(RouteDefinition originalRoute) {
this.originalRoute = originalRoute;
}
/**
* Gets the original route we advice.
*
* @return the original route.
*/
public RouteDefinition getOriginalRoute() {
return originalRoute;
}
/**
* Gets a list of additional tasks to execute after the {@link #configure()} method has been executed
* during the advice process.
*
* @return a list of additional {@link AdviceWithTask} tasks to be executed during the advice process.
*/
public List<AdviceWithTask> getAdviceWithTasks() {
return adviceWithTasks;
}
/**
* Mock all endpoints in the route.
*
* @throws Exception can be thrown if error occurred
*/
public void mockEndpoints() throws Exception {
getContext().addRegisterEndpointCallback(new InterceptSendToMockEndpointStrategy(null));
}
/**
* Mock all endpoints matching the given pattern.
*
* @param pattern the pattern.
* @throws Exception can be thrown if error occurred
* @see org.apache.camel.util.EndpointHelper#matchEndpoint(String, String)
*/
public void mockEndpoints(String pattern) throws Exception {
getContext().addRegisterEndpointCallback(new InterceptSendToMockEndpointStrategy(pattern));
}
/**
* Weaves by matching id 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)
*/
public <T extends ProcessorDefinition> AdviceWithBuilder weaveById(String pattern) {
ObjectHelper.notNull(originalRoute, "originalRoute", this);
return new AdviceWithBuilder<T>(this, pattern, null, null);
}
/**
* Weaves by matching the to string representation 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)
*/
public <T extends ProcessorDefinition> AdviceWithBuilder weaveByToString(String pattern) {
ObjectHelper.notNull(originalRoute, "originalRoute", this);
return new AdviceWithBuilder<T>(this, null, pattern, null);
}
/**
* Weaves by matching type of the nodes in the route.
*
* @param type the processor type
* @return the builder
*/
public <T extends ProcessorDefinition> AdviceWithBuilder weaveByType(Class<T> type) {
ObjectHelper.notNull(originalRoute, "originalRoute", this);
return new AdviceWithBuilder<T>(this, null, null, type);
}
/**
* Weaves by adding the nodes to the start of the route.
*
* @return the builder
*/
public <T extends ProcessorDefinition> ProcessorDefinition weaveAddFirst() {
ObjectHelper.notNull(originalRoute, "originalRoute", this);
return new AdviceWithBuilder<T>(this, "*", null, null).selectFirst().before();
}
/**
* Weaves by adding the nodes to the end of the route.
*
* @return the builder
*/
public <T extends ProcessorDefinition> ProcessorDefinition weaveAddLast() {
ObjectHelper.notNull(originalRoute, "originalRoute", this);
return new AdviceWithBuilder<T>(this, "*", null, null).selectLast().after();
}
}