<?xml version="1.0" encoding="UTF-8"?>
<!--

    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.

-->
<templates><template autoinsert="true" context="java" deleted="false" description="Creates an Aggregator" enabled="true" name="camel_aggregator">from(${from_uri:var(String)}).aggregate(header("cheese")).to(${to_uri:var(String)});
</template><template autoinsert="true" context="java" deleted="false" description="Creates a Content Based Router" enabled="true" name="camel_cbr">from(${from_uri:var(String)}).choice()
.when().xpath("$$foo = 'bar'").to(${when_uri:var(String)})
.when().xpath("$$foo = 'cheese'").to(${when2_uri:var(String)})
.otherwise().to(${otherwise_uri:var(String)});
</template><template autoinsert="true" context="java" deleted="false" description="Creates a Delayer" enabled="true" name="camel_delayer">from(${from_uri:var(String)}).delay(${milliseconds:var(Integer)}).to(${to_uri:var(String)});</template><template autoinsert="true" context="java" deleted="false" description="Creates a Message Filter allows you to filter messages. " enabled="true" name="camel_filter">from(${from_uri:var(String)}).
  filter().xpath("/person[@name='${user}']").
  to(${result_uri:var(String)});</template><template autoinsert="true" context="java" deleted="false" description="Creates a Load Balancer with a round robin strategy" enabled="true" name="camel_loadbalancer_roundrobin">from(${from_uri:var(String)}).loadBalance().
roundRobin().to(${to_uri:var(String)}, ${2nd_to_uri:var(String)}, ${3rd_to_uri:var(String)});</template><template autoinsert="true" context="java" deleted="false" description="Creates a Multicast" enabled="true" name="camel_multicast">from(${from_uri:var(String)}).multicast().to(${to_uri:var(String)}, ${2nd_to_uri:var(String)}, ${3rd_to_uri:var(String)});</template><template autoinsert="true" context="java" deleted="false" description="Creates a Pipeline whereby a message will be routed through a series of endpoints." enabled="true" name="camel_pipeline">from(${from_uri:var(String)}).pipeline(${to_uri:var(String)}, ${2nd_to_uri:var(String)}, ${3rd_to_uri:var(String)});</template><template autoinsert="true" context="java" deleted="false" description="Creates an inline Processor so you can do custom operations on the exchange" enabled="true" name="camel_processor_inline">new Processor() {
    public void process(Exchange exchange) {
        // do stuff to the exchange
    }
}</template><template autoinsert="true" context="java" deleted="false" description="Creates a Dynamic Recipient List" enabled="true" name="camel_recipientlist">from(${from_uri:var(String)}).recipientList(header("foo"));</template><template autoinsert="true" context="java" deleted="false" description="Creates a Resequencer" enabled="true" name="camel_resequencer">from(${from_uri:var(String)}).resequence(body()).to(${to_uri:var(String)});</template><template autoinsert="true" context="java" deleted="false" description="Creates a Routing Slip with the specified header containing the list of URIs." enabled="true" name="camel_routingslip">from(${from_uri:var(String)}).routingSlip(${slip_header_name:var(String)}, ${uri_delimiter:var(String)});</template><template autoinsert="true" context="java" deleted="false" description="Creates a Splitter" enabled="true" name="camel_splitter">from(${from_uri:var(String)}).split().xpath("//foo/bar").to(${to_uri:var(String)})</template><template autoinsert="true" context="java" deleted="false" description="Creates a Throttler" enabled="true" name="camel_throttler">from(${from_uri:var(String)}).throttle(${number_of_messages:var(Integer)}).timePeriodMillis(${milliseconds:var(Integer)}).to(${to_uri:var(String)});</template></templates>
