cps-urlhandler.xts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. Licensed Materials - Property of IBM
  4. IBM Cognos Products: cpscrn
  5. (C) Copyright IBM Corp. 2005, 2011
  6. US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. -->
  8. <!--
  9. Copyright (C) 2008 Cognos ULC, an IBM Company. All rights reserved.
  10. Cognos (R) is a trademark of Cognos ULC, (formerly Cognos Incorporated).
  11. -->
  12. <!-- $Header: //cpscrn/main/templates/cps4/producer/wsrp-impl/cps-urlhandler.xts#1 $ -->
  13. <!-- $DateTime: 2008/10/22 11:12:04 $ -->
  14. <!-- $Change: 25109 $ -->
  15. <xts:morphlet version="1.0" xmlns:xts="http://developer.cognos.com/schemas/xts/">
  16. <xts:block id="response" dependency="request" type="exec" mode="interpret" processor="XSLT">
  17. <xts:logicsheet path="/cps4/producer/logicsheets/cps-portlet.xslt"/>
  18. <xsl:stylesheet version="1.0"
  19. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  20. xmlns:wsrp="urn:oasis:names:tc:wsrp:v1:types"
  21. xmlns:portlet="http://developer.cognos.com/schemas/cps/logic/portlet/1/"
  22. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  23. xmlns:xos="http://developer.cognos.com/schemas/xts/output/">
  24. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  25. <xsl:template match="/">
  26. <xts:sequence>
  27. <portlet:soap-response>
  28. <xsl:variable name="originalPassportID">
  29. <xsl:choose>
  30. <xsl:when test="/root/credential/param[@name='CAM']/*[local-name() ='CAM']/*[local-name() = 'CAMPassport']/*[local-name() = 'id']">
  31. <xsl:value-of select="/root/credential/param[@name='CAM']/*[local-name() ='CAM']/*[local-name() = 'CAMPassport']/*[local-name() = 'id']"/>
  32. </xsl:when>
  33. <xsl:when test="/root/header/*[local-name() = 'biBusHeader']/*[local-name()= 'CAM']/CAMPassport/id">
  34. <xsl:value-of select="/root/header/*[local-name() = 'biBusHeader']/*[local-name()= 'CAM']/CAMPassport/id"/>
  35. </xsl:when>
  36. <xsl:otherwise>
  37. <xsl:value-of select="xtsext:camcookie_action('getPassportID', string(/root/cookies/cookie[@name='cam_passport']))"/>
  38. </xsl:otherwise>
  39. </xsl:choose>
  40. </xsl:variable>
  41. <xsl:variable name="newPassportID">
  42. <xsl:call-template name="getCamPassportCookie"/>
  43. </xsl:variable>
  44. <xsl:choose>
  45. <xsl:when test="$newPassportID != '' and $newPassportID != $originalPassportID">
  46. <SOAP-ENV:Fault xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  47. <faultcode wsrp:patch="" xmlns:wsrp="urn:oasis:names:tc:wsrp:v1:types">wsrp:InvalidCookie</faultcode>
  48. <faultstring>The producer environment has timed out. The consumer needs to initialize the cookies again.</faultstring>
  49. <detail>
  50. <wsrp:InvalidCookie xmlns:wsrp="urn:oasis:names:tc:wsrp:v1:types"/>
  51. </detail>
  52. </SOAP-ENV:Fault>
  53. </xsl:when>
  54. <xsl:otherwise>
  55. <portlet:response>
  56. <portlet:markup-context>
  57. <xts:queryNode select="/root/temp-response/*[local-name()='markupString']"/>
  58. <wsrp:locale>
  59. <xsl:choose>
  60. <xsl:when test="/root/temp-response/xos:protocolHeader/xos:param[@name = 'Content-Language']">
  61. <xsl:value-of select="/root/temp-response/xos:protocolHeader/xos:param[@name = 'Content-Language']"/>
  62. </xsl:when>
  63. <xsl:otherwise>en</xsl:otherwise>
  64. </xsl:choose>
  65. </wsrp:locale>
  66. <wsrp:requiresUrlRewriting>true</wsrp:requiresUrlRewriting>
  67. <xsl:if test="/root/temp-response/xos:protocolHeader/xos:param[@name = 'cps-preferredTitle']">
  68. <wsrp:preferredTitle>
  69. <xsl:value-of select="xtsext:xmlencode(xtsext:base64decode(string(/root/temp-response/xos:protocolHeader/xos:param[@name = 'cps-preferredTitle']), false()))" disable-output-escaping="yes"/>
  70. </wsrp:preferredTitle>
  71. </xsl:if>
  72. </portlet:markup-context>
  73. </portlet:response>
  74. </xsl:otherwise>
  75. </xsl:choose>
  76. </portlet:soap-response>
  77. </xts:sequence>
  78. </xsl:template>
  79. <xsl:template name="getCamPassportCookie">
  80. <xsl:for-each select="/root/temp-response/xos:protocolHeader/xos:param[@name = 'Set-Cookie']">
  81. <xsl:variable name="cookieName" select="substring-before(., '=')"/>
  82. <xsl:if test="$cookieName = 'cam_passport'">
  83. <xsl:variable name="value" select="substring-after(., '=')"/>
  84. <xsl:choose>
  85. <xsl:when test="contains($value, ';')">
  86. <xsl:value-of select="substring-before($value, ';')"/>
  87. </xsl:when>
  88. <xsl:otherwise>
  89. <xsl:value-of select="$value"/>
  90. </xsl:otherwise>
  91. </xsl:choose>
  92. </xsl:if>
  93. </xsl:for-each>
  94. </xsl:template>
  95. </xsl:stylesheet>
  96. </xts:block>
  97. <xts:block id="request" type="exec" mode="interpret" processor="XSLT">
  98. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  99. xmlns:wsrp="urn:oasis:names:tc:wsrp:v1:types"
  100. xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  101. xmlns:xos="http://developer.cognos.com/schemas/xts/output/"
  102. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  103. xmlns:bus="http://developer.cognos.com/schemas/bibus/3/"
  104. xmlns:cps="http://developer.cognos.com/schemas/cps/asm/objects/1/">
  105. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  106. <xsl:variable name="getMarkup" select="/root/envelope/SOAP-ENV:Envelope/SOAP-ENV:Body/wsrp:getMarkup"/>
  107. <xsl:variable name="cps-registrationHandle" select="xtsext:urlencode($getMarkup/wsrp:registrationContext/wsrp:registrationHandle)"/>
  108. <xsl:variable name="cps-registrationState" select="xtsext:urlencode($getMarkup/wsrp:registrationContext/wsrp:registrationState)"/>
  109. <xsl:variable name="cps-portletHandle" select="xtsext:urlencode($getMarkup/wsrp:portletContext/wsrp:portletHandle)"/>
  110. <xsl:variable name="cps-portletState" select="xtsext:urlencode($getMarkup/wsrp:portletContext/wsrp:portletState)"/>
  111. <xsl:variable name="cps-navigationalState" select="xtsext:urlencode($getMarkup/wsrp:markupParams/wsrp:navigationalState)"/>
  112. <xsl:variable name="cps-mode" select="xtsext:urlencode($getMarkup/wsrp:markupParams/wsrp:mode)"/>
  113. <xsl:variable name="cps-windowState" select="xtsext:urlencode($getMarkup/wsrp:markupParams/wsrp:windowState)"/>
  114. <xsl:variable name="cps-product-locale" select="/root/envelope/SOAP-ENV:Envelope/SOAP-ENV:Header/bus:biBusHeader/bus:userPreferenceVars/item[name='productLocale']/value"/>
  115. <xsl:variable name="cps-content-locale" select="/root/envelope/SOAP-ENV:Envelope/SOAP-ENV:Header/bus:biBusHeader/bus:userPreferenceVars/item[name='contentLocale']/value"/>
  116. <xsl:variable name="cps-portalContext" select="$getMarkup/wsrp:markupParams/wsrp:extensions/cps:portalContext"/>
  117. <xsl:variable name="userAgent" select="$getMarkup/wsrp:markupParams/wsrp:clientData/wsrp:userAgent"/>
  118. <xsl:variable name="dispatch-url" select="/root/target"/>
  119. <xsl:variable name="full-url">
  120. <xsl:value-of select="$dispatch-url"/>
  121. <xsl:choose>
  122. <xsl:when test="contains($dispatch-url,'?')">
  123. <xsl:text>&amp;</xsl:text>
  124. </xsl:when>
  125. <xsl:otherwise>
  126. <xsl:text>?</xsl:text>
  127. </xsl:otherwise>
  128. </xsl:choose>
  129. <xsl:text>cps-registrationHandle=</xsl:text>
  130. <xsl:value-of select="$cps-registrationHandle"/>
  131. <xsl:text>&amp;cps-registrationState=</xsl:text>
  132. <xsl:value-of select="$cps-registrationState"/>
  133. <xsl:text>&amp;cps-portletHandle=</xsl:text>
  134. <xsl:value-of select="$cps-portletHandle"/>
  135. <xsl:text>&amp;cps-portletState=</xsl:text>
  136. <xsl:value-of select="$cps-portletState"/>
  137. <xsl:text>&amp;cps-navigationalState=</xsl:text>
  138. <xsl:value-of select="$cps-navigationalState"/>
  139. <xsl:text>&amp;cps-mode=</xsl:text>
  140. <xsl:value-of select="$cps-mode"/>
  141. <xsl:text>&amp;cps-windowState=</xsl:text>
  142. <xsl:value-of select="$cps-windowState"/>
  143. <xsl:if test="$cps-content-locale">
  144. <xsl:text>&amp;cps-contentLocale=</xsl:text>
  145. <xsl:value-of select="xtsext:urlencode($cps-content-locale)"/>
  146. </xsl:if>
  147. <xsl:if test="$cps-product-locale">
  148. <xsl:text>&amp;cps-productLocale=</xsl:text>
  149. <xsl:value-of select="xtsext:urlencode($cps-product-locale)"/>
  150. </xsl:if>
  151. <xsl:if test="$cps-portalContext">
  152. <xsl:text>&amp;cps-portalContext-portalAgent=</xsl:text>
  153. <xsl:value-of select="xtsext:urlencode($cps-portalContext/cps:portalAgent)"/>
  154. <xsl:for-each select="$cps-portalContext/cps:param">
  155. <xsl:text>&amp;cps-portalContext-</xsl:text>
  156. <xsl:value-of select="@name"/>
  157. <xsl:text>=</xsl:text>
  158. <xsl:value-of select="xtsext:urlencode(.)"/>
  159. </xsl:for-each>
  160. </xsl:if>
  161. </xsl:variable>
  162. <xsl:template match="/">
  163. <xts:sequence>
  164. <xts:append select="/root">
  165. <temp-response/>
  166. </xts:append>
  167. <xts:append select="/root/temp-response">
  168. <wsrp:markupString>
  169. <xts:transform name="XMLEncode" option="content">
  170. <xts:request name="POST" faultBlock="handleFault" target="{$full-url}" protocolHeader="true" protocolHeaderSelect="/root/temp-response">
  171. <xsl:if test="/root/internalRequest">
  172. <xts:param name="internalRequest">true</xts:param>
  173. </xsl:if>
  174. <xsl:if test="$cps-product-locale or $cps-content-locale">
  175. <xts:param name="header">
  176. <xsl:text>Accept-Language=</xsl:text>
  177. <xsl:for-each select = "$cps-product-locale|$cps-content-locale[.!=$cps-product-locale]">
  178. <xsl:value-of select="xtsext:urlencode(.)"/>
  179. <xsl:if test="position() != last()">
  180. <xsl:text>, </xsl:text>
  181. </xsl:if>
  182. </xsl:for-each>
  183. </xts:param>
  184. </xsl:if>
  185. <xsl:if test="$userAgent">
  186. <xts:param name="header">
  187. <xsl:text>User-Agent=</xsl:text>
  188. <xsl:value-of select="$userAgent"/>
  189. </xts:param>
  190. </xsl:if>
  191. <xts:param name="header">
  192. <xsl:text>Cookie=</xsl:text>
  193. <xsl:for-each select="/root/cookies/cookie[not(@name='JSESSIONID')]">
  194. <xsl:value-of select="@name"/>=<xsl:value-of select="."/>
  195. <xsl:if test="position() != last()">
  196. <xsl:text>; </xsl:text>
  197. </xsl:if>
  198. </xsl:for-each>
  199. </xts:param>
  200. </xts:request>
  201. </xts:transform>
  202. </wsrp:markupString>
  203. </xts:append>
  204. </xts:sequence>
  205. </xsl:template>
  206. </xsl:stylesheet>
  207. </xts:block>
  208. <xts:block id="handleFault" type="fault" processor="XSLT">
  209. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  210. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  211. <xsl:template match="/">
  212. <div class="portlet-msg-error">
  213. <xsl:for-each select="/root/fault/xts:exception/xts:exceptionMsg">
  214. <xsl:value-of select="."/>
  215. <br/>
  216. </xsl:for-each>
  217. </div>
  218. </xsl:template>
  219. </xsl:stylesheet>
  220. </xts:block>
  221. </xts:morphlet>