Introduce Camel route

Camel route for Submit operation using http4 component

Issue-ID: CLAMP-303
Change-Id: I29804a7db6286dfa84f7eed63813f25299a385e6
Signed-off-by: sebdet <sebastien.determe@intl.att.com>
diff --git a/src/main/resources/clds/camel/rest/clamp-api-v2.xml b/src/main/resources/clds/camel/rest/clamp-api-v2.xml
index f339d5d..c17595e 100644
--- a/src/main/resources/clds/camel/rest/clamp-api-v2.xml
+++ b/src/main/resources/clds/camel/rest/clamp-api-v2.xml
@@ -1,94 +1,147 @@
-<rests xmlns="http://camel.apache.org/schema/spring" >
-    <rest >
-        <get uri="/v2/loop/getAllNames"
-            outType="java.lang.String[]"
-            produces="application/json">
-            <route>
-                <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
-                <to uri="bean:org.onap.clamp.loop.LoopController?method=getLoopNames()" />
-            </route>
-        </get>
-        <get uri="/v2/loop/{loopName}"
-            outType="org.onap.clamp.loop.Loop"
-            produces="application/json">
-            <route>
-                <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
-                <to uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
-            </route>
-        </get>
-        <get uri="/v2/loop/svgRepresentation/{loopName}"
-            outType="java.lang.String"
-            produces="application/xml">
-            <route>
-                <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
-                <to uri="bean:org.onap.clamp.loop.LoopController?method=getSVGRepresentation(${header.loopName})" />
-            </route>
-        </get>
+<rests xmlns="http://camel.apache.org/schema/spring">
+	<rest>
+		<get
+			uri="/v2/loop/getAllNames"
+			outType="java.lang.String[]"
+			produces="application/json">
+			<route>
+				<to
+					uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
+				<to
+					uri="bean:org.onap.clamp.loop.LoopController?method=getLoopNames()" />
+			</route>
+		</get>
+		<get
+			uri="/v2/loop/{loopName}"
+			outType="org.onap.clamp.loop.Loop"
+			produces="application/json">
+			<route>
+				<to
+					uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
+				<to
+					uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
+			</route>
+		</get>
+		<get
+			uri="/v2/loop/svgRepresentation/{loopName}"
+			outType="java.lang.String"
+			produces="application/xml">
+			<route>
+				<to
+					uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
+				<to
+					uri="bean:org.onap.clamp.loop.LoopController?method=getSVGRepresentation(${header.loopName})" />
+			</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>
-                <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
-                <to uri="bean:org.onap.clamp.loop.LoopController?method=updateGlobalPropertiesJson(${header.loopName},${body})" />
-            </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>
-                <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
-                <to uri="bean:org.onap.clamp.loop.LoopController?method=updateOperationalPolicies(${header.loopName},${body})" />
-            </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>
-                <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
-                <to uri="bean:org.onap.clamp.loop.LoopController?method=updateMicroservicePolicy(${header.loopName},${body})" />
-            </route>
-        </post>
-        <put uri="/v2/loop/deployLoop/{loopName}"
-            outType="org.onap.clamp.loop.Loop"
-            produces="application/json">
-            <route>
-                <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
-                <to uri="bean:org.onap.clamp.operation.LoopOperation?method=deployLoop(*,${header.loopName})" />
-            </route>
-        </put>
-        <put uri="/v2/loop/undeployLoop/{loopName}"
-            outType="org.onap.clamp.loop.Loop"
-            produces="application/json">
-            <route>
-                <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
-                <to uri="bean:org.onap.clamp.operation.LoopOperation?method=unDeployLoop(${header.loopName})" />
-            </route>
-        </put>
-        <put uri="/v2/loop/submit/{loopName}">
-            <route>
-                <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
-                <to uri="bean:org.onap.clamp.operation.LoopOperation?method=submitMsPolicies(${header.loopName})" />
-                <!-- <to uri="bean:org.onap.clamp.operation.LoopOperation?method=submitOpPolicy(${header.loopName})" />-->
-                <!--<to uri="bean:org.onap.clamp.operation.LoopOperation?method=submitGuardPolicy(${header.loopName})" /> -->
-            </route>
-        </put>
-        <put uri="/v2/loop/delete/{loopName}"
-            outType="org.onap.clamp.loop.Loop"
-            produces="application/json">
-            <route>
-                <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
-                <to uri="bean:org.onap.clamp.operation.LoopOperation?method=deleteMsPolicies(${header.loopName})" />
-                <to uri="bean:org.onap.clamp.operation.LoopOperation?method=deleteOpPolicy(${header.loopName})" />
-                <to uri="bean:org.onap.clamp.operation.LoopOperation?method=deleteGuardPolicy(${header.loopName})" />
-            </route>
-        </put>
-    </rest>
+		<post
+			uri="/v2/loop/updateGlobalProperties/{loopName}"
+			type="com.google.gson.JsonObject"
+			consumes="application/json"
+			outType="org.onap.clamp.loop.Loop"
+			produces="application/json">
+			<route>
+				<to
+					uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+				<to
+					uri="bean:org.onap.clamp.loop.LoopController?method=updateGlobalPropertiesJson(${header.loopName},${body})" />
+			</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>
+				<to
+					uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+				<to
+					uri="bean:org.onap.clamp.loop.LoopController?method=updateOperationalPolicies(${header.loopName},${body})" />
+			</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>
+				<to
+					uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+				<to
+					uri="bean:org.onap.clamp.loop.LoopController?method=updateMicroservicePolicy(${header.loopName},${body})" />
+			</route>
+		</post>
+		<put
+			uri="/v2/loop/deployLoop/{loopName}"
+			outType="org.onap.clamp.loop.Loop"
+			produces="application/json">
+			<route>
+				<to
+					uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+				<to
+					uri="bean:org.onap.clamp.operation.LoopOperation?method=deployLoop(*,${header.loopName})" />
+			</route>
+		</put>
+		<put
+			uri="/v2/loop/undeployLoop/{loopName}"
+			outType="org.onap.clamp.loop.Loop"
+			produces="application/json">
+			<route>
+				<to
+					uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+				<to
+					uri="bean:org.onap.clamp.operation.LoopOperation?method=unDeployLoop(${header.loopName})" />
+			</route>
+		</put>
+		<put uri="/v2/loop/submit/{loopName}">
+			<route>
+				<setBody>
+					<simple>${header.loopName}</simple>
+				</setBody>
+				<log
+					loggingLevel="INFO"
+					message="Loop name received: ${body}"></log>
+				<to
+					uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+				<setHeader headerName="LoopObject">
+					<method
+						ref="org.onap.clamp.loop.LoopService"
+						method="getLoop" />
+				</setHeader>
+				<split streaming="true">
+					<simple>${header.LoopObject.getMicroServicePolicies()}
+					</simple>
+					<setHeader headerName="HttpQueryException">
+						<simple resultType="java.lang.Boolean">false</simple>
+					</setHeader>
+					<to uri="direct:delete-micro-service"/>
+					
+					<setHeader headerName="HttpQueryException">
+						<simple resultType="java.lang.Boolean">true</simple>
+					</setHeader>
+					<setBody>
+						<simple>${body.createPolicyPayload()}</simple>
+					</setBody>
+					<to uri="direct:create-micro-service"/>
+
+				</split>
+			</route>
+		</put>
+		<put
+			uri="/v2/loop/delete/{loopName}">
+			<route>
+				<to
+					uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+				<to
+					uri="bean:org.onap.clamp.operation.LoopOperation?method=deleteMsPolicies(${header.loopName})" />
+				<to
+					uri="bean:org.onap.clamp.operation.LoopOperation?method=deleteOpPolicy(${header.loopName})" />
+				<to
+					uri="bean:org.onap.clamp.operation.LoopOperation?method=deleteGuardPolicy(${header.loopName})" />
+			</route>
+		</put>
+	</rest>
 </rests>
 
