<routes xmlns="http://camel.apache.org/schema/spring">
    <route id="verify-one-policy">
        <from uri="direct:verify-one-policy"/>
        <setProperty propertyName="raiseHttpExceptionFlag">
            <simple resultType="java.lang.Boolean">false</simple>
        </setProperty>
        <to uri="direct:get-policy"/>
        <when>
            <simple>${header.CamelHttpResponseCode} != 200</simple>
            <setProperty propertyName="policyFound">
                <simple resultType="java.lang.Boolean">false</simple>
            </setProperty>
            <log loggingLevel="WARN"
                 message="At least one policy has not been found on policy engine: ${exchangeProperty[policyName]}"/>
        </when>
        <setProperty propertyName="raiseHttpExceptionFlag">
            <simple resultType="java.lang.Boolean">false</simple>
        </setProperty>
        <to uri="direct:get-deployment-policy"/>
        <when>
            <simple>${header.CamelHttpResponseCode} != 200</simple>
            <setProperty propertyName="policyDeployed">
                <simple resultType="java.lang.Boolean">false</simple>
            </setProperty>
            <log loggingLevel="WARN"
                 message="At least one policy has not been deployed on policy engine: ${exchangeProperty[policyName]}"/>
        </when>
        <setProperty propertyName="newPolicyState">
            <simple>${exchangeProperty[policyComponent].computeState(*)}</simple>
        </setProperty>
    </route>

    <route id="get-policy">
        <from uri="direct:get-policy"/>
        <doTry>
            <log loggingLevel="INFO"
                 message="Getting Policy: ${exchangeProperty[policyName]}"/>
            <to
                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Get Policy')"/>
            <setHeader headerName="CamelHttpMethod">
                <constant>GET</constant>
            </setHeader>
            <setHeader headerName="X-ONAP-RequestID">
                <simple>${exchangeProperty[X-ONAP-RequestID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-InvocationID">
                <simple>${exchangeProperty[X-ONAP-InvocationID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-PartnerName">
                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                </simple>
            </setHeader>
            <log loggingLevel="INFO"
                 message="Endpoint to get policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/${exchangeProperty[policyTypeVersion]}/policies/${exchangeProperty[policyName]}/versions/${exchangeProperty[policyVersion]}"></log>
            <toD
                    uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/${exchangeProperty[policyTypeVersion]}/policies/${exchangeProperty[policyName]}/versions/${exchangeProperty[policyVersion]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
            <doCatch>
                <exception>java.lang.Exception</exception>
                <handled>
                    <constant>true</constant>
                </handled>

                <log loggingLevel="ERROR"
                     message="GET policy request FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
                <to
                        uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('GET policy request failed, Error reported: ${exception.message}','ERROR',${exchangeProperty[loopObject]})"/>
            </doCatch>
            <doFinally>
                <to uri="direct:reset-raise-http-exception-flag"/>
                <to
                        uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
                <setProperty propertyName="logMessage">
                    <simple>${exchangeProperty[policyName]} GET
                        Policy status
                    </simple>
                </setProperty>
                <setProperty propertyName="logComponent">
                    <simple>POLICY</simple>
                </setProperty>
                <to uri="direct:dump-loop-log-http-response"/>
            </doFinally>
        </doTry>
    </route>

    <route id="get-deployment-policy">
        <from uri="direct:get-deployment-policy"/>
        <doTry>
            <log loggingLevel="INFO"
                 message="Getting the policy deployment in PDP: ${exchangeProperty[policyName]}"/>
            <to
                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Getting the policy deployment in PDP')"/>
            <setHeader headerName="CamelHttpMethod">
                <constant>GET</constant>
            </setHeader>
            <setHeader headerName="X-ONAP-RequestID">
                <simple>${exchangeProperty[X-ONAP-RequestID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-InvocationID">
                <simple>${exchangeProperty[X-ONAP-InvocationID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-PartnerName">
                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                </simple>
            </setHeader>
            <log loggingLevel="INFO"
                 message="Endpoint to get policy deployment status: {{clamp.config.policy.pap.url}}/policy/pap/v1/policies/status/${exchangeProperty[policyPdpGroup]}/${exchangeProperty[policyName]}/1.0.0"></log>
            <toD
                    uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/policies/status/${exchangeProperty[policyPdpGroup]}/${exchangeProperty[policyName]}/1.0.0?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
            <doCatch>
                <exception>java.lang.Exception</exception>
                <handled>
                    <constant>true</constant>
                </handled>

                <log loggingLevel="ERROR"
                     message="GET policy request FAILED for loop: ${header.loopName}, ${exception.stacktrace}"/>
                <to
                        uri="bean:org.onap.policy.clamp.loop.log.LoopLogService?method=addLog('GET policy request failed, Error reported: ${exception.message}','ERROR',${exchangeProperty[loopObject]})"/>
            </doCatch>
            <doFinally>
                <to uri="direct:reset-raise-http-exception-flag"/>
                <to
                        uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
                <setProperty propertyName="logMessage">
                    <simple>${exchangeProperty[policyName]} GET Policy deployment
                        status
                    </simple>
                </setProperty>
                <setProperty propertyName="logComponent">
                    <simple>POLICY</simple>
                </setProperty>
                <to uri="direct:dump-loop-log-http-response"/>
            </doFinally>
        </doTry>
    </route>

    <route id="create-policy-from-loop-object">
        <from uri="direct:create-policy-from-loop-object"/>
        <doTry>
            <log loggingLevel="INFO"
                 message="Creating Policy from loop object: ${exchangeProperty[policy].getName()}"/>
            <to
                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Creating Policy from loop object')"/>
            <setBody>
                <simple>${exchangeProperty[policy].createPolicyPayload()}
                </simple>
            </setBody>
            <setProperty propertyName="policyModelType">
                <simple>${exchangeProperty[policy].getPolicyModel().getPolicyModelType()}</simple>
            </setProperty>
            <setProperty propertyName="policyModelVersion">
                <simple>${exchangeProperty[policy].getPolicyModel().getVersion()}</simple>
            </setProperty>
            <to uri="direct:create-policy"/>
            <doFinally>
                <to
                        uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
                <setProperty propertyName="logMessage">
                    <simple>${exchangeProperty[policy].getName()} creation
                        status
                    </simple>
                </setProperty>
                <setProperty propertyName="logComponent">
                    <simple>POLICY</simple>
                </setProperty>
                <to uri="direct:dump-loop-log-http-response"/>
            </doFinally>
        </doTry>
    </route>

    <route id="delete-policy-from-loop-object">
        <from uri="direct:delete-policy-from-loop-object"/>
        <doTry>
            <log loggingLevel="INFO"
                 message="Deleting Policy in a loop: ${exchangeProperty[policy].getName()}"/>
            <to
                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Policy in a loop')"/>
            <setProperty propertyName="policyModelType">
                <simple>${exchangeProperty[policy].getPolicyModel().getPolicyModelType()}</simple>
            </setProperty>
            <setProperty propertyName="policyModelVersion">
                <simple>${exchangeProperty[policy].getPolicyModel().getVersion()}</simple>
            </setProperty>
            <setProperty propertyName="policyName">
                <simple>${exchangeProperty[policy].getName()}</simple>
            </setProperty>
            <setProperty propertyName="policyVersion">
                <simple>1.0.0</simple>
            </setProperty>
            <to uri="direct:delete-policy"/>
            <doFinally>
                <to
                        uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
                <setProperty propertyName="logMessage">
                    <simple>${exchangeProperty[policy].getName()} removal
                        status
                    </simple>
                </setProperty>
                <setProperty propertyName="logComponent">
                    <simple>POLICY</simple>
                </setProperty>
                <to uri="direct:dump-loop-log-http-response"/>
            </doFinally>
        </doTry>
    </route>

    <route id="add-policies-from-loop-to-pdp-group">
        <from uri="direct:add-policies-from-loop-to-pdp-group"/>
        <doTry>
            <log loggingLevel="INFO"
                 message="Adding loop policies to PDP Group: ${exchangeProperty[loopObject].getName()}"/>
            <to
                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Add policies to PDP group')"/>
            <setBody>
                <simple>
                    ${exchangeProperty[loopObject].getComponent("POLICY").createPoliciesPayloadPdpGroup(exchangeProperty[loopObject],"POST")}
                </simple>
            </setBody>
            <to uri="direct:add-multiple-policies-to-pdp-group"/>
            <doFinally>
                <to
                        uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
                <setProperty propertyName="logMessage">
                    <simple>PDP Group push ALL status</simple>
                </setProperty>
                <setProperty propertyName="logComponent">
                    <simple>POLICY</simple>
                </setProperty>
                <to uri="direct:dump-loop-log-http-response"/>
            </doFinally>
        </doTry>
    </route>

    <route id="remove-all-policy-from-active-pdp-group">
        <from uri="direct:remove-all-policy-from-active-pdp-group"/>
        <doTry>
            <log loggingLevel="INFO"
                 message="Removing loop policies from PDP Group: ${exchangeProperty[loopObject].getName()}"/>
            <to
                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Remove policies from PDP group')"/>
            <setBody>
                <simple>
                    ${exchangeProperty[loopObject].getComponent("POLICY").createPoliciesPayloadPdpGroup(exchangeProperty[loopObject],"DELETE")}
                </simple>
            </setBody>
            <setHeader headerName="CamelHttpMethod">
                <constant>POST</constant>
            </setHeader>
            <setHeader headerName="Content-Type">
                <constant>application/json</constant>
            </setHeader>
            <setHeader headerName="X-ONAP-RequestID">
                <simple>${exchangeProperty[X-ONAP-RequestID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-InvocationID">
                <simple>${exchangeProperty[X-ONAP-InvocationID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-PartnerName">
                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                </simple>
            </setHeader>
            <log loggingLevel="INFO"
                 message="Endpoint to remove policies from PDP Group: {{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/deployments/batch"></log>
            <toD
                    uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/deployments/batch?bridgeEndpoint=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;useSystemProperties=true&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>

            <doFinally>
                <to uri="direct:reset-raise-http-exception-flag"/>
                <to
                        uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
                <setProperty propertyName="logMessage">
                    <simple>PDP Group remove ALL status</simple>
                </setProperty>
                <setProperty propertyName="logComponent">
                    <simple>POLICY</simple>
                </setProperty>
                <to uri="direct:dump-loop-log-http-response"/>
            </doFinally>
        </doTry>
    </route>

    <route id="remove-one-policy-from-active-pdp-group">
        <from uri="direct:remove-one-policy-from-active-pdp-group"/>
        <doTry>
            <log loggingLevel="INFO"
                 message="Removing policy from active PDP group for loop: ${exchangeProperty[loopObject].getName()}"/>
            <to
                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Removing one policy PDP group')"/>
            <setProperty propertyName="policyVersion">
                <simple>1.0.0</simple>
            </setProperty>
            <to uri="direct:undeploy-one-policy-from-pap"/>
            <setProperty propertyName="logMessage">
                <simple>${exchangeProperty[policyName]} PDP Group removal status
                </simple>
            </setProperty>
            <setProperty propertyName="logComponent">
                <simple>POLICY</simple>
            </setProperty>
            <to uri="direct:dump-loop-log-http-response"/>
            <doCatch>
                <exception>java.lang.Exception</exception>
                <handled>
                    <constant>false</constant>
                </handled>
                <setProperty propertyName="logMessage">
                    <simple>PDP Group removal, Error reported: ${exception}</simple>
                </setProperty>
                <setProperty propertyName="logComponent">
                    <simple>POLICY</simple>
                </setProperty>
                <to uri="direct:dump-loop-log-http-response"/>
            </doCatch>
            <doFinally>
                <to
                        uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
            </doFinally>
        </doTry>
    </route>

    <!-- Camel routes not related to Loop context -->
    <route id="get-all-policy-models">
        <from uri="direct:get-all-policy-models"/>
        <doTry>
            <log loggingLevel="INFO" message="Getting all the policy models"/>
            <to
                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Getting all the policy models')"/>
            <setHeader headerName="CamelHttpMethod">
                <constant>GET</constant>
            </setHeader>
            <setHeader headerName="X-ONAP-RequestID">
                <simple>${exchangeProperty[X-ONAP-RequestID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-InvocationID">
                <simple>${exchangeProperty[X-ONAP-InvocationID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-PartnerName">
                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                </simple>
            </setHeader>
            <log loggingLevel="INFO"
                 message="Endpoint to get all policy models: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes"></log>
            <toD
                    uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
            <convertBodyTo type="java.lang.String"/>
            <doFinally>
                <to uri="direct:reset-raise-http-exception-flag"/>
                <to
                        uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
            </doFinally>
        </doTry>
    </route>

    <route id="get-policy-tosca-model">
        <from uri="direct:get-policy-tosca-model"/>
        <doTry>
            <log loggingLevel="INFO"
                 message="Getting the policy tosca model: ${exchangeProperty[policyModelType]}/${exchangeProperty[policyModelVersion]}"/>
            <to
                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Getting the policy model')"/>
            <setHeader headerName="CamelHttpMethod">
                <constant>GET</constant>
            </setHeader>
            <setHeader headerName="X-ONAP-RequestID">
                <simple>${exchangeProperty[X-ONAP-RequestID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-InvocationID">
                <simple>${exchangeProperty[X-ONAP-InvocationID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-PartnerName">
                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                </simple>
            </setHeader>
            <log loggingLevel="INFO"
                 message="Endpoint to get policy model: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyModelType]}/versions/${exchangeProperty[policyModelVersion]}"></log>
            <toD
                    uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyModelType]}/versions/${exchangeProperty[policyModelVersion]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
            <convertBodyTo type="java.lang.String"/>
            <doFinally>
                <to uri="direct:reset-raise-http-exception-flag"/>
                <to
                        uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
            </doFinally>
        </doTry>
    </route>

    <route id="get-all-pdp-groups">
        <from uri="direct:get-all-pdp-groups"/>
        <doTry>
            <log loggingLevel="INFO"
                 message="Getting the list of PDP Groups"/>
            <to
                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Getting the PDP Group list')"/>
            <setHeader headerName="CamelHttpMethod">
                <constant>GET</constant>
            </setHeader>
            <setHeader headerName="X-ONAP-RequestID">
                <simple>${exchangeProperty[X-ONAP-RequestID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-InvocationID">
                <simple>${exchangeProperty[X-ONAP-InvocationID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-PartnerName">
                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                </simple>
            </setHeader>
            <log loggingLevel="INFO"
                 message="Endpoint to get policy model: {{clamp.config.policy.pap.url}}/policy/pap/v1/pdps"></log>
            <toD
                    uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
            <convertBodyTo type="java.lang.String"/>
            <doFinally>
                <to uri="direct:reset-raise-http-exception-flag"/>
                <to
                        uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
            </doFinally>
        </doTry>
    </route>

    <route id="get-all-policies">
        <from uri="direct:get-all-policies"/>
        <doTry>
            <log loggingLevel="INFO"
                 message="Getting the policies list"/>
            <to
                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Getting the policies list')"/>
            <setHeader headerName="CamelHttpMethod">
                <constant>GET</constant>
            </setHeader>
            <setHeader headerName="X-ONAP-RequestID">
                <simple>${exchangeProperty[X-ONAP-RequestID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-InvocationID">
                <simple>${exchangeProperty[X-ONAP-InvocationID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-PartnerName">
                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                </simple>
            </setHeader>
            <log loggingLevel="INFO"
                 message="Endpoint to get policies list: {{clamp.config.policy.api.url}}/policy/api/v1/policies"></log>
            <toD
                    uri="{{clamp.config.policy.api.url}}/policy/api/v1/policies?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
            <convertBodyTo type="java.lang.String"/>
            <doFinally>
                <to uri="direct:reset-raise-http-exception-flag"/>
                <to
                        uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
            </doFinally>
        </doTry>
    </route>
    <route id="add-multiple-policies-to-pdp-group">
        <from uri="direct:add-multiple-policies-to-pdp-group"/>
        <!-- Body should come from outside, expect a json describing the policy -->
        <doTry>
            <log loggingLevel="INFO"
                 message="Add policies to PDP group"/>
            <to
                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Add policies to PDP group')"/>
            <setHeader headerName="CamelHttpMethod">
                <constant>POST</constant>
            </setHeader>
            <setHeader headerName="Content-Type">
                <constant>application/json</constant>
            </setHeader>
            <setHeader headerName="X-ONAP-RequestID">
                <simple>${exchangeProperty[X-ONAP-RequestID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-InvocationID">
                <simple>${exchangeProperty[X-ONAP-InvocationID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-PartnerName">
                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                </simple>
            </setHeader>
            <log loggingLevel="INFO"
                 message="Endpoint to add policies to PDP Group: {{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/deployments/batch"></log>
            <toD
                    uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/deployments/batch?bridgeEndpoint=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;useSystemProperties=true&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
            <doFinally>
                <to uri="direct:reset-raise-http-exception-flag"/>
                <to
                        uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
            </doFinally>
        </doTry>
    </route>
    <route id="undeploy-one-policy-from-pap">
        <from uri="direct:undeploy-one-policy-from-pap"/>
        <doTry>
            <log loggingLevel="INFO"
                 message="Undeploy POLICY from PAP: ${exchangeProperty[policyName]}/${exchangeProperty[policyVersion]}"/>
            <to
                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Undeploy POLICY from PAP')"/>
            <setBody>
                <constant>null</constant>
            </setBody>
            <setHeader headerName="CamelHttpMethod">
                <constant>DELETE</constant>
            </setHeader>
            <setHeader headerName="X-ONAP-RequestID">
                <simple>${exchangeProperty[X-ONAP-RequestID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-InvocationID">
                <simple>${exchangeProperty[X-ONAP-InvocationID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-PartnerName">
                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                </simple>
            </setHeader>
            <log loggingLevel="INFO"
                 message="Endpoint to delete policy from PDP Group: {{clamp.config.policy.pap.url}}/pdps/policies/${exchangeProperty[policyName]}/versions/${exchangeProperty[policyVersion]}"></log>
            <toD
                    uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/policies/${exchangeProperty[policyName]}/versions/${exchangeProperty[policyVersion]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
            <doFinally>
                <to uri="direct:reset-raise-http-exception-flag"/>
                <to
                        uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
            </doFinally>
        </doTry>
    </route>

    <route id="create-policy">
        <!-- Body should come from outside, expect a json describing the policy -->
        <from uri="direct:create-policy"/>
        <doTry>
            <log loggingLevel="INFO"
                 message="Create Policy from model ${exchangeProperty[policyModelType]}/${exchangeProperty[policyModelVersion]}"/>
            <to
                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Policy')"/>
            <setHeader headerName="CamelHttpMethod">
                <constant>POST</constant>
            </setHeader>
            <setHeader headerName="Content-Type">
                <constant>application/json</constant>
            </setHeader>
            <setHeader headerName="X-ONAP-RequestID">
                <simple>${exchangeProperty[X-ONAP-RequestID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-InvocationID">
                <simple>${exchangeProperty[X-ONAP-InvocationID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-PartnerName">
                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                </simple>
            </setHeader>
            <log loggingLevel="INFO"
                 message="Endpoint to create policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyModelType]}/versions/${exchangeProperty[policyModelVersion]}/policies"></log>
            <toD
                    uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyModelType]}/versions/${exchangeProperty[policyModelVersion]}/policies?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
            <doFinally>
                <to uri="direct:reset-raise-http-exception-flag"/>
                <to
                        uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
            </doFinally>
        </doTry>
    </route>
    <route id="delete-policy">
        <from uri="direct:delete-policy"/>
        <doTry>
            <log loggingLevel="INFO"
                 message="Deleting Policy: ${exchangeProperty[policyName]}"/>
            <to
                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Policy')"/>
            <setBody>
                <constant>null</constant>
            </setBody>
            <setHeader headerName="CamelHttpMethod">
                <constant>DELETE</constant>
            </setHeader>
            <setHeader headerName="X-ONAP-RequestID">
                <simple>${exchangeProperty[X-ONAP-RequestID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-InvocationID">
                <simple>${exchangeProperty[X-ONAP-InvocationID]}
                </simple>
            </setHeader>
            <setHeader headerName="X-ONAP-PartnerName">
                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                </simple>
            </setHeader>
            <log loggingLevel="INFO"
                 message="Endpoint to delete policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyModelType]}/versions/${exchangeProperty[policyModelVersion]}/policies/${exchangeProperty[policyName]}/versions/${exchangeProperty[policyVersion]}"></log>
            <toD
                    uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyModelType]}/versions/${exchangeProperty[policyModelVersion]}/policies/${exchangeProperty[policyName]}/versions/${exchangeProperty[policyVersion]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;deleteWithBody=false&amp;mapHttpMessageBody=false&amp;mapHttpMessageFormUrlEncodedBody=false&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true"/>

            <doFinally>
                <to uri="direct:reset-raise-http-exception-flag"/>
                <to
                        uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()"/>
            </doFinally>
        </doTry>
    </route>
</routes>