specify_routing_rules.xts 55 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207
  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, 2017
  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. <xts:morphlet xmlns:xts="http://developer.cognos.com/schemas/xts/" messageBase="messages/portal.xml, messages/portalRL.xml" includeConfig="true" requiredCapability="canUseAdministrationPortal">
  13. <xts:block id="formlogic_init" type="exec" mode="interpret" processor="XSLT" path="/logicsheets/formlogic_init.xslt" nodelist="env,credential,system,http"/>
  14. <!--
  15. ===============================================================================================
  16. getConfig - Need to get the list of namespace ID's
  17. ===============================================================================================
  18. -->
  19. <xts:block id="getConfig" processor="XSLT" type="exec" dependency="formlogic_init" condition=".[not(/root/env/param[@name='web64EncodedRoutingHints'])]" mandatory="false">
  20. <xsl:stylesheet version="1.0"
  21. xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  22. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  23. <xsl:template match="/">
  24. <xts:sequence>
  25. <xts:append>
  26. <xts:function name="getConfiguration">
  27. <xts:param name="AAA"/>
  28. </xts:function>
  29. </xts:append>
  30. </xts:sequence>
  31. </xsl:template>
  32. </xsl:stylesheet>
  33. </xts:block>
  34. <!--
  35. ===============================================================================================
  36. getContent - get our data from Content Manager
  37. ===============================================================================================
  38. -->
  39. <xts:block id="getContent" processor="XSLT" type="exec" dependency="formlogic_init getConfig">
  40. <xts:logicsheet path="logicsheets/buslogic.xslt"/>
  41. <xts:logicsheet path="logicsheets/portal.xsl"/>
  42. <xsl:stylesheet version="1.0"
  43. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  44. xmlns:send="http://developer.cognos.com/schemas/xts/logic-sheet/xslt/brl/1/"
  45. xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/"
  46. xmlns:pf="http://developer.cognos.com/schemas/xts/pf"
  47. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  48. exclude-result-prefixes="xsl send cm pf">
  49. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  50. <xsl:key name="env-param" match="/root/env/param" use="@name"/>
  51. <pf:variables/>
  52. <xsl:template match="/">
  53. <xts:sequence>
  54. <xts:append>
  55. <!-- only query for the routing hints once since this might be a costly request -->
  56. <xsl:choose>
  57. <xsl:when test="key('env-param','web64EncodedRoutingHints')!=''">
  58. <xsl:value-of select="xtsext:web64decode( xtsext:cafaction('sign_unwrap', string( key('env-param','web64EncodedRoutingHints'))), true() )" disable-output-escaping="yes"/>
  59. </xsl:when>
  60. <xsl:otherwise>
  61. <routingHints>
  62. <xts:transform src="transforms/CM/post-process.xslt" processor="XSLT">
  63. <send:request provider="cm">
  64. <xts:transform src="transforms/CM/pre-process.xslt" processor="XSLT">
  65. <cm:query>
  66. <cm:requests>
  67. <!-- get all the packages, uploadedFiles, modules and datasets -->
  68. <cm:query>
  69. <cm:search>//package[hasProperty('routingHints')] | //uploadedFile[hasProperty('routingHints')] | //module[hasProperty('routingHints')] | //dataSet[hasProperty('routingHints')]</cm:search>
  70. <cm:properties>
  71. <cm:property name="searchPath"/>
  72. <cm:property name="defaultName"/>
  73. <cm:property name="routingHints"/>
  74. <cm:property name="storeID"/>
  75. <cm:property name="iconURI"/>
  76. <cm:property name="hidden"/>
  77. </cm:properties>
  78. </cm:query>
  79. <!-- Cognos namespace-->
  80. <cm:query>
  81. <cm:search>/directory/namespace[@id = ':']//*[@objectClass='group' or @objectClass='role'][hasProperty('routingHints')]</cm:search>
  82. <cm:properties>
  83. <cm:property name="searchPath"/>
  84. <cm:property name="defaultName"/>
  85. <cm:property name="routingHints"/>
  86. <cm:property name="storeID"/>
  87. <cm:property name="iconURI"/>
  88. <cm:property name="hidden"/>
  89. </cm:properties>
  90. </cm:query>
  91. <!-- third party namespaces -->
  92. <xsl:for-each select="/root/configuration/property[@name='AAA']/*[local-name()='value']/*[local-name()='instances']/*[local-name()='instance']/*[local-name()='parameter' and @name='id']/*[local-name()='value' and . != '']">
  93. <cm:query>
  94. <cm:search>/directory/namespace[@id="<xsl:value-of select="."/>"]//*[@objectClass='role' or @objectClass='group'][hasProperty('routingHints')]</cm:search>
  95. <cm:properties>
  96. <cm:property name="searchPath"/>
  97. <cm:property name="defaultName"/>
  98. <cm:property name="routingHints"/>
  99. <cm:property name="storeID"/>
  100. <cm:property name="iconURI"/>
  101. </cm:properties>
  102. </cm:query>
  103. </xsl:for-each>
  104. </cm:requests>
  105. </cm:query>
  106. </xts:transform>
  107. </send:request>
  108. </xts:transform>
  109. </routingHints>
  110. </xsl:otherwise>
  111. </xsl:choose>
  112. </xts:append>
  113. <xts:append>
  114. <xts:transform src="transforms/CM/post-process.xslt" processor="XSLT">
  115. <send:request provider="cm">
  116. <xts:transform src="transforms/CM/pre-process.xslt" processor="XSLT">
  117. <cm:query>
  118. <cm:requests>
  119. <cm:query>
  120. <cm:search>/configuration</cm:search>
  121. <cm:properties>
  122. <cm:property name="defaultName"/>
  123. <cm:property name="searchPath"/>
  124. <cm:property name="routingTable"/>
  125. <cm:property name="permissions"/>
  126. </cm:properties>
  127. </cm:query>
  128. <!-- get the list of serverGroups -->
  129. <cm:query>
  130. <cm:search>/configuration|/configuration//*[@objectClass='dispatcher' or @objectClass='configurationFolder']</cm:search>
  131. <cm:properties>
  132. <cm:property name="serverGroup"/>
  133. <cm:property name="searchPath"/>
  134. <cm:property name="defaultName"/>
  135. <cm:property name="iconURI"/>
  136. <cm:property name="hidden"/>
  137. </cm:properties>
  138. </cm:query>
  139. </cm:requests>
  140. </cm:query>
  141. </xts:transform>
  142. </send:request>
  143. </xts:transform>
  144. </xts:append>
  145. <!-- if the user selected to clear all the rules that refer to groups that no longer exists,
  146. then we must recreate the defaults since the server group value has already changed to 'none' by this point -->
  147. <xsl:if test="key('env-param','action')='removeEmptyServerGroup'">
  148. <xts:delete select="/root/env/param[starts-with(@name,'rule_')]"/>
  149. </xsl:if>
  150. <xts:append select="/root/env">
  151. <xsl:if test="not(key('env-param','visited_routing_rules')) or key('env-param','action')='removeEmptyServerGroup'">
  152. <xts:transform src="transforms/portal/config/generateDefaults.xslt" processor="XSLT">
  153. <root>
  154. <xts:queryNode select="/root/*[local-name()='queryResponse']/*[local-name()='queryReply'][1]/*/*[local-name()='routingTable']"/>
  155. </root>
  156. </xts:transform>
  157. </xsl:if>
  158. <!-- web64 encode the routing hints since it's potentially a very expensive CM query to make -->
  159. <xsl:if test="not(key('env-param','web64EncodedRoutingHints'))">
  160. <xts:transform src="portal/controls/create_web64_param.xslt" processor="XSLT">
  161. <param name="web64EncodedRoutingHints">
  162. <passport><xsl:value-of select="$passport"/></passport>
  163. <markup>
  164. <xts:transform name="XMLEncode">
  165. <xts:queryNode select="/root/routingHints"/>
  166. </xts:transform>
  167. </markup>
  168. </param>
  169. </xts:transform>
  170. </xsl:if>
  171. </xts:append>
  172. </xts:sequence>
  173. </xsl:template>
  174. </xsl:stylesheet>
  175. </xts:block>
  176. <!--
  177. ===============================================================================================
  178. genRoutingRules - this block takes care of generating an XML structure which will be used
  179. by the pager.
  180. Will build the following structure
  181. <routingRules>
  182. <rule>1</rule>
  183. <rule>2</rule>
  184. <rule>new</rule> when the user hit the 'add rule' link
  185. <rule>link</rule> always present at the end to show the 'add rule' link in the table
  186. </routingRules>
  187. ===============================================================================================
  188. -->
  189. <xts:block id="genRoutingRules" processor="XSLT" type="exec" dependency="getContent">
  190. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/" exclude-result-prefixes="xsl cm">
  191. <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
  192. <xsl:key name="env-param" match="/root/env/param" use="@name"/>
  193. <xsl:template match="/">
  194. <xts:sequence>
  195. <xsl:variable name="rule_count" select="count(/root/env/param[starts-with(@name,'rule_package_')])"/>
  196. <xsl:variable name="action" select="key('env-param','action')"/>
  197. <xsl:choose>
  198. <xsl:when test="$action = 'add'">
  199. <xts:append>
  200. <routingRules>
  201. <xsl:for-each select="/root/env/param[starts-with(@name,'rule_package_')]">
  202. <xsl:sort select="substring-after(@name,'rule_package_')" data-type="number"/>
  203. <rule>
  204. <xsl:value-of select="substring-after(@name,'rule_package_')"/>
  205. </rule>
  206. </xsl:for-each>
  207. <rule>new</rule>
  208. <rule>link</rule>
  209. </routingRules>
  210. </xts:append>
  211. </xsl:when>
  212. <xsl:when test="$action = 'delete'">
  213. <xts:append>
  214. <routingRules>
  215. <xsl:for-each select="/root/env/param[starts-with(@name,'rule_package_')]">
  216. <xsl:sort select="substring-after(@name,'rule_package_')" data-type="number"/>
  217. <xsl:if test="not(key('env-param','rule_checkbox') = substring-after(@name,'rule_package_'))">
  218. <rule>
  219. <xsl:value-of select="substring-after(@name,'rule_package_')"/>
  220. </rule>
  221. </xsl:if>
  222. </xsl:for-each>
  223. <rule>link</rule>
  224. </routingRules>
  225. </xts:append>
  226. </xsl:when>
  227. <xsl:when test="$action = 'removeEmptyServerGroup'">
  228. <xts:append>
  229. <routingRules>
  230. <xsl:for-each select="/root/env/param[starts-with(@name,'rule_package_')]">
  231. <xsl:sort select="substring-after(@name,'rule_package_')" data-type="number"/>
  232. <xsl:variable name="rulePos" select="substring-after(@name,'rule_package_')"/>
  233. <xsl:if test="/root/cm:queryResponse/cm:queryReply[2]/*/cm:serverGroup[ key('env-param',concat('rule_server_group_',$rulePos)) = string(.)]">
  234. <rule>
  235. <xsl:value-of select="substring-after(@name,'rule_package_')"/>
  236. </rule>
  237. </xsl:if>
  238. </xsl:for-each>
  239. <rule>link</rule>
  240. </routingRules>
  241. </xts:append>
  242. </xsl:when>
  243. <xsl:when test="key('env-param','visited_modify_sequence')='true'">
  244. <xts:delete select="/root/env/param[@name='visited_modify_sequence']"/>
  245. <xts:append>
  246. <routingRules>
  247. <xsl:for-each select="/root/env/param[@name='entriesSortOrder']">
  248. <xsl:sort select="substring-before(.,',')" data-type="number"/>
  249. <rule>
  250. <xsl:value-of select="substring-after(.,',')"/>
  251. </rule>
  252. </xsl:for-each>
  253. <rule>link</rule>
  254. </routingRules>
  255. </xts:append>
  256. <xts:delete select="/root/env/param[@name='entriesSortOrder']"/>
  257. </xsl:when>
  258. <xsl:when test="$rule_count = '0'">
  259. <xts:append>
  260. <routingRules>
  261. <rule>link</rule>
  262. </routingRules>
  263. </xts:append>
  264. </xsl:when>
  265. <xsl:otherwise>
  266. <xts:append>
  267. <routingRules>
  268. <xsl:for-each select="/root/env/param[starts-with(@name,'rule_package_')]">
  269. <xsl:sort select="substring-after(@name,'rule_package_')" data-type="number"/>
  270. <rule>
  271. <xsl:value-of select="substring-after(@name,'rule_package_')"/>
  272. </rule>
  273. </xsl:for-each>
  274. <rule>link</rule>
  275. </routingRules>
  276. </xts:append>
  277. </xsl:otherwise>
  278. </xsl:choose>
  279. </xts:sequence>
  280. </xsl:template>
  281. </xsl:stylesheet>
  282. </xts:block>
  283. <!--
  284. ===============================================================================================
  285. format - render the page
  286. ===============================================================================================
  287. -->
  288. <xts:block id="format" mode="output" processor="XSLT" type="exec" dependency="getContent genRoutingRules" mimeType="text/html">
  289. <!-- portal specific information -->
  290. <xts:logicsheet path="logicsheets/portal.xsl"/>
  291. <!-- get the new theme stuff -->
  292. <xts:logicsheet path="logicsheets/presentation/layout.xsl"/>
  293. <xts:logicsheet path="logicsheets/presentation/dialog/framework.xsl"/>
  294. <xts:logicsheet path="logicsheets/presentation/dialog/presentation.xsl"/>
  295. <xts:logicsheet path="logicsheets/presentation/controls/framework.xsl"/>
  296. <xts:logicsheet path="logicsheets/presentation/controls/presentation.xsl"/>
  297. <xts:logicsheet path="logicsheets/formlogic.xslt"/>
  298. <xts:logicsheet path="logicsheets/validation.xslt"/>
  299. <xts:logicsheet path="logicsheets/presentation/touch_up.xslt"/>
  300. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:pf="http://developer.cognos.com/schemas/xts/pf" xmlns:lyt="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/layout/" xmlns:dp="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/dialog/presentation/" xmlns:cf="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/controls/framework/" xmlns:cp="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/controls/presentation/" xmlns:df="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/dialog/framework/" xmlns:utml="http://developer.cognos.com/schemas/xts/logicsheet/xslt/formlogic/" xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt" xmlns:cm="http://developer.cognos.com/schemas/xts-cm/1/" exclude-result-prefixes="pf lyt dp cf cp df utml xtsext cm">
  301. <xsl:output method="html" version="1.0" encoding="UTF-8" indent="no"/>
  302. <xsl:key name="server-group" match="*[cm:serverGroup != '']" use="cm:serverGroup"/>
  303. <xsl:variable name="uniqueServerGroups" select="/root/cm:queryResponse/cm:queryReply[2]/*[generate-id(.)=generate-id(key('server-group',cm:serverGroup))]/cm:serverGroup"/>
  304. <xsl:key name="package-hints" match="/root/routingHints/cm:queryResponse/cm:queryReply[1]/*/cm:routingHints/cm:string[. != '']" use="."/>
  305. <xsl:variable name="uniquePackageHints" select="/root/routingHints/cm:queryResponse/cm:queryReply[1]/*/cm:routingHints/*[generate-id(.)=generate-id(key('package-hints',.))]"/>
  306. <xsl:key name="group-hints" match="/root/routingHints/cm:queryResponse/cm:queryReply[position() &gt; 1]/cm:group/cm:routingHints/cm:string[. != '']" use="."/>
  307. <xsl:variable name="uniqueGroupHints" select="/root/routingHints/cm:queryResponse/cm:queryReply[position() &gt; 1]/cm:group/cm:routingHints/*[generate-id(.)=generate-id(key('group-hints',.))]"/>
  308. <xsl:key name="role-hints" match="/root/routingHints/cm:queryResponse/cm:queryReply[position() &gt; 1]/cm:role/cm:routingHints/cm:string[. != '']" use="."/>
  309. <xsl:variable name="uniqueRoleHints" select="/root/routingHints/cm:queryResponse/cm:queryReply[position() &gt; 1]/cm:role/cm:routingHints/*[generate-id(.)=generate-id(key('role-hints',.))]"/>
  310. <!-- Global template variables -->
  311. <pf:variables/>
  312. <pf:gen-icon/>
  313. <xsl:variable name="mname" select="'specify_routing_rules.xts'"/>
  314. <xsl:variable name="has_write_permission" select="contains( /root/cm:queryResponse/cm:queryReply[1]/*/cm:permissions, 'write' )"/>
  315. <!-- start the output -->
  316. <xsl:template match="/root">
  317. <xsl:variable name="browserTitle">
  318. <xts:string id="IDS_SRR_TITLE"/>
  319. </xsl:variable>
  320. <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html></xsl:text><dp:page longTitle="$browserTitle">
  321. <dp:meta>
  322. <pf:meta/>
  323. <!-- Standard meta tags -->
  324. </dp:meta>
  325. <pf:help/>
  326. <script language="javascript" src="{$webcontent}/{$app}/js/list.js"/>
  327. <script language="javascript" src="{$webcontent}/{$app}/js/dynDropDown.js"/>
  328. <script language="javascript" src="{$webcontent}/{$app}/js/utilities.js"/>
  329. <script language="javascript">
  330. var duplicateRule;
  331. var g_packageHints = new Array();
  332. var g_groupHints = new Array();
  333. var g_roleHints = new Array();
  334. var g_validCheck = new Array();
  335. function init()
  336. {
  337. <!-- need to initialize the hint arrays -->
  338. <!-- package array -->
  339. g_packageHints[0] = new Array("<xts:string id="IDS_SRR_ANY_PACKAGE" encode="javascript"/>","");
  340. var aForm = document.pform;
  341. <xsl:for-each select="$uniquePackageHints">
  342. <xsl:sort select="." lang="$productLocale"/>
  343. g_packageHints[<xsl:value-of select="position()"/>] = new Array("<xsl:value-of select="xtsext:javascriptencode(.)"/>", "<xsl:value-of select="xtsext:javascriptencode(.)"/>");
  344. var node = document.createElement("input");
  345. node.name = "dataObjectToClass_" + "<xsl:value-of select="xtsext:javascriptencode(.)"/>";
  346. node.type = "hidden";
  347. node.value = "<xsl:value-of select="xtsext:javascriptencode(../../cm:objectClass)"/>";
  348. aForm.appendChild(node);
  349. </xsl:for-each>
  350. <!-- group array -->
  351. g_groupHints[0] = new Array("<xts:string id="IDS_SRR_ANY_GROUP" encode="javascript"/>","");
  352. <xsl:for-each select="$uniqueGroupHints">
  353. <xsl:sort select="." lang="$productLocale"/>
  354. g_groupHints[<xsl:value-of select="position()"/>] = new Array("<xsl:value-of select="xtsext:javascriptencode(.)"/>", "<xsl:value-of select="xtsext:javascriptencode(.)"/>");
  355. </xsl:for-each>
  356. <!-- role array -->
  357. g_roleHints[0] = new Array("<xts:string id="IDS_SRR_ANY_ROLE" encode="javascript"/>","");
  358. <xsl:for-each select="$uniqueRoleHints">
  359. <xsl:sort select="." lang="$productLocale"/>
  360. g_roleHints[<xsl:value-of select="position()"/>] = new Array("<xsl:value-of select="xtsext:javascriptencode(.)"/>", "<xsl:value-of select="xtsext:javascriptencode(.)"/>");
  361. </xsl:for-each>
  362. <!-- The position are not the same as the rule_package_xx numbers once we delete a rule.-->
  363. <xsl:for-each select="/root/routingRules/rule[.!='link']">
  364. <xsl:variable name="packageValue" select="key('env-param',concat('rule_package_', .))"/>
  365. <xsl:variable name="groupValue" select="key('env-param',concat('rule_group_', .))"/>
  366. <xsl:variable name="roleValue" select="key('env-param',concat('rule_role_', .))"/>
  367. g_validCheck[<xsl:value-of select="position()"/>] = new Array(<xsl:value-of select="not($packageValue != '' and not(key('package-hints',$packageValue)))"/>, <xsl:value-of select="not($groupValue != '' and not(key('group-hints',$groupValue)))"/>, <xsl:value-of select="not($roleValue != '' and not(key('role-hints',$roleValue)))"/>);
  368. updateWarning(<xsl:value-of select="position()"/>);
  369. </xsl:for-each>
  370. }
  371. function validate()
  372. {
  373. frm = document.pform;
  374. duplicateRule = 'false';
  375. <xsl:variable name="ruleCount" select="count(/root/routingRules/rule[. != 'link'])"/>
  376. <xsl:for-each select="/root/routingRules/rule[. != 'link']">
  377. if ( !validateRule(frm.rule_server_group_<xsl:value-of select="position()"/>) )
  378. return false;
  379. </xsl:for-each>
  380. <!-- since all the other validation has passed, now make sure there are no duplicate entries -->
  381. <xsl:for-each select="/root/routingRules/rule[. != 'link']">
  382. if (duplicateRule == 'false')
  383. checkDuplicateRule(frm.rule_package_<xsl:value-of select="position()"/>, frm.rule_group_<xsl:value-of select="position()"/>, frm.rule_role_<xsl:value-of select="position()"/>, frm.rule_server_group_<xsl:value-of select="position()"/>);
  384. </xsl:for-each>
  385. if (duplicateRule == 'true')
  386. {
  387. alert("<xts:string id="IDS_SRR_DUPLICATE_RULE" encode="javascript"/>")
  388. }
  389. return true;
  390. }
  391. function checkDuplicateRule(packageRoutingSet, userGroupSet, userRoleSet, serverGroup)
  392. {
  393. <xsl:for-each select="/root/routingRules/rule[. != 'link']">
  394. if ( packageRoutingSet.name != frm.rule_package_<xsl:value-of select="position()"/>.name &amp;&amp;
  395. serverGroup.value == frm.rule_server_group_<xsl:value-of select="position()"/>.value &amp;&amp;
  396. packageRoutingSet.value == frm.rule_package_<xsl:value-of select="position()"/>.value &amp;&amp;
  397. userGroupSet.value == frm.rule_group_<xsl:value-of select="position()"/>.value &amp;&amp;
  398. userRoleSet.value == frm.rule_role_<xsl:value-of select="position()"/>.value)
  399. {
  400. duplicateRule = 'true';
  401. frm.rule_duplicate_<xsl:value-of select="position()"/>.value = 'true';
  402. }
  403. </xsl:for-each>
  404. }
  405. function validateRule(serverGroup)
  406. {
  407. <!-- make sure the user select a server group for each rule -->
  408. for (var i=0; i &lt; serverGroup.length; i++)
  409. {
  410. if (serverGroup[i].selected)
  411. {
  412. if (serverGroup[i].value == '')
  413. {
  414. alert("<xts:string id="IDS_SRR_NO_SERVER_GROUP" encode="javascript"/>");
  415. serverGroup.focus();
  416. return false;
  417. }
  418. break;
  419. }
  420. }
  421. return true;
  422. }
  423. <!--
  424. When one of hints change, then update the valid array
  425. -->
  426. function verifyChangedValue(obj, valid)
  427. {
  428. if (obj)
  429. {
  430. <!-- need to get the position from editField_rule_<objectClass>_<position> -->
  431. var position = obj.name.substring(obj.name.indexOf('_')+1);
  432. position = position.substring(position.indexOf('_')+1);
  433. <!-- objectType should be package, group or role -->
  434. var objectType = position.substring(0, position.indexOf('_'));
  435. position = position.substring(position.indexOf('_')+1);
  436. var col;
  437. if (objectType == 'package')
  438. {
  439. col = 0;
  440. }
  441. else if (objectType == 'group')
  442. {
  443. col = 1;
  444. }
  445. else if (objectType == 'role')
  446. {
  447. col = 2;
  448. }
  449. g_validCheck[position][col] = valid;
  450. updateWarning(position);
  451. }
  452. }
  453. <!--
  454. Shows/hides the warning icon with the apropriate tooltip
  455. -->
  456. function updateWarning(position)
  457. {
  458. warning = document.getElementById('warning_'+position);
  459. var innerHTML = '';
  460. if (!g_validCheck[position][0] || !g_validCheck[position][1] || !g_validCheck[position][2])
  461. {
  462. innerHTML = '&lt;img src=&quot;<xsl:value-of select="xtsext:javascriptencode(string($image_root))"/>msg_warning_16.gif&quot;';
  463. var invalidHints = '';
  464. if (!g_validCheck[position][0])
  465. {
  466. invalidHints += document.getElementById('rule_package_'+position).value;
  467. }
  468. if (!g_validCheck[position][1])
  469. {
  470. if (invalidHints != '')
  471. {
  472. invalidHints += ', ';
  473. }
  474. invalidHints += document.getElementById('rule_group_'+position).value;
  475. }
  476. if (!g_validCheck[position][2])
  477. {
  478. if (invalidHints != '')
  479. {
  480. invalidHints += ', ';
  481. }
  482. invalidHints += document.getElementById('rule_role_'+position).value;
  483. }
  484. if (invalidHints.indexOf('"')!=-1 &amp;&amp; invalidHints.indexOf("'")!=-1)
  485. {
  486. <!-- we have both quots and apos in our string. Need to fix it before we put it as the tooltip -->
  487. invalidHints = invalidHints.replace(/"/g,"'");
  488. }
  489. if (invalidHints.indexOf('"')!=-1)
  490. {
  491. <xsl:variable name="altQuot">
  492. <xts:string id="IDS_SRR_WARNING_TOOLTIP" encode="javascript"><xts:param name="routingSets">" + invalidHints + "</xts:param></xts:string>
  493. </xsl:variable>
  494. innerHTML += " alt=&apos;<xsl:value-of select="normalize-space($altQuot)"/>&apos;";
  495. innerHTML += " title=&apos;<xsl:value-of select="normalize-space($altQuot)"/>&apos;";
  496. innerHTML += " role=&apos;alert&apos;";
  497. }
  498. else
  499. {
  500. <xsl:variable name="altApos">
  501. <xts:string id="IDS_SRR_WARNING_TOOLTIP" encode="javascript"><xts:param name="routingSets">' + invalidHints + '</xts:param></xts:string>
  502. </xsl:variable>
  503. innerHTML += ' alt=&quot;<xsl:value-of select="normalize-space($altApos)"/>&quot;';
  504. innerHTML += ' title=&quot;<xsl:value-of select="normalize-space($altApos)"/>&quot;';
  505. innerHTML += " role=&apos;alert&apos;";
  506. }
  507. innerHTML += '/&gt;';
  508. warning.style.display = '';
  509. }
  510. else
  511. {
  512. innerHTML = '&lt;img width=&quot;16&quot; src=&quot;<xsl:value-of select="xtsext:javascriptencode(string($webcontent))"/>/images/space.gif&quot;/&gt;';
  513. warning.style.display = 'none';
  514. }
  515. warning.innerHTML = innerHTML;
  516. }
  517. function showViewMemebersDialog(pos)
  518. {
  519. if (!document.getElementById('viewMembersPacakge'))
  520. {
  521. return;
  522. }
  523. document.getElementById('viewMembersPacakge').innerHTML = buildPopupSection('package', pos);
  524. document.getElementById('viewMembersGroup').innerHTML = buildPopupSection('group', pos);
  525. document.getElementById('viewMembersRole').innerHTML = buildPopupSection('role', pos);
  526. document.getElementById('viewMembersServerGroup').innerHTML = buildPopupSection('server_group', pos);
  527. viewMemebers.hide(); //this is to fix a bug with the scroll bar disappearing in firefox on mac
  528. viewMemebers.show();
  529. }
  530. function buildPopupSection(objectClass, pos)
  531. {
  532. var control = document.getElementById('rule_'+objectClass+'_'+pos);
  533. if (!control)
  534. return;
  535. var hintName = '';
  536. var hintValue = '';
  537. <xsl:choose>
  538. <xsl:when test="$has_write_permission = false()">
  539. hintName = document.getElementById('rule_'+objectClass+'_'+pos).value;
  540. hintValue = document.getElementById('rule_'+objectClass+'_'+pos).value;
  541. </xsl:when>
  542. <xsl:otherwise>
  543. if (objectClass == 'server_group')
  544. {
  545. hintName = getSelectedText(control);
  546. hintValue = getSelectedValue(control);
  547. }
  548. else
  549. {
  550. var editField = document.getElementById('editField_rule_'+objectClass+'_'+pos);
  551. if (!editField)
  552. return;
  553. hintName = editField.value;
  554. hintValue = control.value;
  555. }
  556. </xsl:otherwise>
  557. </xsl:choose>
  558. var innerHTML = '&lt;table width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; role=&quot;presentation&quot;&gt;';
  559. if (hintValue == '')
  560. {
  561. innerHTML += '&lt;tr&gt;';
  562. innerHTML += '&lt;td width=&quot;10&quot;&gt;&amp;#160;&lt;/td&gt;';
  563. innerHTML += '&lt;td class=&quot;formText&quot;&gt;';
  564. if (objectClass == 'package')
  565. {
  566. innerHTML += '<xts:string id="IDS_MRS_ANY_PACKAGE" encode="javascript"/>';
  567. }
  568. else if (objectClass == 'group')
  569. {
  570. innerHTML += '<xts:string id="IDS_MRS_ANY_GROUP" encode="javascript"/>';
  571. }
  572. else if (objectClass == 'role')
  573. {
  574. innerHTML += '<xts:string id="IDS_MRS_ANY_ROLE" encode="javascript"/>';
  575. }
  576. else
  577. {
  578. innerHTML += '<xts:string id="IDS_SRR_SERVER_GROUPNONE" encode="javascript"/>';
  579. }
  580. innerHTML += '&lt;/td&gt;';
  581. innerHTML += '&lt;/tr&gt;';
  582. }
  583. else
  584. {
  585. innerHTML += '&lt;tr&gt;';
  586. innerHTML += '&lt;td class=&quot;formText&quot; colspan=&quot;3&quot; width=&quot;100%&quot;&gt;';
  587. <!-- get the value of the package, group, role or server control -->
  588. innerHTML += getInnerHTMLFromText(hintName);
  589. innerHTML += '&lt;/td&gt;';
  590. innerHTML += '&lt;/tr&gt;';
  591. innerHTML += '&lt;table width=&quot;100%&quot; class=&quot;groupingBorder&quot; role=&quot;presentation&quot;&gt;';
  592. if (objectClass == 'package')
  593. {
  594. <xsl:for-each select="/root/routingHints/cm:queryResponse/cm:queryReply[1]/cm:*/cm:routingHints/cm:string">
  595. if ('<xsl:value-of select="xtsext:javascriptencode(string(.))"/>' == hintValue)
  596. {
  597. innerHTML += buildObjectRow('<xsl:value-of select="xtsext:javascriptencode(string(../../cm:objectClass))"/>', '<xsl:value-of select="xtsext:javascriptencode(xtsext:htmlencode(string(../../cm:defaultName)))"/>');
  598. }
  599. </xsl:for-each>
  600. }
  601. else if (objectClass == 'group')
  602. {
  603. <xsl:for-each select="/root/routingHints/cm:queryResponse/cm:queryReply/*[cm:objectClass='group']/cm:routingHints/cm:string">
  604. if ('<xsl:value-of select="xtsext:javascriptencode(string(.))"/>' == hintValue)
  605. {
  606. innerHTML += buildObjectRow(objectClass, '<xsl:value-of select="xtsext:javascriptencode(xtsext:htmlencode(string(../../cm:defaultName)))"/>');
  607. }
  608. </xsl:for-each>
  609. }
  610. else if (objectClass == 'role')
  611. {
  612. <xsl:for-each select="/root/routingHints/cm:queryResponse/cm:queryReply/*[cm:objectClass='role']/cm:routingHints/cm:string">
  613. if ('<xsl:value-of select="xtsext:javascriptencode(string(.))"/>' == hintValue)
  614. {
  615. innerHTML += buildObjectRow(objectClass, '<xsl:value-of select="xtsext:javascriptencode(xtsext:htmlencode(string(../../cm:defaultName)))"/>');
  616. }
  617. </xsl:for-each>
  618. }
  619. else
  620. {
  621. <xsl:for-each select="/root/cm:queryResponse/cm:queryReply[2]/*/cm:serverGroup">
  622. if ('<xsl:value-of select="xtsext:javascriptencode(string(.))"/>' == hintValue)
  623. {
  624. innerHTML += buildObjectRow('<xsl:value-of select="xtsext:javascriptencode(string(../cm:objectClass))"/>', '<xsl:value-of select="xtsext:javascriptencode(xtsext:htmlencode(string(../cm:defaultName)))"/>');
  625. }
  626. </xsl:for-each>
  627. }
  628. }
  629. innerHTML += '&lt;/table&gt;';
  630. innerHTML += '&lt;/table&gt;';
  631. return innerHTML;
  632. }
  633. function buildObjectRow(objectClass, defaultName)
  634. {
  635. var innerHTML = '';
  636. var icon = document.getElementById('icon_'+objectClass).innerHTML;
  637. innerHTML += '&lt;tr&gt;';
  638. innerHTML += '&lt;td width=&quot;5&quot;&gt;&lt;/td&gt;';
  639. innerHTML += '&lt;td style=&quot;padding-right:2px;&quot;&gt;';
  640. innerHTML += icon;
  641. innerHTML += '&lt;/td&gt;';
  642. innerHTML += '&lt;td class=&quot;formText&quot; width=&quot;100%&quot;&gt;';
  643. innerHTML += defaultName;
  644. innerHTML += '&lt;/td&gt;';
  645. innerHTML += '&lt;/tr&gt;';
  646. return innerHTML;
  647. }
  648. function getSelectedText(obj)
  649. {
  650. for (var i=0; i &lt; obj.length; i++)
  651. {
  652. if (obj[i].selected)
  653. {
  654. return obj[i].text;
  655. }
  656. }
  657. }
  658. function getSelectedValue(obj)
  659. {
  660. for (var i=0; i &lt; obj.length; i++)
  661. {
  662. if (obj[i].selected)
  663. {
  664. return obj[i].value;
  665. }
  666. }
  667. }
  668. function getInnerHTMLFromText (str)
  669. {
  670. var div = document.createElement('div');
  671. var text = document.createTextNode(str);
  672. div.appendChild(text);
  673. return div.innerHTML;
  674. }
  675. </script>
  676. <utml:form name="pform" method="post" action="{$gateway}">
  677. <utml:exclude-prefix>
  678. <xsl:value-of select="'rule_'"/>
  679. </utml:exclude-prefix>
  680. <utml:exclusion-list>
  681. <xsl:for-each select="/root/routingRules/rule">
  682. <xsl:value-of select="concat(' editField_rule_package_', position(), ' ')"/>
  683. <xsl:value-of select="concat(' editField_rule_group_', position(), ' ')"/>
  684. <xsl:value-of select="concat(' editField_rule_role_', position(), ' ')"/>
  685. </xsl:for-each>
  686. </utml:exclusion-list>
  687. <utml:input type="hidden" name="ifrmcmd" value="save" utml:update="false"/>
  688. <utml:input type="hidden" name="action" value="" utml:update="false"/>
  689. <utml:input type="hidden" name="ps_nav_op" value=""/>
  690. <utml:input type="hidden" name="m" value=""/>
  691. <utml:input type="hidden" name="visited_routing_rules" value="true" utml:update="false"/>
  692. <utml:input type="hidden" name="m_obj" value="{/root/env/param[@name='m_obj']}"/>
  693. <utml:input type="hidden" name="m_class" value="{/root/env/param[@name='m_class']}"/>
  694. <utml:input type="hidden" name="backURL" value="{/root/env/param[@name='backURL']}"/>
  695. <xsl:if test="string(/root/env/param[@name='ui.cafcontextid']) != ''">
  696. <utml:input type="hidden" name="ui.cafcontextid" value="{/root/env/param[@name='ui.cafcontextid']}"/>
  697. </xsl:if>
  698. <!-- header -->
  699. <dp:header>
  700. <dp:title>
  701. <xsl:value-of select="$browserTitle"/>
  702. </dp:title>
  703. <dp:description>
  704. <xts:string id="IDS_SRR_INTRO"/>
  705. </dp:description>
  706. </dp:header>
  707. <!-- body -->
  708. <lyt:layout style="1">
  709. <lyt:section>
  710. <dp:list width="100%">
  711. <dp:section>
  712. <dp:label>
  713. <xts:string id="IDS_SRR_ROUTING_RULES"/>
  714. </dp:label>
  715. </dp:section>
  716. <dp:section>
  717. <cp:table name="routingRules" iterate="/root/routingRules/rule" width="100%" align="left">
  718. <!-- possible actions -->
  719. <cp:action>
  720. <xsl:if test="$has_write_permission = true()">
  721. <utml:a utml:op="maintain">
  722. <utml:href>document.pform.action.value = 'add';</utml:href>
  723. <xsl:text/><xts:string id="IDS_SRR_TABLE_NEW_RULE"/><xsl:text/>
  724. </utml:a>
  725. </xsl:if>
  726. </cp:action>
  727. <cp:action>
  728. <xsl:if test="$has_write_permission = true()">
  729. <utml:a utml:op="maintain">
  730. <utml:href>
  731. <xsl:text>if(!isSelected('rule_checkbox')){alert("<xts:string id="IDS_REMOVE_WARNING" encode="javascript"/>");return;}</xsl:text>
  732. <xsl:text>javascript:document.pform.action.value = 'delete';</xsl:text>
  733. </utml:href>
  734. <xsl:text/><xts:string id="IDS_REMOVE"/><xsl:text/>
  735. </utml:a>
  736. </xsl:if>
  737. </cp:action>
  738. <cp:action>
  739. <xsl:if test="$has_write_permission = true()">
  740. <utml:a utml:op="stack-up" utml:formName="pform">
  741. <utml:target>
  742. <xsl:value-of select="concat($app, '/modify_rules_sequence.xts')"/>
  743. </utml:target>
  744. <xsl:text/><xts:string id="IDS_PROP_JOB_MODIFY_SEQUENCE"/><xsl:text/>
  745. </utml:a>
  746. </xsl:if>
  747. </cp:action>
  748. <cp:action>
  749. <utml:a utml:op="maintain" utml:formName="pform" utml:hide-when-read-only="true">
  750. <utml:target>
  751. <xsl:value-of select="$app"/>/view_expanded_rules.xts<xsl:text/>
  752. </utml:target>
  753. <xsl:text/><xts:string id="IDS_SRR_VIEW_EXPANDED"/><xsl:text/>
  754. </utml:a>
  755. </cp:action>
  756. <cp:tableHeader>
  757. <!-- checkbox -->
  758. <cp:columnHeader width="16" toggleName="rule_checkbox" utml="utml" noLabel="true"/>
  759. <cp:columnHeader>
  760. <xts:string id="IDS_SRR_TABLE_SEQUENCE"/>
  761. </cp:columnHeader>
  762. <cp:columnHeader width="16"/>
  763. <cp:columnHeader id="lbl_packageRoutingSet">
  764. <xts:string id="IDS_SRR_TABLE_PACKAGE_ROUTING_SET"/>
  765. </cp:columnHeader>
  766. <cp:columnHeader id="lbl_groupRoutingSet">
  767. <xts:string id="IDS_SRR_TABLE_GROUP_ROUTING_SET"/>
  768. </cp:columnHeader>
  769. <cp:columnHeader id="lbl_roleRoutingSet">
  770. <xts:string id="IDS_SRR_TABLE_ROLE_ROUTING_SET"/>
  771. </cp:columnHeader>
  772. <cp:columnHeader/>
  773. <cp:columnHeader id="lbl_serverGroup">
  774. <xts:string id="IDS_SRR_TABLE_SERVER_GROUP"/>
  775. </cp:columnHeader>
  776. <cp:columnHeader>
  777. <xts:string id="IDS_SRR_TABLE_ACTIONS"/>
  778. </cp:columnHeader>
  779. </cp:tableHeader>
  780. <cp:tableContent>
  781. <xsl:variable name="currentRule" select="."/>
  782. <xsl:if test="$currentRule != 'link'">
  783. <!-- hidden input used to remove duplicate rules -->
  784. <input type="hidden" name="rule_duplicate_{position()}" value="false"/>
  785. </xsl:if>
  786. <!-- checkbox -->
  787. <cp:columnContent>
  788. <xsl:if test="$currentRule != 'link' and $has_write_permission">
  789. <input type="checkbox" name="rule_checkbox" value="{position()}" onclick="if (window.closeDropDown) closeDropDown();">
  790. <xsl:attribute name="aria-label"><xts:string id="IDS_SELECTION_FOR_PAGER_ITEM" encode="html"><xts:param name="pagerItemName"><xsl:value-of select="position()"/></xts:param></xts:string></xsl:attribute>
  791. </input>
  792. </xsl:if>
  793. </cp:columnContent>
  794. <!-- sequence -->
  795. <cp:columnContent scope="row">
  796. <xsl:choose>
  797. <xsl:when test="$currentRule = 'link'">
  798. <xsl:if test="position()='1'">
  799. <xts:string id="IDS_SRR_TABLE_EMPTY"/>
  800. &#160;&#160;
  801. </xsl:if>
  802. <xsl:if test="$has_write_permission">
  803. <utml:a utml:op="maintain">
  804. <utml:href>document.pform.action.value = 'add';</utml:href>
  805. <xsl:text/><xts:string id="IDS_SRR_TABLE_NEW_RULE"/><xsl:text/>
  806. </utml:a>
  807. </xsl:if>
  808. </xsl:when>
  809. <xsl:otherwise>
  810. <xsl:value-of select="position()"/>
  811. </xsl:otherwise>
  812. </xsl:choose>
  813. </cp:columnContent>
  814. <!-- warning icon -->
  815. <cp:columnContent>
  816. <xsl:if test="$currentRule != 'link'">
  817. <table cellpadding="0" cellspacing="0" border="0" style="width:16px;">
  818. <tr>
  819. <td id="warning_{position()}" style="width:16px;">
  820. <img height="16" width="16" src="{$webcontent}/images/space.gif"/>
  821. </td>
  822. </tr>
  823. </table>
  824. </xsl:if>
  825. </cp:columnContent>
  826. <!-- package routing set -->
  827. <cp:columnContent valing="bottom">
  828. <xsl:if test="$currentRule != 'link'">
  829. <xsl:choose>
  830. <xsl:when test="$has_write_permission">
  831. <xsl:variable name="oldControlName" select="concat('rule_package_', $currentRule)"/>
  832. <xsl:variable name="packageValue">
  833. <xsl:choose>
  834. <xsl:when test="key('env-param',$oldControlName)!=''">
  835. <xsl:value-of select="key('env-param',$oldControlName)"/>
  836. </xsl:when>
  837. <xsl:otherwise><xts:string id="IDS_SRR_ANY_PACKAGE"/></xsl:otherwise>
  838. </xsl:choose>
  839. </xsl:variable>
  840. <cf:dynamicDropDown width="100%" name="concat('rule_package_', position())" filterList="true" validate="verifyChangedValue" selectedValue="key('env-param',$oldControlName)" selectedName="$packageValue" array="'g_packageHints'" tooltipID="IDS_SRR_DROP_DOWN_TOOLTIP_PACKAGE" form="pform" aria-labelledby="'lbl_packageRoutingSet'"/>
  841. </xsl:when>
  842. <xsl:when test="key('env-param',concat('rule_package_',$currentRule))!=''">
  843. <input type="hidden" name="{concat('rule_package_', $currentRule)}" id="{concat('rule_package_', $currentRule)}" value="{key('env-param',concat('rule_package_',$currentRule))}"/>
  844. <xsl:value-of select="key('env-param',concat('rule_package_',$currentRule))"/>
  845. </xsl:when>
  846. <xsl:otherwise>
  847. <input type="hidden" name="{concat('rule_package_', $currentRule)}" id="{concat('rule_package_', $currentRule)}" value=""/>
  848. <xts:string id="IDS_SRR_ANY_PACKAGE"/>
  849. </xsl:otherwise>
  850. </xsl:choose>
  851. </xsl:if>
  852. </cp:columnContent>
  853. <!-- group routing set -->
  854. <cp:columnContent>
  855. <xsl:if test="$currentRule != 'link'">
  856. <xsl:choose>
  857. <xsl:when test="$has_write_permission">
  858. <xsl:variable name="oldControlName" select="concat('rule_group_', $currentRule)"/>
  859. <xsl:variable name="groupValue">
  860. <xsl:choose>
  861. <xsl:when test="key('env-param',$oldControlName)!=''">
  862. <xsl:value-of select="key('env-param',$oldControlName)"/>
  863. </xsl:when>
  864. <xsl:otherwise><xts:string id="IDS_SRR_ANY_GROUP"/></xsl:otherwise>
  865. </xsl:choose>
  866. </xsl:variable>
  867. <cf:dynamicDropDown width="100%" name="concat('rule_group_', position())" filterList="true" validate="verifyChangedValue" selectedValue="key('env-param',$oldControlName)" selectedName="$groupValue" array="'g_groupHints'" tooltipID="IDS_SRR_DROP_DOWN_TOOLTIP_GROUP" form="pform" aria-labelledby="'lbl_groupRoutingSet'"/>
  868. </xsl:when>
  869. <xsl:when test="key('env-param',concat('rule_group_',$currentRule)) != ''">
  870. <input type="hidden" name="{concat('rule_group_', $currentRule)}" id="{concat('rule_group_', $currentRule)}" value="{key('env-param',concat('rule_group_',$currentRule))}"/>
  871. <xsl:value-of select="key('env-param',concat('rule_group_',$currentRule))"/>
  872. </xsl:when>
  873. <xsl:otherwise>
  874. <input type="hidden" name="{concat('rule_group_', $currentRule)}" id="{concat('rule_group_', $currentRule)}" value=""/>
  875. <xts:string id="IDS_SRR_ANY_GROUP"/>
  876. </xsl:otherwise>
  877. </xsl:choose>
  878. </xsl:if>
  879. </cp:columnContent>
  880. <!-- role routing set -->
  881. <cp:columnContent>
  882. <xsl:if test="$currentRule != 'link'">
  883. <xsl:choose>
  884. <xsl:when test="$has_write_permission">
  885. <xsl:variable name="oldControlName" select="concat('rule_role_', $currentRule)"/>
  886. <xsl:variable name="roleValue">
  887. <xsl:choose>
  888. <xsl:when test="key('env-param',$oldControlName)!=''">
  889. <xsl:value-of select="key('env-param',$oldControlName)"/>
  890. </xsl:when>
  891. <xsl:otherwise><xts:string id="IDS_SRR_ANY_ROLE"/></xsl:otherwise>
  892. </xsl:choose>
  893. </xsl:variable>
  894. <cf:dynamicDropDown width="100%" name="concat('rule_role_', position())" filterList="true" validate="verifyChangedValue" selectedValue="key('env-param',$oldControlName)" selectedName="$roleValue" array="'g_roleHints'" tooltipID="IDS_SRR_DROP_DOWN_TOOLTIP_ROLE" form="pform" aria-labelledby="'lbl_roleRoutingSet'"/>
  895. </xsl:when>
  896. <xsl:when test="key('env-param',concat('rule_role_',$currentRule)) != ''">
  897. <input type="hidden" name="{concat('rule_role_', $currentRule)}" id="{concat('rule_role_', $currentRule)}" value="{key('env-param',concat('rule_role_',$currentRule))}"/>
  898. <xsl:value-of select="key('env-param',concat('rule_role_',$currentRule))"/>
  899. </xsl:when>
  900. <xsl:otherwise>
  901. <input type="hidden" name="{concat('rule_role_', $currentRule)}" id="{concat('rule_role_', $currentRule)}" value=""/>
  902. <xts:string id="IDS_SRR_ANY_ROLE"/>
  903. </xsl:otherwise>
  904. </xsl:choose>
  905. </xsl:if>
  906. </cp:columnContent>
  907. <!-- route to -->
  908. <cp:columnContent align="center">
  909. <xsl:if test="$currentRule != 'link'">
  910. <img src="{$image_root}icon_route_to.gif">
  911. <xsl:attribute name="alt"><xts:string id="IDS_SRR_TABLE_ROUTE_TO"/></xsl:attribute>
  912. <xsl:attribute name="title"><xts:string id="IDS_SRR_TABLE_ROUTE_TO"/></xsl:attribute>
  913. </img>
  914. </xsl:if>
  915. </cp:columnContent>
  916. <!-- server group -->
  917. <cp:columnContent>
  918. <xsl:if test="$currentRule != 'link'">
  919. <xsl:choose>
  920. <xsl:when test="$has_write_permission">
  921. <select name="rule_server_group_{position()}" id="rule_server_group_{position()}" onclick="if (window.closeDropDown) closeDropDown();" aria-labelledby="lbl_serverGroup">
  922. <option value="">
  923. <xsl:if test="key('env-param',concat('rule_server_group_',$currentRule)) = ''">
  924. <xsl:attribute name="selected">selected</xsl:attribute>
  925. </xsl:if>
  926. <xts:string id="IDS_SRR_SERVER_GROUP_NONE"/>
  927. </option>
  928. <xsl:for-each select="$uniqueServerGroups">
  929. <xsl:sort select="." lang="$contentLocale"/>
  930. <option value="{.}">
  931. <xsl:if test="string(key('env-param',concat('rule_server_group_',$currentRule))) = string(.)">
  932. <xsl:attribute name="selected">selected</xsl:attribute>
  933. </xsl:if>
  934. <xsl:value-of select="."/>
  935. </option>
  936. </xsl:for-each>
  937. </select>
  938. </xsl:when>
  939. <xsl:otherwise>
  940. <input type="hidden" name="{concat('rule_server_group_', $currentRule)}" id="{concat('rule_server_group_', $currentRule)}" value="{key('env-param',concat('rule_server_group_',$currentRule))}"/>
  941. <xsl:value-of select="string(key('env-param',concat('rule_server_group_',$currentRule)))"/>
  942. </xsl:otherwise>
  943. </xsl:choose>
  944. </xsl:if>
  945. </cp:columnContent>
  946. <!-- actions -->
  947. <cp:columnContent>
  948. <xsl:if test="$currentRule != 'link'">
  949. <img height="16" width="16" src="{$image_root}action_view_members.gif" onclick="showViewMemebersDialog({position()});" role="button" tabindex="0">
  950. <xsl:attribute name="alt"><xts:string id="IDS_SRR_INFO"/></xsl:attribute>
  951. <xsl:attribute name="aria-label"><xts:string id="IDS_SRR_INFO_ARIA"><xts:param name="sequence"><xsl:value-of select="position()"/></xts:param></xts:string></xsl:attribute>
  952. </img>
  953. </xsl:if>
  954. </cp:columnContent>
  955. </cp:tableContent>
  956. </cp:table>
  957. </dp:section>
  958. </dp:list>
  959. </lyt:section>
  960. </lyt:layout>
  961. <!-- Helpers for the popup dialog, need to get all the possible icons -->
  962. <div id="icon_package" style="display:none; border: 0px; padding: 0px; overflow:off;">
  963. <xsl:call-template name="gen-icon">
  964. <xsl:with-param name="class" select="'package'"/>
  965. <xsl:with-param name="showAction" select="false()"/>
  966. </xsl:call-template>
  967. </div>
  968. <div id="icon_dataSet" style="display:none; border: 0px; padding: 0px; overflow:off;">
  969. <xsl:call-template name="gen-icon">
  970. <xsl:with-param name="class" select="'dataSetCA'"/>
  971. <xsl:with-param name="showAction" select="false()"/>
  972. </xsl:call-template>
  973. </div>
  974. <div id="icon_module" style="display:none; border: 0px; padding: 0px; overflow:off;">
  975. <xsl:call-template name="gen-icon">
  976. <xsl:with-param name="class" select="'module'"/>
  977. <xsl:with-param name="showAction" select="false()"/>
  978. </xsl:call-template>
  979. </div>
  980. <div id="icon_uploadedFile" style="display:none; border: 0px; padding: 0px; overflow:off;">
  981. <xsl:call-template name="gen-icon">
  982. <xsl:with-param name="class" select="'uploadedFile'"/>
  983. <xsl:with-param name="showAction" select="false()"/>
  984. </xsl:call-template>
  985. </div>
  986. <div id="icon_group" style="display:none; border: 0px; padding: 0px; overflow:off;">
  987. <xsl:call-template name="gen-icon">
  988. <xsl:with-param name="class" select="'group'"/>
  989. <xsl:with-param name="showAction" select="false()"/>
  990. </xsl:call-template>
  991. </div>
  992. <div id="icon_role" style="display:none; border: 0px; padding: 0px; overflow:off;">
  993. <xsl:call-template name="gen-icon">
  994. <xsl:with-param name="class" select="'role'"/>
  995. <xsl:with-param name="showAction" select="false()"/>
  996. </xsl:call-template>
  997. </div>
  998. <div id="icon_dispatcher" style="display:none; border: 0px; padding: 0px; overflow:off;">
  999. <xsl:call-template name="gen-icon">
  1000. <xsl:with-param name="class" select="'dispatcher'"/>
  1001. <xsl:with-param name="showAction" select="false()"/>
  1002. </xsl:call-template>
  1003. </div>
  1004. <div id="icon_configurationFolder" style="display:none; border: 0px; padding: 0px; overflow:off;">
  1005. <xsl:call-template name="gen-icon">
  1006. <xsl:with-param name="class" select="'folder'"/>
  1007. <xsl:with-param name="showAction" select="false()"/>
  1008. </xsl:call-template>
  1009. </div>
  1010. <!-- View the members popup dialog -->
  1011. <cp:genericDialog id="viewMemebers" interactive="true" align="left" width="450" height="250" positionVertical="true" positionHorizontal="true" closeOnClick="viewMemebers.hide();">
  1012. <cp:param name="title"><xts:string id="IDS_SRR_VIEW_THE_MEMBERS"/></cp:param>
  1013. <cp:param name="body">
  1014. <div style="height:250px; width:450px; display:block; border: 0px; padding: 0px; overflow:auto;">
  1015. <table width="100%" cellpadding="0" cellspacing="0" role="presentation">
  1016. <tr>
  1017. <td width="10">&#160;</td>
  1018. <td width="100%" colspan="2" class="formLabel"><xts:string id="IDS_SRR_PACKAGE_ROUTING_SET"/></td>
  1019. <td width="10" rowspan="8">&#160;</td>
  1020. </tr>
  1021. <tr>
  1022. <td width="10">&#160;</td>
  1023. <td style="padding-bottom:5px;">
  1024. <div id="viewMembersPacakge" style="display:block; border: 0px; padding: 0px; overflow:off;"></div>
  1025. </td>
  1026. </tr>
  1027. <tr>
  1028. <td width="10">&#160;</td>
  1029. <td width="100%" colspan="2" class="formLabel"><xts:string id="IDS_SRR_GROUP_ROUTING_SET"/></td>
  1030. </tr>
  1031. <tr>
  1032. <td width="10">&#160;</td>
  1033. <td style="padding-bottom:5px;">
  1034. <div id="viewMembersGroup" style="display:block; border: 0px; padding: 0px; overflow:off;"></div>
  1035. </td>
  1036. </tr>
  1037. <tr>
  1038. <td width="10">&#160;</td>
  1039. <td width="100%" colspan="2" class="formLabel"><xts:string id="IDS_SRR_ROLE_ROUTING_SET"/></td>
  1040. </tr>
  1041. <tr>
  1042. <td width="10">&#160;</td>
  1043. <td style="padding-bottom:5px;">
  1044. <div id="viewMembersRole" style="display:block; border: 0px; padding: 0px; overflow:off;"></div>
  1045. </td>
  1046. </tr>
  1047. <tr>
  1048. <td width="10">&#160;</td>
  1049. <td width="100%" colspan="2" class="formLabel"><xts:string id="IDS_SRR_GROUP_MEMBERS"/></td>
  1050. </tr>
  1051. <tr>
  1052. <td width="10">&#160;</td>
  1053. <td style="padding-bottom:5px;">
  1054. <div id="viewMembersServerGroup" style="display:block; border: 0px; padding: 0px; overflow:off;"></div>
  1055. </td>
  1056. </tr>
  1057. </table>
  1058. </div>
  1059. </cp:param>
  1060. <cp:param name="footer">
  1061. <dp:simpleFooter>
  1062. <df:button df:id="IDS_CLOSE" df:style="href" df:href="javascript:viewMemebers.hide();"/>
  1063. </dp:simpleFooter>
  1064. </cp:param>
  1065. </cp:genericDialog>
  1066. <!-- footer -->
  1067. <dp:footer>
  1068. <xsl:choose>
  1069. <xsl:when test="$has_write_permission">
  1070. <df:button df:id="IDS_OK" utml:validate="true" df:style="submit"/>
  1071. <xsl:choose>
  1072. <xsl:when test="key('env-param', 'ps_nav_stack') and not(key('env-param', 'ps_nav_stack') = '') ">
  1073. <df:button df:id="IDS_CANCEL" df:style="stack-down"/>
  1074. </xsl:when>
  1075. <xsl:otherwise>
  1076. <df:button df:id="IDS_CANCEL" df:style="back-url"/>
  1077. </xsl:otherwise>
  1078. </xsl:choose>
  1079. </xsl:when>
  1080. <xsl:otherwise>
  1081. <xsl:choose>
  1082. <xsl:when test="key('env-param','ps_nav_stack') and not(key('env-param','ps_nav_stack') = '') ">
  1083. <df:button df:id="IDS_CLOSE" df:style="stack-down"/>
  1084. </xsl:when>
  1085. <xsl:otherwise>
  1086. <df:button df:id="IDS_CLOSE" df:style="back-url"/>
  1087. </xsl:otherwise>
  1088. </xsl:choose>
  1089. </xsl:otherwise>
  1090. </xsl:choose>
  1091. </dp:footer>
  1092. <xsl:if test="not(key('env-param','visited_routing_rules'))">
  1093. <script language="javascript">
  1094. var missingRule = false;
  1095. <xsl:for-each select="/root/env/param[starts-with(@name,'rule_server_group_')]">
  1096. <xsl:variable name="rule" select="."/>
  1097. <xsl:if test="not(/root/cm:queryResponse/cm:queryReply[2]/*/cm:serverGroup[string(.)=$rule])">
  1098. missingRule = true;
  1099. </xsl:if>
  1100. </xsl:for-each>
  1101. <!-- if we have a rule referencing a serverGroup that no longer exists -->
  1102. if (missingRule)
  1103. {
  1104. if (window.confirm("<xts:string id="IDS_SRR_REMOVE_OLD_RULES" encode="javascript"/>"))
  1105. {
  1106. document.pform.action.value = 'removeEmptyServerGroup';
  1107. document.pform.ps_nav_op.value = 'maintain';
  1108. document.pform.m.value = 'portal/<xsl:value-of select="$mname"/>';
  1109. window.setTimeout('document.pform.submit();', 1 );
  1110. }
  1111. }
  1112. </script>
  1113. </xsl:if>
  1114. </utml:form>
  1115. </dp:page>
  1116. </xsl:template>
  1117. </xsl:stylesheet>
  1118. </xts:block>
  1119. <!--
  1120. ===============================================================================================
  1121. debug - display debug information
  1122. ===============================================================================================
  1123. -->
  1124. <xts:block id="debug" dependency="format" condition=".[/root/session/param[@name='debug']='1']" type="exec" mode="output" processor="XSLT" mandatory="false" mimeType="text/html">
  1125. <!-- get the debug logic sheet -->
  1126. <xts:logicsheet path="logicsheets/debuglogic.xslt"/>
  1127. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dbg="http://developer.cognos.com/schemas/xts/logicsheets/xslt/debug/" exclude-result-prefixes="dbg">
  1128. <xsl:output method="html" version="1.0" encoding="UTF-8" indent="no"/>
  1129. <xsl:template match="/">
  1130. <dbg:dumpxml select="/root"/>
  1131. </xsl:template>
  1132. </xsl:stylesheet>
  1133. </xts:block>
  1134. </xts:morphlet>