diff --git a/src/main/resources/clds/camel/routes/flexible-flow.xml b/src/main/resources/clds/camel/routes/flexible-flow.xml
index 2103b4a..b824499 100644
--- a/src/main/resources/clds/camel/routes/flexible-flow.xml
+++ b/src/main/resources/clds/camel/routes/flexible-flow.xml
@@ -1,61 +1,117 @@
 <routes xmlns="http://camel.apache.org/schema/spring">
-		<route id="submit">
-				<from uri="direct:processSubmit" />
-				<choice>
-						<when>
-								<simple> ${exchangeProperty.actionCd} == 'SUBMIT' || ${exchangeProperty.actionCd} == 'RESUBMIT'</simple>
-								<to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
-								<to uri="bean:org.onap.clamp.clds.client.TcaPolicyDelegate" />
-								<to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDelegate" />
-								<delay>
-										<constant>30000</constant>
-								</delay>
-								<to uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
-								<to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
-								<to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
-						</when>
-						<when>
-								<simple> ${exchangeProperty.actionCd} == 'DELETE'</simple>
-								<to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
-								<to uri="bean:org.onap.clamp.clds.client.TcaPolicyDeleteDelegate" />
-								<to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDeleteDelegate" />
-								<delay>
-										<constant>30000</constant>
-								</delay>
-								<to
-										uri="bean:org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate" />
-								<to uri="bean:org.onap.clamp.clds.client.GuardPolicyDeleteDelegate" />
-								<to uri="bean:org.onap.clamp.clds.client.ModelDeleteDelegate" />
-								<to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
-						</when>
-						<when>
-								<simple> ${exchangeProperty.actionCd} == 'UPDATE'</simple>
-								<to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
-								<to uri="bean:org.onap.clamp.clds.client.TcaPolicyDelegate" />
-								<to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDelegate" />
-								<delay>
-										<constant>30000</constant>
-								</delay>
-								<to uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
-								<to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
-								<to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
-						</when>
-						<when>
-								<simple> ${exchangeProperty.actionCd} == 'STOP'</simple>
-								<to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
-								<to
-										uri="bean:org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate" />
-								<to uri="bean:org.onap.clamp.clds.client.GuardPolicyDeleteDelegate" />
-								<to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
-						</when>
-						<when>
-								<simple> ${exchangeProperty.actionCd} == 'RESTART'</simple>
-								<to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
-								<to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
-								<to uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
-								<to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
-						</when>
-				</choice>
-		</route>
+	<route id="submit">
+		<from uri="direct:processSubmit" />
+		<choice>
+			<when>
+				<simple> ${exchangeProperty.actionCd} == 'SUBMIT' ||
+					${exchangeProperty.actionCd} == 'RESUBMIT'
+				</simple>
+				<to
+					uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
+				<to uri="bean:org.onap.clamp.clds.client.TcaPolicyDelegate" />
+				<to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDelegate" />
+				<delay>
+					<constant>30000</constant>
+				</delay>
+				<to
+					uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
+				<to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
+				<to
+					uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
+			</when>
+			<when>
+				<simple> ${exchangeProperty.actionCd} == 'DELETE'</simple>
+				<to
+					uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
+				<to uri="bean:org.onap.clamp.clds.client.TcaPolicyDeleteDelegate" />
+				<to
+					uri="bean:org.onap.clamp.clds.client.HolmesPolicyDeleteDelegate" />
+				<delay>
+					<constant>30000</constant>
+				</delay>
+				<to
+					uri="bean:org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate" />
+				<to
+					uri="bean:org.onap.clamp.clds.client.GuardPolicyDeleteDelegate" />
+				<to uri="bean:org.onap.clamp.clds.client.ModelDeleteDelegate" />
+				<to
+					uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
+			</when>
+			<when>
+				<simple> ${exchangeProperty.actionCd} == 'UPDATE'</simple>
+				<to
+					uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
+				<to uri="bean:org.onap.clamp.clds.client.TcaPolicyDelegate" />
+				<to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDelegate" />
+				<delay>
+					<constant>30000</constant>
+				</delay>
+				<to
+					uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
+				<to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
+				<to
+					uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
+			</when>
+			<when>
+				<simple> ${exchangeProperty.actionCd} == 'STOP'</simple>
+				<to
+					uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
+				<to
+					uri="bean:org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate" />
+				<to
+					uri="bean:org.onap.clamp.clds.client.GuardPolicyDeleteDelegate" />
+				<to
+					uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
+			</when>
+			<when>
+				<simple> ${exchangeProperty.actionCd} == 'RESTART'</simple>
+				<to
+					uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
+				<to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
+				<to
+					uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
+				<to
+					uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
+			</when>
+		</choice>
+	</route>
+	<route id="delete-micro-service">
+		<from uri="direct:delete-micro-service" />
+
+		<setHeader headerName="CamelHttpMethod">
+			<constant>DELETE</constant>
+		</setHeader>
+		<setHeader headerName="CamelHttpUri">
+			<simple>{{clamp.config.policy.url}}/policyTypes/${body.getModelType()}/versions/1.0.0/policies/${body.getName()}
+			</simple>
+		</setHeader>
+		<setBody>
+			<constant>null</constant>
+		</setBody>
+		<!--<convertBodyTo type="org.onap.clamp.policy.microservice.MicroServicePolicy"/> -->
+		<log
+			loggingLevel="INFO"
+			message="Policy Endpoint for microservice: ${header.CamelHttpMethod} ${header.CamelHttpUri}"></log>
+		<toD
+			uri="http4://policyhost:8085?throwExceptionOnFailure=${header.HttpQueryException}" />
+
+	</route>
+	<route id="create-micro-service">
+		<from uri="direct:create-micro-service" />
+
+		<setHeader headerName="CamelHttpMethod">
+			<constant>POST</constant>
+		</setHeader>
+		<setHeader headerName="CamelHttpUri">
+			<simple>{{clamp.config.policy.url}}/policyTypes/${body.getModelType()}/versions/1.0.0/policies
+			</simple>
+		</setHeader>
+		<!--<convertBodyTo type="org.onap.clamp.policy.microservice.MicroServicePolicy"/> -->
+		<log
+			loggingLevel="INFO"
+			message="Policy Endpoint for microservice: ${header.CamelHttpMethod} ${header.CamelHttpUri}"></log>
+		<toD
+			uri="http4://policyhost:8085?throwExceptionOnFailure=${header.HttpQueryException}" />
+	</route>
 
 </routes>
\ No newline at end of file