<rests xmlns="http://camel.apache.org/schema/spring">
	<rest>
		<get
			uri="/v2/loop/getAllNames"
			outType="java.lang.String[]"
			produces="application/json">
			<route>
			 	<doTry>
        			<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Get All ClosedLoop')" />
					<to
						uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
					<to
						uri="bean:org.onap.clamp.loop.LoopController?method=getLoopNames()" />
					<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
        			<doCatch>
            			<exception>java.lang.Exception</exception>
            			<handled>
                			<constant>false</constant>
            			</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
        			</doCatch>
    			</doTry>
			</route>
		</get>
		<get
			uri="/v2/loop/{loopName}"
			outType="org.onap.clamp.loop.Loop"
			produces="application/json">
			<route>
				<doTry>
        			<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Get Closed Loop')" />
					<to
						uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
					<to
						uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
					<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
        			<doCatch>
            			<exception>java.lang.Exception</exception>
            			<handled>
                			<constant>false</constant>
            			</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
        			</doCatch>
    			</doTry>
			</route>
		</get>
		<get
			uri="/v2/loop/svgRepresentation/{loopName}"
			outType="java.lang.String"
			produces="application/xml">
			<route>
				<doTry>
        			<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Get SVG Representation')" />
					<to
						uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
					<to
						uri="bean:org.onap.clamp.loop.LoopController?method=getSVGRepresentation(${header.loopName})" />
					<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
        			<doCatch>
            			<exception>java.lang.Exception</exception>
            			<handled>
                			<constant>false</constant>
            			</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
        			</doCatch>
    			</doTry>
			</route>
		</get>

		<post
			uri="/v2/loop/updateGlobalProperties/{loopName}"
			type="com.google.gson.JsonObject"
			consumes="application/json"
			outType="org.onap.clamp.loop.Loop"
			produces="application/json">
			<route>
				<doTry>
        			<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Update the global properties')" />
					<to
						uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
					<setHeader headerName="GlobalPropertiesJson">
						<simple>${body}</simple>
					</setHeader>
					<to uri="direct:load-loop" />
					<to
						uri="bean:org.onap.clamp.loop.LoopController?method=updateGlobalPropertiesJson(${header.loopName},${header.GlobalPropertiesJson})" />
					<to
						uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Global Properties UPDATED','INFO',${header.LoopObject})" />
					<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
        			<doCatch>
            			<exception>java.lang.Exception</exception>
            			<handled>
                			<constant>false</constant>
            			</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
        			</doCatch>
    			</doTry>
			</route>
		</post>
		<post
			uri="/v2/loop/updateOperationalPolicies/{loopName}"
			type="com.google.gson.JsonArray"
			consumes="application/json"
			outType="org.onap.clamp.loop.Loop"
			produces="application/json">
			<route>
				<doTry>
        			<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Update operational policies')" />
					<to
						uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
					<setHeader headerName="OperationalPoliciesArray">
						<simple>${body}</simple>
					</setHeader>
					<to uri="direct:load-loop" />
					<to
						uri="bean:org.onap.clamp.loop.LoopController?method=updateOperationalPolicies(${header.loopName},${header.OperationalPoliciesArray})" />
					<to
						uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Operational and Guard policies UPDATED','INFO',${header.LoopObject})" />
					<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
        			<doCatch>
            			<exception>java.lang.Exception</exception>
            			<handled>
                			<constant>false</constant>
            			</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
        			</doCatch>
    			</doTry>
			</route>
		</post>
		<post
			uri="/v2/loop/updateMicroservicePolicy/{loopName}"
			type="org.onap.clamp.policy.microservice.MicroServicePolicy"
			consumes="application/json"
			outType="org.onap.clamp.policy.microservice.MicroServicePolicy"
			produces="application/json">
			<route>
				<doTry>
        			<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Update Microservice policies')" />
					<to
						uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
					<setHeader headerName="MicroServicePolicyObject">
						<simple>${body}</simple>
					</setHeader>

					<to uri="direct:load-loop" />
					<to
						uri="bean:org.onap.clamp.loop.LoopController?method=updateMicroservicePolicy(${header.loopName},${header.MicroServicePolicyObject})" />
					<to
						uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Micro Service policies UPDATED','INFO',${header.LoopObject})" />
					<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
        			<doCatch>
            			<exception>java.lang.Exception</exception>
            			<handled>
                			<constant>false</constant>
            			</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
        			</doCatch>
    			</doTry>
			</route>
		</post>
		<put
			uri="/v2/loop/deployLoop/{loopName}"
			outType="org.onap.clamp.loop.Loop"
			produces="application/json">
			<route>
				<doTry>
        			<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Deploy the closed loop')" />
					<to
						uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
					<to
						uri="bean:org.onap.clamp.operation.LoopOperation?method=deployLoop(*,${header.loopName})" />
					<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
        			<doCatch>
            			<exception>java.lang.Exception</exception>
            			<handled>
                			<constant>false</constant>
            			</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
        			</doCatch>
    			</doTry>
			</route>
		</put>
		<put
			uri="/v2/loop/undeployLoop/{loopName}"
			outType="org.onap.clamp.loop.Loop"
			produces="application/json">
			<route>
				<doTry>
        			<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Undeploy the closed loop')" />
					<to
						uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
					<to
						uri="bean:org.onap.clamp.operation.LoopOperation?method=unDeployLoop(${header.loopName})" />
					<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
        			<doCatch>
            			<exception>java.lang.Exception</exception>
            			<handled>
                			<constant>false</constant>
            			</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
        			</doCatch>
    			</doTry>
			</route>
		</put>
		<put
			uri="/v2/loop/stop/{loopName}"
			outType="org.onap.clamp.loop.Loop"
			produces="application/json">
			<route>
				<doTry>
					<log
						loggingLevel="INFO"
						message="Receive STOP request for loop: ${header.loopName}" />
        			<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog('Stop the closed loop')" />
					<to
						uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
					<to uri="direct:load-loop" />

					<doTry>	
						<to uri="direct:remove-all-policy-from-active-pdp-group" />
						<doCatch>
            				<exception>java.lang.Exception</exception>
            				<handled>
                				<constant>false</constant>
            				</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        				</doCatch>
					</doTry>


					<log
						loggingLevel="INFO"
						message="STOP request successfully executed for loop: ${body}" />
					<to
						uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('STOP request successfully executed','INFO',${header.LoopObject})" />
					<to
						uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
					<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
        			<doCatch>
            			<exception>java.lang.Exception</exception>
            			<handled>
                			<constant>false</constant>
            			</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
        			</doCatch>
    			</doTry>
			</route>
		</put>
		<put
			uri="/v2/loop/start/{loopName}"
			outType="org.onap.clamp.loop.Loop"
			produces="application/json">
			<route>
				<doTry>
					<log
						loggingLevel="INFO"
						message="Receive START request for loop: ${header.loopName}" />
        			<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog('Start the closed loop')" />
					<to
						uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
					<to uri="direct:load-loop" />
					
					<doTry>	
						<to uri="direct:add-all-to-active-pdp-group" />
						<doCatch>
            				<exception>java.lang.Exception</exception>
            				<handled>
                				<constant>false</constant>
            				</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        				</doCatch>
					</doTry>

					<log
						loggingLevel="INFO"
						message="START request successfully executed for loop: ${body}" />
					<to
						uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('START request successfully executed','INFO',${header.LoopObject})" />
					<to
						uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
					<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
        			<doCatch>
            			<exception>java.lang.Exception</exception>
            			<handled>
                			<constant>false</constant>
            			</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
        			</doCatch>
    			</doTry>
			</route>
		</put>
		<put
			uri="/v2/loop/submit/{loopName}"
			outType="org.onap.clamp.loop.Loop"
			produces="application/json">
			<route>
				<doTry>
					<log
						loggingLevel="INFO"
						message="Receive SUBMIT request for loop: ${header.loopName}" />
        			<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Submit the closed loop')" />	
					<to
						uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
					<to uri="direct:load-loop" />
					<to
						uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Receive SUBMIT request','INFO',${header.LoopObject})" />
					<setHeader headerName="RaiseHttpExceptionFlag">
						<simple resultType="java.lang.Boolean">false</simple>
					</setHeader>
					
					<doTry>	
						<to uri="direct:remove-all-policy-from-active-pdp-group" />
						<doCatch>
            				<exception>java.lang.Exception</exception>
            				<handled>
                				<constant>false</constant>
            				</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        				</doCatch>
					</doTry>

					<log
						loggingLevel="INFO"
						message="Processing all MICRO-SERVICES policies defined in loop ${header.LoopObject.getName()}" />
					<split>
						<simple>${header.LoopObject.getMicroServicePolicies()}
						</simple>
						<setHeader headerName="microServicePolicy">
							<simple>${body}</simple>
						</setHeader>
						<log
							loggingLevel="INFO"
							message="Processing Micro Service Policy: ${header.microServicePolicy.getName()}" />
						<setHeader headerName="RaiseHttpExceptionFlag">
							<simple resultType="java.lang.Boolean">false</simple>
						</setHeader>

						<doTry>	
							<to uri="direct:delete-micro-service-policy" />
							<doCatch>
            					<exception>java.lang.Exception</exception>
            					<handled>
                					<constant>false</constant>
            					</handled>
            				<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        					</doCatch>
						</doTry>

						<doTry>	
							<to uri="direct:create-micro-service-policy" />
							<doCatch>
            					<exception>java.lang.Exception</exception>
            					<handled>
                					<constant>false</constant>
            					</handled>
            				<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        					</doCatch>
						</doTry>
						
					</split>
					<log
						loggingLevel="INFO"
						message="Processing all OPERATIONAL policies defined in loop ${header.LoopObject.getName()}" />
					<split>
						<simple>${header.LoopObject.getOperationalPolicies()}
						</simple>
						<setHeader headerName="operationalPolicy">
							<simple>${body}</simple>
						</setHeader>
						<log
							loggingLevel="INFO"
							message="Processing Operational Policy: ${header.operationalPolicy.getName()}" />
						<setHeader headerName="RaiseHttpExceptionFlag">
							<simple resultType="java.lang.Boolean">false</simple>
						</setHeader>	

						<doTry>	
							<to uri="direct:delete-operational-policy" />
							<doCatch>
            					<exception>java.lang.Exception</exception>
            					<handled>
                					<constant>false</constant>
            					</handled>
            				<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        					</doCatch>
						</doTry>

						<doTry>	
							<to uri="direct:create-operational-policy" />
							<doCatch>
            					<exception>java.lang.Exception</exception>
            					<handled>
                					<constant>false</constant>
            					</handled>
            				<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        					</doCatch>
						</doTry>

						
						<log
							loggingLevel="INFO"
							message="Processing all GUARD policies defined in loop ${header.LoopObject.getName()}" />
						<split>
							<simple>${header.operationalPolicy.createGuardPolicyPayloads().entrySet()}
							</simple>
							<setHeader headerName="guardPolicy">
								<simple>${body}</simple>
							</setHeader>
							<log
								loggingLevel="INFO"
								message="Processing Guard Policy: ${header.guardPolicy.getKey()}" />

							<setHeader headerName="RaiseHttpExceptionFlag">
								<simple resultType="java.lang.Boolean">false</simple>
							</setHeader>
							
							<doTry>	
								<to uri="direct:delete-guard-policy" />
								<doCatch>
            						<exception>java.lang.Exception</exception>
            						<handled>
                						<constant>false</constant>
            						</handled>
            					<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        						</doCatch>
							</doTry>

							<doTry>	
								<to uri="direct:create-guard-policy" />
								<doCatch>
            						<exception>java.lang.Exception</exception>
            						<handled>
                						<constant>false</constant>
            						</handled>
            					<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        						</doCatch>
							</doTry>

						</split>
					</split>
					
					
					<doTry>	
						<to uri="direct:add-all-to-active-pdp-group" />
						<doCatch>
            				<exception>java.lang.Exception</exception>
            				<handled>
                				<constant>false</constant>
            				</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        				</doCatch>
					</doTry>
					


					<log
						loggingLevel="INFO"
						message="SUBMIT request successfully executed for loop: ${body}" />
					<to
						uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('SUBMIT request successfully executed','INFO',${header.LoopObject})" />
					<to
						uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
					<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
        			<doCatch>
            			<exception>java.lang.Exception</exception>
            			<handled>
                			<constant>false</constant>
            			</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
        			</doCatch>
    			</doTry>
			</route>
		</put>
		<put uri="/v2/loop/delete/{loopName}">
			<route>
				<doTry>
					<log
						loggingLevel="INFO"
						message="Receive DELETE request for loop: ${header.loopName}" />
        			<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog('Delete the closed loop')" />
					<to
						uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
					<to uri="direct:load-loop" />
					<to
						uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Receive DELETE request','INFO',${header.LoopObject})" />

					<doTry>	
						<to uri="direct:remove-all-policy-from-active-pdp-group" />
						<doCatch>
            				<exception>java.lang.Exception</exception>
            				<handled>
                				<constant>false</constant>
            				</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        				</doCatch>
					</doTry>

					
					<split>
						<simple>${header.LoopObject.getMicroServicePolicies()}
						</simple>
						<setHeader headerName="microServicePolicy">
							<simple>${body}</simple>
						</setHeader>
						<log
							loggingLevel="INFO"
							message="Processing Micro Service Policy: ${header.microServicePolicy.getName()}" />

						<doTry>	
							<to uri="direct:delete-micro-service-policy" />
							<doCatch>
            					<exception>java.lang.Exception</exception>
            					<handled>
                					<constant>false</constant>
            					</handled>
            				<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        					</doCatch>
						</doTry>

					</split>

					<log
						loggingLevel="INFO"
						message="Processing all OPERATIONAL policies defined in loop ${header.LoopObject.getName()}" />
					<split>
						<simple>${header.LoopObject.getOperationalPolicies()}
						</simple>
						<setHeader headerName="operationalPolicy">
							<simple>${body}</simple>
						</setHeader>
						<log
							loggingLevel="INFO"
							message="Processing Operational Policy: ${header.operationalPolicy.getName()}" />
						
						<doTry>	
							<to uri="direct:delete-operational-policy" />
							<doCatch>
            					<exception>java.lang.Exception</exception>
            					<handled>
                					<constant>false</constant>
            					</handled>
            				<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        					</doCatch>
						</doTry>

						<log
							loggingLevel="INFO"
							message="Processing all GUARD policies defined in loop ${header.LoopObject.getName()}" />
						<split>
							<simple>${header.operationalPolicy.createGuardPolicyPayloads().entrySet()}
							</simple>
							<setHeader headerName="guardPolicy">
								<simple>${body}</simple>
							</setHeader>
							<log
								loggingLevel="INFO"
								message="Processing Guard Policy: ${header.guardPolicy.getKey()}" />

							<doTry>	
								<to uri="direct:delete-guard-policy" />
								<doCatch>
		            				<exception>java.lang.Exception</exception>
            						<handled>
                						<constant>false</constant>
            						</handled>
            					<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
        						</doCatch>
							</doTry>

						</split>
					</split>
					<to
						uri="bean:org.onap.clamp.loop.log.LoopService?method=deleteLoop(${header.loopName})" />
					<log
						loggingLevel="INFO"
						message="DELETE request successfully executed for loop: ${body}" />
					<to
						uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DELETE request successfully executed','INFO',${header.LoopObject})" />
					<to
						uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
        			<doCatch>
            			<exception>java.lang.Exception</exception>
            			<handled>
                			<constant>false</constant>
            			</handled>
            			<to uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
        			</doCatch>
    			</doTry>
			</route>
		</put>
	</rest>
</rests>