<?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.
-->

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
       http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">

    <import resource="common.xml" />

    <camelContext xmlns="http://camel.apache.org/schema/spring">

    	<restConfiguration bindingMode="auto" component="restlet"/>

    	<rest>
    	   <post uri="/persons">
    	      <to uri="direct:postPersons"/>
           </post>
           <get uri="/persons">
              <to uri="direct:getPersons"/>
           </get>
           <get uri="/persons/{personId}">
               <to uri="direct:getPersionId"/>
           </get>
           <put uri="/persons/{personId}">
               <to uri="direct:putPersionId"/>
           </put>
           <delete uri="/persons/{personId}">
               <to uri="direct:deletePersionId"/>
           </delete>    
        </rest>
        
         <route>
            <from uri="direct:postPersons"/>
            <setBody>
                <simple>insert into person(firstName, lastName) values('${header.firstName}','${header.lastName}')
                </simple>
            </setBody>
            <to uri="jdbc:dataSource"/>

            <setBody>
                <!--<simple>select * from person ORDER BY id desc OFFSET 1 ROWS</simple>-->
                <simple>select * from person where id in (select max(id) from person)</simple>
            </setBody>
            <to uri="jdbc:dataSource"/>
        </route>
        
        <route>
            <from uri="direct:getPersons"/>
            <setBody>
                <constant>select * from person</constant>
            </setBody>
            <to uri="jdbc:dataSource"/>
        </route>

        <route>
            <from uri="direct:getPersionId"/>
            <setBody>
                <simple>select * from person where id = ${header.personId}</simple>
            </setBody>
            <to uri="jdbc:dataSource"/>
        </route>
        
        <route>       
            <from uri="direct:putPersionId"/>
            <setBody>
                 <simple>update person set firstName='${header.firstName}', lastName='${header.lastName}' where id = ${header.personId}</simple>
            </setBody>
            <to uri="jdbc:dataSource"/>
        </route>        
      
        <route>
            <from uri="direct:deletePersionId"/>
            <setBody>
                <simple>delete from person where id = ${header.personId}</simple>
            </setBody>
            <to uri="jdbc:dataSource"/>
        </route>
    </camelContext>
</beans>