move.xts 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. Licensed Materials - Property of IBM
  4. IBM Cognos Products: ps
  5. (C) Copyright IBM Corp. 2005, 2014
  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. <!--
  13. Copies an object in CM based on parameters passed in.
  14. Should create a CM command like so:
  15. <move xmlns="http://developer.cognos.com/schemas/xts-cm/1/" select="/Contents/folder/report" target="/Contents/folder2/report2"/>
  16. -->
  17. <xts:morphlet xmlns:xts="http://developer.cognos.com/schemas/xts/" xmlns:cml="http://developer.cognos.com/schemas/xts/logic-sheet/xslt/cml/1/" xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/" xmlns:create="http://developer.cognos.com/schemas/xts/portal/iFrmCmd/1/" xmlns:cms="http://developer.cognos.com/schemas/xts/logic-sheet/xslt/cms/1/">
  18. <xts:block id="doMove" processor="XSLT" type="exec">
  19. <xts:logicsheet path="portal/iFrmCmd/logicsheets/cm-save.xsl"/>
  20. <xts:logicsheet path="logicsheets/buslogic.xslt"/>
  21. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
  22. xmlns:xts="http://developer.cognos.com/schemas/xts/"
  23. xmlns:send="http://developer.cognos.com/schemas/xts/logic-sheet/xslt/brl/1/"
  24. xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/"
  25. xmlns:form="http://developer.cognos.com/schemas/xts/portal/iFrmCmd/1/"
  26. xmlns:bus="http://developer.cognos.com/schemas/bibus/3/"
  27. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  28. exclude-result-prefixes="xtsext">
  29. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  30. <xsl:template match="/root/command/form:move/form:env">
  31. <xts:sequence>
  32. <!-- this is the single object copy -->
  33. <xts:append>
  34. <xts:transform src="transforms/CM/post-process.xslt" processor="XSLT">
  35. <send:request provider="cm" faultBlock="moveFault">
  36. <xts:transform src="transforms/CM/pre-process.xslt" processor="XSLT">
  37. <cm:move xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/">
  38. <cm:objects xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/">
  39. <xsl:choose>
  40. <!-- Single object move -->
  41. <xsl:when test="(form:param[@name = 'm_obj'] and (form:param[@name = 'm_obj'] != ''))">
  42. <cm:nil>
  43. <cm:searchPath><xsl:value-of select="form:param[@name = 'm_obj']"/></cm:searchPath>
  44. </cm:nil>
  45. </xsl:when>
  46. <!-- Group move -->
  47. <xsl:otherwise>
  48. <xsl:copy-of select="form:clipboard/*"/>
  49. </xsl:otherwise>
  50. </xsl:choose>
  51. </cm:objects>
  52. <cm:target>
  53. <xsl:value-of select="form:param[@name='m_p_path']"/>
  54. </cm:target>
  55. <xsl:choose>
  56. <xsl:when test="form:param[@name='overwriteExistingItems'] = 'true'">
  57. <xsl:choose>
  58. <xsl:when test="form:param[@name='cmdErrorUpdateActionReplace'] = 'true'">
  59. <cm:options updateAction="replace"/>
  60. </xsl:when>
  61. <xsl:otherwise>
  62. <!-- "replace" by default -->
  63. <xsl:choose>
  64. <xsl:when test="string(/root/system/param[@name = 'updateTargetObjectWhenOverwrite']) = 'true'">
  65. <cm:options updateAction="update"/>
  66. </xsl:when>
  67. <xsl:otherwise>
  68. <cm:options updateAction="replace"/>
  69. </xsl:otherwise>
  70. </xsl:choose>
  71. </xsl:otherwise>
  72. </xsl:choose>
  73. </xsl:when>
  74. <xsl:otherwise>
  75. <cm:options updateAction="fail"/>
  76. </xsl:otherwise>
  77. </xsl:choose>
  78. </cm:move>
  79. </xts:transform>
  80. </send:request>
  81. </xts:transform>
  82. </xts:append>
  83. </xts:sequence>
  84. </xsl:template>
  85. </xsl:stylesheet>
  86. </xts:block>
  87. <xts:block id="moveFault" type="fault" processor="XSLT">
  88. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  89. <xsl:output method="xml"/>
  90. <xsl:template match="/root/fault">
  91. <xsl:choose>
  92. <xsl:when test="./*[local-name() = 'exception']/*[local-name() = 'exceptionDetail']/*[local-name() = 'exception']/*[local-name()='errorCode'] = 'cmNameConflict'">
  93. <copyFault>
  94. <xsl:copy-of select="."/>
  95. </copyFault>
  96. </xsl:when>
  97. <xsl:otherwise>
  98. <xsl:copy-of select="."/>
  99. </xsl:otherwise>
  100. </xsl:choose>
  101. </xsl:template>
  102. <xsl:template match="text()"/>
  103. </xsl:stylesheet>
  104. </xts:block>
  105. <xts:block id="result" processor="XSLT" type="exec" mode="output" mimeType="text/xml" dependency="doMove">
  106. <xts:logicsheet path="logicsheets/cm-logic.xsl"/>
  107. <xsl:stylesheet xmlns:form="http://developer.cognos.com/schemas/xts/portal/iFrmCmd/1/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xts="http://developer.cognos.com/schemas/xts/" xmlns:cml="http://developer.cognos.com/schemas/xts/logic-sheet/xslt/cml/1/" xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/" xmlns:bus="http://developer.cognos.com/schemas/bibus/3/" version="1.0">
  108. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  109. <xsl:template match="/root">
  110. <xsl:choose>
  111. <xsl:when test="bus:response"><xsl:copy-of select="bus:response/child::*"/></xsl:when>
  112. <xsl:when test="./copyFault">
  113. <error>
  114. <errorCode>
  115. <xsl:value-of select="./copyFault/fault/*[local-name()='exception']/*[local-name()='exceptionDetail']/*[local-name()='exception']/*[local-name()='errorCode']"/>
  116. </errorCode>
  117. <xsl:if test="/root/command/form:move/form:env/form:param[@name='overwriteExistingItems'] = 'true'">
  118. <errorCodeDetails>failOnOverwrite</errorCodeDetails>
  119. </xsl:if>
  120. <errorMessage>
  121. <xsl:value-of select="./copyFault/fault/*[local-name()='exception']/*[local-name()='exceptionDetail']/*[local-name()='exception']/*[local-name()='message']/*[local-name()='messageString']"/>
  122. </errorMessage>
  123. </error>
  124. </xsl:when>
  125. <xsl:otherwise><error/></xsl:otherwise>
  126. </xsl:choose>
  127. </xsl:template>
  128. <xsl:template match="text()"/>
  129. </xsl:stylesheet>
  130. </xts:block>
  131. <xts:block id="moveError-part1-get-source-ids" processor="XSLT" type="exec" mandatory="false" dependency="result"
  132. condition=".[/root/copyFault//*[local-name() = 'errorCode'] = 'cmNameConflict']">
  133. <xts:logicsheet path="logicsheets/portal.xsl"/>
  134. <xts:logicsheet path="logicsheets/buslogic.xslt"/>
  135. <xsl:stylesheet version="1.0"
  136. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  137. xmlns:send="http://developer.cognos.com/schemas/xts/logic-sheet/xslt/brl/1/"
  138. xmlns:pf="http://developer.cognos.com/schemas/xts/pf"
  139. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  140. xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/" >
  141. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  142. <pf:sessionpassport/>
  143. <xsl:template match="/root">
  144. <xts:sequence>
  145. <xts:append>
  146. <moveError-TDS-ccClipboard>
  147. <xts:function name="TDSRequest">
  148. <xts:param name="action">get</xts:param>
  149. <xts:param name="session-id"><xsl:value-of select="$passport"/></xts:param>
  150. <xts:param name="name"><xsl:value-of select="'ccClipboard'"/></xts:param>
  151. </xts:function>
  152. </moveError-TDS-ccClipboard>
  153. </xts:append>
  154. </xts:sequence>
  155. </xsl:template>
  156. </xsl:stylesheet>
  157. </xts:block>
  158. <xts:block id="moveError-part2-get-ancestors" mode="interpret" processor="XSLT" type="exec"
  159. condition=".[/root/copyFault//*[local-name() = 'errorCode'] = 'cmNameConflict']"
  160. dependency="moveError-part1-get-source-ids">
  161. <xts:logicsheet path="logicsheets/buslogic.xslt"/>
  162. <xsl:stylesheet version="1.0"
  163. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  164. xmlns:send="http://developer.cognos.com/schemas/xts/logic-sheet/xslt/brl/1/"
  165. xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/"
  166. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt">
  167. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  168. <xsl:template match="/">
  169. <xts:sequence>
  170. <xts:append>
  171. <moveError-destination-parent-id>
  172. <xsl:if test="string(/root/env/param[@name='m_path']) != ''">
  173. <xts:transform src="transforms/CM/post-process.xslt" processor="XSLT">
  174. <send:request provider="cm">
  175. <xts:transform src="transforms/CM/pre-process.xslt" processor="XSLT">
  176. <cm:query xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/">
  177. <cm:search><xsl:value-of select="/root/env/param[@name='m_path']"/></cm:search>
  178. <cm:properties>
  179. <cm:property name="storeID"/>
  180. </cm:properties>
  181. </cm:query>
  182. </xts:transform>
  183. </send:request>
  184. </xts:transform>
  185. </xsl:if>
  186. </moveError-destination-parent-id>
  187. </xts:append>
  188. <xts:append>
  189. <moveError-source-ancestors>
  190. <xsl:variable name="source-paths">
  191. <xsl:for-each select="/root/moveError-TDS-ccClipboard/*">
  192. <xsl:copy-of select="."/>
  193. </xsl:for-each>
  194. </xsl:variable>
  195. <xsl:if test="count($source-paths/*/searchPath) &gt; 0">
  196. <xts:transform src="transforms/CM/post-process.xslt" processor="XSLT">
  197. <send:request provider="cm">
  198. <xts:transform src="transforms/CM/pre-process.xslt" processor="XSLT">
  199. <cm:query xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/">
  200. <cm:search>
  201. <xsl:for-each select="$source-paths/*/searchPath">
  202. <xsl:if test="position() != 1">
  203. <xsl:text/> | <xsl:text/>
  204. </xsl:if>
  205. <xsl:value-of select="."/>
  206. </xsl:for-each>
  207. </cm:search>
  208. <cm:properties>
  209. <cm:property name="storeID"/>
  210. <cm:property name="ancestors"/>
  211. </cm:properties>
  212. </cm:query>
  213. </xts:transform>
  214. </send:request>
  215. </xts:transform>
  216. </xsl:if>
  217. </moveError-source-ancestors>
  218. </xts:append>
  219. </xts:sequence>
  220. </xsl:template>
  221. </xsl:stylesheet>
  222. </xts:block>
  223. <xts:block id="moveError-part3-purge-moved-source-ids" processor="XSLT" type="exec" mode="interpret" mandatory="false"
  224. condition=".[/root/copyFault//*[local-name() = 'errorCode'] = 'cmNameConflict']"
  225. dependency="result moveError-part1-get-source-ids moveError-part2-get-ancestors">
  226. <xts:logicsheet path="logicsheets/portal.xsl"/>
  227. <xts:logicsheet path="logicsheets/buslogic.xslt"/>
  228. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  229. xmlns:xts="http://developer.cognos.com/schemas/xts/"
  230. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  231. xmlns:pf="http://developer.cognos.com/schemas/xts/pf"
  232. xmlns:cml="http://developer.cognos.com/schemas/xts/logic-sheet/xslt/cml/1/" xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/" xmlns:bus="http://developer.cognos.com/schemas/bibus/3/" version="1.0">
  233. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  234. <pf:sessionpassport/>
  235. <xsl:template match="/root">
  236. <xsl:variable name="source-paths">
  237. <xsl:for-each select="/root/moveError-TDS-ccClipboard/*">
  238. <xsl:variable name="copied">
  239. <xsl:call-template name="ifcopied">
  240. <xsl:with-param name="candidate" select="searchPath"/>
  241. </xsl:call-template>
  242. </xsl:variable>
  243. <xsl:if test="$copied != 'true'">
  244. <xsl:copy-of select="."/>
  245. </xsl:if>
  246. </xsl:for-each>
  247. </xsl:variable>
  248. <xts:sequence>
  249. <xts:append>
  250. <TDS-setCCClipboard>
  251. <xts:function name="TDSRequest">
  252. <xts:param name="action">set</xts:param>
  253. <xts:param name="session-id"><xsl:value-of select="$passport"/></xts:param>
  254. <xts:param name="name"><xsl:value-of select="'ccClipboard'"/></xts:param>
  255. <xts:param name="source">
  256. <xsl:for-each select="$source-paths/*/searchPath">
  257. <xsl:text/>&lt;nil&gt;<xsl:text/>
  258. <xsl:text/>&lt;searchPath&gt;<xsl:value-of select="xtsext:xmlencode(xtsext:urldecode(string(.)))"/>&lt;/searchPath&gt;<xsl:text/>
  259. <xsl:text/>&lt;/nil&gt;<xsl:text/>
  260. </xsl:for-each>
  261. </xts:param>
  262. </xts:function>
  263. </TDS-setCCClipboard>
  264. </xts:append>
  265. <xts:delete select="/root/moveError-TDS-ccClipboard"/>
  266. <xts:delete select="/root/moveError-destination-parent-id"/>
  267. <xts:delete select="/root/moveError-source-ancestors"/>
  268. </xts:sequence>
  269. </xsl:template>
  270. <xsl:template name="ifcopied">
  271. <xsl:param name="candidate" select="''"/>
  272. <xsl:variable name="destination-parent-id" select="/root/moveError-destination-parent-id/cm:queryResponse/cm:folder/cm:storeID"/>
  273. <xsl:variable name="candidate_parent" select="/root/moveError-source-ancestors/cm:queryResponse/*[contains($candidate, cm:storeID)]"/>
  274. <xsl:value-of select="$candidate_parent/cm:ancestors/cm:ancestorInfo[last()]/cm:storeID = $destination-parent-id"/>
  275. </xsl:template>
  276. </xsl:stylesheet>
  277. </xts:block>
  278. </xts:morphlet>