<?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)}).aggregator(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)}).delayer(${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)}).resequencer(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)}).splitter(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)}).throttler(${number_of_messages:var(Integer)}).timePeriodMillis(${milliseconds:var(Integer)}).to(${to_uri:var(String)});</template></templates>
