post-process.xslt 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  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, 2012
  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. <!-- transform the after-CM/post-process of spec's deploymentOptions and getDeploymentOptions' options to cm4dummies document style.
  13. CM API deploymentOptions XML:
  14. <deploymentOptions xsi:type="tns:deploymentOptionArrayProp"
  15. xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
  16. xmlns:tns="http://developer.cognos.com/schemas/bibus/3/"
  17. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  18. <value xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:deploymentOption[]">
  19. <item xsi:type="cm:deploymentOptionPackageInfo">
  20. <name xsi:type="cm:deploymentOptionEnum">package</name>
  21. <value xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="cm:packageDeploymentInfo[]">
  22. <item xsi:type="cm:packageDeploymentInfo">
  23. <sourceName xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="cm:multilingualToken[]">
  24. <item xsi:type="cm:multilingualToken">
  25. <locale xsi:type="xsd:string"">en-US</locale>
  26. <value xsi:type="xsd:string"">A</value>
  27. </item>
  28. <sourceName>
  29. <targetName xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="cm:multilingualToken[]">
  30. <item xsi:type="cm:multilingualToken">
  31. <locale xsi:type="xsd:string"">fr-CA</locale>
  32. <value xsi:type="xsd:string"">B</value>
  33. </item>
  34. <targetName>
  35. <enabled xsi:type="xsd:boolean">false<enabled>
  36. </item>
  37. </value>
  38. </item>
  39. <item xsi:type="cm:deploymentOptionBoolean">
  40. <name xsi:type="cm:deploymentOptionEnum">archiveOverwrite </name>
  41. <value xsi:type="xsd:boolean"></value>
  42. </item>
  43. <item xsi:type="cm:deploymentOptionResolution">
  44. <name xsi:type="cm:deploymentOptionEnum">namespaceConflictResolution </name>
  45. <value xsi:type="cm:conflictResolutionEnum"></value>
  46. </item>
  47. <item xsi:type="cm:deploymentOptionString">
  48. <name xsi:type="cm:deploymentOptionEnum">archive</name>
  49. <value xsi:type="xsd:string">folder 12345</value>
  50. </item>
  51. </value>
  52. </deploymentOptions>
  53. CM API method options XML differ from above in the <deploymentOptions><value> :
  54. <options xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="cm:deploymentOption[]">
  55. <item>...</item>
  56. ...
  57. </options>
  58. The after-CM/post-process XML is:
  59. <deploymentOptions>
  60. <deploymentOptionPackageInfo name="package">
  61. <packageDeploymentInfo>
  62. <sourceName>
  63. <multilingualToken xml:lang="en-US" type="cm:multilingualToken">A</multilingualToken>
  64. <multilingualToken xml:lang="fr-fr" type="cm:multilingualToken">B</multilingualToken>
  65. </sourceName>
  66. <targetName>
  67. <multilingualToken xml:lang="fr-CA" type="cm:multilingualToken">C</multilingualToken>
  68. <multilingualToken xml:lang="en-CA" type="cm:multilingualToken">D</multilingualToken>
  69. </targetName>
  70. <enabled>false</enabled>
  71. </packageDeploymentInfo>
  72. </deploymentOptionPackageInfo>
  73. <deploymentOptionBoolean name="archiveOverwrite " type="cm:deploymentOptionBoolean">true</deploymentOptionBoolean>
  74. <deploymentOptionString name="archive" type="cm:deploymentOptionString">folder 12345</deploymentOptionString>
  75. </deploymentOptions>
  76. <deploymentOptionResolution name="namespaceConflictResolution ">
  77. <value type="cm:conflictResolutionEnum">keep</value>
  78. </deploymentOptionResolution>
  79. </deploymentOptionResolution>
  80. or
  81. <deploymentOptions>
  82. <deploymentOptionPackageInfo name="package">
  83. <packageDeploymentInfo>
  84. <sourceName>
  85. <multilingualToken xml:lang="en-US" type="bus:multilingualToken">A</multilingualToken>
  86. <multilingualToken xml:lang="fr-fr" type="bus:multilingualToken">B</multilingualToken>
  87. </sourceName>
  88. <targetName>
  89. <multilingualToken xml:lang="fr-CA" type="bus:multilingualToken">C</multilingualToken>
  90. <multilingualToken xml:lang="en-CA" type="bus:multilingualToken">D</multilingualToken>
  91. </targetName>
  92. <enabled>false</enabled>
  93. </packageDeploymentInfo>
  94. </deploymentOptionPackageInfo>
  95. <deploymentOptionBoolean name="archiveOverwrite " type="bus:deploymentOptionBoolean">true</deploymentOptionBoolean>
  96. <deploymentOptionString name="archive" type="bus:deploymentOptionString">folder 12345</deploymentOptionString>
  97. </deploymentOptions>
  98. <deploymentOptionResolution name="namespaceConflictResolution " type="bus:conflictResolutionEnum">keep
  99. </deploymentOptionResolution>
  100. cm4dummies XML style for both:
  101. <deploymentOptions>
  102. <deploymentOption class="cm:deploymentOptionPackageInfo" name="package">
  103. <packageDeploymentInfo>
  104. <sourceName>
  105. <cm:multilingualToken xml:lang="en-US">A</cm:multilingualToken>
  106. <sourceName>
  107. <targetName>
  108. <cm:multilingualToken xml:lang="fr-CA">B</cm:multilingualToken>
  109. <targetName>
  110. <enabled>false<enabled>
  111. </packageDeploymentInfo>
  112. </deploymentOption>
  113. <deploymentOption class="cm:deploymentOptionString" name="archive">folder 12345</deploymentOption>
  114. <deploymentOption class="cm:deploymentOptionBoolean" name="archiveOverwrite">true</deploymentOption>
  115. <deploymentOption class="cm:deploymentOptionResolution" name="namespaceConflictResolution">keep</deploymentOption>
  116. <deploymentOption class="cm:deploymentOptionResolution" name="namespaceConflictResolution">keep
  117. <value type="bus:conflictResolutionEnum">replace</value>
  118. </deploymentOption>
  119. </deploymentOptions>
  120. -->
  121. <xsl:stylesheet version="1.0" xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt" xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xts="http://developer.cognos.com/schemas/xts/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bus="http://developer.cognos.com/schemas/bibus/3/" exclude-result-prefixes="xtsext cm xsl SOAP-ENV SOAP-ENC xts xsd xsi bus">
  122. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  123. <xsl:key name="option-information-rules" match="*[local-name()='getDeploymentOptionsResponse']/*[local-name()='deploymentOptions']/*[local-name()='deploymentOptionObjectInformationArray']/*[local-name()='deploymentObjectInformation']" use="*[local-name()='searchPath']"/>
  124. <xsl:key name="user-param" match="/root/user/param" use="@name"/>
  125. <xsl:template match="cm:deploymentOptionBoolean|cm:deploymentOptionString|cm:deploymentOptionMultilingualString|cm:deploymentOptionClassEnumArray|cm:deploymentOptionSearchPathSingleObjectArray|cm:deploymentOptionStringArray" priority="3">
  126. <xsl:element name="deploymentOption" namespace="{namespace-uri()}">
  127. <xsl:attribute name="class">cm:<xsl:value-of select="local-name()"/></xsl:attribute>
  128. <!-- copy all attributes but not 'type'-->
  129. <xsl:copy-of select="@*[local-name() != 'type']"/>
  130. <xsl:apply-templates/>
  131. </xsl:element>
  132. </xsl:template>
  133. <xsl:template match="cm:deploymentOptionObjectInformationArray" priority="3">
  134. </xsl:template>
  135. <xsl:template match="cm:deploymentOptionResolution|cm:deploymentOptionAnyType" priority="3">
  136. <xsl:element name="deploymentOption" namespace="{namespace-uri()}">
  137. <xsl:attribute name="class">cm:<xsl:value-of select="local-name()"/></xsl:attribute>
  138. <!-- copy all attributes but not 'type'-->
  139. <xsl:copy-of select="@*[local-name() != 'type']"/>
  140. <!-- bypass 'value' node if exists -->
  141. <xsl:choose>
  142. <xsl:when test="child::*[local-name()='value']">
  143. <xsl:value-of select="child::*[local-name()='value']"/>
  144. </xsl:when>
  145. <xsl:otherwise>
  146. <xsl:value-of select="."/>
  147. </xsl:otherwise>
  148. </xsl:choose>
  149. </xsl:element>
  150. </xsl:template>
  151. <xsl:template match="*[local-name()='options' and ../*[local-name()='objectClass'] !='account']" priority="3">
  152. <xsl:element name="deploymentOptions" namespace="{namespace-uri()}">
  153. <xsl:attribute name="type">cm:deploymentOptionArrayProp</xsl:attribute>
  154. <xsl:apply-templates/>
  155. </xsl:element>
  156. </xsl:template>
  157. <!-- convert 8.2 (Blacksea) deployment options into 8.1(Bering) options. This simplifies the logic required to display the options
  158. summary in the run with options and schedule dialogs -->
  159. <xsl:template match="cm:deploymentOptionImportRuleArray" priority="3">
  160. <xsl:element name="deploymentOption" namespace="{namespace-uri()}">
  161. <xsl:attribute name="class">cm:deploymentOptionPackageInfo</xsl:attribute>
  162. <xsl:attribute name="name">package</xsl:attribute>
  163. <xsl:for-each select="cm:deploymentImportRule">
  164. <xsl:element name="packageDeploymentInfo" namespace="{namespace-uri()}">
  165. <xsl:variable name="searchPath">
  166. <xsl:value-of select="cm:archiveSearchPath"/>
  167. </xsl:variable>
  168. <xsl:element name="sourceName" namespace="{namespace-uri()}">
  169. <xsl:copy-of select="key('option-information-rules', $searchPath)/*[local-name()='multilingualToken']"/>
  170. </xsl:element>
  171. <xsl:element name="defaultName" namespace="{namespace-uri()}">
  172. <xsl:value-of select="key('option-information-rules', $searchPath)/*[local-name()='defaultName']"/>
  173. </xsl:element>
  174. <xsl:element name="objectClass" namespace="{namespace-uri()}">
  175. <xsl:value-of select="key('option-information-rules', $searchPath)/*[local-name()='objectClass']"/>
  176. </xsl:element>
  177. <xsl:element name="ancestorInfo" namespace="{namespace-uri()}">
  178. <xsl:element name="searchPath" namespace="{namespace-uri()}">
  179. <xsl:value-of select="cm:parent"/>
  180. </xsl:element>
  181. </xsl:element>
  182. <xsl:element name="sourceAncestorsInfo" namespace="{namespace-uri()}">
  183. <xsl:element name="ancestorInfo" namespace="{namespace-uri()}">
  184. <xsl:element name="title" namespace="{namespace-uri()}">
  185. <xsl:value-of select="key('option-information-rules', $searchPath)/*[local-name()='ancestors']/*[local-name()='ancestorInfo']/*[local-name()='title']"/>
  186. </xsl:element>
  187. <xsl:element name="searchPath" namespace="{namespace-uri()}">
  188. <xsl:value-of select="key('option-information-rules', $searchPath)/*[local-name()='ancestors']/*[local-name()='ancestorInfo']/*[local-name()='searchPath']"/>
  189. </xsl:element>
  190. </xsl:element>
  191. </xsl:element>
  192. <xsl:element name="targetName" namespace="{namespace-uri()}">
  193. <xsl:copy-of select="cm:multilingualToken"/>
  194. </xsl:element>
  195. <xsl:element name="enabled" namespace="{namespace-uri()}">
  196. <xsl:choose>
  197. <xsl:when test="cm:disabled='true'">false</xsl:when>
  198. <xsl:when test="cm:disabled='false'">true</xsl:when>
  199. <!-- we should never hit this case, but just in case preserve the value as is -->
  200. <xsl:otherwise><xsl:value-of select="cm:disabled"/></xsl:otherwise>
  201. </xsl:choose>
  202. </xsl:element>
  203. <xsl:element name="archiveSearchPath" namespace="{namespace-uri()}">
  204. <xsl:value-of select="cm:archiveSearchPath"/>
  205. </xsl:element>
  206. <xsl:element name="targetLocation" namespace="{namespace-uri()}">
  207. <xsl:value-of select="cm:parent"/>
  208. </xsl:element>
  209. </xsl:element>
  210. </xsl:for-each>
  211. </xsl:element>
  212. </xsl:template>
  213. <!-- match all unmatched nodes -->
  214. <xsl:template match="node()" priority="0">
  215. <xsl:copy>
  216. <xsl:copy-of select="@*"/>
  217. <xsl:apply-templates/>
  218. </xsl:copy>
  219. </xsl:template>
  220. <!-- copy just the text -->
  221. <xsl:template match="text()" priority="0">
  222. <xsl:copy-of select="."/>
  223. </xsl:template>
  224. </xsl:stylesheet>